diff --git a/pg_query.h b/pg_query.h index ba926c3e..b587b3bb 100644 --- a/pg_query.h +++ b/pg_query.h @@ -107,9 +107,9 @@ void pg_query_free_fingerprint_result(PgQueryFingerprintResult result); void pg_query_exit(void); // Postgres version information -#define PG_MAJORVERSION "15" -#define PG_VERSION "15.1" -#define PG_VERSION_NUM 150001 +#define PG_MAJORVERSION "16" +#define PG_VERSION "16.1" +#define PG_VERSION_NUM 160001 // Deprecated APIs below diff --git a/src/postgres/include/access/amapi.h b/src/postgres/include/access/amapi.h index 1dc674d2..4476ff7f 100644 --- a/src/postgres/include/access/amapi.h +++ b/src/postgres/include/access/amapi.h @@ -3,7 +3,7 @@ * amapi.h * API for Postgres index access methods. * - * Copyright (c) 2015-2022, PostgreSQL Global Development Group + * Copyright (c) 2015-2023, PostgreSQL Global Development Group * * src/include/access/amapi.h * @@ -244,6 +244,8 @@ typedef struct IndexAmRoutine bool amcaninclude; /* does AM use maintenance_work_mem? */ bool amusemaintenanceworkmem; + /* does AM store tuple information only at block granularity? */ + bool amsummarizing; /* OR of parallel vacuum flags. See vacuum.h for flags. */ uint8 amparallelvacuumoptions; /* type of data stored in index, or InvalidOid if variable */ diff --git a/src/postgres/include/access/attmap.h b/src/postgres/include/access/attmap.h index 3ae40cad..9156a120 100644 --- a/src/postgres/include/access/attmap.h +++ b/src/postgres/include/access/attmap.h @@ -4,7 +4,7 @@ * Definitions for PostgreSQL attribute mappings * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/attmap.h @@ -42,9 +42,11 @@ extern void free_attrmap(AttrMap *map); /* Conversion routines to build mappings */ extern AttrMap *build_attrmap_by_name(TupleDesc indesc, - TupleDesc outdesc); + TupleDesc outdesc, + bool missing_ok); extern AttrMap *build_attrmap_by_name_if_req(TupleDesc indesc, - TupleDesc outdesc); + TupleDesc outdesc, + bool missing_ok); extern AttrMap *build_attrmap_by_position(TupleDesc indesc, TupleDesc outdesc, const char *msg); diff --git a/src/postgres/include/access/attnum.h b/src/postgres/include/access/attnum.h index 508c583e..4c432952 100644 --- a/src/postgres/include/access/attnum.h +++ b/src/postgres/include/access/attnum.h @@ -4,7 +4,7 @@ * POSTGRES attribute number definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/attnum.h diff --git a/src/postgres/include/access/clog.h b/src/postgres/include/access/clog.h index 543f2e26..d99444f0 100644 --- a/src/postgres/include/access/clog.h +++ b/src/postgres/include/access/clog.h @@ -3,7 +3,7 @@ * * PostgreSQL transaction-commit-log manager * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/clog.h diff --git a/src/postgres/include/access/commit_ts.h b/src/postgres/include/access/commit_ts.h index 7662f8e1..5087cdce 100644 --- a/src/postgres/include/access/commit_ts.h +++ b/src/postgres/include/access/commit_ts.h @@ -3,7 +3,7 @@ * * PostgreSQL commit timestamp manager * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/commit_ts.h diff --git a/src/postgres/include/access/detoast.h b/src/postgres/include/access/detoast.h index b1d8ea09..908e1fc6 100644 --- a/src/postgres/include/access/detoast.h +++ b/src/postgres/include/access/detoast.h @@ -3,7 +3,7 @@ * detoast.h * Access to compressed and external varlena values. * - * Copyright (c) 2000-2022, PostgreSQL Global Development Group + * Copyright (c) 2000-2023, PostgreSQL Global Development Group * * src/include/access/detoast.h * diff --git a/src/postgres/include/access/genam.h b/src/postgres/include/access/genam.h index 134b20f1..a3087956 100644 --- a/src/postgres/include/access/genam.h +++ b/src/postgres/include/access/genam.h @@ -4,7 +4,7 @@ * POSTGRES generalized index access method definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/genam.h @@ -44,6 +44,7 @@ typedef struct IndexBuildResult typedef struct IndexVacuumInfo { Relation index; /* the index being vacuumed */ + Relation heaprel; /* the heap relation the index belongs to */ bool analyze_only; /* ANALYZE (without any actual vacuum) */ bool report_progress; /* emit progress.h status reports */ bool estimated_count; /* num_heap_tuples is an estimate */ @@ -161,9 +162,10 @@ extern void index_rescan(IndexScanDesc scan, extern void index_endscan(IndexScanDesc scan); extern void index_markpos(IndexScanDesc scan); extern void index_restrpos(IndexScanDesc scan); -extern Size index_parallelscan_estimate(Relation indexrel, Snapshot snapshot); -extern void index_parallelscan_initialize(Relation heaprel, Relation indexrel, - Snapshot snapshot, ParallelIndexScanDesc target); +extern Size index_parallelscan_estimate(Relation indexRelation, Snapshot snapshot); +extern void index_parallelscan_initialize(Relation heapRelation, + Relation indexRelation, Snapshot snapshot, + ParallelIndexScanDesc target); extern void index_parallelrescan(IndexScanDesc scan); extern IndexScanDesc index_beginscan_parallel(Relation heaprel, Relation indexrel, int nkeys, int norderbys, @@ -191,7 +193,7 @@ extern void index_store_float8_orderby_distances(IndexScanDesc scan, Oid *orderByTypes, IndexOrderByDistance *distances, bool recheckOrderBy); -extern bytea *index_opclass_options(Relation relation, AttrNumber attnum, +extern bytea *index_opclass_options(Relation indrel, AttrNumber attnum, Datum attoptions, bool validate); diff --git a/src/postgres/include/access/gin.h b/src/postgres/include/access/gin.h index aacc665f..f1655065 100644 --- a/src/postgres/include/access/gin.h +++ b/src/postgres/include/access/gin.h @@ -2,7 +2,7 @@ * gin.h * Public header file for Generalized Inverted Index access method. * - * Copyright (c) 2006-2022, PostgreSQL Global Development Group + * Copyright (c) 2006-2023, PostgreSQL Global Development Group * * src/include/access/gin.h *-------------------------------------------------------------------------- @@ -57,13 +57,26 @@ typedef struct GinStatsData */ typedef char GinTernaryValue; +StaticAssertDecl(sizeof(GinTernaryValue) == sizeof(bool), + "sizes of GinTernaryValue and bool are not equal"); + #define GIN_FALSE 0 /* item is not present / does not match */ #define GIN_TRUE 1 /* item is present / matches */ #define GIN_MAYBE 2 /* don't know if item is present / don't know * if matches */ -#define DatumGetGinTernaryValue(X) ((GinTernaryValue)(X)) -#define GinTernaryValueGetDatum(X) ((Datum)(X)) +static inline GinTernaryValue +DatumGetGinTernaryValue(Datum X) +{ + return (GinTernaryValue) X; +} + +static inline Datum +GinTernaryValueGetDatum(GinTernaryValue X) +{ + return (Datum) X; +} + #define PG_RETURN_GIN_TERNARY_VALUE(x) return GinTernaryValueGetDatum(x) /* GUC parameters */ diff --git a/src/postgres/include/access/htup.h b/src/postgres/include/access/htup.h index a4bc7256..a8f7ff5d 100644 --- a/src/postgres/include/access/htup.h +++ b/src/postgres/include/access/htup.h @@ -4,7 +4,7 @@ * POSTGRES heap tuple definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/htup.h diff --git a/src/postgres/include/access/htup_details.h b/src/postgres/include/access/htup_details.h index 51a60eda..e01f4f35 100644 --- a/src/postgres/include/access/htup_details.h +++ b/src/postgres/include/access/htup_details.h @@ -4,7 +4,7 @@ * POSTGRES heap tuple header definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/htup_details.h @@ -19,6 +19,7 @@ #include "access/tupdesc.h" #include "access/tupmacs.h" #include "storage/bufpage.h" +#include "varatt.h" /* * MaxTupleAttributeNumber limits the number of (user) columns in a tuple. @@ -426,6 +427,9 @@ do { \ (tup)->t_choice.t_heap.t_field3.t_xvac = (xid); \ } while (0) +StaticAssertDecl(MaxOffsetNumber < SpecTokenOffsetNumber, + "invalid speculative token constant"); + #define HeapTupleHeaderIsSpeculative(tup) \ ( \ (ItemPointerGetOffsetNumberNoCheck(&(tup)->t_ctid) == SpecTokenOffsetNumber) \ @@ -699,7 +703,7 @@ extern void heap_fill_tuple(TupleDesc tupleDesc, uint16 *infomask, bits8 *bit); extern bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc); extern Datum nocachegetattr(HeapTuple tup, int attnum, - TupleDesc att); + TupleDesc tupleDesc); extern Datum heap_getsysattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull); extern Datum getmissingattr(TupleDesc tupleDesc, diff --git a/src/postgres/include/access/itup.h b/src/postgres/include/access/itup.h index 7458bc2f..2e2b8c7a 100644 --- a/src/postgres/include/access/itup.h +++ b/src/postgres/include/access/itup.h @@ -4,7 +4,7 @@ * POSTGRES index tuple definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/itup.h @@ -73,21 +73,38 @@ typedef IndexAttributeBitMapData * IndexAttributeBitMap; #define IndexTupleHasVarwidths(itup) ((((IndexTuple) (itup))->t_info & INDEX_VAR_MASK)) +/* routines in indextuple.c */ +extern IndexTuple index_form_tuple(TupleDesc tupleDescriptor, + Datum *values, bool *isnull); +extern IndexTuple index_form_tuple_context(TupleDesc tupleDescriptor, + Datum *values, bool *isnull, + MemoryContext context); +extern Datum nocache_index_getattr(IndexTuple tup, int attnum, + TupleDesc tupleDesc); +extern void index_deform_tuple(IndexTuple tup, TupleDesc tupleDescriptor, + Datum *values, bool *isnull); +extern void index_deform_tuple_internal(TupleDesc tupleDescriptor, + Datum *values, bool *isnull, + char *tp, bits8 *bp, int hasnulls); +extern IndexTuple CopyIndexTuple(IndexTuple source); +extern IndexTuple index_truncate_tuple(TupleDesc sourceDescriptor, + IndexTuple source, int leavenatts); + + /* * Takes an infomask as argument (primarily because this needs to be usable * at index_form_tuple time so enough space is allocated). */ -#define IndexInfoFindDataOffset(t_info) \ -( \ - (!((t_info) & INDEX_NULL_MASK)) ? \ - ( \ - (Size)MAXALIGN(sizeof(IndexTupleData)) \ - ) \ - : \ - ( \ - (Size)MAXALIGN(sizeof(IndexTupleData) + sizeof(IndexAttributeBitMapData)) \ - ) \ -) +static inline Size +IndexInfoFindDataOffset(unsigned short t_info) +{ + if (!(t_info & INDEX_NULL_MASK)) + return MAXALIGN(sizeof(IndexTupleData)); + else + return MAXALIGN(sizeof(IndexTupleData) + sizeof(IndexAttributeBitMapData)); +} + +#ifndef FRONTEND /* ---------------- * index_getattr @@ -97,34 +114,38 @@ typedef IndexAttributeBitMapData * IndexAttributeBitMap; * * ---------------- */ -#define index_getattr(tup, attnum, tupleDesc, isnull) \ -( \ - AssertMacro(PointerIsValid(isnull) && (attnum) > 0), \ - *(isnull) = false, \ - !IndexTupleHasNulls(tup) ? \ - ( \ - TupleDescAttr((tupleDesc), (attnum)-1)->attcacheoff >= 0 ? \ - ( \ - fetchatt(TupleDescAttr((tupleDesc), (attnum)-1), \ - (char *) (tup) + IndexInfoFindDataOffset((tup)->t_info) \ - + TupleDescAttr((tupleDesc), (attnum)-1)->attcacheoff) \ - ) \ - : \ - nocache_index_getattr((tup), (attnum), (tupleDesc)) \ - ) \ - : \ - ( \ - (att_isnull((attnum)-1, (char *)(tup) + sizeof(IndexTupleData))) ? \ - ( \ - *(isnull) = true, \ - (Datum)NULL \ - ) \ - : \ - ( \ - nocache_index_getattr((tup), (attnum), (tupleDesc)) \ - ) \ - ) \ -) +static inline Datum +index_getattr(IndexTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull) +{ + Assert(PointerIsValid(isnull)); + Assert(attnum > 0); + + *isnull = false; + + if (!IndexTupleHasNulls(tup)) + { + if (TupleDescAttr(tupleDesc, attnum - 1)->attcacheoff >= 0) + { + return fetchatt(TupleDescAttr(tupleDesc, attnum - 1), + (char *) tup + IndexInfoFindDataOffset(tup->t_info) + + TupleDescAttr(tupleDesc, attnum - 1)->attcacheoff); + } + else + return nocache_index_getattr(tup, attnum, tupleDesc); + } + else + { + if (att_isnull(attnum - 1, (bits8 *) tup + sizeof(IndexTupleData))) + { + *isnull = true; + return (Datum) NULL; + } + else + return nocache_index_getattr(tup, attnum, tupleDesc); + } +} + +#endif /* * MaxIndexTuplesPerPage is an upper bound on the number of tuples that can @@ -146,22 +167,4 @@ typedef IndexAttributeBitMapData * IndexAttributeBitMap; ((int) ((BLCKSZ - SizeOfPageHeaderData) / \ (MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData)))) - -/* routines in indextuple.c */ -extern IndexTuple index_form_tuple(TupleDesc tupleDescriptor, - Datum *values, bool *isnull); -extern IndexTuple index_form_tuple_context(TupleDesc tupleDescriptor, - Datum *values, bool *isnull, - MemoryContext context); -extern Datum nocache_index_getattr(IndexTuple tup, int attnum, - TupleDesc tupleDesc); -extern void index_deform_tuple(IndexTuple tup, TupleDesc tupleDescriptor, - Datum *values, bool *isnull); -extern void index_deform_tuple_internal(TupleDesc tupleDescriptor, - Datum *values, bool *isnull, - char *tp, bits8 *bp, int hasnulls); -extern IndexTuple CopyIndexTuple(IndexTuple source); -extern IndexTuple index_truncate_tuple(TupleDesc sourceDescriptor, - IndexTuple source, int leavenatts); - #endif /* ITUP_H */ diff --git a/src/postgres/include/access/parallel.h b/src/postgres/include/access/parallel.h index 983841d4..061f8a4c 100644 --- a/src/postgres/include/access/parallel.h +++ b/src/postgres/include/access/parallel.h @@ -3,7 +3,7 @@ * parallel.h * Infrastructure for launching parallel workers * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/parallel.h @@ -54,7 +54,7 @@ typedef struct ParallelWorkerContext shm_toc *toc; } ParallelWorkerContext; -extern PGDLLIMPORT volatile bool ParallelMessagePending; +extern PGDLLIMPORT volatile sig_atomic_t ParallelMessagePending; extern PGDLLIMPORT int ParallelWorkerNumber; extern PGDLLIMPORT bool InitializingParallelWorker; diff --git a/src/postgres/include/access/printtup.h b/src/postgres/include/access/printtup.h index 971a74cf..747ecb80 100644 --- a/src/postgres/include/access/printtup.h +++ b/src/postgres/include/access/printtup.h @@ -4,7 +4,7 @@ * * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/printtup.h diff --git a/src/postgres/include/access/relation.h b/src/postgres/include/access/relation.h index d3627931..66efd367 100644 --- a/src/postgres/include/access/relation.h +++ b/src/postgres/include/access/relation.h @@ -4,7 +4,7 @@ * Generic relation related routines. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/relation.h diff --git a/src/postgres/include/access/relscan.h b/src/postgres/include/access/relscan.h index 53a93ccb..d03360ea 100644 --- a/src/postgres/include/access/relscan.h +++ b/src/postgres/include/access/relscan.h @@ -4,7 +4,7 @@ * POSTGRES relation scan descriptor definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/relscan.h diff --git a/src/postgres/include/access/rmgrlist.h b/src/postgres/include/access/rmgrlist.h index 9a74721c..463bcb67 100644 --- a/src/postgres/include/access/rmgrlist.h +++ b/src/postgres/include/access/rmgrlist.h @@ -6,7 +6,7 @@ * by the PG_RMGR macro, which is not defined in this file; it can be * defined by the caller for special purposes. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/rmgrlist.h @@ -24,7 +24,7 @@ * Changes to this list possibly need an XLOG_PAGE_MAGIC bump. */ -/* symbol name, textual name, redo, desc, identify, startup, cleanup */ +/* symbol name, textual name, redo, desc, identify, startup, cleanup, mask, decode */ PG_RMGR(RM_XLOG_ID, "XLOG", xlog_redo, xlog_desc, xlog_identify, NULL, NULL, NULL, xlog_decode) PG_RMGR(RM_XACT_ID, "Transaction", xact_redo, xact_desc, xact_identify, NULL, NULL, NULL, xact_decode) PG_RMGR(RM_SMGR_ID, "Storage", smgr_redo, smgr_desc, smgr_identify, NULL, NULL, NULL, NULL) diff --git a/src/postgres/include/access/sdir.h b/src/postgres/include/access/sdir.h index 1ab4d5e1..322aeb3f 100644 --- a/src/postgres/include/access/sdir.h +++ b/src/postgres/include/access/sdir.h @@ -4,7 +4,7 @@ * POSTGRES scan direction definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/sdir.h @@ -16,8 +16,10 @@ /* - * ScanDirection was an int8 for no apparent reason. I kept the original - * values because I'm not sure if I'll break anything otherwise. -ay 2/95 + * Defines the direction for scanning a table or an index. Scans are never + * invoked using NoMovementScanDirectionScans. For convenience, we use the + * values -1 and 1 for backward and forward scans. This allows us to perform + * a few mathematical tricks such as what is done in ScanDirectionCombine. */ typedef enum ScanDirection { @@ -26,6 +28,13 @@ typedef enum ScanDirection ForwardScanDirection = 1 } ScanDirection; +/* + * Determine the net effect of two direction specifications. + * This relies on having ForwardScanDirection = +1, BackwardScanDirection = -1, + * and will probably not do what you want if applied to any other values. + */ +#define ScanDirectionCombine(a, b) ((a) * (b)) + /* * ScanDirectionIsValid * True iff scan direction is valid. diff --git a/src/postgres/include/access/skey.h b/src/postgres/include/access/skey.h index b5ab17f7..fbdb23c5 100644 --- a/src/postgres/include/access/skey.h +++ b/src/postgres/include/access/skey.h @@ -4,7 +4,7 @@ * POSTGRES scan key definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/skey.h diff --git a/src/postgres/include/access/stratnum.h b/src/postgres/include/access/stratnum.h index ac15f844..1b29653a 100644 --- a/src/postgres/include/access/stratnum.h +++ b/src/postgres/include/access/stratnum.h @@ -4,7 +4,7 @@ * POSTGRES strategy number definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/stratnum.h diff --git a/src/postgres/include/access/sysattr.h b/src/postgres/include/access/sysattr.h index c0b1d5ab..8f086827 100644 --- a/src/postgres/include/access/sysattr.h +++ b/src/postgres/include/access/sysattr.h @@ -4,7 +4,7 @@ * POSTGRES system attribute definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/sysattr.h diff --git a/src/postgres/include/access/table.h b/src/postgres/include/access/table.h index 969952d6..e664c7b7 100644 --- a/src/postgres/include/access/table.h +++ b/src/postgres/include/access/table.h @@ -4,7 +4,7 @@ * Generic routines for table related code. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/table.h diff --git a/src/postgres/include/access/tableam.h b/src/postgres/include/access/tableam.h index fe869c6c..230bc39c 100644 --- a/src/postgres/include/access/tableam.h +++ b/src/postgres/include/access/tableam.h @@ -4,7 +4,7 @@ * POSTGRES table access method definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/tableam.h @@ -20,7 +20,7 @@ #include "access/relscan.h" #include "access/sdir.h" #include "access/xact.h" -#include "utils/guc.h" +#include "executor/tuptable.h" #include "utils/rel.h" #include "utils/snapshot.h" @@ -102,6 +102,22 @@ typedef enum TM_Result TM_WouldBlock } TM_Result; +/* + * Result codes for table_update(..., update_indexes*..). + * Used to determine which indexes to update. + */ +typedef enum TU_UpdateIndexes +{ + /* No indexed columns were updated (incl. TID addressing of tuple) */ + TU_None, + + /* A non-summarizing indexed column was updated, or the TID has changed */ + TU_All, + + /* Only summarized columns were updated, TID is unchanged */ + TU_Summarizing +} TU_UpdateIndexes; + /* * When table_tuple_update, table_tuple_delete, or table_tuple_lock fail * because the target tuple is already outdated, they fill in this struct to @@ -342,7 +358,7 @@ typedef struct TableAmRoutine * allowed by the AM. * * Implementations can assume that scan_set_tidrange is always called - * before can_getnextslot_tidrange or after scan_rescan and before any + * before scan_getnextslot_tidrange or after scan_rescan and before any * further calls to scan_getnextslot_tidrange. */ void (*scan_set_tidrange) (TableScanDesc scan, @@ -526,7 +542,7 @@ typedef struct TableAmRoutine bool wait, TM_FailureData *tmfd, LockTupleMode *lockmode, - bool *update_indexes); + TU_UpdateIndexes *update_indexes); /* see table_tuple_lock() for reference about parameters */ TM_Result (*tuple_lock) (Relation rel, @@ -560,32 +576,32 @@ typedef struct TableAmRoutine */ /* - * This callback needs to create a new relation filenode for `rel`, with + * This callback needs to create new relation storage for `rel`, with * appropriate durability behaviour for `persistence`. * * Note that only the subset of the relcache filled by * RelationBuildLocalRelation() can be relied upon and that the relation's * catalog entries will either not yet exist (new relation), or will still - * reference the old relfilenode. + * reference the old relfilelocator. * * As output *freezeXid, *minmulti must be set to the values appropriate * for pg_class.{relfrozenxid, relminmxid}. For AMs that don't need those * fields to be filled they can be set to InvalidTransactionId and * InvalidMultiXactId, respectively. * - * See also table_relation_set_new_filenode(). + * See also table_relation_set_new_filelocator(). */ - void (*relation_set_new_filenode) (Relation rel, - const RelFileNode *newrnode, - char persistence, - TransactionId *freezeXid, - MultiXactId *minmulti); + void (*relation_set_new_filelocator) (Relation rel, + const RelFileLocator *newrlocator, + char persistence, + TransactionId *freezeXid, + MultiXactId *minmulti); /* * This callback needs to remove all contents from `rel`'s current - * relfilenode. No provisions for transactional behaviour need to be made. - * Often this can be implemented by truncating the underlying storage to - * its minimal size. + * relfilelocator. No provisions for transactional behaviour need to be + * made. Often this can be implemented by truncating the underlying + * storage to its minimal size. * * See also table_relation_nontransactional_truncate(). */ @@ -598,7 +614,7 @@ typedef struct TableAmRoutine * storage, unless it contains references to the tablespace internally. */ void (*relation_copy_data) (Relation rel, - const RelFileNode *newrnode); + const RelFileLocator *newrlocator); /* See table_relation_copy_for_cluster() */ void (*relation_copy_for_cluster) (Relation NewTable, @@ -863,13 +879,13 @@ typedef struct TableAmRoutine * for the relation. Works for tables, views, foreign tables and partitioned * tables. */ -extern const TupleTableSlotOps *table_slot_callbacks(Relation rel); +extern const TupleTableSlotOps *table_slot_callbacks(Relation relation); /* * Returns slot using the callbacks returned by table_slot_callbacks(), and * registers it on *reglist. */ -extern TupleTableSlot *table_slot_create(Relation rel, List **reglist); +extern TupleTableSlot *table_slot_create(Relation relation, List **reglist); /* ---------------------------------------------------------------------------- @@ -886,7 +902,7 @@ table_beginscan(Relation rel, Snapshot snapshot, int nkeys, struct ScanKeyData *key) { uint32 flags = SO_TYPE_SEQSCAN | - SO_ALLOW_STRAT | SO_ALLOW_SYNC | SO_ALLOW_PAGEMODE; + SO_ALLOW_STRAT | SO_ALLOW_SYNC | SO_ALLOW_PAGEMODE; return rel->rd_tableam->scan_begin(rel, snapshot, nkeys, key, NULL, flags); } @@ -895,7 +911,7 @@ table_beginscan(Relation rel, Snapshot snapshot, * Like table_beginscan(), but for scanning catalog. It'll automatically use a * snapshot appropriate for scanning catalog relations. */ -extern TableScanDesc table_beginscan_catalog(Relation rel, int nkeys, +extern TableScanDesc table_beginscan_catalog(Relation relation, int nkeys, struct ScanKeyData *key); /* @@ -1035,6 +1051,10 @@ table_scan_getnextslot(TableScanDesc sscan, ScanDirection direction, TupleTableS { slot->tts_tableOid = RelationGetRelid(sscan->rs_rd); + /* We don't expect actual scans using NoMovementScanDirection */ + Assert(direction == ForwardScanDirection || + direction == BackwardScanDirection); + /* * We don't expect direct calls to table_scan_getnextslot with valid * CheckXidAlive for catalog or regular tables. See detailed comments in @@ -1099,6 +1119,10 @@ table_scan_getnextslot_tidrange(TableScanDesc sscan, ScanDirection direction, /* Ensure table_beginscan_tidrange() was used. */ Assert((sscan->rs_flags & SO_TYPE_TIDRANGESCAN) != 0); + /* We don't expect actual scans using NoMovementScanDirection */ + Assert(direction == ForwardScanDirection || + direction == BackwardScanDirection); + return sscan->rs_rd->rd_tableam->scan_getnextslot_tidrange(sscan, direction, slot); @@ -1133,7 +1157,7 @@ extern void table_parallelscan_initialize(Relation rel, * * Caller must hold a suitable lock on the relation. */ -extern TableScanDesc table_beginscan_parallel(Relation rel, +extern TableScanDesc table_beginscan_parallel(Relation relation, ParallelTableScanDesc pscan); /* @@ -1318,7 +1342,7 @@ table_tuple_satisfies_snapshot(Relation rel, TupleTableSlot *slot, * marked as deletable. See comments above TM_IndexDelete and comments above * TM_IndexDeleteOp for full details. * - * Returns a latestRemovedXid transaction ID that caller generally places in + * Returns a snapshotConflictHorizon transaction ID that caller places in * its index deletion WAL record. This might be used during subsequent REDO * of the WAL record when in Hot Standby mode -- a recovery conflict for the * index deletion operation might be required on the standby. @@ -1348,7 +1372,7 @@ table_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate) * RelationGetBufferForTuple. See that method for more information. * * TABLE_INSERT_FROZEN should only be specified for inserts into - * relfilenodes created during the current subtransaction and when + * relation storage created during the current subtransaction and when * there are no prior snapshots or pre-existing portals open. * This causes rows to be frozen, which is an MVCC violation and * requires explicit options chosen by user. @@ -1506,7 +1530,7 @@ static inline TM_Result table_tuple_update(Relation rel, ItemPointer otid, TupleTableSlot *slot, CommandId cid, Snapshot snapshot, Snapshot crosscheck, bool wait, TM_FailureData *tmfd, LockTupleMode *lockmode, - bool *update_indexes) + TU_UpdateIndexes *update_indexes) { return rel->rd_tableam->tuple_update(rel, otid, slot, cid, snapshot, crosscheck, @@ -1577,33 +1601,34 @@ table_finish_bulk_insert(Relation rel, int options) */ /* - * Create storage for `rel` in `newrnode`, with persistence set to + * Create storage for `rel` in `newrlocator`, with persistence set to * `persistence`. * * This is used both during relation creation and various DDL operations to - * create a new relfilenode that can be filled from scratch. When creating - * new storage for an existing relfilenode, this should be called before the + * create new rel storage that can be filled from scratch. When creating + * new storage for an existing relfilelocator, this should be called before the * relcache entry has been updated. * * *freezeXid, *minmulti are set to the xid / multixact horizon for the table * that pg_class.{relfrozenxid, relminmxid} have to be set to. */ static inline void -table_relation_set_new_filenode(Relation rel, - const RelFileNode *newrnode, - char persistence, - TransactionId *freezeXid, - MultiXactId *minmulti) +table_relation_set_new_filelocator(Relation rel, + const RelFileLocator *newrlocator, + char persistence, + TransactionId *freezeXid, + MultiXactId *minmulti) { - rel->rd_tableam->relation_set_new_filenode(rel, newrnode, persistence, - freezeXid, minmulti); + rel->rd_tableam->relation_set_new_filelocator(rel, newrlocator, + persistence, freezeXid, + minmulti); } /* * Remove all table contents from `rel`, in a non-transactional manner. * Non-transactional meaning that there's no need to support rollbacks. This - * commonly only is used to perform truncations for relfilenodes created in the - * current transaction. + * commonly only is used to perform truncations for relation storage created in + * the current transaction. */ static inline void table_relation_nontransactional_truncate(Relation rel) @@ -1612,15 +1637,15 @@ table_relation_nontransactional_truncate(Relation rel) } /* - * Copy data from `rel` into the new relfilenode `newrnode`. The new - * relfilenode may not have storage associated before this function is + * Copy data from `rel` into the new relfilelocator `newrlocator`. The new + * relfilelocator may not have storage associated before this function is * called. This is only supposed to be used for low level operations like * changing a relation's tablespace. */ static inline void -table_relation_copy_data(Relation rel, const RelFileNode *newrnode) +table_relation_copy_data(Relation rel, const RelFileLocator *newrlocator) { - rel->rd_tableam->relation_copy_data(rel, newrnode); + rel->rd_tableam->relation_copy_data(rel, newrlocator); } /* @@ -1633,7 +1658,7 @@ table_relation_copy_data(Relation rel, const RelFileNode *newrnode) * in that index's order; if false and OldIndex is InvalidOid, no sorting is * performed * - OldIndex - see use_sort - * - OldestXmin - computed by vacuum_set_xid_limits(), even when + * - OldestXmin - computed by vacuum_get_cutoffs(), even when * not needed for the relation's AM * - *xid_cutoff - ditto * - *multi_cutoff - ditto @@ -1870,7 +1895,7 @@ table_relation_toast_am(Relation rel) * * toastrel is the relation in which the toasted value is stored. * - * valueid identifes which toast value is to be fetched. For the heap, + * valueid identifies which toast value is to be fetched. For the heap, * this corresponds to the values stored in the chunk_id column. * * attrsize is the total size of the toast value to be fetched. @@ -2029,7 +2054,7 @@ extern void simple_table_tuple_delete(Relation rel, ItemPointer tid, Snapshot snapshot); extern void simple_table_tuple_update(Relation rel, ItemPointer otid, TupleTableSlot *slot, Snapshot snapshot, - bool *update_indexes); + TU_UpdateIndexes *update_indexes); /* ---------------------------------------------------------------------------- @@ -2071,7 +2096,5 @@ extern void table_block_relation_estimate_size(Relation rel, extern const TableAmRoutine *GetTableAmRoutine(Oid amhandler); extern const TableAmRoutine *GetHeapamTableAmRoutine(void); -extern bool check_default_table_access_method(char **newval, void **extra, - GucSource source); #endif /* TABLEAM_H */ diff --git a/src/postgres/include/access/toast_compression.h b/src/postgres/include/access/toast_compression.h index deb8f99d..7f02820c 100644 --- a/src/postgres/include/access/toast_compression.h +++ b/src/postgres/include/access/toast_compression.h @@ -3,7 +3,7 @@ * toast_compression.h * Functions for toast compression. * - * Copyright (c) 2021-2022, PostgreSQL Global Development Group + * Copyright (c) 2021-2023, PostgreSQL Global Development Group * * src/include/access/toast_compression.h * diff --git a/src/postgres/include/access/transam.h b/src/postgres/include/access/transam.h index 775471d2..f5af6d30 100644 --- a/src/postgres/include/access/transam.h +++ b/src/postgres/include/access/transam.h @@ -4,7 +4,7 @@ * postgres transaction access method support code * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/transam.h diff --git a/src/postgres/include/access/tsmapi.h b/src/postgres/include/access/tsmapi.h new file mode 100644 index 00000000..80784bed --- /dev/null +++ b/src/postgres/include/access/tsmapi.h @@ -0,0 +1,82 @@ +/*------------------------------------------------------------------------- + * + * tsmapi.h + * API for tablesample methods + * + * Copyright (c) 2015-2023, PostgreSQL Global Development Group + * + * src/include/access/tsmapi.h + * + *------------------------------------------------------------------------- + */ +#ifndef TSMAPI_H +#define TSMAPI_H + +#include "nodes/execnodes.h" +#include "nodes/pathnodes.h" + + +/* + * Callback function signatures --- see tablesample-method.sgml for more info. + */ + +typedef void (*SampleScanGetSampleSize_function) (PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); + +typedef void (*InitSampleScan_function) (SampleScanState *node, + int eflags); + +typedef void (*BeginSampleScan_function) (SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); + +typedef BlockNumber (*NextSampleBlock_function) (SampleScanState *node, + BlockNumber nblocks); + +typedef OffsetNumber (*NextSampleTuple_function) (SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); + +typedef void (*EndSampleScan_function) (SampleScanState *node); + +/* + * TsmRoutine is the struct returned by a tablesample method's handler + * function. It provides pointers to the callback functions needed by the + * planner and executor, as well as additional information about the method. + * + * More function pointers are likely to be added in the future. + * Therefore it's recommended that the handler initialize the struct with + * makeNode(TsmRoutine) so that all fields are set to NULL. This will + * ensure that no fields are accidentally left undefined. + */ +typedef struct TsmRoutine +{ + NodeTag type; + + /* List of datatype OIDs for the arguments of the TABLESAMPLE clause */ + List *parameterTypes; + + /* Can method produce repeatable samples across, or even within, queries? */ + bool repeatable_across_queries; + bool repeatable_across_scans; + + /* Functions for planning a SampleScan on a physical table */ + SampleScanGetSampleSize_function SampleScanGetSampleSize; + + /* Functions for executing a SampleScan on a physical table */ + InitSampleScan_function InitSampleScan; /* can be NULL */ + BeginSampleScan_function BeginSampleScan; + NextSampleBlock_function NextSampleBlock; /* can be NULL */ + NextSampleTuple_function NextSampleTuple; + EndSampleScan_function EndSampleScan; /* can be NULL */ +} TsmRoutine; + + +/* Functions in access/tablesample/tablesample.c */ +extern TsmRoutine *GetTsmRoutine(Oid tsmhandler); + +#endif /* TSMAPI_H */ diff --git a/src/postgres/include/access/tupconvert.h b/src/postgres/include/access/tupconvert.h index f5a5fd82..f00918b5 100644 --- a/src/postgres/include/access/tupconvert.h +++ b/src/postgres/include/access/tupconvert.h @@ -4,7 +4,7 @@ * Tuple conversion support. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/tupconvert.h @@ -39,12 +39,15 @@ extern TupleConversionMap *convert_tuples_by_position(TupleDesc indesc, extern TupleConversionMap *convert_tuples_by_name(TupleDesc indesc, TupleDesc outdesc); +extern TupleConversionMap *convert_tuples_by_name_attrmap(TupleDesc indesc, + TupleDesc outdesc, + AttrMap *attrMap); extern HeapTuple execute_attr_map_tuple(HeapTuple tuple, TupleConversionMap *map); extern TupleTableSlot *execute_attr_map_slot(AttrMap *attrMap, TupleTableSlot *in_slot, TupleTableSlot *out_slot); -extern Bitmapset *execute_attr_map_cols(AttrMap *attrMap, Bitmapset *inbitmap); +extern Bitmapset *execute_attr_map_cols(AttrMap *attrMap, Bitmapset *in_cols); extern void free_conversion_map(TupleConversionMap *map); diff --git a/src/postgres/include/access/tupdesc.h b/src/postgres/include/access/tupdesc.h index 28dd6de1..b4286cf9 100644 --- a/src/postgres/include/access/tupdesc.h +++ b/src/postgres/include/access/tupdesc.h @@ -4,7 +4,7 @@ * POSTGRES tuple descriptor definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/tupdesc.h @@ -127,7 +127,7 @@ extern void DecrTupleDescRefCount(TupleDesc tupdesc); extern bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2); -extern uint32 hashTupleDesc(TupleDesc tupdesc); +extern uint32 hashTupleDesc(TupleDesc desc); extern void TupleDescInitEntry(TupleDesc desc, AttrNumber attributeNumber, diff --git a/src/postgres/include/access/tupmacs.h b/src/postgres/include/access/tupmacs.h index 16c74a58..34144465 100644 --- a/src/postgres/include/access/tupmacs.h +++ b/src/postgres/include/access/tupmacs.h @@ -4,7 +4,7 @@ * Tuple macros used by both index tuples and heap tuples. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/tupmacs.h @@ -22,8 +22,13 @@ * Note that a 0 in the null bitmap indicates a null, while 1 indicates * non-null. */ -#define att_isnull(ATT, BITS) (!((BITS)[(ATT) >> 3] & (1 << ((ATT) & 0x07)))) +static inline bool +att_isnull(int ATT, const bits8 *BITS) +{ + return !(BITS[ATT >> 3] & (1 << (ATT & 0x07))); +} +#ifndef FRONTEND /* * Given a Form_pg_attribute and a pointer into a tuple's data area, * return the correct value or pointer. @@ -43,56 +48,32 @@ /* * Same, but work from byval/len parameters rather than Form_pg_attribute. */ +static inline Datum +fetch_att(const void *T, bool attbyval, int attlen) +{ + if (attbyval) + { + switch (attlen) + { + case sizeof(char): + return CharGetDatum(*((const char *) T)); + case sizeof(int16): + return Int16GetDatum(*((const int16 *) T)); + case sizeof(int32): + return Int32GetDatum(*((const int32 *) T)); #if SIZEOF_DATUM == 8 - -#define fetch_att(T,attbyval,attlen) \ -( \ - (attbyval) ? \ - ( \ - (attlen) == (int) sizeof(Datum) ? \ - *((Datum *)(T)) \ - : \ - ( \ - (attlen) == (int) sizeof(int32) ? \ - Int32GetDatum(*((int32 *)(T))) \ - : \ - ( \ - (attlen) == (int) sizeof(int16) ? \ - Int16GetDatum(*((int16 *)(T))) \ - : \ - ( \ - AssertMacro((attlen) == 1), \ - CharGetDatum(*((char *)(T))) \ - ) \ - ) \ - ) \ - ) \ - : \ - PointerGetDatum((char *) (T)) \ -) -#else /* SIZEOF_DATUM != 8 */ - -#define fetch_att(T,attbyval,attlen) \ -( \ - (attbyval) ? \ - ( \ - (attlen) == (int) sizeof(int32) ? \ - Int32GetDatum(*((int32 *)(T))) \ - : \ - ( \ - (attlen) == (int) sizeof(int16) ? \ - Int16GetDatum(*((int16 *)(T))) \ - : \ - ( \ - AssertMacro((attlen) == 1), \ - CharGetDatum(*((char *)(T))) \ - ) \ - ) \ - ) \ - : \ - PointerGetDatum((char *) (T)) \ -) -#endif /* SIZEOF_DATUM == 8 */ + case sizeof(Datum): + return *((const Datum *) T); +#endif + default: + elog(ERROR, "unsupported byval length: %d", attlen); + return 0; + } + } + else + return PointerGetDatum(T); +} +#endif /* FRONTEND */ /* * att_align_datum aligns the given offset as needed for a datum of alignment @@ -190,58 +171,37 @@ )) \ ) +#ifndef FRONTEND /* * store_att_byval is a partial inverse of fetch_att: store a given Datum * value into a tuple data area at the specified address. However, it only * handles the byval case, because in typical usage the caller needs to - * distinguish by-val and by-ref cases anyway, and so a do-it-all macro + * distinguish by-val and by-ref cases anyway, and so a do-it-all function * wouldn't be convenient. */ +static inline void +store_att_byval(void *T, Datum newdatum, int attlen) +{ + switch (attlen) + { + case sizeof(char): + *(char *) T = DatumGetChar(newdatum); + break; + case sizeof(int16): + *(int16 *) T = DatumGetInt16(newdatum); + break; + case sizeof(int32): + *(int32 *) T = DatumGetInt32(newdatum); + break; #if SIZEOF_DATUM == 8 - -#define store_att_byval(T,newdatum,attlen) \ - do { \ - switch (attlen) \ - { \ - case sizeof(char): \ - *(char *) (T) = DatumGetChar(newdatum); \ - break; \ - case sizeof(int16): \ - *(int16 *) (T) = DatumGetInt16(newdatum); \ - break; \ - case sizeof(int32): \ - *(int32 *) (T) = DatumGetInt32(newdatum); \ - break; \ - case sizeof(Datum): \ - *(Datum *) (T) = (newdatum); \ - break; \ - default: \ - elog(ERROR, "unsupported byval length: %d", \ - (int) (attlen)); \ - break; \ - } \ - } while (0) -#else /* SIZEOF_DATUM != 8 */ - -#define store_att_byval(T,newdatum,attlen) \ - do { \ - switch (attlen) \ - { \ - case sizeof(char): \ - *(char *) (T) = DatumGetChar(newdatum); \ - break; \ - case sizeof(int16): \ - *(int16 *) (T) = DatumGetInt16(newdatum); \ - break; \ - case sizeof(int32): \ - *(int32 *) (T) = DatumGetInt32(newdatum); \ - break; \ - default: \ - elog(ERROR, "unsupported byval length: %d", \ - (int) (attlen)); \ - break; \ - } \ - } while (0) -#endif /* SIZEOF_DATUM == 8 */ - + case sizeof(Datum): + *(Datum *) T = newdatum; + break; #endif + default: + elog(ERROR, "unsupported byval length: %d", attlen); + } +} +#endif /* FRONTEND */ + +#endif /* TUPMACS_H */ diff --git a/src/postgres/include/access/twophase.h b/src/postgres/include/access/twophase.h index 5d6544e2..21e2af73 100644 --- a/src/postgres/include/access/twophase.h +++ b/src/postgres/include/access/twophase.h @@ -4,7 +4,7 @@ * Two-phase-commit related declarations. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/twophase.h @@ -60,6 +60,6 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, XLogRecPtr end_lsn, RepOriginId origin_id); extern void PrepareRedoRemove(TransactionId xid, bool giveWarning); extern void restoreTwoPhaseData(void); -extern bool LookupGXact(const char *gid, XLogRecPtr prepare_at_lsn, +extern bool LookupGXact(const char *gid, XLogRecPtr prepare_end_lsn, TimestampTz origin_prepare_timestamp); #endif /* TWOPHASE_H */ diff --git a/src/postgres/include/access/xact.h b/src/postgres/include/access/xact.h index 65616ca2..7d3b9446 100644 --- a/src/postgres/include/access/xact.h +++ b/src/postgres/include/access/xact.h @@ -4,7 +4,7 @@ * postgres transaction system definitions * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xact.h @@ -19,7 +19,7 @@ #include "datatype/timestamp.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "storage/sinval.h" /* @@ -113,6 +113,13 @@ extern PGDLLIMPORT int MyXactFlags; */ #define XACT_FLAGS_NEEDIMMEDIATECOMMIT (1U << 2) +/* + * XACT_FLAGS_PIPELINING - set when we complete an extended-query-protocol + * Execute message. This is useful for detecting that an implicit transaction + * block has been created via pipelining. + */ +#define XACT_FLAGS_PIPELINING (1U << 3) + /* * start- and end-of-transaction callbacks for dynamically loaded modules */ @@ -180,7 +187,7 @@ typedef struct SavedTransactionCharacteristics */ #define XACT_XINFO_HAS_DBINFO (1U << 0) #define XACT_XINFO_HAS_SUBXACTS (1U << 1) -#define XACT_XINFO_HAS_RELFILENODES (1U << 2) +#define XACT_XINFO_HAS_RELFILELOCATORS (1U << 2) #define XACT_XINFO_HAS_INVALS (1U << 3) #define XACT_XINFO_HAS_TWOPHASE (1U << 4) #define XACT_XINFO_HAS_ORIGIN (1U << 5) @@ -258,12 +265,12 @@ typedef struct xl_xact_subxacts } xl_xact_subxacts; #define MinSizeOfXactSubxacts offsetof(xl_xact_subxacts, subxacts) -typedef struct xl_xact_relfilenodes +typedef struct xl_xact_relfilelocators { int nrels; /* number of relations */ - RelFileNode xnodes[FLEXIBLE_ARRAY_MEMBER]; -} xl_xact_relfilenodes; -#define MinSizeOfXactRelfilenodes offsetof(xl_xact_relfilenodes, xnodes) + RelFileLocator xlocators[FLEXIBLE_ARRAY_MEMBER]; +} xl_xact_relfilelocators; +#define MinSizeOfXactRelfileLocators offsetof(xl_xact_relfilelocators, xlocators) /* * A transactionally dropped statistics entry. @@ -311,7 +318,7 @@ typedef struct xl_xact_commit /* xl_xact_xinfo follows if XLOG_XACT_HAS_INFO */ /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */ /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */ - /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */ + /* xl_xact_relfilelocators follows if XINFO_HAS_RELFILELOCATORS */ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */ /* xl_xact_invals follows if XINFO_HAS_INVALS */ /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */ @@ -327,7 +334,7 @@ typedef struct xl_xact_abort /* xl_xact_xinfo follows if XLOG_XACT_HAS_INFO */ /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */ /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */ - /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */ + /* xl_xact_relfilelocators follows if XINFO_HAS_RELFILELOCATORS */ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */ /* No invalidation messages needed. */ /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */ @@ -373,7 +380,7 @@ typedef struct xl_xact_parsed_commit TransactionId *subxacts; int nrels; - RelFileNode *xnodes; + RelFileLocator *xlocators; int nstats; xl_xact_stats_item *stats; @@ -384,7 +391,7 @@ typedef struct xl_xact_parsed_commit TransactionId twophase_xid; /* only for 2PC */ char twophase_gid[GIDSIZE]; /* only for 2PC */ int nabortrels; /* only for 2PC */ - RelFileNode *abortnodes; /* only for 2PC */ + RelFileLocator *abortlocators; /* only for 2PC */ int nabortstats; /* only for 2PC */ xl_xact_stats_item *abortstats; /* only for 2PC */ @@ -406,7 +413,7 @@ typedef struct xl_xact_parsed_abort TransactionId *subxacts; int nrels; - RelFileNode *xnodes; + RelFileLocator *xlocators; int nstats; xl_xact_stats_item *stats; @@ -489,9 +496,9 @@ extern int xactGetCommittedChildren(TransactionId **ptr); extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time, int nsubxacts, TransactionId *subxacts, - int nrels, RelFileNode *rels, - int nstats, - xl_xact_stats_item *stats, + int nrels, RelFileLocator *rels, + int ndroppedstats, + xl_xact_stats_item *droppedstats, int nmsgs, SharedInvalidationMessage *msgs, bool relcacheInval, int xactflags, @@ -500,9 +507,9 @@ extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time, extern XLogRecPtr XactLogAbortRecord(TimestampTz abort_time, int nsubxacts, TransactionId *subxacts, - int nrels, RelFileNode *rels, - int nstats, - xl_xact_stats_item *stats, + int nrels, RelFileLocator *rels, + int ndroppedstats, + xl_xact_stats_item *droppedstats, int xactflags, TransactionId twophase_xid, const char *twophase_gid); extern void xact_redo(XLogReaderState *record); diff --git a/src/postgres/include/access/xlog.h b/src/postgres/include/access/xlog.h index cd674c3c..48ca8523 100644 --- a/src/postgres/include/access/xlog.h +++ b/src/postgres/include/access/xlog.h @@ -3,7 +3,7 @@ * * PostgreSQL write-ahead log manager * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xlog.h @@ -11,8 +11,8 @@ #ifndef XLOG_H #define XLOG_H +#include "access/xlogbackup.h" #include "access/xlogdefs.h" -#include "access/xlogreader.h" #include "datatype/timestamp.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" @@ -191,25 +191,26 @@ typedef enum WALAvailability } WALAvailability; struct XLogRecData; +struct XLogReaderState; extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, XLogRecPtr fpw_lsn, uint8 flags, int num_fpi, bool topxid_included); -extern void XLogFlush(XLogRecPtr RecPtr); +extern void XLogFlush(XLogRecPtr record); extern bool XLogBackgroundFlush(void); -extern bool XLogNeedsFlush(XLogRecPtr RecPtr); -extern int XLogFileInit(XLogSegNo segno, TimeLineID tli); +extern bool XLogNeedsFlush(XLogRecPtr record); +extern int XLogFileInit(XLogSegNo logsegno, TimeLineID logtli); extern int XLogFileOpen(XLogSegNo segno, TimeLineID tli); extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli); extern XLogSegNo XLogGetLastRemovedSegno(void); -extern void XLogSetAsyncXactLSN(XLogRecPtr record); +extern void XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN); extern void XLogSetReplicationSlotMinimumLSN(XLogRecPtr lsn); -extern void xlog_redo(XLogReaderState *record); -extern void xlog_desc(StringInfo buf, XLogReaderState *record); +extern void xlog_redo(struct XLogReaderState *record); +extern void xlog_desc(StringInfo buf, struct XLogReaderState *record); extern const char *xlog_identify(uint8 info); extern void issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli); @@ -227,7 +228,9 @@ extern XLogRecPtr GetFakeLSNForUnloggedRel(void); extern Size XLOGShmemSize(void); extern void XLOGShmemInit(void); extern void BootStrapXLOG(void); +extern void InitializeWalConsistencyChecking(void); extern void LocalProcessControlFile(bool reset); +extern WalLevel GetActiveWalLevelOnStandby(void); extern void StartupXLOG(void); extern void ShutdownXLOG(int code, Datum arg); extern void CreateCheckPoint(int flags); @@ -245,9 +248,6 @@ extern XLogRecPtr GetLastImportantRecPtr(void); extern void SetWalWriterSleeping(bool sleeping); -extern void assign_max_wal_size(int newval, void *extra); -extern void assign_checkpoint_completion_target(double newval, void *extra); - /* * Routines used by xlogrecovery.c to call back into xlog.c during recovery. */ @@ -279,11 +279,10 @@ typedef enum SessionBackupState SESSION_BACKUP_RUNNING, } SessionBackupState; -extern XLogRecPtr do_pg_backup_start(const char *backupidstr, bool fast, - TimeLineID *starttli_p, StringInfo labelfile, - List **tablespaces, StringInfo tblspcmapfile); -extern XLogRecPtr do_pg_backup_stop(char *labelfile, bool waitforarchive, - TimeLineID *stoptli_p); +extern void do_pg_backup_start(const char *backupidstr, bool fast, + List **tablespaces, BackupState *state, + StringInfo tblspcmapfile); +extern void do_pg_backup_stop(BackupState *state, bool waitforarchive); extern void do_pg_abort_backup(int code, Datum arg); extern void register_persistent_abort_backup_handler(void); extern SessionBackupState get_backup_status(void); diff --git a/src/postgres/include/access/xlog_internal.h b/src/postgres/include/access/xlog_internal.h index fae0bef8..b0fd338a 100644 --- a/src/postgres/include/access/xlog_internal.h +++ b/src/postgres/include/access/xlog_internal.h @@ -11,7 +11,7 @@ * Note: This file must be includable in both frontend and backend contexts, * to allow stand-alone tools like pg_receivewal to deal with WAL files. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xlog_internal.h @@ -25,13 +25,13 @@ #include "lib/stringinfo.h" #include "pgtime.h" #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" /* * Each page of XLOG file has a header like this: */ -#define XLOG_PAGE_MAGIC 0xD110 /* can be used as WAL version indicator */ +#define XLOG_PAGE_MAGIC 0xD113 /* can be used as WAL version indicator */ typedef struct XLogPageHeaderData { @@ -159,74 +159,112 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; #define XLOG_FNAME_LEN 24 /* - * Generate a WAL segment file name. Do not use this macro in a helper + * Generate a WAL segment file name. Do not use this function in a helper * function allocating the result generated. */ -#define XLogFileName(fname, tli, logSegNo, wal_segsz_bytes) \ - snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, \ - (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes))) +static inline void +XLogFileName(char *fname, TimeLineID tli, XLogSegNo logSegNo, int wal_segsz_bytes) +{ + snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, + (uint32) (logSegNo / XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (logSegNo % XLogSegmentsPerXLogId(wal_segsz_bytes))); +} -#define XLogFileNameById(fname, tli, log, seg) \ - snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg) +static inline void +XLogFileNameById(char *fname, TimeLineID tli, uint32 log, uint32 seg) +{ + snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg); +} -#define IsXLogFileName(fname) \ - (strlen(fname) == XLOG_FNAME_LEN && \ - strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN) +static inline bool +IsXLogFileName(const char *fname) +{ + return (strlen(fname) == XLOG_FNAME_LEN && \ + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN); +} /* * XLOG segment with .partial suffix. Used by pg_receivewal and at end of * archive recovery, when we want to archive a WAL segment but it might not * be complete yet. */ -#define IsPartialXLogFileName(fname) \ - (strlen(fname) == XLOG_FNAME_LEN + strlen(".partial") && \ - strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && \ - strcmp((fname) + XLOG_FNAME_LEN, ".partial") == 0) - -#define XLogFromFileName(fname, tli, logSegNo, wal_segsz_bytes) \ - do { \ - uint32 log; \ - uint32 seg; \ - sscanf(fname, "%08X%08X%08X", tli, &log, &seg); \ - *logSegNo = (uint64) log * XLogSegmentsPerXLogId(wal_segsz_bytes) + seg; \ - } while (0) - -#define XLogFilePath(path, tli, logSegNo, wal_segsz_bytes) \ - snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X", tli, \ - (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes))) - -#define TLHistoryFileName(fname, tli) \ - snprintf(fname, MAXFNAMELEN, "%08X.history", tli) - -#define IsTLHistoryFileName(fname) \ - (strlen(fname) == 8 + strlen(".history") && \ - strspn(fname, "0123456789ABCDEF") == 8 && \ - strcmp((fname) + 8, ".history") == 0) - -#define TLHistoryFilePath(path, tli) \ - snprintf(path, MAXPGPATH, XLOGDIR "/%08X.history", tli) - -#define StatusFilePath(path, xlog, suffix) \ - snprintf(path, MAXPGPATH, XLOGDIR "/archive_status/%s%s", xlog, suffix) - -#define BackupHistoryFileName(fname, tli, logSegNo, startpoint, wal_segsz_bytes) \ - snprintf(fname, MAXFNAMELEN, "%08X%08X%08X.%08X.backup", tli, \ - (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) (XLogSegmentOffset(startpoint, wal_segsz_bytes))) - -#define IsBackupHistoryFileName(fname) \ - (strlen(fname) > XLOG_FNAME_LEN && \ - strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && \ - strcmp((fname) + strlen(fname) - strlen(".backup"), ".backup") == 0) - -#define BackupHistoryFilePath(path, tli, logSegNo, startpoint, wal_segsz_bytes) \ - snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X.%08X.backup", tli, \ - (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)), \ - (uint32) (XLogSegmentOffset((startpoint), wal_segsz_bytes))) +static inline bool +IsPartialXLogFileName(const char *fname) +{ + return (strlen(fname) == XLOG_FNAME_LEN + strlen(".partial") && + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && + strcmp(fname + XLOG_FNAME_LEN, ".partial") == 0); +} + +static inline void +XLogFromFileName(const char *fname, TimeLineID *tli, XLogSegNo *logSegNo, int wal_segsz_bytes) +{ + uint32 log; + uint32 seg; + + sscanf(fname, "%08X%08X%08X", tli, &log, &seg); + *logSegNo = (uint64) log * XLogSegmentsPerXLogId(wal_segsz_bytes) + seg; +} + +static inline void +XLogFilePath(char *path, TimeLineID tli, XLogSegNo logSegNo, int wal_segsz_bytes) +{ + snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X", tli, + (uint32) (logSegNo / XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (logSegNo % XLogSegmentsPerXLogId(wal_segsz_bytes))); +} + +static inline void +TLHistoryFileName(char *fname, TimeLineID tli) +{ + snprintf(fname, MAXFNAMELEN, "%08X.history", tli); +} + +static inline bool +IsTLHistoryFileName(const char *fname) +{ + return (strlen(fname) == 8 + strlen(".history") && + strspn(fname, "0123456789ABCDEF") == 8 && + strcmp(fname + 8, ".history") == 0); +} + +static inline void +TLHistoryFilePath(char *path, TimeLineID tli) +{ + snprintf(path, MAXPGPATH, XLOGDIR "/%08X.history", tli); +} + +static inline void +StatusFilePath(char *path, const char *xlog, const char *suffix) +{ + snprintf(path, MAXPGPATH, XLOGDIR "/archive_status/%s%s", xlog, suffix); +} + +static inline void +BackupHistoryFileName(char *fname, TimeLineID tli, XLogSegNo logSegNo, XLogRecPtr startpoint, int wal_segsz_bytes) +{ + snprintf(fname, MAXFNAMELEN, "%08X%08X%08X.%08X.backup", tli, + (uint32) (logSegNo / XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (logSegNo % XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (XLogSegmentOffset(startpoint, wal_segsz_bytes))); +} + +static inline bool +IsBackupHistoryFileName(const char *fname) +{ + return (strlen(fname) > XLOG_FNAME_LEN && + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && + strcmp(fname + strlen(fname) - strlen(".backup"), ".backup") == 0); +} + +static inline void +BackupHistoryFilePath(char *path, TimeLineID tli, XLogSegNo logSegNo, XLogRecPtr startpoint, int wal_segsz_bytes) +{ + snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X.%08X.backup", tli, + (uint32) (logSegNo / XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (logSegNo % XLogSegmentsPerXLogId(wal_segsz_bytes)), + (uint32) (XLogSegmentOffset((startpoint), wal_segsz_bytes))); +} /* * Information logged when we detect a change in one of the parameters @@ -324,7 +362,7 @@ extern PGDLLIMPORT RmgrData RmgrTable[]; extern void RmgrStartup(void); extern void RmgrCleanup(void); extern void RmgrNotFound(RmgrId rmid); -extern void RegisterCustomRmgr(RmgrId rmid, RmgrData *rmgr); +extern void RegisterCustomRmgr(RmgrId rmid, const RmgrData *rmgr); #ifndef FRONTEND static inline bool diff --git a/src/postgres/include/access/xlogbackup.h b/src/postgres/include/access/xlogbackup.h new file mode 100644 index 00000000..16113581 --- /dev/null +++ b/src/postgres/include/access/xlogbackup.h @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------------- + * + * xlogbackup.h + * Definitions for internals of base backups. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/include/access/xlogbackup.h + *------------------------------------------------------------------------- + */ + +#ifndef XLOG_BACKUP_H +#define XLOG_BACKUP_H + +#include "access/xlogdefs.h" +#include "pgtime.h" + +/* Structure to hold backup state. */ +typedef struct BackupState +{ + /* Fields saved at backup start */ + /* Backup label name one extra byte for null-termination */ + char name[MAXPGPATH + 1]; + XLogRecPtr startpoint; /* backup start WAL location */ + TimeLineID starttli; /* backup start TLI */ + XLogRecPtr checkpointloc; /* last checkpoint location */ + pg_time_t starttime; /* backup start time */ + bool started_in_recovery; /* backup started in recovery? */ + + /* Fields saved at the end of backup */ + XLogRecPtr stoppoint; /* backup stop WAL location */ + TimeLineID stoptli; /* backup stop TLI */ + pg_time_t stoptime; /* backup stop time */ +} BackupState; + +extern char *build_backup_content(BackupState *state, + bool ishistoryfile); + +#endif /* XLOG_BACKUP_H */ diff --git a/src/postgres/include/access/xlogdefs.h b/src/postgres/include/access/xlogdefs.h index a47e3eeb..fe794c77 100644 --- a/src/postgres/include/access/xlogdefs.h +++ b/src/postgres/include/access/xlogdefs.h @@ -4,7 +4,7 @@ * Postgres write-ahead log manager record pointer and * timeline number definitions * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xlogdefs.h @@ -67,35 +67,16 @@ typedef uint16 RepOriginId; /* * This chunk of hackery attempts to determine which file sync methods * are available on the current platform, and to choose an appropriate - * default method. We assume that fsync() is always available, and that - * configure determined whether fdatasync() is. + * default method. + * + * Note that we define our own O_DSYNC on Windows, but not O_SYNC. */ -#if defined(O_SYNC) -#define OPEN_SYNC_FLAG O_SYNC -#elif defined(O_FSYNC) -#define OPEN_SYNC_FLAG O_FSYNC -#endif - -#if defined(O_DSYNC) -#if defined(OPEN_SYNC_FLAG) -/* O_DSYNC is distinct? */ -#if O_DSYNC != OPEN_SYNC_FLAG -#define OPEN_DATASYNC_FLAG O_DSYNC -#endif -#else /* !defined(OPEN_SYNC_FLAG) */ -/* Win32 only has O_DSYNC */ -#define OPEN_DATASYNC_FLAG O_DSYNC -#endif -#endif - #if defined(PLATFORM_DEFAULT_SYNC_METHOD) #define DEFAULT_SYNC_METHOD PLATFORM_DEFAULT_SYNC_METHOD -#elif defined(OPEN_DATASYNC_FLAG) +#elif defined(O_DSYNC) && (!defined(O_SYNC) || O_DSYNC != O_SYNC) #define DEFAULT_SYNC_METHOD SYNC_METHOD_OPEN_DSYNC -#elif defined(HAVE_FDATASYNC) -#define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC #else -#define DEFAULT_SYNC_METHOD SYNC_METHOD_FSYNC +#define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC #endif #endif /* XLOG_DEFS_H */ diff --git a/src/postgres/include/access/xlogprefetcher.h b/src/postgres/include/access/xlogprefetcher.h index fdd67fce..7dd7f20a 100644 --- a/src/postgres/include/access/xlogprefetcher.h +++ b/src/postgres/include/access/xlogprefetcher.h @@ -3,7 +3,7 @@ * xlogprefetcher.h * Declarations for the recovery prefetching module. * - * Portions Copyright (c) 2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2022-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/postgres/include/access/xlogreader.h b/src/postgres/include/access/xlogreader.h index 9e63162e..da32c7db 100644 --- a/src/postgres/include/access/xlogreader.h +++ b/src/postgres/include/access/xlogreader.h @@ -3,7 +3,7 @@ * xlogreader.h * Definitions for the generic XLog reading facility * - * Portions Copyright (c) 2013-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2013-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/include/access/xlogreader.h @@ -122,7 +122,7 @@ typedef struct bool in_use; /* Identify the block this refers to */ - RelFileNode rnode; + RelFileLocator rlocator; ForkNumber forknum; BlockNumber blkno; @@ -332,7 +332,6 @@ extern XLogReaderState *XLogReaderAllocate(int wal_segment_size, const char *waldir, XLogReaderRoutine *routine, void *private_data); -extern XLogReaderRoutine *LocalXLogReaderRoutine(void); /* Free an XLogReader */ extern void XLogReaderFree(XLogReaderState *state); @@ -400,7 +399,7 @@ extern bool DecodeXLogRecord(XLogReaderState *state, DecodedXLogRecord *decoded, XLogRecord *record, XLogRecPtr lsn, - char **errmsg); + char **errormsg); /* * Macros that provide access to parts of the record most recently returned by @@ -425,6 +424,8 @@ extern bool DecodeXLogRecord(XLogReaderState *state, ((decoder)->record->blocks[block_id].has_image) #define XLogRecBlockImageApply(decoder, block_id) \ ((decoder)->record->blocks[block_id].apply_image) +#define XLogRecHasBlockData(decoder, block_id) \ + ((decoder)->record->blocks[block_id].has_data) #ifndef FRONTEND extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record); @@ -433,10 +434,10 @@ extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record); extern bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page); extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len); extern void XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, - RelFileNode *rnode, ForkNumber *forknum, + RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum); extern bool XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id, - RelFileNode *rnode, ForkNumber *forknum, + RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum, Buffer *prefetch_buffer); diff --git a/src/postgres/include/access/xlogrecord.h b/src/postgres/include/access/xlogrecord.h index 052ac681..f355e08e 100644 --- a/src/postgres/include/access/xlogrecord.h +++ b/src/postgres/include/access/xlogrecord.h @@ -3,7 +3,7 @@ * * Definitions for the WAL record format. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xlogrecord.h @@ -15,7 +15,7 @@ #include "access/xlogdefs.h" #include "port/pg_crc32c.h" #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" /* * The overall layout of an XLOG record is: @@ -62,6 +62,17 @@ typedef struct XLogRecord #define XLR_INFO_MASK 0x0F #define XLR_RMGR_INFO_MASK 0xF0 +/* + * XLogReader needs to allocate all the data of a WAL record in a single + * chunk. This means that a single XLogRecord cannot exceed MaxAllocSize + * in length if we ignore any allocation overhead of the XLogReader. + * + * To accommodate some overhead, this value allows for 4M of allocation + * overhead, that should be plenty enough for what + * DecodeXLogRecordRequiredSpace() expects as extra. + */ +#define XLogRecordMaxSize (1020 * 1024 * 1024) + /* * If a WAL record modifies any relation files, in ways not covered by the * usual block references, this flag is set. This is not used for anything @@ -97,7 +108,7 @@ typedef struct XLogRecordBlockHeader * image) */ /* If BKPBLOCK_HAS_IMAGE, an XLogRecordBlockImageHeader struct follows */ - /* If BKPBLOCK_SAME_REL is not set, a RelFileNode follows */ + /* If BKPBLOCK_SAME_REL is not set, a RelFileLocator follows */ /* BlockNumber follows */ } XLogRecordBlockHeader; @@ -175,7 +186,7 @@ typedef struct XLogRecordBlockCompressHeader (SizeOfXLogRecordBlockHeader + \ SizeOfXLogRecordBlockImageHeader + \ SizeOfXLogRecordBlockCompressHeader + \ - sizeof(RelFileNode) + \ + sizeof(RelFileLocator) + \ sizeof(BlockNumber)) /* @@ -187,7 +198,8 @@ typedef struct XLogRecordBlockCompressHeader #define BKPBLOCK_HAS_IMAGE 0x10 /* block data is an XLogRecordBlockImage */ #define BKPBLOCK_HAS_DATA 0x20 #define BKPBLOCK_WILL_INIT 0x40 /* redo will re-init the page */ -#define BKPBLOCK_SAME_REL 0x80 /* RelFileNode omitted, same as previous */ +#define BKPBLOCK_SAME_REL 0x80 /* RelFileLocator omitted, same as + * previous */ /* * XLogRecordDataHeaderShort/Long are used for the "main data" portion of diff --git a/src/postgres/include/access/xlogrecovery.h b/src/postgres/include/access/xlogrecovery.h index 0aa85d90..47c29350 100644 --- a/src/postgres/include/access/xlogrecovery.h +++ b/src/postgres/include/access/xlogrecovery.h @@ -3,7 +3,7 @@ * * Functions for WAL recovery and standby mode * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/xlogrecovery.h @@ -65,7 +65,6 @@ extern PGDLLIMPORT TimestampTz recoveryTargetTime; extern PGDLLIMPORT const char *recoveryTargetName; extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN; extern PGDLLIMPORT RecoveryTargetType recoveryTarget; -extern PGDLLIMPORT char *PromoteTriggerFile; extern PGDLLIMPORT bool wal_receiver_create_temp_slot; extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal; extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested; @@ -80,7 +79,9 @@ extern PGDLLIMPORT bool StandbyMode; extern Size XLogRecoveryShmemSize(void); extern void XLogRecoveryShmemInit(void); -extern void InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdownPtr, bool *haveBackupLabel, bool *haveTblspcMap); +extern void InitWalRecovery(ControlFileData *ControlFile, + bool *wasShutdown_ptr, bool *haveBackupLabel_ptr, + bool *haveTblspcMap_ptr); extern void PerformWalRecovery(void); /* diff --git a/src/postgres/include/archive/archive_module.h b/src/postgres/include/archive/archive_module.h new file mode 100644 index 00000000..679ce5a6 --- /dev/null +++ b/src/postgres/include/archive/archive_module.h @@ -0,0 +1,59 @@ +/*------------------------------------------------------------------------- + * + * archive_module.h + * Exports for archive modules. + * + * Copyright (c) 2022-2023, PostgreSQL Global Development Group + * + * src/include/archive/archive_module.h + * + *------------------------------------------------------------------------- + */ +#ifndef _ARCHIVE_MODULE_H +#define _ARCHIVE_MODULE_H + +/* + * The value of the archive_library GUC. + */ +extern PGDLLIMPORT char *XLogArchiveLibrary; + +typedef struct ArchiveModuleState +{ + /* + * Private data pointer for use by an archive module. This can be used to + * store state for the module that will be passed to each of its + * callbacks. + */ + void *private_data; +} ArchiveModuleState; + +/* + * Archive module callbacks + * + * These callback functions should be defined by archive libraries and returned + * via _PG_archive_module_init(). ArchiveFileCB is the only required callback. + * For more information about the purpose of each callback, refer to the + * archive modules documentation. + */ +typedef void (*ArchiveStartupCB) (ArchiveModuleState *state); +typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state); +typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path); +typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state); + +typedef struct ArchiveModuleCallbacks +{ + ArchiveStartupCB startup_cb; + ArchiveCheckConfiguredCB check_configured_cb; + ArchiveFileCB archive_file_cb; + ArchiveShutdownCB shutdown_cb; +} ArchiveModuleCallbacks; + +/* + * Type of the shared library symbol _PG_archive_module_init that is looked + * up when loading an archive library. + */ +typedef const ArchiveModuleCallbacks *(*ArchiveModuleInit) (void); + +extern PGDLLEXPORT const ArchiveModuleCallbacks *_PG_archive_module_init(void); + +#endif /* _ARCHIVE_MODULE_H */ diff --git a/src/postgres/include/c.h b/src/postgres/include/c.h index e2f60807..549bf067 100644 --- a/src/postgres/include/c.h +++ b/src/postgres/include/c.h @@ -9,7 +9,7 @@ * polluting the namespace with lots of stuff... * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/c.h @@ -30,7 +30,7 @@ * 2) bool, true, false * 3) standard system types * 4) IsValid macros for system types - * 5) offsetof, lengthof, alignment + * 5) lengthof, alignment * 6) assertions * 7) widely useful macros * 8) random stuff @@ -144,6 +144,17 @@ #define pg_attribute_no_sanitize_alignment() #endif +/* + * pg_attribute_nonnull means the compiler should warn if the function is + * called with the listed arguments set to NULL. If no arguments are + * listed, the compiler should warn if any pointer arguments are set to NULL. + */ +#if __has_attribute (nonnull) +#define pg_attribute_nonnull(...) __attribute__((nonnull(__VA_ARGS__))) +#else +#define pg_attribute_nonnull(...) +#endif + /* * Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only * used in assert-enabled builds, to avoid compiler warnings about unused @@ -170,6 +181,17 @@ #define pg_attribute_noreturn() __attribute__((noreturn)) #define pg_attribute_packed() __attribute__((packed)) #define HAVE_PG_ATTRIBUTE_NORETURN 1 +#elif defined(_MSC_VER) +/* + * MSVC supports aligned. noreturn is also possible but in MSVC it is + * declared before the definition while pg_attribute_noreturn() macro + * is currently used after the definition. + * + * Packing is also possible but only by wrapping the entire struct definition + * which doesn't fit into our current macro declarations. + */ +#define pg_attribute_aligned(a) __declspec(align(a)) +#define pg_attribute_noreturn() #else /* * NB: aligned and packed are not given default definitions because they @@ -302,7 +324,25 @@ * pretty trivial: VA_ARGS_NARGS_() returns its 64th argument, and we set up * the call so that that is the appropriate one of the list of constants. * This idea is due to Laurent Deniau. + * + * MSVC has an implementation of __VA_ARGS__ that doesn't conform to the + * standard unless you use the /Zc:preprocessor compiler flag, but that + * isn't available before Visual Studio 2019. For now, use a different + * definition that also works on older compilers. */ +#ifdef _MSC_VER +#define EXPAND(args) args +#define VA_ARGS_NARGS(...) \ + VA_ARGS_NARGS_ EXPAND((__VA_ARGS__, \ + 63,62,61,60, \ + 59,58,57,56,55,54,53,52,51,50, \ + 49,48,47,46,45,44,43,42,41,40, \ + 39,38,37,36,35,34,33,32,31,30, \ + 29,28,27,26,25,24,23,22,21,20, \ + 19,18,17,16,15,14,13,12,11,10, \ + 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) +#else + #define VA_ARGS_NARGS(...) \ VA_ARGS_NARGS_(__VA_ARGS__, \ 63,62,61,60, \ @@ -312,6 +352,8 @@ 29,28,27,26,25,24,23,22,21,20, \ 19,18,17,16,15,14,13,12,11,10, \ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#endif + #define VA_ARGS_NARGS_( \ _01,_02,_03,_04,_05,_06,_07,_08,_09,_10, \ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ @@ -322,16 +364,6 @@ _61,_62,_63, N, ...) \ (N) -/* - * dummyret is used to set return values in macros that use ?: to make - * assignments. gcc wants these to be void, other compilers like char - */ -#ifdef __GNUC__ /* GNU cc */ -#define dummyret void -#else -#define dummyret char -#endif - /* * Generic function pointer. This can be used in the rare cases where it's * necessary to cast a function pointer to a seemingly incompatible function @@ -349,15 +381,32 @@ typedef void (*pg_funcptr_t) (void); */ #define FLEXIBLE_ARRAY_MEMBER /* empty */ -/* Which __func__ symbol do we have, if any? */ -#ifdef HAVE_FUNCNAME__FUNC -#define PG_FUNCNAME_MACRO __func__ -#else -#ifdef HAVE_FUNCNAME__FUNCTION -#define PG_FUNCNAME_MACRO __FUNCTION__ -#else -#define PG_FUNCNAME_MACRO NULL -#endif +/* + * Does the compiler support #pragma GCC system_header? We optionally use it + * to avoid warnings that we can't fix (e.g. in the perl headers). + * See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html + * + * Headers for which we do not want to show compiler warnings can, + * conditionally, use #pragma GCC system_header to avoid warnings. Obviously + * this should only be used for external headers over which we do not have + * control. + * + * Support for the pragma is tested here, instead of during configure, as gcc + * also warns about the pragma being used in a .c file. It's surprisingly hard + * to get autoconf to use .h as the file-ending. Looks like gcc has + * implemented the pragma since the 2000, so this test should suffice. + * + * + * Alternatively, we could add the include paths for problematic headers with + * -isystem, but that is a larger hammer and is harder to search for. + * + * A more granular alternative would be to use #pragma GCC diagnostic + * push/ignored/pop, but gcc warns about unknown warnings being ignored, so + * every to-be-ignored-temporarily compiler warning would require its own + * pg_config.h symbol and #ifdef. + */ +#ifdef __GNUC__ +#define HAVE_PRAGMA_GCC_SYSTEM_HEADER 1 #endif @@ -713,20 +762,9 @@ typedef NameData *Name; /* ---------------------------------------------------------------- - * Section 5: offsetof, lengthof, alignment + * Section 5: lengthof, alignment * ---------------------------------------------------------------- */ -/* - * offsetof - * Offset of a structure/union field within that structure/union. - * - * XXX This is supposed to be part of stddef.h, but isn't on - * some systems (like SunOS 4). - */ -#ifndef offsetof -#define offsetof(type, field) ((long) &((type *)0)->field) -#endif /* offsetof */ - /* * lengthof * Number of elements in an array. @@ -803,80 +841,42 @@ typedef NameData *Name; #define Assert(condition) ((void)true) #define AssertMacro(condition) ((void)true) -#define AssertArg(condition) ((void)true) -#define AssertState(condition) ((void)true) -#define AssertPointerAlignment(ptr, bndr) ((void)true) -#define Trap(condition, errorType) ((void)true) -#define TrapMacro(condition, errorType) (true) #elif defined(FRONTEND) #include #define Assert(p) assert(p) #define AssertMacro(p) ((void) assert(p)) -#define AssertArg(condition) assert(condition) -#define AssertState(condition) assert(condition) -#define AssertPointerAlignment(ptr, bndr) ((void)true) #else /* USE_ASSERT_CHECKING && !FRONTEND */ /* - * Trap - * Generates an exception if the given condition is true. + * Assert + * Generates a fatal exception if the given condition is false. */ -#define Trap(condition, errorType) \ +#define Assert(condition) \ do { \ - if (condition) \ - ExceptionalCondition(#condition, (errorType), \ - __FILE__, __LINE__); \ + if (!(condition)) \ + ExceptionalCondition(#condition, __FILE__, __LINE__); \ } while (0) /* - * TrapMacro is the same as Trap but it's intended for use in macros: + * AssertMacro is the same as Assert but it's suitable for use in + * expression-like macros, for example: * * #define foo(x) (AssertMacro(x != 0), bar(x)) - * - * Isn't CPP fun? */ -#define TrapMacro(condition, errorType) \ - ((bool) (! (condition) || \ - (ExceptionalCondition(#condition, (errorType), \ - __FILE__, __LINE__), 0))) - -#define Assert(condition) \ - do { \ - if (!(condition)) \ - ExceptionalCondition(#condition, "FailedAssertion", \ - __FILE__, __LINE__); \ - } while (0) - #define AssertMacro(condition) \ ((void) ((condition) || \ - (ExceptionalCondition(#condition, "FailedAssertion", \ - __FILE__, __LINE__), 0))) + (ExceptionalCondition(#condition, __FILE__, __LINE__), 0))) -#define AssertArg(condition) \ - do { \ - if (!(condition)) \ - ExceptionalCondition(#condition, "BadArgument", \ - __FILE__, __LINE__); \ - } while (0) - -#define AssertState(condition) \ - do { \ - if (!(condition)) \ - ExceptionalCondition(#condition, "BadState", \ - __FILE__, __LINE__); \ - } while (0) +#endif /* USE_ASSERT_CHECKING && !FRONTEND */ /* * Check that `ptr' is `bndr' aligned. */ #define AssertPointerAlignment(ptr, bndr) \ - Trap(TYPEALIGN(bndr, (uintptr_t)(ptr)) != (uintptr_t)(ptr), \ - "UnalignedPointer") - -#endif /* USE_ASSERT_CHECKING && !FRONTEND */ + Assert(TYPEALIGN(bndr, (uintptr_t)(ptr)) == (uintptr_t)(ptr)) /* * ExceptionalCondition is compiled into the backend whether or not @@ -886,7 +886,6 @@ typedef NameData *Name; */ #ifndef FRONTEND extern void ExceptionalCondition(const char *conditionName, - const char *errorType, const char *fileName, int lineNumber) pg_attribute_noreturn(); #endif @@ -896,47 +895,50 @@ extern void ExceptionalCondition(const char *conditionName, * If the "condition" (a compile-time-constant expression) evaluates to false, * throw a compile error using the "errmessage" (a string literal). * - * gcc 4.6 and up supports _Static_assert(), but there are bizarre syntactic - * placement restrictions. Macros StaticAssertStmt() and StaticAssertExpr() + * C11 has _Static_assert(), and most C99 compilers already support that. For + * portability, we wrap it into StaticAssertDecl(). _Static_assert() is a + * "declaration", and so it must be placed where for example a variable + * declaration would be valid. As long as we compile with + * -Wno-declaration-after-statement, that also means it cannot be placed after + * statements in a function. Macros StaticAssertStmt() and StaticAssertExpr() * make it safe to use as a statement or in an expression, respectively. - * The macro StaticAssertDecl() is suitable for use at file scope (outside of - * any function). * - * Otherwise we fall back on a kluge that assumes the compiler will complain - * about a negative width for a struct bit-field. This will not include a - * helpful error message, but it beats not getting an error at all. + * For compilers without _Static_assert(), we fall back on a kluge that + * assumes the compiler will complain about a negative width for a struct + * bit-field. This will not include a helpful error message, but it beats not + * getting an error at all. */ #ifndef __cplusplus #ifdef HAVE__STATIC_ASSERT +#define StaticAssertDecl(condition, errmessage) \ + _Static_assert(condition, errmessage) #define StaticAssertStmt(condition, errmessage) \ do { _Static_assert(condition, errmessage); } while(0) #define StaticAssertExpr(condition, errmessage) \ ((void) ({ StaticAssertStmt(condition, errmessage); true; })) -#define StaticAssertDecl(condition, errmessage) \ - _Static_assert(condition, errmessage) #else /* !HAVE__STATIC_ASSERT */ +#define StaticAssertDecl(condition, errmessage) \ + extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1]) #define StaticAssertStmt(condition, errmessage) \ ((void) sizeof(struct { int static_assert_failure : (condition) ? 1 : -1; })) #define StaticAssertExpr(condition, errmessage) \ StaticAssertStmt(condition, errmessage) -#define StaticAssertDecl(condition, errmessage) \ - extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1]) #endif /* HAVE__STATIC_ASSERT */ #else /* C++ */ #if defined(__cpp_static_assert) && __cpp_static_assert >= 200410 +#define StaticAssertDecl(condition, errmessage) \ + static_assert(condition, errmessage) #define StaticAssertStmt(condition, errmessage) \ static_assert(condition, errmessage) #define StaticAssertExpr(condition, errmessage) \ ({ static_assert(condition, errmessage); }) -#define StaticAssertDecl(condition, errmessage) \ - static_assert(condition, errmessage) #else /* !__cpp_static_assert */ +#define StaticAssertDecl(condition, errmessage) \ + extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1]) #define StaticAssertStmt(condition, errmessage) \ do { struct static_assert_struct { int static_assert_failure : (condition) ? 1 : -1; }; } while(0) #define StaticAssertExpr(condition, errmessage) \ ((void) ({ StaticAssertStmt(condition, errmessage); })) -#define StaticAssertDecl(condition, errmessage) \ - extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1]) #endif /* __cpp_static_assert */ #endif /* C++ */ @@ -985,12 +987,6 @@ extern void ExceptionalCondition(const char *conditionName, */ #define Min(x, y) ((x) < (y) ? (x) : (y)) -/* - * Abs - * Return the absolute value of the argument. - */ -#define Abs(x) ((x) >= 0 ? (x) : -(x)) - /* Get a bit mask of the bits set in non-long aligned addresses */ #define LONG_ALIGN_MASK (sizeof(long) - 1) @@ -1113,10 +1109,6 @@ extern void ExceptionalCondition(const char *conditionName, * ---------------------------------------------------------------- */ -#ifdef HAVE_STRUCT_SOCKADDR_UN -#define HAVE_UNIX_SOCKETS 1 -#endif - /* * Invert the sign of a qsort-style comparison result, ie, exchange negative * and positive integer values, being careful not to get the wrong answer @@ -1127,14 +1119,11 @@ extern void ExceptionalCondition(const char *conditionName, /* * Use this, not "char buf[BLCKSZ]", to declare a field or local variable - * holding a page buffer, if that page might be accessed as a page and not - * just a string of bytes. Otherwise the variable might be under-aligned, - * causing problems on alignment-picky hardware. (In some places, we use - * this to declare buffers even though we only pass them to read() and - * write(), because copying to/from aligned buffers is usually faster than - * using unaligned buffers.) We include both "double" and "int64" in the - * union to ensure that the compiler knows the value must be MAXALIGN'ed - * (cf. configure's computation of MAXIMUM_ALIGNOF). + * holding a page buffer, if that page might be accessed as a page. Otherwise + * the variable might be under-aligned, causing problems on alignment-picky + * hardware. We include both "double" and "int64" in the union to ensure that + * the compiler knows the value must be MAXALIGN'ed (cf. configure's + * computation of MAXIMUM_ALIGNOF). */ typedef union PGAlignedBlock { @@ -1143,9 +1132,30 @@ typedef union PGAlignedBlock int64 force_align_i64; } PGAlignedBlock; +/* + * Use this to declare a field or local variable holding a page buffer, if that + * page might be accessed as a page or passed to an SMgr I/O function. If + * allocating using the MemoryContext API, the aligned allocation functions + * should be used with PG_IO_ALIGN_SIZE. This alignment may be more efficient + * for I/O in general, but may be strictly required on some platforms when + * using direct I/O. + */ +typedef union PGIOAlignedBlock +{ +#ifdef pg_attribute_aligned + pg_attribute_aligned(PG_IO_ALIGN_SIZE) +#endif + char data[BLCKSZ]; + double force_align_d; + int64 force_align_i64; +} PGIOAlignedBlock; + /* Same, but for an XLOG_BLCKSZ-sized buffer */ typedef union PGAlignedXLogBlock { +#ifdef pg_attribute_aligned + pg_attribute_aligned(PG_IO_ALIGN_SIZE) +#endif char data[XLOG_BLCKSZ]; double force_align_d; int64 force_align_i64; @@ -1279,39 +1289,10 @@ typedef union PGAlignedXLogBlock * standard C library. */ -#if defined(HAVE_FDATASYNC) && !HAVE_DECL_FDATASYNC +#if !HAVE_DECL_FDATASYNC extern int fdatasync(int fildes); #endif -/* Older platforms may provide strto[u]ll functionality under other names */ -#if !defined(HAVE_STRTOLL) && defined(HAVE___STRTOLL) -#define strtoll __strtoll -#define HAVE_STRTOLL 1 -#endif - -#if !defined(HAVE_STRTOLL) && defined(HAVE_STRTOQ) -#define strtoll strtoq -#define HAVE_STRTOLL 1 -#endif - -#if !defined(HAVE_STRTOULL) && defined(HAVE___STRTOULL) -#define strtoull __strtoull -#define HAVE_STRTOULL 1 -#endif - -#if !defined(HAVE_STRTOULL) && defined(HAVE_STRTOUQ) -#define strtoull strtouq -#define HAVE_STRTOULL 1 -#endif - -#if defined(HAVE_STRTOLL) && !HAVE_DECL_STRTOLL -extern long long strtoll(const char *str, char **endptr, int base); -#endif - -#if defined(HAVE_STRTOULL) && !HAVE_DECL_STRTOULL -extern unsigned long long strtoull(const char *str, char **endptr, int base); -#endif - /* * Thin wrappers that convert strings to exactly 64-bit integers, matching our * definition of int64. (For the naming, compare that POSIX has @@ -1325,6 +1306,15 @@ extern unsigned long long strtoull(const char *str, char **endptr, int base); #define strtou64(str, endptr, base) ((uint64) strtoull(str, endptr, base)) #endif +/* + * Similarly, wrappers around labs()/llabs() matching our int64. + */ +#ifdef HAVE_LONG_INT_64 +#define i64abs(i) labs(i) +#else +#define i64abs(i) llabs(i) +#endif + /* * Use "extern PGDLLIMPORT ..." to declare variables that are defined * in the core backend and need to be accessible by loadable modules. @@ -1336,14 +1326,19 @@ extern unsigned long long strtoull(const char *str, char **endptr, int base); /* * Use "extern PGDLLEXPORT ..." to declare functions that are defined in - * loadable modules and need to be callable by the core backend. (Usually, - * this is not necessary because our build process automatically exports - * such symbols, but sometimes manual marking is required.) - * No special marking is required on most ports. + * loadable modules and need to be callable by the core backend or other + * loadable modules. + * If the compiler knows __attribute__((visibility("*"))), we use that, + * unless we already have a platform-specific definition. Otherwise, + * no special marking is required. */ #ifndef PGDLLEXPORT +#ifdef HAVE_VISIBILITY_ATTRIBUTE +#define PGDLLEXPORT __attribute__((visibility("default"))) +#else #define PGDLLEXPORT #endif +#endif /* * The following is used as the arg list for signal handlers. Any ports @@ -1376,13 +1371,6 @@ typedef intptr_t sigjmp_buf[5]; #endif /* __MINGW64__ */ #endif /* WIN32 */ -/* EXEC_BACKEND defines */ -#ifdef EXEC_BACKEND -#define NON_EXEC_STATIC -#else -#define NON_EXEC_STATIC static -#endif - /* /port compatibility functions */ #include "port.h" diff --git a/src/postgres/include/catalog/catalog.h b/src/postgres/include/catalog/catalog.h index 60c12153..48b0fdc6 100644 --- a/src/postgres/include/catalog/catalog.h +++ b/src/postgres/include/catalog/catalog.h @@ -4,7 +4,7 @@ * prototypes for functions in backend/catalog/catalog.c * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/catalog.h @@ -38,7 +38,8 @@ extern bool IsPinnedObject(Oid classId, Oid objectId); extern Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn); -extern Oid GetNewRelFileNode(Oid reltablespace, Relation pg_class, - char relpersistence); +extern RelFileNumber GetNewRelFileNumber(Oid reltablespace, + Relation pg_class, + char relpersistence); #endif /* CATALOG_H */ diff --git a/src/postgres/include/catalog/catversion.h b/src/postgres/include/catalog/catversion.h index c616a258..cc1de6e6 100644 --- a/src/postgres/include/catalog/catversion.h +++ b/src/postgres/include/catalog/catversion.h @@ -32,9 +32,13 @@ * include/catalog is the most common kind of initdb-forcing change. * But it could be used to protect any kind of incompatible change in * database contents or layout, such as altering tuple headers. + * Another common reason for a catversion update is a change in parsetree + * external representation, since serialized parsetrees appear in stored + * rules and new-style SQL functions. Almost any change in primnodes.h or + * parsenodes.h will warrant a catversion update. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/catversion.h @@ -53,6 +57,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202209061 +#define CATALOG_VERSION_NO 202307071 #endif diff --git a/src/postgres/include/catalog/dependency.h b/src/postgres/include/catalog/dependency.h index 6684933d..ffd5e9dc 100644 --- a/src/postgres/include/catalog/dependency.h +++ b/src/postgres/include/catalog/dependency.h @@ -4,7 +4,7 @@ * Routines to support inter-object dependencies. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/dependency.h @@ -112,6 +112,7 @@ typedef enum ObjectClass OCLASS_TSTEMPLATE, /* pg_ts_template */ OCLASS_TSCONFIG, /* pg_ts_config */ OCLASS_ROLE, /* pg_authid */ + OCLASS_ROLE_MEMBERSHIP, /* pg_auth_members */ OCLASS_DATABASE, /* pg_database */ OCLASS_TBLSPACE, /* pg_tablespace */ OCLASS_FDW, /* pg_foreign_data_wrapper */ @@ -248,7 +249,7 @@ extern void recordDependencyOnTablespace(Oid classId, Oid objectId, extern void changeDependencyOnTablespace(Oid classId, Oid objectId, Oid newTablespaceId); -extern void updateAclDependencies(Oid classId, Oid objectId, int32 objectSubId, +extern void updateAclDependencies(Oid classId, Oid objectId, int32 objsubId, Oid ownerId, int noldmembers, Oid *oldmembers, int nnewmembers, Oid *newmembers); @@ -262,8 +263,8 @@ extern void copyTemplateDependencies(Oid templateDbId, Oid newDbId); extern void dropDatabaseDependencies(Oid databaseId); -extern void shdepDropOwned(List *relids, DropBehavior behavior); +extern void shdepDropOwned(List *roleids, DropBehavior behavior); -extern void shdepReassignOwned(List *relids, Oid newrole); +extern void shdepReassignOwned(List *roleids, Oid newrole); #endif /* DEPENDENCY_H */ diff --git a/src/postgres/include/catalog/genbki.h b/src/postgres/include/catalog/genbki.h index 992b7842..c42ba0ce 100644 --- a/src/postgres/include/catalog/genbki.h +++ b/src/postgres/include/catalog/genbki.h @@ -9,7 +9,7 @@ * bootstrap file from these header files.) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/genbki.h @@ -71,12 +71,13 @@ * DECLARE_UNIQUE_INDEX_PKEY. ("PKEY" marks the index as being the catalog's * primary key; currently this is only cosmetically different from a regular * unique index. By convention, we usually make a catalog's OID column its - * pkey, if it has one.) The first two arguments are the index's name and - * OID, the rest is much like a standard 'create index' SQL command. + * pkey, if it has one.) * - * For each index, we also provide a #define for its OID. References to - * the index in the C code should always use these #defines, not the actual - * index name (much less the numeric OID). + * The first two arguments are the index's name and OID. The third argument + * is the name of a #define to generate for its OID. References to the index + * in the C code should always use these #defines, not the actual index name + * (much less the numeric OID). The rest is much like a standard 'create + * index' SQL command. * * The macro definitions are just to keep the C compiler from spitting up. */ diff --git a/src/postgres/include/catalog/index.h b/src/postgres/include/catalog/index.h index a1d6e3b6..c8532fb9 100644 --- a/src/postgres/include/catalog/index.h +++ b/src/postgres/include/catalog/index.h @@ -4,7 +4,7 @@ * prototypes for catalog/index.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/index.h @@ -71,7 +71,7 @@ extern Oid index_create(Relation heapRelation, Oid indexRelationId, Oid parentIndexRelid, Oid parentConstraintId, - Oid relFileNode, + RelFileNumber relFileNumber, IndexInfo *indexInfo, List *indexColNames, Oid accessMethodObjectId, @@ -149,7 +149,7 @@ extern void index_set_state_flags(Oid indexId, IndexStateFlagsAction action); extern Oid IndexGetRelation(Oid indexId, bool missing_ok); extern void reindex_index(Oid indexId, bool skip_constraint_checks, - char relpersistence, ReindexParams *params); + char persistence, ReindexParams *params); /* Flag bits for reindex_relation(): */ #define REINDEX_REL_PROCESS_TOAST 0x01 @@ -168,7 +168,7 @@ extern Size EstimateReindexStateSpace(void); extern void SerializeReindexState(Size maxsize, char *start_address); extern void RestoreReindexState(void *reindexstate); -extern void IndexSetParentIndex(Relation idx, Oid parentOid); +extern void IndexSetParentIndex(Relation partitionIdx, Oid parentOid); /* diff --git a/src/postgres/include/catalog/indexing.h b/src/postgres/include/catalog/indexing.h index 3fe769be..5c069383 100644 --- a/src/postgres/include/catalog/indexing.h +++ b/src/postgres/include/catalog/indexing.h @@ -5,7 +5,7 @@ * on system catalogs * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/indexing.h diff --git a/src/postgres/include/catalog/namespace.h b/src/postgres/include/catalog/namespace.h index 1bc55c01..f64a0ec2 100644 --- a/src/postgres/include/catalog/namespace.h +++ b/src/postgres/include/catalog/namespace.h @@ -4,7 +4,7 @@ * prototypes for functions in backend/catalog/namespace.c * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/namespace.h @@ -85,7 +85,7 @@ extern Oid RangeVarGetRelidExtended(const RangeVar *relation, RangeVarGetRelidCallback callback, void *callback_arg); extern Oid RangeVarGetCreationNamespace(const RangeVar *newRelation); -extern Oid RangeVarGetAndCheckCreationNamespace(RangeVar *newRelation, +extern Oid RangeVarGetAndCheckCreationNamespace(RangeVar *relation, LOCKMODE lockmode, Oid *existing_relation_id); extern void RangeVarAdjustRelationPersistence(RangeVar *newRelation, Oid nspid); diff --git a/src/postgres/include/catalog/objectaccess.h b/src/postgres/include/catalog/objectaccess.h index 567ab63e..d8145dd4 100644 --- a/src/postgres/include/catalog/objectaccess.h +++ b/src/postgres/include/catalog/objectaccess.h @@ -3,7 +3,7 @@ * * Object access hooks. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California */ @@ -17,7 +17,9 @@ * * OAT_POST_CREATE should be invoked just after the object is created. * Typically, this is done after inserting the primary catalog records and - * associated dependencies. + * associated dependencies. The command counter may or may not be incremented + * at the time the hook is invoked; if not, the extension can use SnapshotSelf + * to get the new version of the tuple. * * OAT_DROP should be invoked just before deletion of objects; typically * deleteOneObject(). Its arguments are packed within ObjectAccessDrop. @@ -151,15 +153,15 @@ extern bool RunNamespaceSearchHook(Oid objectId, bool ereport_on_violation); extern void RunFunctionExecuteHook(Oid objectId); /* String versions */ -extern void RunObjectPostCreateHookStr(Oid classId, const char *objectStr, int subId, +extern void RunObjectPostCreateHookStr(Oid classId, const char *objectName, int subId, bool is_internal); -extern void RunObjectDropHookStr(Oid classId, const char *objectStr, int subId, +extern void RunObjectDropHookStr(Oid classId, const char *objectName, int subId, int dropflags); -extern void RunObjectTruncateHookStr(const char *objectStr); -extern void RunObjectPostAlterHookStr(Oid classId, const char *objectStr, int subId, +extern void RunObjectTruncateHookStr(const char *objectName); +extern void RunObjectPostAlterHookStr(Oid classId, const char *objectName, int subId, Oid auxiliaryId, bool is_internal); -extern bool RunNamespaceSearchHookStr(const char *objectStr, bool ereport_on_violation); -extern void RunFunctionExecuteHookStr(const char *objectStr); +extern bool RunNamespaceSearchHookStr(const char *objectName, bool ereport_on_violation); +extern void RunFunctionExecuteHookStr(const char *objectName); /* diff --git a/src/postgres/include/catalog/objectaddress.h b/src/postgres/include/catalog/objectaddress.h index cf4d8b31..9caa3109 100644 --- a/src/postgres/include/catalog/objectaddress.h +++ b/src/postgres/include/catalog/objectaddress.h @@ -3,7 +3,7 @@ * objectaddress.h * functions for working with object addresses * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/objectaddress.h @@ -77,9 +77,9 @@ extern char *getObjectDescriptionOids(Oid classid, Oid objid); extern int read_objtype_from_string(const char *objtype); extern char *getObjectTypeDescription(const ObjectAddress *object, bool missing_ok); -extern char *getObjectIdentity(const ObjectAddress *address, +extern char *getObjectIdentity(const ObjectAddress *object, bool missing_ok); -extern char *getObjectIdentityParts(const ObjectAddress *address, +extern char *getObjectIdentityParts(const ObjectAddress *object, List **objname, List **objargs, bool missing_ok); extern struct ArrayType *strlist_to_textarray(List *list); diff --git a/src/postgres/include/catalog/pg_aggregate.h b/src/postgres/include/catalog/pg_aggregate.h index 593da9f7..31128811 100644 --- a/src/postgres/include/catalog/pg_aggregate.h +++ b/src/postgres/include/catalog/pg_aggregate.h @@ -4,7 +4,7 @@ * definition of the "aggregate" system catalog (pg_aggregate) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_aggregate.h diff --git a/src/postgres/include/catalog/pg_aggregate_d.h b/src/postgres/include/catalog/pg_aggregate_d.h index 1b82972a..b39c740b 100644 --- a/src/postgres/include/catalog/pg_aggregate_d.h +++ b/src/postgres/include/catalog/pg_aggregate_d.h @@ -3,7 +3,7 @@ * pg_aggregate_d.h * Macro definitions for pg_aggregate * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_am.h b/src/postgres/include/catalog/pg_am.h index 50a68fe4..dab54be1 100644 --- a/src/postgres/include/catalog/pg_am.h +++ b/src/postgres/include/catalog/pg_am.h @@ -4,7 +4,7 @@ * definition of the "access method" system catalog (pg_am) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_am.h diff --git a/src/postgres/include/catalog/pg_am_d.h b/src/postgres/include/catalog/pg_am_d.h index 0391b9c2..7059591d 100644 --- a/src/postgres/include/catalog/pg_am_d.h +++ b/src/postgres/include/catalog/pg_am_d.h @@ -3,7 +3,7 @@ * pg_am_d.h * Macro definitions for pg_am * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_attribute.h b/src/postgres/include/catalog/pg_attribute.h index 053294c9..f8b4861b 100644 --- a/src/postgres/include/catalog/pg_attribute.h +++ b/src/postgres/include/catalog/pg_attribute.h @@ -8,7 +8,7 @@ * relations need be included. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_attribute.h @@ -52,15 +52,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ Oid atttypid BKI_LOOKUP_OPT(pg_type); - /* - * attstattarget is the target number of statistics datapoints to collect - * during VACUUM ANALYZE of this column. A zero here indicates that we do - * not wish to collect any stats about this column. A "-1" here indicates - * that no value has been explicitly set for this column, so ANALYZE - * should use the default setting. - */ - int32 attstattarget BKI_DEFAULT(-1); - /* * attlen is a copy of the typlen field from pg_type for this attribute. * See atttypid comments above. @@ -82,12 +73,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ int16 attnum; - /* - * attndims is the declared number of dimensions, if an array type, - * otherwise zero. - */ - int32 attndims; - /* * fastgetattr() uses attcacheoff to cache byte offsets of attributes in * heap tuples. The value actually stored in pg_attribute (-1) indicates @@ -105,6 +90,12 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ int32 atttypmod BKI_DEFAULT(-1); + /* + * attndims is the declared number of dimensions, if an array type, + * otherwise zero. + */ + int16 attndims; + /* * attbyval is a copy of the typbyval field from pg_type for this * attribute. See atttypid comments above. @@ -165,7 +156,18 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, bool attislocal BKI_DEFAULT(t); /* Number of times inherited from direct parent relation(s) */ - int32 attinhcount BKI_DEFAULT(0); + int16 attinhcount BKI_DEFAULT(0); + + /* + * attstattarget is the target number of statistics datapoints to collect + * during VACUUM ANALYZE of this column. A zero here indicates that we do + * not wish to collect any stats about this column. A "-1" here indicates + * that no value has been explicitly set for this column, so ANALYZE + * should use the default setting. + * + * int16 is sufficient because the max value is currently 10000. + */ + int16 attstattarget BKI_DEFAULT(-1); /* attribute's collation, if any */ Oid attcollation BKI_LOOKUP_OPT(pg_collation); diff --git a/src/postgres/include/catalog/pg_attribute_d.h b/src/postgres/include/catalog/pg_attribute_d.h index 01656dd1..c669c28c 100644 --- a/src/postgres/include/catalog/pg_attribute_d.h +++ b/src/postgres/include/catalog/pg_attribute_d.h @@ -3,7 +3,7 @@ * pg_attribute_d.h * Macro definitions for pg_attribute * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -26,24 +26,24 @@ #define Anum_pg_attribute_attrelid 1 #define Anum_pg_attribute_attname 2 #define Anum_pg_attribute_atttypid 3 -#define Anum_pg_attribute_attstattarget 4 -#define Anum_pg_attribute_attlen 5 -#define Anum_pg_attribute_attnum 6 -#define Anum_pg_attribute_attndims 7 -#define Anum_pg_attribute_attcacheoff 8 -#define Anum_pg_attribute_atttypmod 9 -#define Anum_pg_attribute_attbyval 10 -#define Anum_pg_attribute_attalign 11 -#define Anum_pg_attribute_attstorage 12 -#define Anum_pg_attribute_attcompression 13 -#define Anum_pg_attribute_attnotnull 14 -#define Anum_pg_attribute_atthasdef 15 -#define Anum_pg_attribute_atthasmissing 16 -#define Anum_pg_attribute_attidentity 17 -#define Anum_pg_attribute_attgenerated 18 -#define Anum_pg_attribute_attisdropped 19 -#define Anum_pg_attribute_attislocal 20 -#define Anum_pg_attribute_attinhcount 21 +#define Anum_pg_attribute_attlen 4 +#define Anum_pg_attribute_attnum 5 +#define Anum_pg_attribute_attcacheoff 6 +#define Anum_pg_attribute_atttypmod 7 +#define Anum_pg_attribute_attndims 8 +#define Anum_pg_attribute_attbyval 9 +#define Anum_pg_attribute_attalign 10 +#define Anum_pg_attribute_attstorage 11 +#define Anum_pg_attribute_attcompression 12 +#define Anum_pg_attribute_attnotnull 13 +#define Anum_pg_attribute_atthasdef 14 +#define Anum_pg_attribute_atthasmissing 15 +#define Anum_pg_attribute_attidentity 16 +#define Anum_pg_attribute_attgenerated 17 +#define Anum_pg_attribute_attisdropped 18 +#define Anum_pg_attribute_attislocal 19 +#define Anum_pg_attribute_attinhcount 20 +#define Anum_pg_attribute_attstattarget 21 #define Anum_pg_attribute_attcollation 22 #define Anum_pg_attribute_attacl 23 #define Anum_pg_attribute_attoptions 24 diff --git a/src/postgres/include/catalog/pg_authid.h b/src/postgres/include/catalog/pg_authid.h index 3512601c..c70baf78 100644 --- a/src/postgres/include/catalog/pg_authid.h +++ b/src/postgres/include/catalog/pg_authid.h @@ -6,7 +6,7 @@ * pg_shadow and pg_group are now publicly accessible views on pg_authid. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_authid.h diff --git a/src/postgres/include/catalog/pg_authid_d.h b/src/postgres/include/catalog/pg_authid_d.h index 19325e4c..26900a5c 100644 --- a/src/postgres/include/catalog/pg_authid_d.h +++ b/src/postgres/include/catalog/pg_authid_d.h @@ -3,7 +3,7 @@ * pg_authid_d.h * Macro definitions for pg_authid * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -53,5 +53,7 @@ #define ROLE_PG_EXECUTE_SERVER_PROGRAM 4571 #define ROLE_PG_SIGNAL_BACKEND 4200 #define ROLE_PG_CHECKPOINT 4544 +#define ROLE_PG_USE_RESERVED_CONNECTIONS 4550 +#define ROLE_PG_CREATE_SUBSCRIPTION 6304 #endif /* PG_AUTHID_D_H */ diff --git a/src/postgres/include/catalog/pg_class.h b/src/postgres/include/catalog/pg_class.h index e1f4eefa..2d1bb7af 100644 --- a/src/postgres/include/catalog/pg_class.h +++ b/src/postgres/include/catalog/pg_class.h @@ -4,7 +4,7 @@ * definition of the "relation" system catalog (pg_class) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_class.h diff --git a/src/postgres/include/catalog/pg_class_d.h b/src/postgres/include/catalog/pg_class_d.h index e4cb9940..51208d69 100644 --- a/src/postgres/include/catalog/pg_class_d.h +++ b/src/postgres/include/catalog/pg_class_d.h @@ -3,7 +3,7 @@ * pg_class_d.h * Macro definitions for pg_class * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_collation.h b/src/postgres/include/catalog/pg_collation.h index 2190ccb5..bfa35684 100644 --- a/src/postgres/include/catalog/pg_collation.h +++ b/src/postgres/include/catalog/pg_collation.h @@ -4,7 +4,7 @@ * definition of the "collation" system catalog (pg_collation) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_collation.h @@ -43,6 +43,7 @@ CATALOG(pg_collation,3456,CollationRelationId) text collcollate BKI_DEFAULT(_null_); /* LC_COLLATE setting */ text collctype BKI_DEFAULT(_null_); /* LC_CTYPE setting */ text colliculocale BKI_DEFAULT(_null_); /* ICU locale ID */ + text collicurules BKI_DEFAULT(_null_); /* ICU collation rules */ text collversion BKI_DEFAULT(_null_); /* provider-dependent * version of collation * data */ @@ -91,6 +92,7 @@ extern Oid CollationCreate(const char *collname, Oid collnamespace, int32 collencoding, const char *collcollate, const char *collctype, const char *colliculocale, + const char *collicurules, const char *collversion, bool if_not_exists, bool quiet); diff --git a/src/postgres/include/catalog/pg_collation_d.h b/src/postgres/include/catalog/pg_collation_d.h index c257e327..a5a675b3 100644 --- a/src/postgres/include/catalog/pg_collation_d.h +++ b/src/postgres/include/catalog/pg_collation_d.h @@ -3,7 +3,7 @@ * pg_collation_d.h * Macro definitions for pg_collation * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -32,9 +32,10 @@ #define Anum_pg_collation_collcollate 8 #define Anum_pg_collation_collctype 9 #define Anum_pg_collation_colliculocale 10 -#define Anum_pg_collation_collversion 11 +#define Anum_pg_collation_collicurules 11 +#define Anum_pg_collation_collversion 12 -#define Natts_pg_collation 11 +#define Natts_pg_collation 12 #define COLLPROVIDER_DEFAULT 'd' diff --git a/src/postgres/include/catalog/pg_constraint.h b/src/postgres/include/catalog/pg_constraint.h index e7d967f1..16bf5f55 100644 --- a/src/postgres/include/catalog/pg_constraint.h +++ b/src/postgres/include/catalog/pg_constraint.h @@ -4,7 +4,7 @@ * definition of the "constraint" system catalog (pg_constraint) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_constraint.h @@ -102,7 +102,7 @@ CATALOG(pg_constraint,2606,ConstraintRelationId) bool conislocal; /* Number of times inherited from direct parent relation(s) */ - int32 coninhcount; + int16 coninhcount; /* Has a local definition and cannot be inherited */ bool connoinherit; diff --git a/src/postgres/include/catalog/pg_constraint_d.h b/src/postgres/include/catalog/pg_constraint_d.h index 307c3315..ccd977b8 100644 --- a/src/postgres/include/catalog/pg_constraint_d.h +++ b/src/postgres/include/catalog/pg_constraint_d.h @@ -3,7 +3,7 @@ * pg_constraint_d.h * Macro definitions for pg_constraint * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_control.h b/src/postgres/include/catalog/pg_control.h index 06368e23..dc953977 100644 --- a/src/postgres/include/catalog/pg_control.h +++ b/src/postgres/include/catalog/pg_control.h @@ -5,7 +5,7 @@ * However, we define it here so that the format is documented. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_control.h @@ -247,4 +247,12 @@ typedef struct ControlFileData */ #define PG_CONTROL_FILE_SIZE 8192 +/* + * Ensure that the size of the pg_control data structure is sane. + */ +StaticAssertDecl(sizeof(ControlFileData) <= PG_CONTROL_MAX_SAFE_SIZE, + "pg_control is too large for atomic disk writes"); +StaticAssertDecl(sizeof(ControlFileData) <= PG_CONTROL_FILE_SIZE, + "sizeof(ControlFileData) exceeds PG_CONTROL_FILE_SIZE"); + #endif /* PG_CONTROL_H */ diff --git a/src/postgres/include/catalog/pg_conversion.h b/src/postgres/include/catalog/pg_conversion.h index fb26123a..de40909d 100644 --- a/src/postgres/include/catalog/pg_conversion.h +++ b/src/postgres/include/catalog/pg_conversion.h @@ -3,7 +3,7 @@ * pg_conversion.h * definition of the "conversion" system catalog (pg_conversion) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_conversion.h @@ -69,7 +69,7 @@ extern ObjectAddress ConversionCreate(const char *conname, Oid connamespace, Oid conowner, int32 conforencoding, int32 contoencoding, Oid conproc, bool def); -extern Oid FindDefaultConversion(Oid connamespace, int32 for_encoding, +extern Oid FindDefaultConversion(Oid name_space, int32 for_encoding, int32 to_encoding); #endif /* PG_CONVERSION_H */ diff --git a/src/postgres/include/catalog/pg_conversion_d.h b/src/postgres/include/catalog/pg_conversion_d.h index 33e4bb48..30857dd6 100644 --- a/src/postgres/include/catalog/pg_conversion_d.h +++ b/src/postgres/include/catalog/pg_conversion_d.h @@ -3,7 +3,7 @@ * pg_conversion_d.h * Macro definitions for pg_conversion * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_database.h b/src/postgres/include/catalog/pg_database.h new file mode 100644 index 00000000..ff5baaf5 --- /dev/null +++ b/src/postgres/include/catalog/pg_database.h @@ -0,0 +1,124 @@ +/*------------------------------------------------------------------------- + * + * pg_database.h + * definition of the "database" system catalog (pg_database) + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/catalog/pg_database.h + * + * NOTES + * The Catalog.pm module reads this file and derives schema + * information. + * + *------------------------------------------------------------------------- + */ +#ifndef PG_DATABASE_H +#define PG_DATABASE_H + +#include "catalog/genbki.h" +#include "catalog/pg_database_d.h" + +/* ---------------- + * pg_database definition. cpp turns this into + * typedef struct FormData_pg_database + * ---------------- + */ +CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248,DatabaseRelation_Rowtype_Id) BKI_SCHEMA_MACRO +{ + /* oid */ + Oid oid; + + /* database name */ + NameData datname; + + /* owner of database */ + Oid datdba BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid); + + /* character encoding */ + int32 encoding; + + /* locale provider, see pg_collation.collprovider */ + char datlocprovider; + + /* allowed as CREATE DATABASE template? */ + bool datistemplate; + + /* new connections allowed? */ + bool datallowconn; + + /* + * Max connections allowed. Negative values have special meaning, see + * DATCONNLIMIT_* defines below. + */ + int32 datconnlimit; + + /* all Xids < this are frozen in this DB */ + TransactionId datfrozenxid; + + /* all multixacts in the DB are >= this */ + TransactionId datminmxid; + + /* default table space for this DB */ + Oid dattablespace BKI_LOOKUP(pg_tablespace); + +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + /* LC_COLLATE setting */ + text datcollate BKI_FORCE_NOT_NULL; + + /* LC_CTYPE setting */ + text datctype BKI_FORCE_NOT_NULL; + + /* ICU locale ID */ + text daticulocale; + + /* ICU collation rules */ + text daticurules; + + /* provider-dependent version of collation data */ + text datcollversion BKI_DEFAULT(_null_); + + /* access permissions */ + aclitem datacl[1]; +#endif +} FormData_pg_database; + +/* ---------------- + * Form_pg_database corresponds to a pointer to a tuple with + * the format of pg_database relation. + * ---------------- + */ +typedef FormData_pg_database *Form_pg_database; + +DECLARE_TOAST_WITH_MACRO(pg_database, 4177, 4178, PgDatabaseToastTable, PgDatabaseToastIndex); + +DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, DatabaseNameIndexId, on pg_database using btree(datname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, DatabaseOidIndexId, on pg_database using btree(oid oid_ops)); + +/* + * pg_database.dat contains an entry for template1, but not for the template0 + * or postgres databases, because those are created later in initdb. + * However, we still want to manually assign the OIDs for template0 and + * postgres, so declare those here. + */ +DECLARE_OID_DEFINING_MACRO(Template0DbOid, 4); +DECLARE_OID_DEFINING_MACRO(PostgresDbOid, 5); + +/* + * Special values for pg_database.datconnlimit. Normal values are >= 0. + */ +#define DATCONNLIMIT_UNLIMITED -1 /* no limit */ + +/* + * A database is set to invalid partway through being dropped. Using + * datconnlimit=-2 for this purpose isn't particularly clean, but is + * backpatchable. + */ +#define DATCONNLIMIT_INVALID_DB -2 + +extern bool database_is_invalid_form(Form_pg_database datform); +extern bool database_is_invalid_oid(Oid dboid); + +#endif /* PG_DATABASE_H */ diff --git a/src/postgres/include/catalog/pg_database_d.h b/src/postgres/include/catalog/pg_database_d.h new file mode 100644 index 00000000..a3a68998 --- /dev/null +++ b/src/postgres/include/catalog/pg_database_d.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------- + * + * pg_database_d.h + * Macro definitions for pg_database + * + * Portions Copyright (c) 1996-2023, 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/backend/catalog/genbki.pl + * + *------------------------------------------------------------------------- + */ +#ifndef PG_DATABASE_D_H +#define PG_DATABASE_D_H + +#define DatabaseRelationId 1262 +#define DatabaseRelation_Rowtype_Id 1248 +#define PgDatabaseToastTable 4177 +#define PgDatabaseToastIndex 4178 +#define DatabaseNameIndexId 2671 +#define DatabaseOidIndexId 2672 +#define Template0DbOid 4 +#define PostgresDbOid 5 + +#define Anum_pg_database_oid 1 +#define Anum_pg_database_datname 2 +#define Anum_pg_database_datdba 3 +#define Anum_pg_database_encoding 4 +#define Anum_pg_database_datlocprovider 5 +#define Anum_pg_database_datistemplate 6 +#define Anum_pg_database_datallowconn 7 +#define Anum_pg_database_datconnlimit 8 +#define Anum_pg_database_datfrozenxid 9 +#define Anum_pg_database_datminmxid 10 +#define Anum_pg_database_dattablespace 11 +#define Anum_pg_database_datcollate 12 +#define Anum_pg_database_datctype 13 +#define Anum_pg_database_daticulocale 14 +#define Anum_pg_database_daticurules 15 +#define Anum_pg_database_datcollversion 16 +#define Anum_pg_database_datacl 17 + +#define Natts_pg_database 17 + +#define Template1DbOid 1 + +#endif /* PG_DATABASE_D_H */ diff --git a/src/postgres/include/catalog/pg_depend.h b/src/postgres/include/catalog/pg_depend.h index 2f736ecd..30dde6f8 100644 --- a/src/postgres/include/catalog/pg_depend.h +++ b/src/postgres/include/catalog/pg_depend.h @@ -17,7 +17,7 @@ * convenient to find from the contents of other catalogs. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_depend.h diff --git a/src/postgres/include/catalog/pg_depend_d.h b/src/postgres/include/catalog/pg_depend_d.h index 812e19a3..f0c7a35e 100644 --- a/src/postgres/include/catalog/pg_depend_d.h +++ b/src/postgres/include/catalog/pg_depend_d.h @@ -3,7 +3,7 @@ * pg_depend_d.h * Macro definitions for pg_depend * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_event_trigger.h b/src/postgres/include/catalog/pg_event_trigger.h index 3fe0e8db..e30550f6 100644 --- a/src/postgres/include/catalog/pg_event_trigger.h +++ b/src/postgres/include/catalog/pg_event_trigger.h @@ -4,7 +4,7 @@ * definition of the "event trigger" system catalog (pg_event_trigger) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_event_trigger.h diff --git a/src/postgres/include/catalog/pg_event_trigger_d.h b/src/postgres/include/catalog/pg_event_trigger_d.h index 1f44e4e9..f66be700 100644 --- a/src/postgres/include/catalog/pg_event_trigger_d.h +++ b/src/postgres/include/catalog/pg_event_trigger_d.h @@ -3,7 +3,7 @@ * pg_event_trigger_d.h * Macro definitions for pg_event_trigger * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_index.h b/src/postgres/include/catalog/pg_index.h index f853846e..b0592571 100644 --- a/src/postgres/include/catalog/pg_index.h +++ b/src/postgres/include/catalog/pg_index.h @@ -4,7 +4,7 @@ * definition of the "index" system catalog (pg_index) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_index.h diff --git a/src/postgres/include/catalog/pg_index_d.h b/src/postgres/include/catalog/pg_index_d.h index 1716a3f1..20927db1 100644 --- a/src/postgres/include/catalog/pg_index_d.h +++ b/src/postgres/include/catalog/pg_index_d.h @@ -3,7 +3,7 @@ * pg_index_d.h * Macro definitions for pg_index * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_language.h b/src/postgres/include/catalog/pg_language.h index 4b9c2595..02003b46 100644 --- a/src/postgres/include/catalog/pg_language.h +++ b/src/postgres/include/catalog/pg_language.h @@ -4,7 +4,7 @@ * definition of the "language" system catalog (pg_language) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_language.h diff --git a/src/postgres/include/catalog/pg_language_d.h b/src/postgres/include/catalog/pg_language_d.h index 53f26af2..2c876541 100644 --- a/src/postgres/include/catalog/pg_language_d.h +++ b/src/postgres/include/catalog/pg_language_d.h @@ -3,7 +3,7 @@ * pg_language_d.h * Macro definitions for pg_language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_namespace.h b/src/postgres/include/catalog/pg_namespace.h index ba56e44d..2b0c2431 100644 --- a/src/postgres/include/catalog/pg_namespace.h +++ b/src/postgres/include/catalog/pg_namespace.h @@ -4,7 +4,7 @@ * definition of the "namespace" system catalog (pg_namespace) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_namespace.h diff --git a/src/postgres/include/catalog/pg_namespace_d.h b/src/postgres/include/catalog/pg_namespace_d.h index 5ca92cc2..954c39d1 100644 --- a/src/postgres/include/catalog/pg_namespace_d.h +++ b/src/postgres/include/catalog/pg_namespace_d.h @@ -3,7 +3,7 @@ * pg_namespace_d.h * Macro definitions for pg_namespace * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_opclass.h b/src/postgres/include/catalog/pg_opclass.h index 3a3a19b8..b4b6325c 100644 --- a/src/postgres/include/catalog/pg_opclass.h +++ b/src/postgres/include/catalog/pg_opclass.h @@ -24,7 +24,7 @@ * AMs support this. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_opclass.h diff --git a/src/postgres/include/catalog/pg_opclass_d.h b/src/postgres/include/catalog/pg_opclass_d.h index d6678056..707d3c93 100644 --- a/src/postgres/include/catalog/pg_opclass_d.h +++ b/src/postgres/include/catalog/pg_opclass_d.h @@ -3,7 +3,7 @@ * pg_opclass_d.h * Macro definitions for pg_opclass * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_operator.h b/src/postgres/include/catalog/pg_operator.h index 51263f55..e60cf782 100644 --- a/src/postgres/include/catalog/pg_operator.h +++ b/src/postgres/include/catalog/pg_operator.h @@ -4,7 +4,7 @@ * definition of the "operator" system catalog (pg_operator) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_operator.h diff --git a/src/postgres/include/catalog/pg_operator_d.h b/src/postgres/include/catalog/pg_operator_d.h index 6b350eb2..84ec7dc0 100644 --- a/src/postgres/include/catalog/pg_operator_d.h +++ b/src/postgres/include/catalog/pg_operator_d.h @@ -3,7 +3,7 @@ * pg_operator_d.h * Macro definitions for pg_operator * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_opfamily.h b/src/postgres/include/catalog/pg_opfamily.h index 8dc9ce01..39b8d7c2 100644 --- a/src/postgres/include/catalog/pg_opfamily.h +++ b/src/postgres/include/catalog/pg_opfamily.h @@ -4,7 +4,7 @@ * definition of the "operator family" system catalog (pg_opfamily) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_opfamily.h @@ -55,7 +55,8 @@ DECLARE_UNIQUE_INDEX_PKEY(pg_opfamily_oid_index, 2755, OpfamilyOidIndexId, on pg #ifdef EXPOSE_TO_CLIENT_CODE -#define IsBooleanOpfamily(opfamily) \ +/* This does not account for non-core opfamilies that might accept boolean */ +#define IsBuiltinBooleanOpfamily(opfamily) \ ((opfamily) == BOOL_BTREE_FAM_OID || (opfamily) == BOOL_HASH_FAM_OID) #endif /* EXPOSE_TO_CLIENT_CODE */ diff --git a/src/postgres/include/catalog/pg_opfamily_d.h b/src/postgres/include/catalog/pg_opfamily_d.h index 5b00cfc1..7be8ff7a 100644 --- a/src/postgres/include/catalog/pg_opfamily_d.h +++ b/src/postgres/include/catalog/pg_opfamily_d.h @@ -3,7 +3,7 @@ * pg_opfamily_d.h * Macro definitions for pg_opfamily * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -31,7 +31,8 @@ #define Natts_pg_opfamily 5 -#define IsBooleanOpfamily(opfamily) \ +/* This does not account for non-core opfamilies that might accept boolean */ +#define IsBuiltinBooleanOpfamily(opfamily) \ ((opfamily) == BOOL_BTREE_FAM_OID || (opfamily) == BOOL_HASH_FAM_OID) #define BOOL_BTREE_FAM_OID 424 @@ -39,6 +40,7 @@ #define BYTEA_BTREE_FAM_OID 428 #define NETWORK_BTREE_FAM_OID 1974 #define INTEGER_BTREE_FAM_OID 1976 +#define INTERVAL_BTREE_FAM_OID 1982 #define OID_BTREE_FAM_OID 1989 #define TEXT_BTREE_FAM_OID 1994 #define TEXT_PATTERN_BTREE_FAM_OID 2095 diff --git a/src/postgres/include/catalog/pg_parameter_acl.h b/src/postgres/include/catalog/pg_parameter_acl.h deleted file mode 100644 index 4bd52c2d..00000000 --- a/src/postgres/include/catalog/pg_parameter_acl.h +++ /dev/null @@ -1,60 +0,0 @@ -/*------------------------------------------------------------------------- - * - * pg_parameter_acl.h - * definition of the "configuration parameter ACL" system catalog - * (pg_parameter_acl). - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/catalog/pg_parameter_acl.h - * - * NOTES - * The Catalog.pm module reads this file and derives schema - * information. - * - *------------------------------------------------------------------------- - */ -#ifndef PG_PARAMETER_ACL_H -#define PG_PARAMETER_ACL_H - -#include "catalog/genbki.h" -#include "catalog/pg_parameter_acl_d.h" - -/* ---------------- - * pg_parameter_acl definition. cpp turns this into - * typedef struct FormData_pg_parameter_acl - * ---------------- - */ -CATALOG(pg_parameter_acl,6243,ParameterAclRelationId) BKI_SHARED_RELATION -{ - Oid oid; /* oid */ - -#ifdef CATALOG_VARLEN /* variable-length fields start here */ - /* name of parameter */ - text parname BKI_FORCE_NOT_NULL; - - /* access permissions */ - aclitem paracl[1] BKI_DEFAULT(_null_); -#endif -} FormData_pg_parameter_acl; - - -/* ---------------- - * Form_pg_parameter_acl corresponds to a pointer to a tuple with - * the format of pg_parameter_acl relation. - * ---------------- - */ -typedef FormData_pg_parameter_acl * Form_pg_parameter_acl; - -DECLARE_TOAST_WITH_MACRO(pg_parameter_acl, 6244, 6245, PgParameterAclToastTable, PgParameterAclToastIndex); - -DECLARE_UNIQUE_INDEX(pg_parameter_acl_parname_index, 6246, ParameterAclParnameIndexId, on pg_parameter_acl using btree(parname text_ops)); -DECLARE_UNIQUE_INDEX_PKEY(pg_parameter_acl_oid_index, 6247, ParameterAclOidIndexId, on pg_parameter_acl using btree(oid oid_ops)); - - -extern Oid ParameterAclLookup(const char *parameter, bool missing_ok); -extern Oid ParameterAclCreate(const char *parameter); - -#endif /* PG_PARAMETER_ACL_H */ diff --git a/src/postgres/include/catalog/pg_parameter_acl_d.h b/src/postgres/include/catalog/pg_parameter_acl_d.h deleted file mode 100644 index 8a27703a..00000000 --- a/src/postgres/include/catalog/pg_parameter_acl_d.h +++ /dev/null @@ -1,34 +0,0 @@ -/*------------------------------------------------------------------------- - * - * pg_parameter_acl_d.h - * Macro definitions for pg_parameter_acl - * - * Portions Copyright (c) 1996-2022, 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/backend/catalog/genbki.pl - * - *------------------------------------------------------------------------- - */ -#ifndef PG_PARAMETER_ACL_D_H -#define PG_PARAMETER_ACL_D_H - -#define ParameterAclRelationId 6243 -#define PgParameterAclToastTable 6244 -#define PgParameterAclToastIndex 6245 -#define ParameterAclParnameIndexId 6246 -#define ParameterAclOidIndexId 6247 - -#define Anum_pg_parameter_acl_oid 1 -#define Anum_pg_parameter_acl_parname 2 -#define Anum_pg_parameter_acl_paracl 3 - -#define Natts_pg_parameter_acl 3 - - -#endif /* PG_PARAMETER_ACL_D_H */ diff --git a/src/postgres/include/catalog/pg_partitioned_table.h b/src/postgres/include/catalog/pg_partitioned_table.h index 9b78f84c..eb867ad6 100644 --- a/src/postgres/include/catalog/pg_partitioned_table.h +++ b/src/postgres/include/catalog/pg_partitioned_table.h @@ -5,7 +5,7 @@ * (pg_partitioned_table) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_partitioned_table.h diff --git a/src/postgres/include/catalog/pg_partitioned_table_d.h b/src/postgres/include/catalog/pg_partitioned_table_d.h index 6f4338a1..838a94e5 100644 --- a/src/postgres/include/catalog/pg_partitioned_table_d.h +++ b/src/postgres/include/catalog/pg_partitioned_table_d.h @@ -3,7 +3,7 @@ * pg_partitioned_table_d.h * Macro definitions for pg_partitioned_table * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_proc.h b/src/postgres/include/catalog/pg_proc.h index 76310d4c..e7abe0b4 100644 --- a/src/postgres/include/catalog/pg_proc.h +++ b/src/postgres/include/catalog/pg_proc.h @@ -3,7 +3,7 @@ * pg_proc.h * definition of the "procedure" system catalog (pg_proc) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_proc.h diff --git a/src/postgres/include/catalog/pg_proc_d.h b/src/postgres/include/catalog/pg_proc_d.h index 27fbfdd1..d9beb520 100644 --- a/src/postgres/include/catalog/pg_proc_d.h +++ b/src/postgres/include/catalog/pg_proc_d.h @@ -3,7 +3,7 @@ * pg_proc_d.h * Macro definitions for pg_proc * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_publication.h b/src/postgres/include/catalog/pg_publication.h index 48205ba4..6ecaa2a0 100644 --- a/src/postgres/include/catalog/pg_publication.h +++ b/src/postgres/include/catalog/pg_publication.h @@ -3,7 +3,7 @@ * pg_publication.h * definition of the "publication" system catalog (pg_publication) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_publication.h @@ -137,7 +137,7 @@ extern List *GetPublicationSchemas(Oid pubid); extern List *GetSchemaPublications(Oid schemaid); extern List *GetSchemaPublicationRelations(Oid schemaid, PublicationPartOpt pub_partopt); -extern List *GetAllSchemaPublicationRelations(Oid puboid, +extern List *GetAllSchemaPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt); extern List *GetPubPartitionOptionRelations(List *result, PublicationPartOpt pub_partopt, @@ -155,7 +155,4 @@ extern ObjectAddress publication_add_schema(Oid pubid, Oid schemaid, extern Bitmapset *pub_collist_to_bitmapset(Bitmapset *columns, Datum pubcols, MemoryContext mcxt); -extern Oid get_publication_oid(const char *pubname, bool missing_ok); -extern char *get_publication_name(Oid pubid, bool missing_ok); - #endif /* PG_PUBLICATION_H */ diff --git a/src/postgres/include/catalog/pg_publication_d.h b/src/postgres/include/catalog/pg_publication_d.h index 189d7df6..be01c625 100644 --- a/src/postgres/include/catalog/pg_publication_d.h +++ b/src/postgres/include/catalog/pg_publication_d.h @@ -3,7 +3,7 @@ * pg_publication_d.h * Macro definitions for pg_publication * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_replication_origin.h b/src/postgres/include/catalog/pg_replication_origin.h index 3b11cd21..fa54f120 100644 --- a/src/postgres/include/catalog/pg_replication_origin.h +++ b/src/postgres/include/catalog/pg_replication_origin.h @@ -4,7 +4,7 @@ * definition of the "replication origin" system catalog * (pg_replication_origin) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_replication_origin.h diff --git a/src/postgres/include/catalog/pg_replication_origin_d.h b/src/postgres/include/catalog/pg_replication_origin_d.h index 2cfa387a..55308ada 100644 --- a/src/postgres/include/catalog/pg_replication_origin_d.h +++ b/src/postgres/include/catalog/pg_replication_origin_d.h @@ -3,7 +3,7 @@ * pg_replication_origin_d.h * Macro definitions for pg_replication_origin * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_statistic.h b/src/postgres/include/catalog/pg_statistic.h index cdf74481..8770c5b4 100644 --- a/src/postgres/include/catalog/pg_statistic.h +++ b/src/postgres/include/catalog/pg_statistic.h @@ -4,7 +4,7 @@ * definition of the "statistics" system catalog (pg_statistic) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_statistic.h diff --git a/src/postgres/include/catalog/pg_statistic_d.h b/src/postgres/include/catalog/pg_statistic_d.h index a9e6aa99..5024895d 100644 --- a/src/postgres/include/catalog/pg_statistic_d.h +++ b/src/postgres/include/catalog/pg_statistic_d.h @@ -3,7 +3,7 @@ * pg_statistic_d.h * Macro definitions for pg_statistic * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_statistic_ext.h b/src/postgres/include/catalog/pg_statistic_ext.h index b8520ba9..53eec902 100644 --- a/src/postgres/include/catalog/pg_statistic_ext.h +++ b/src/postgres/include/catalog/pg_statistic_ext.h @@ -8,7 +8,7 @@ * objects, created by CREATE STATISTICS, but not the actual statistical data, * created by running ANALYZE. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_statistic_ext.h diff --git a/src/postgres/include/catalog/pg_statistic_ext_d.h b/src/postgres/include/catalog/pg_statistic_ext_d.h index 93758595..055451d6 100644 --- a/src/postgres/include/catalog/pg_statistic_ext_d.h +++ b/src/postgres/include/catalog/pg_statistic_ext_d.h @@ -3,7 +3,7 @@ * pg_statistic_ext_d.h * Macro definitions for pg_statistic_ext * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_transform.h b/src/postgres/include/catalog/pg_transform.h index 2a026915..6273b0a4 100644 --- a/src/postgres/include/catalog/pg_transform.h +++ b/src/postgres/include/catalog/pg_transform.h @@ -4,7 +4,7 @@ * definition of the "transform" system catalog (pg_transform) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_transform.h diff --git a/src/postgres/include/catalog/pg_transform_d.h b/src/postgres/include/catalog/pg_transform_d.h index ca3a1dcb..ddb3b9c2 100644 --- a/src/postgres/include/catalog/pg_transform_d.h +++ b/src/postgres/include/catalog/pg_transform_d.h @@ -3,7 +3,7 @@ * pg_transform_d.h * Macro definitions for pg_transform * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_trigger.h b/src/postgres/include/catalog/pg_trigger.h index 194277bc..3679b039 100644 --- a/src/postgres/include/catalog/pg_trigger.h +++ b/src/postgres/include/catalog/pg_trigger.h @@ -4,7 +4,7 @@ * definition of the "trigger" system catalog (pg_trigger) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_trigger.h diff --git a/src/postgres/include/catalog/pg_trigger_d.h b/src/postgres/include/catalog/pg_trigger_d.h index e20967b4..95109053 100644 --- a/src/postgres/include/catalog/pg_trigger_d.h +++ b/src/postgres/include/catalog/pg_trigger_d.h @@ -3,7 +3,7 @@ * pg_trigger_d.h * Macro definitions for pg_trigger * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_ts_config.h b/src/postgres/include/catalog/pg_ts_config.h index e5a30847..aee0bf71 100644 --- a/src/postgres/include/catalog/pg_ts_config.h +++ b/src/postgres/include/catalog/pg_ts_config.h @@ -5,7 +5,7 @@ * (pg_ts_config) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_ts_config.h diff --git a/src/postgres/include/catalog/pg_ts_config_d.h b/src/postgres/include/catalog/pg_ts_config_d.h index 9a9bda7b..20cc7823 100644 --- a/src/postgres/include/catalog/pg_ts_config_d.h +++ b/src/postgres/include/catalog/pg_ts_config_d.h @@ -3,7 +3,7 @@ * pg_ts_config_d.h * Macro definitions for pg_ts_config * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_ts_dict.h b/src/postgres/include/catalog/pg_ts_dict.h index 4b6188f4..476325f0 100644 --- a/src/postgres/include/catalog/pg_ts_dict.h +++ b/src/postgres/include/catalog/pg_ts_dict.h @@ -4,7 +4,7 @@ * definition of the "text search dictionary" system catalog (pg_ts_dict) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_ts_dict.h diff --git a/src/postgres/include/catalog/pg_ts_dict_d.h b/src/postgres/include/catalog/pg_ts_dict_d.h index 34614093..c504853d 100644 --- a/src/postgres/include/catalog/pg_ts_dict_d.h +++ b/src/postgres/include/catalog/pg_ts_dict_d.h @@ -3,7 +3,7 @@ * pg_ts_dict_d.h * Macro definitions for pg_ts_dict * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_ts_parser.h b/src/postgres/include/catalog/pg_ts_parser.h index c2d474dc..283de252 100644 --- a/src/postgres/include/catalog/pg_ts_parser.h +++ b/src/postgres/include/catalog/pg_ts_parser.h @@ -4,7 +4,7 @@ * definition of the "text search parser" system catalog (pg_ts_parser) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_ts_parser.h diff --git a/src/postgres/include/catalog/pg_ts_parser_d.h b/src/postgres/include/catalog/pg_ts_parser_d.h index 64032e86..ff7d4638 100644 --- a/src/postgres/include/catalog/pg_ts_parser_d.h +++ b/src/postgres/include/catalog/pg_ts_parser_d.h @@ -3,7 +3,7 @@ * pg_ts_parser_d.h * Macro definitions for pg_ts_parser * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_ts_template.h b/src/postgres/include/catalog/pg_ts_template.h index 2a553fef..f4e510c8 100644 --- a/src/postgres/include/catalog/pg_ts_template.h +++ b/src/postgres/include/catalog/pg_ts_template.h @@ -4,7 +4,7 @@ * definition of the "text search template" system catalog (pg_ts_template) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_ts_template.h diff --git a/src/postgres/include/catalog/pg_ts_template_d.h b/src/postgres/include/catalog/pg_ts_template_d.h index cac7d9bb..e32b88a6 100644 --- a/src/postgres/include/catalog/pg_ts_template_d.h +++ b/src/postgres/include/catalog/pg_ts_template_d.h @@ -3,7 +3,7 @@ * pg_ts_template_d.h * Macro definitions for pg_ts_template * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/pg_type.h b/src/postgres/include/catalog/pg_type.h index 48a25591..519e570c 100644 --- a/src/postgres/include/catalog/pg_type.h +++ b/src/postgres/include/catalog/pg_type.h @@ -4,7 +4,7 @@ * definition of the "type" system catalog (pg_type) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/pg_type.h diff --git a/src/postgres/include/catalog/pg_type_d.h b/src/postgres/include/catalog/pg_type_d.h index 3877e0b7..d0f8d034 100644 --- a/src/postgres/include/catalog/pg_type_d.h +++ b/src/postgres/include/catalog/pg_type_d.h @@ -3,7 +3,7 @@ * pg_type_d.h * Macro definitions for pg_type * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/catalog/storage.h b/src/postgres/include/catalog/storage.h index 59f3404a..45a3c783 100644 --- a/src/postgres/include/catalog/storage.h +++ b/src/postgres/include/catalog/storage.h @@ -4,7 +4,7 @@ * prototypes for functions in backend/catalog/storage.c * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/catalog/storage.h @@ -15,23 +15,23 @@ #define STORAGE_H #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "storage/smgr.h" #include "utils/relcache.h" /* GUC variables */ extern PGDLLIMPORT int wal_skip_threshold; -extern SMgrRelation RelationCreateStorage(RelFileNode rnode, +extern SMgrRelation RelationCreateStorage(RelFileLocator rlocator, char relpersistence, bool register_delete); extern void RelationDropStorage(Relation rel); -extern void RelationPreserveStorage(RelFileNode rnode, bool atCommit); +extern void RelationPreserveStorage(RelFileLocator rlocator, bool atCommit); extern void RelationPreTruncate(Relation rel); extern void RelationTruncate(Relation rel, BlockNumber nblocks); extern void RelationCopyStorage(SMgrRelation src, SMgrRelation dst, ForkNumber forkNum, char relpersistence); -extern bool RelFileNodeSkippingWAL(RelFileNode rnode); +extern bool RelFileLocatorSkippingWAL(RelFileLocator rlocator); extern Size EstimatePendingSyncsSpace(void); extern void SerializePendingSyncs(Size maxSize, char *startAddress); extern void RestorePendingSyncs(char *startAddress); @@ -42,7 +42,7 @@ extern void RestorePendingSyncs(char *startAddress); */ extern void smgrDoPendingDeletes(bool isCommit); extern void smgrDoPendingSyncs(bool isCommit, bool isParallelWorker); -extern int smgrGetPendingDeletes(bool forCommit, RelFileNode **ptr); +extern int smgrGetPendingDeletes(bool forCommit, RelFileLocator **ptr); extern void AtSubCommit_smgr(void); extern void AtSubAbort_smgr(void); extern void PostPrepare_smgr(void); diff --git a/src/postgres/include/commands/async.h b/src/postgres/include/commands/async.h index 926af933..02da6ba7 100644 --- a/src/postgres/include/commands/async.h +++ b/src/postgres/include/commands/async.h @@ -3,7 +3,7 @@ * async.h * Asynchronous notification: NOTIFY, LISTEN, UNLISTEN * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/async.h diff --git a/src/postgres/include/commands/dbcommands.h b/src/postgres/include/commands/dbcommands.h index c4947fa7..5fbc3ca7 100644 --- a/src/postgres/include/commands/dbcommands.h +++ b/src/postgres/include/commands/dbcommands.h @@ -4,7 +4,7 @@ * Database management commands (create/drop database). * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/dbcommands.h @@ -30,6 +30,7 @@ extern ObjectAddress AlterDatabaseOwner(const char *dbname, Oid newOwnerId); extern Oid get_database_oid(const char *dbname, bool missing_ok); extern char *get_database_name(Oid dbid); +extern bool have_createdb_privilege(void); extern void check_encoding_locale_matches(int encoding, const char *collate, const char *ctype); diff --git a/src/postgres/include/commands/defrem.h b/src/postgres/include/commands/defrem.h index 1d3ce246..478203ed 100644 --- a/src/postgres/include/commands/defrem.h +++ b/src/postgres/include/commands/defrem.h @@ -4,7 +4,7 @@ * POSTGRES define and remove utility definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/defrem.h @@ -29,6 +29,7 @@ extern ObjectAddress DefineIndex(Oid relationId, Oid indexRelationId, Oid parentIndexId, Oid parentConstraintId, + int total_parts, bool is_alter_table, bool check_rights, bool check_not_in_use, diff --git a/src/postgres/include/commands/event_trigger.h b/src/postgres/include/commands/event_trigger.h index 10091c3a..5ed6ece5 100644 --- a/src/postgres/include/commands/event_trigger.h +++ b/src/postgres/include/commands/event_trigger.h @@ -3,7 +3,7 @@ * event_trigger.h * Declarations for command trigger handling. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/event_trigger.h diff --git a/src/postgres/include/commands/explain.h b/src/postgres/include/commands/explain.h index 666977fb..3d3e632a 100644 --- a/src/postgres/include/commands/explain.h +++ b/src/postgres/include/commands/explain.h @@ -3,7 +3,7 @@ * explain.h * prototypes for explain.c * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994-5, Regents of the University of California * * src/include/commands/explain.h @@ -46,6 +46,7 @@ typedef struct ExplainState bool timing; /* print detailed node timing */ bool summary; /* print total planning and execution timing */ bool settings; /* print modified settings */ + bool generic; /* generate a generic plan */ ExplainFormat format; /* output format */ /* state for output formatting --- not reset for each new plan tree */ int indent; /* current indentation level */ @@ -99,6 +100,7 @@ extern void ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc); extern void ExplainPrintJITSummary(ExplainState *es, QueryDesc *queryDesc); extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc); +extern void ExplainQueryParameters(ExplainState *es, ParamListInfo params, int maxlen); extern void ExplainBeginOutput(ExplainState *es); extern void ExplainEndOutput(ExplainState *es); diff --git a/src/postgres/include/commands/prepare.h b/src/postgres/include/commands/prepare.h index e30df8f7..79f16156 100644 --- a/src/postgres/include/commands/prepare.h +++ b/src/postgres/include/commands/prepare.h @@ -4,7 +4,7 @@ * PREPARE, EXECUTE and DEALLOCATE commands, and prepared-stmt storage * * - * Copyright (c) 2002-2022, PostgreSQL Global Development Group + * Copyright (c) 2002-2023, PostgreSQL Global Development Group * * src/include/commands/prepare.h * diff --git a/src/postgres/include/commands/tablespace.h b/src/postgres/include/commands/tablespace.h index 24b64733..f1961c18 100644 --- a/src/postgres/include/commands/tablespace.h +++ b/src/postgres/include/commands/tablespace.h @@ -4,7 +4,7 @@ * Tablespace management commands (create/drop tablespace). * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/tablespace.h @@ -50,7 +50,7 @@ extern void DropTableSpace(DropTableSpaceStmt *stmt); extern ObjectAddress RenameTableSpace(const char *oldname, const char *newname); extern Oid AlterTableSpaceOptions(AlterTableSpaceOptionsStmt *stmt); -extern void TablespaceCreateDbspace(Oid spcNode, Oid dbNode, bool isRedo); +extern void TablespaceCreateDbspace(Oid spcOid, Oid dbOid, bool isRedo); extern Oid GetDefaultTablespace(char relpersistence, bool partitioned); @@ -62,8 +62,8 @@ extern char *get_tablespace_name(Oid spc_oid); extern bool directory_is_empty(const char *path); extern void remove_tablespace_symlink(const char *linkloc); -extern void tblspc_redo(XLogReaderState *rptr); -extern void tblspc_desc(StringInfo buf, XLogReaderState *rptr); +extern void tblspc_redo(XLogReaderState *record); +extern void tblspc_desc(StringInfo buf, XLogReaderState *record); extern const char *tblspc_identify(uint8 info); #endif /* TABLESPACE_H */ diff --git a/src/postgres/include/commands/trigger.h b/src/postgres/include/commands/trigger.h index 03774388..430e3ca7 100644 --- a/src/postgres/include/commands/trigger.h +++ b/src/postgres/include/commands/trigger.h @@ -3,7 +3,7 @@ * trigger.h * Declarations for trigger handling. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/trigger.h @@ -166,15 +166,13 @@ extern void TriggerSetParentTrigger(Relation trigRel, Oid parentTrigId, Oid childTableId); extern void RemoveTriggerById(Oid trigOid); -extern Oid get_trigger_oid(Oid relid, const char *name, bool missing_ok); +extern Oid get_trigger_oid(Oid relid, const char *trigname, bool missing_ok); extern ObjectAddress renametrig(RenameStmt *stmt); -extern void EnableDisableTriggerNew(Relation rel, const char *tgname, - char fires_when, bool skip_system, bool recurse, - LOCKMODE lockmode); -extern void EnableDisableTrigger(Relation rel, const char *tgname, - char fires_when, bool skip_system, LOCKMODE lockmode); +extern void EnableDisableTrigger(Relation rel, const char *tgname, Oid tgparent, + char fires_when, bool skip_system, bool recurse, + LOCKMODE lockmode); extern void RelationBuildTriggers(Relation relation); @@ -213,7 +211,9 @@ extern bool ExecBRDeleteTriggers(EState *estate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple, - TupleTableSlot **epqslot); + TupleTableSlot **epqslot, + TM_Result *tmresult, + TM_FailureData *tmfd); extern void ExecARDeleteTriggers(EState *estate, ResultRelInfo *relinfo, ItemPointer tupleid, @@ -233,22 +233,23 @@ extern bool ExecBRUpdateTriggers(EState *estate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple, - TupleTableSlot *slot, - TM_FailureData *tmfdp); + TupleTableSlot *newslot, + TM_Result *tmresult, + TM_FailureData *tmfd); extern void ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo, ResultRelInfo *src_partinfo, ResultRelInfo *dst_partinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple, - TupleTableSlot *slot, + TupleTableSlot *newslot, List *recheckIndexes, TransitionCaptureState *transition_capture, bool is_crosspart_update); extern bool ExecIRUpdateTriggers(EState *estate, ResultRelInfo *relinfo, HeapTuple trigtuple, - TupleTableSlot *slot); + TupleTableSlot *newslot); extern void ExecBSTruncateTriggers(EState *estate, ResultRelInfo *relinfo); extern void ExecASTruncateTriggers(EState *estate, @@ -269,9 +270,9 @@ extern bool AfterTriggerPendingOnRel(Oid relid); * in utils/adt/ri_triggers.c */ extern bool RI_FKey_pk_upd_check_required(Trigger *trigger, Relation pk_rel, - TupleTableSlot *old_slot, TupleTableSlot *new_slot); + TupleTableSlot *oldslot, TupleTableSlot *newslot); extern bool RI_FKey_fk_upd_check_required(Trigger *trigger, Relation fk_rel, - TupleTableSlot *old_slot, TupleTableSlot *new_slot); + TupleTableSlot *oldslot, TupleTableSlot *newslot); extern bool RI_Initial_Check(Trigger *trigger, Relation fk_rel, Relation pk_rel); extern void RI_PartitionRemove_Check(Trigger *trigger, Relation fk_rel, diff --git a/src/postgres/include/commands/user.h b/src/postgres/include/commands/user.h index d3dd8303..97dcb937 100644 --- a/src/postgres/include/commands/user.h +++ b/src/postgres/include/commands/user.h @@ -15,9 +15,11 @@ #include "libpq/crypt.h" #include "nodes/parsenodes.h" #include "parser/parse_node.h" +#include "utils/guc.h" -/* GUC. Is actually of type PasswordType. */ -extern PGDLLIMPORT int Password_encryption; +/* GUCs */ +extern PGDLLIMPORT int Password_encryption; /* values from enum PasswordType */ +extern PGDLLIMPORT char *createrole_self_grant; /* Hook to check passwords in CreateRole() and AlterRole() */ typedef void (*check_password_hook_type) (const char *username, const char *shadow_pass, PasswordType password_type, Datum validuntil_time, bool validuntil_null); @@ -28,10 +30,14 @@ extern Oid CreateRole(ParseState *pstate, CreateRoleStmt *stmt); extern Oid AlterRole(ParseState *pstate, AlterRoleStmt *stmt); extern Oid AlterRoleSet(AlterRoleSetStmt *stmt); extern void DropRole(DropRoleStmt *stmt); -extern void GrantRole(GrantRoleStmt *stmt); +extern void GrantRole(ParseState *pstate, GrantRoleStmt *stmt); extern ObjectAddress RenameRole(const char *oldname, const char *newname); extern void DropOwnedObjects(DropOwnedStmt *stmt); extern void ReassignOwnedObjects(ReassignOwnedStmt *stmt); extern List *roleSpecsToIds(List *memberNames); +extern bool check_createrole_self_grant(char **newval, void **extra, + GucSource source); +extern void assign_createrole_self_grant(const char *newval, void *extra); + #endif /* USER_H */ diff --git a/src/postgres/include/commands/vacuum.h b/src/postgres/include/commands/vacuum.h index f38e1148..39fbd5f1 100644 --- a/src/postgres/include/commands/vacuum.h +++ b/src/postgres/include/commands/vacuum.h @@ -4,7 +4,7 @@ * header file for postgres vacuum cleaner and statistics analyzer * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/commands/vacuum.h @@ -186,8 +186,11 @@ typedef struct VacAttrStats #define VACOPT_FREEZE 0x08 /* FREEZE option */ #define VACOPT_FULL 0x10 /* FULL (non-concurrent) vacuum */ #define VACOPT_SKIP_LOCKED 0x20 /* skip if cannot get lock */ -#define VACOPT_PROCESS_TOAST 0x40 /* process the TOAST table, if any */ -#define VACOPT_DISABLE_PAGE_SKIPPING 0x80 /* don't skip any pages */ +#define VACOPT_PROCESS_MAIN 0x40 /* process main relation */ +#define VACOPT_PROCESS_TOAST 0x80 /* process the TOAST table, if any */ +#define VACOPT_DISABLE_PAGE_SKIPPING 0x100 /* don't skip any pages */ +#define VACOPT_SKIP_DATABASE_STATS 0x200 /* skip vac_update_datfrozenxid() */ +#define VACOPT_ONLY_DATABASE_STATS 0x400 /* only vac_update_datfrozenxid() */ /* * Values used by index_cleanup and truncate params. @@ -210,6 +213,9 @@ typedef enum VacOptValue * * Note that at least one of VACOPT_VACUUM and VACOPT_ANALYZE must be set * in options. + * + * When adding a new VacuumParam member, consider adding it to vacuumdb as + * well. */ typedef struct VacuumParams { @@ -235,6 +241,45 @@ typedef struct VacuumParams int nworkers; } VacuumParams; +/* + * VacuumCutoffs is immutable state that describes the cutoffs used by VACUUM. + * Established at the beginning of each VACUUM operation. + */ +struct VacuumCutoffs +{ + /* + * Existing pg_class fields at start of VACUUM + */ + TransactionId relfrozenxid; + MultiXactId relminmxid; + + /* + * OldestXmin is the Xid below which tuples deleted by any xact (that + * committed) should be considered DEAD, not just RECENTLY_DEAD. + * + * OldestMxact is the Mxid below which MultiXacts are definitely not seen + * as visible by any running transaction. + * + * OldestXmin and OldestMxact are also the most recent values that can + * ever be passed to vac_update_relstats() as frozenxid and minmulti + * arguments at the end of VACUUM. These same values should be passed + * when it turns out that VACUUM will leave no unfrozen XIDs/MXIDs behind + * in the table. + */ + TransactionId OldestXmin; + MultiXactId OldestMxact; + + /* + * FreezeLimit is the Xid below which all Xids are definitely frozen or + * removed in pages VACUUM scans and cleanup locks. + * + * MultiXactCutoff is the value below which all MultiXactIds are + * definitely removed from Xmax in pages VACUUM scans and cleanup locks. + */ + TransactionId FreezeLimit; + MultiXactId MultiXactCutoff; +}; + /* * VacDeadItems stores TIDs whose index tuples are deleted by index vacuuming. */ @@ -264,11 +309,15 @@ extern PGDLLIMPORT pg_atomic_uint32 *VacuumSharedCostBalance; extern PGDLLIMPORT pg_atomic_uint32 *VacuumActiveNWorkers; extern PGDLLIMPORT int VacuumCostBalanceLocal; +extern PGDLLIMPORT bool VacuumFailsafeActive; +extern PGDLLIMPORT double vacuum_cost_delay; +extern PGDLLIMPORT int vacuum_cost_limit; /* in commands/vacuum.c */ extern void ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel); extern void vacuum(List *relations, VacuumParams *params, - BufferAccessStrategy bstrategy, bool isTopLevel); + BufferAccessStrategy bstrategy, MemoryContext vac_context, + bool isTopLevel); extern void vac_open_indexes(Relation relation, LOCKMODE lockmode, int *nindexes, Relation **Irel); extern void vac_close_indexes(int nindexes, Relation *Irel, LOCKMODE lockmode); @@ -286,16 +335,9 @@ extern void vac_update_relstats(Relation relation, bool *frozenxid_updated, bool *minmulti_updated, bool in_outer_xact); -extern bool vacuum_set_xid_limits(Relation rel, - int freeze_min_age, int freeze_table_age, - int multixact_freeze_min_age, - int multixact_freeze_table_age, - TransactionId *oldestXmin, - MultiXactId *oldestMxact, - TransactionId *freezeLimit, - MultiXactId *multiXactCutoff); -extern bool vacuum_xid_failsafe_check(TransactionId relfrozenxid, - MultiXactId relminmxid); +extern bool vacuum_get_cutoffs(Relation rel, const VacuumParams *params, + struct VacuumCutoffs *cutoffs); +extern bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs); extern void vac_update_datfrozenxid(void); extern void vacuum_delay_point(void); extern bool vacuum_is_relation_owner(Oid relid, Form_pg_class reltuple, @@ -310,6 +352,10 @@ extern IndexBulkDeleteResult *vac_cleanup_one_index(IndexVacuumInfo *ivinfo, IndexBulkDeleteResult *istat); extern Size vac_max_items_to_alloc_size(int max_items); +/* In postmaster/autovacuum.c */ +extern void AutoVacuumUpdateCostLimit(void); +extern void VacuumUpdateCosts(void); + /* in commands/vacuumparallel.c */ extern ParallelVacuumState *parallel_vacuum_init(Relation rel, Relation *indrels, int nindexes, int nrequested_workers, diff --git a/src/postgres/include/commands/variable.h b/src/postgres/include/commands/variable.h deleted file mode 100644 index 0e5ddcbc..00000000 --- a/src/postgres/include/commands/variable.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * variable.h - * Routines for handling specialized SET variables. - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/commands/variable.h - */ -#ifndef VARIABLE_H -#define VARIABLE_H - -#include "utils/guc.h" - - -extern bool check_datestyle(char **newval, void **extra, GucSource source); -extern void assign_datestyle(const char *newval, void *extra); -extern bool check_timezone(char **newval, void **extra, GucSource source); -extern void assign_timezone(const char *newval, void *extra); -extern const char *show_timezone(void); -extern bool check_log_timezone(char **newval, void **extra, GucSource source); -extern void assign_log_timezone(const char *newval, void *extra); -extern const char *show_log_timezone(void); -extern bool check_transaction_read_only(bool *newval, void **extra, GucSource source); -extern bool check_XactIsoLevel(int *newval, void **extra, GucSource source); -extern bool check_transaction_deferrable(bool *newval, void **extra, GucSource source); -extern bool check_random_seed(double *newval, void **extra, GucSource source); -extern void assign_random_seed(double newval, void *extra); -extern const char *show_random_seed(void); -extern bool check_client_encoding(char **newval, void **extra, GucSource source); -extern void assign_client_encoding(const char *newval, void *extra); -extern bool check_session_authorization(char **newval, void **extra, GucSource source); -extern void assign_session_authorization(const char *newval, void *extra); -extern bool check_role(char **newval, void **extra, GucSource source); -extern void assign_role(const char *newval, void *extra); -extern const char *show_role(void); - -#endif /* VARIABLE_H */ diff --git a/src/postgres/include/common/cryptohash.h b/src/postgres/include/common/cryptohash.h new file mode 100644 index 00000000..24b6dbeb --- /dev/null +++ b/src/postgres/include/common/cryptohash.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------- + * + * cryptohash.h + * Generic headers for cryptographic hash functions. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/include/common/cryptohash.h + * + *------------------------------------------------------------------------- + */ + +#ifndef PG_CRYPTOHASH_H +#define PG_CRYPTOHASH_H + +/* Context Structures for each hash function */ +typedef enum +{ + PG_MD5 = 0, + PG_SHA1, + PG_SHA224, + PG_SHA256, + PG_SHA384, + PG_SHA512 +} pg_cryptohash_type; + +/* opaque context, private to each cryptohash implementation */ +typedef struct pg_cryptohash_ctx pg_cryptohash_ctx; + +extern pg_cryptohash_ctx *pg_cryptohash_create(pg_cryptohash_type type); +extern int pg_cryptohash_init(pg_cryptohash_ctx *ctx); +extern int pg_cryptohash_update(pg_cryptohash_ctx *ctx, const uint8 *data, size_t len); +extern int pg_cryptohash_final(pg_cryptohash_ctx *ctx, uint8 *dest, size_t len); +extern void pg_cryptohash_free(pg_cryptohash_ctx *ctx); +extern const char *pg_cryptohash_error(pg_cryptohash_ctx *ctx); + +#endif /* PG_CRYPTOHASH_H */ diff --git a/src/postgres/include/common/file_perm.h b/src/postgres/include/common/file_perm.h index 48d68ef2..978c0d07 100644 --- a/src/postgres/include/common/file_perm.h +++ b/src/postgres/include/common/file_perm.h @@ -3,7 +3,7 @@ * File and directory permission definitions * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/file_perm.h diff --git a/src/postgres/include/common/hashfn.h b/src/postgres/include/common/hashfn.h index 8d539c0a..5e89aef9 100644 --- a/src/postgres/include/common/hashfn.h +++ b/src/postgres/include/common/hashfn.h @@ -1,7 +1,7 @@ /* * Utilities for working with hash values. * - * Portions Copyright (c) 2017-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2017-2023, PostgreSQL Global Development Group */ #ifndef HASHFN_H diff --git a/src/postgres/include/common/int.h b/src/postgres/include/common/int.h new file mode 100644 index 00000000..45080089 --- /dev/null +++ b/src/postgres/include/common/int.h @@ -0,0 +1,437 @@ +/*------------------------------------------------------------------------- + * + * int.h + * Routines to perform integer math, while checking for overflows. + * + * The routines in this file are intended to be well defined C, without + * relying on compiler flags like -fwrapv. + * + * To reduce the overhead of these routines try to use compiler intrinsics + * where available. That's not that important for the 16, 32 bit cases, but + * the 64 bit cases can be considerably faster with intrinsics. In case no + * intrinsics are available 128 bit math is used where available. + * + * Copyright (c) 2017-2023, PostgreSQL Global Development Group + * + * src/include/common/int.h + * + *------------------------------------------------------------------------- + */ +#ifndef COMMON_INT_H +#define COMMON_INT_H + + +/*--------- + * The following guidelines apply to all the routines: + * - If a + b overflows, return true, otherwise store the result of a + b + * into *result. The content of *result is implementation defined in case of + * overflow. + * - If a - b overflows, return true, otherwise store the result of a - b + * into *result. The content of *result is implementation defined in case of + * overflow. + * - If a * b overflows, return true, otherwise store the result of a * b + * into *result. The content of *result is implementation defined in case of + * overflow. + *--------- + */ + +/*------------------------------------------------------------------------ + * Overflow routines for signed integers + *------------------------------------------------------------------------ + */ + +/* + * INT16 + */ +static inline bool +pg_add_s16_overflow(int16 a, int16 b, int16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + int32 res = (int32) a + (int32) b; + + if (res > PG_INT16_MAX || res < PG_INT16_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int16) res; + return false; +#endif +} + +static inline bool +pg_sub_s16_overflow(int16 a, int16 b, int16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + int32 res = (int32) a - (int32) b; + + if (res > PG_INT16_MAX || res < PG_INT16_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int16) res; + return false; +#endif +} + +static inline bool +pg_mul_s16_overflow(int16 a, int16 b, int16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#else + int32 res = (int32) a * (int32) b; + + if (res > PG_INT16_MAX || res < PG_INT16_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int16) res; + return false; +#endif +} + +/* + * INT32 + */ +static inline bool +pg_add_s32_overflow(int32 a, int32 b, int32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + int64 res = (int64) a + (int64) b; + + if (res > PG_INT32_MAX || res < PG_INT32_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int32) res; + return false; +#endif +} + +static inline bool +pg_sub_s32_overflow(int32 a, int32 b, int32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + int64 res = (int64) a - (int64) b; + + if (res > PG_INT32_MAX || res < PG_INT32_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int32) res; + return false; +#endif +} + +static inline bool +pg_mul_s32_overflow(int32 a, int32 b, int32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#else + int64 res = (int64) a * (int64) b; + + if (res > PG_INT32_MAX || res < PG_INT32_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int32) res; + return false; +#endif +} + +/* + * INT64 + */ +static inline bool +pg_add_s64_overflow(int64 a, int64 b, int64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#elif defined(HAVE_INT128) + int128 res = (int128) a + (int128) b; + + if (res > PG_INT64_MAX || res < PG_INT64_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int64) res; + return false; +#else + if ((a > 0 && b > 0 && a > PG_INT64_MAX - b) || + (a < 0 && b < 0 && a < PG_INT64_MIN - b)) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a + b; + return false; +#endif +} + +static inline bool +pg_sub_s64_overflow(int64 a, int64 b, int64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#elif defined(HAVE_INT128) + int128 res = (int128) a - (int128) b; + + if (res > PG_INT64_MAX || res < PG_INT64_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int64) res; + return false; +#else + if ((a < 0 && b > 0 && a < PG_INT64_MIN + b) || + (a > 0 && b < 0 && a > PG_INT64_MAX + b)) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a - b; + return false; +#endif +} + +static inline bool +pg_mul_s64_overflow(int64 a, int64 b, int64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#elif defined(HAVE_INT128) + int128 res = (int128) a * (int128) b; + + if (res > PG_INT64_MAX || res < PG_INT64_MIN) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (int64) res; + return false; +#else + /* + * Overflow can only happen if at least one value is outside the range + * sqrt(min)..sqrt(max) so check that first as the division can be quite a + * bit more expensive than the multiplication. + * + * Multiplying by 0 or 1 can't overflow of course and checking for 0 + * separately avoids any risk of dividing by 0. Be careful about dividing + * INT_MIN by -1 also, note reversing the a and b to ensure we're always + * dividing it by a positive value. + * + */ + if ((a > PG_INT32_MAX || a < PG_INT32_MIN || + b > PG_INT32_MAX || b < PG_INT32_MIN) && + a != 0 && a != 1 && b != 0 && b != 1 && + ((a > 0 && b > 0 && a > PG_INT64_MAX / b) || + (a > 0 && b < 0 && b < PG_INT64_MIN / a) || + (a < 0 && b > 0 && a < PG_INT64_MIN / b) || + (a < 0 && b < 0 && a < PG_INT64_MAX / b))) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a * b; + return false; +#endif +} + +/*------------------------------------------------------------------------ + * Overflow routines for unsigned integers + *------------------------------------------------------------------------ + */ + +/* + * UINT16 + */ +static inline bool +pg_add_u16_overflow(uint16 a, uint16 b, uint16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + uint16 res = a + b; + + if (res < a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +static inline bool +pg_sub_u16_overflow(uint16 a, uint16 b, uint16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + if (b > a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a - b; + return false; +#endif +} + +static inline bool +pg_mul_u16_overflow(uint16 a, uint16 b, uint16 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#else + uint32 res = (uint32) a * (uint32) b; + + if (res > PG_UINT16_MAX) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (uint16) res; + return false; +#endif +} + +/* + * INT32 + */ +static inline bool +pg_add_u32_overflow(uint32 a, uint32 b, uint32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + uint32 res = a + b; + + if (res < a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +static inline bool +pg_sub_u32_overflow(uint32 a, uint32 b, uint32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + if (b > a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a - b; + return false; +#endif +} + +static inline bool +pg_mul_u32_overflow(uint32 a, uint32 b, uint32 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#else + uint64 res = (uint64) a * (uint64) b; + + if (res > PG_UINT32_MAX) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (uint32) res; + return false; +#endif +} + +/* + * UINT64 + */ +static inline bool +pg_add_u64_overflow(uint64 a, uint64 b, uint64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + uint64 res = a + b; + + if (res < a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +static inline bool +pg_sub_u64_overflow(uint64 a, uint64 b, uint64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + if (b > a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a - b; + return false; +#endif +} + +static inline bool +pg_mul_u64_overflow(uint64 a, uint64 b, uint64 *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#elif defined(HAVE_INT128) + uint128 res = (uint128) a * (uint128) b; + + if (res > PG_UINT64_MAX) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = (uint64) res; + return false; +#else + uint64 res = a * b; + + if (a != 0 && b != res / a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +#endif /* COMMON_INT_H */ diff --git a/src/postgres/include/common/ip.h b/src/postgres/include/common/ip.h index 84145209..9f2ed5fe 100644 --- a/src/postgres/include/common/ip.h +++ b/src/postgres/include/common/ip.h @@ -5,7 +5,7 @@ * * These definitions are used by both frontend and backend code. * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * src/include/common/ip.h * @@ -14,7 +14,9 @@ #ifndef IP_H #define IP_H -#include "getaddrinfo.h" /* pgrminclude ignore */ +#include +#include + #include "libpq/pqcomm.h" /* pgrminclude ignore */ diff --git a/src/postgres/include/common/keywords.h b/src/postgres/include/common/keywords.h index b85237f9..6bb12d8e 100644 --- a/src/postgres/include/common/keywords.h +++ b/src/postgres/include/common/keywords.h @@ -4,7 +4,7 @@ * PostgreSQL's list of SQL keywords * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/keywords.h diff --git a/src/postgres/include/common/kwlookup.h b/src/postgres/include/common/kwlookup.h index 48d7f08b..3fc3faa0 100644 --- a/src/postgres/include/common/kwlookup.h +++ b/src/postgres/include/common/kwlookup.h @@ -4,7 +4,7 @@ * Key word lookup for PostgreSQL * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/kwlookup.h @@ -32,7 +32,7 @@ typedef struct ScanKeywordList } ScanKeywordList; -extern int ScanKeywordLookup(const char *text, const ScanKeywordList *keywords); +extern int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords); /* Code that wants to retrieve the text of the N'th keyword should use this. */ static inline const char * diff --git a/src/postgres/include/common/pg_prng.h b/src/postgres/include/common/pg_prng.h index 4be9a83e..b5c0b8d2 100644 --- a/src/postgres/include/common/pg_prng.h +++ b/src/postgres/include/common/pg_prng.h @@ -2,7 +2,7 @@ * * Pseudo-Random Number Generator * - * Copyright (c) 2021-2022, PostgreSQL Global Development Group + * Copyright (c) 2021-2023, PostgreSQL Global Development Group * * src/include/common/pg_prng.h * @@ -26,7 +26,7 @@ typedef struct pg_prng_state * Callers not needing local PRNG series may use this global state vector, * after initializing it with one of the pg_prng_...seed functions. */ -extern PGDLLIMPORT __thread pg_prng_state pg_global_prng_state; +extern PGDLLIMPORT pg_prng_state pg_global_prng_state; extern void pg_prng_seed(pg_prng_state *state, uint64 seed); extern void pg_prng_fseed(pg_prng_state *state, double fseed); @@ -55,6 +55,7 @@ extern uint32 pg_prng_uint32(pg_prng_state *state); extern int32 pg_prng_int32(pg_prng_state *state); extern int32 pg_prng_int32p(pg_prng_state *state); extern double pg_prng_double(pg_prng_state *state); +extern double pg_prng_double_normal(pg_prng_state *state); extern bool pg_prng_bool(pg_prng_state *state); #endif /* PG_PRNG_H */ diff --git a/src/postgres/include/common/relpath.h b/src/postgres/include/common/relpath.h index 13849a37..511c2168 100644 --- a/src/postgres/include/common/relpath.h +++ b/src/postgres/include/common/relpath.h @@ -3,7 +3,7 @@ * relpath.h * Declarations for GetRelationPath() and friends * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/relpath.h @@ -19,6 +19,13 @@ */ #include "catalog/catversion.h" /* pgrminclude ignore */ +/* + * RelFileNumber data type identifies the specific relation file name. + */ +typedef Oid RelFileNumber; +#define InvalidRelFileNumber ((RelFileNumber) InvalidOid) +#define RelFileNumberIsValid(relnumber) \ + ((bool) ((relnumber) != InvalidRelFileNumber)) /* * Name of major-version-specific tablespace subdirectories @@ -64,27 +71,27 @@ extern int forkname_chars(const char *str, ForkNumber *fork); /* * Stuff for computing filesystem pathnames for relations. */ -extern char *GetDatabasePath(Oid dbNode, Oid spcNode); +extern char *GetDatabasePath(Oid dbOid, Oid spcOid); -extern char *GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, +extern char *GetRelationPath(Oid dbOid, Oid spcOid, RelFileNumber relNumber, int backendId, ForkNumber forkNumber); /* * Wrapper macros for GetRelationPath. Beware of multiple - * evaluation of the RelFileNode or RelFileNodeBackend argument! + * evaluation of the RelFileLocator or RelFileLocatorBackend argument! */ -/* First argument is a RelFileNode */ -#define relpathbackend(rnode, backend, forknum) \ - GetRelationPath((rnode).dbNode, (rnode).spcNode, (rnode).relNode, \ +/* First argument is a RelFileLocator */ +#define relpathbackend(rlocator, backend, forknum) \ + GetRelationPath((rlocator).dbOid, (rlocator).spcOid, (rlocator).relNumber, \ backend, forknum) -/* First argument is a RelFileNode */ -#define relpathperm(rnode, forknum) \ - relpathbackend(rnode, InvalidBackendId, forknum) +/* First argument is a RelFileLocator */ +#define relpathperm(rlocator, forknum) \ + relpathbackend(rlocator, InvalidBackendId, forknum) -/* First argument is a RelFileNodeBackend */ -#define relpath(rnode, forknum) \ - relpathbackend((rnode).node, (rnode).backend, forknum) +/* First argument is a RelFileLocatorBackend */ +#define relpath(rlocator, forknum) \ + relpathbackend((rlocator).locator, (rlocator).backend, forknum) #endif /* RELPATH_H */ diff --git a/src/postgres/include/common/scram-common.h b/src/postgres/include/common/scram-common.h new file mode 100644 index 00000000..5ccff96e --- /dev/null +++ b/src/postgres/include/common/scram-common.h @@ -0,0 +1,70 @@ +/*------------------------------------------------------------------------- + * + * scram-common.h + * Declarations for helper functions used for SCRAM authentication + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/common/scram-common.h + * + *------------------------------------------------------------------------- + */ +#ifndef SCRAM_COMMON_H +#define SCRAM_COMMON_H + +#include "common/cryptohash.h" +#include "common/sha2.h" + +/* Name of SCRAM mechanisms per IANA */ +#define SCRAM_SHA_256_NAME "SCRAM-SHA-256" +#define SCRAM_SHA_256_PLUS_NAME "SCRAM-SHA-256-PLUS" /* with channel binding */ + +/* Length of SCRAM keys (client and server) */ +#define SCRAM_SHA_256_KEY_LEN PG_SHA256_DIGEST_LENGTH + +/* + * Size of buffers used internally by SCRAM routines, that should be the + * maximum of SCRAM_SHA_*_KEY_LEN among the hash methods supported. + */ +#define SCRAM_MAX_KEY_LEN SCRAM_SHA_256_KEY_LEN + +/* + * Size of random nonce generated in the authentication exchange. This + * is in "raw" number of bytes, the actual nonces sent over the wire are + * encoded using only ASCII-printable characters. + */ +#define SCRAM_RAW_NONCE_LEN 18 + +/* + * Length of salt when generating new secrets, in bytes. (It will be stored + * and sent over the wire encoded in Base64.) 16 bytes is what the example in + * RFC 7677 uses. + */ +#define SCRAM_DEFAULT_SALT_LEN 16 + +/* + * Default number of iterations when generating secret. Should be at least + * 4096 per RFC 7677. + */ +#define SCRAM_SHA_256_DEFAULT_ITERATIONS 4096 + +extern int scram_SaltedPassword(const char *password, + pg_cryptohash_type hash_type, int key_length, + const char *salt, int saltlen, int iterations, + uint8 *result, const char **errstr); +extern int scram_H(const uint8 *input, pg_cryptohash_type hash_type, + int key_length, uint8 *result, + const char **errstr); +extern int scram_ClientKey(const uint8 *salted_password, + pg_cryptohash_type hash_type, int key_length, + uint8 *result, const char **errstr); +extern int scram_ServerKey(const uint8 *salted_password, + pg_cryptohash_type hash_type, int key_length, + uint8 *result, const char **errstr); + +extern char *scram_build_secret(pg_cryptohash_type hash_type, int key_length, + const char *salt, int saltlen, int iterations, + const char *password, const char **errstr); + +#endif /* SCRAM_COMMON_H */ diff --git a/src/postgres/include/common/sha2.h b/src/postgres/include/common/sha2.h new file mode 100644 index 00000000..9b46cd1a --- /dev/null +++ b/src/postgres/include/common/sha2.h @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------- + * + * sha2.h + * Constants related to SHA224, 256, 384 AND 512. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/include/common/sha2.h + * + *------------------------------------------------------------------------- + */ + +#ifndef _PG_SHA2_H_ +#define _PG_SHA2_H_ + +/*** SHA224/256/384/512 Various Length Definitions ***********************/ +#define PG_SHA224_BLOCK_LENGTH 64 +#define PG_SHA224_DIGEST_LENGTH 28 +#define PG_SHA224_DIGEST_STRING_LENGTH (PG_SHA224_DIGEST_LENGTH * 2 + 1) +#define PG_SHA256_BLOCK_LENGTH 64 +#define PG_SHA256_DIGEST_LENGTH 32 +#define PG_SHA256_DIGEST_STRING_LENGTH (PG_SHA256_DIGEST_LENGTH * 2 + 1) +#define PG_SHA384_BLOCK_LENGTH 128 +#define PG_SHA384_DIGEST_LENGTH 48 +#define PG_SHA384_DIGEST_STRING_LENGTH (PG_SHA384_DIGEST_LENGTH * 2 + 1) +#define PG_SHA512_BLOCK_LENGTH 128 +#define PG_SHA512_DIGEST_LENGTH 64 +#define PG_SHA512_DIGEST_STRING_LENGTH (PG_SHA512_DIGEST_LENGTH * 2 + 1) + +#endif /* _PG_SHA2_H_ */ diff --git a/src/postgres/include/common/string.h b/src/postgres/include/common/string.h index cf00fb53..977ef327 100644 --- a/src/postgres/include/common/string.h +++ b/src/postgres/include/common/string.h @@ -2,7 +2,7 @@ * string.h * string handling helpers * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/string.h @@ -10,13 +10,15 @@ #ifndef COMMON_STRING_H #define COMMON_STRING_H +#include + struct StringInfoData; /* avoid including stringinfo.h here */ typedef struct PromptInterruptContext { /* To avoid including here, jmpbuf is declared "void *" */ void *jmpbuf; /* existing longjmp buffer */ - volatile bool *enabled; /* flag that enables longjmp-on-interrupt */ + volatile sig_atomic_t *enabled; /* flag that enables longjmp-on-interrupt */ bool canceled; /* indicates whether cancellation occurred */ } PromptInterruptContext; @@ -24,7 +26,7 @@ typedef struct PromptInterruptContext extern bool pg_str_endswith(const char *str, const char *end); extern int strtoint(const char *pg_restrict str, char **pg_restrict endptr, int base); -extern void pg_clean_ascii(char *str); +extern char *pg_clean_ascii(const char *str, int alloc_flags); extern int pg_strip_crlf(char *str); extern bool pg_is_ascii(const char *str); diff --git a/src/postgres/include/common/unicode_east_asian_fw_table.h b/src/postgres/include/common/unicode_east_asian_fw_table.h index e9abfa24..f77e6dfd 100644 --- a/src/postgres/include/common/unicode_east_asian_fw_table.h +++ b/src/postgres/include/common/unicode_east_asian_fw_table.h @@ -69,7 +69,9 @@ static const struct mbinterval east_asian_fw[] = { {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, + {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004}, @@ -103,7 +105,7 @@ static const struct mbinterval east_asian_fw[] = { {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7}, - {0x1F6DD, 0x1F6DF}, + {0x1F6DC, 0x1F6DF}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, @@ -111,15 +113,13 @@ static const struct mbinterval east_asian_fw[] = { {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, - {0x1FA70, 0x1FA74}, - {0x1FA78, 0x1FA7C}, - {0x1FA80, 0x1FA86}, - {0x1FA90, 0x1FAAC}, - {0x1FAB0, 0x1FABA}, - {0x1FAC0, 0x1FAC5}, - {0x1FAD0, 0x1FAD9}, - {0x1FAE0, 0x1FAE7}, - {0x1FAF0, 0x1FAF6}, + {0x1FA70, 0x1FA7C}, + {0x1FA80, 0x1FA88}, + {0x1FA90, 0x1FABD}, + {0x1FABF, 0x1FAC5}, + {0x1FACE, 0x1FADB}, + {0x1FAE0, 0x1FAE8}, + {0x1FAF0, 0x1FAF8}, {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, }; diff --git a/src/postgres/include/common/unicode_combining_table.h b/src/postgres/include/common/unicode_nonspacing_table.h similarity index 88% rename from src/postgres/include/common/unicode_combining_table.h rename to src/postgres/include/common/unicode_nonspacing_table.h index de1eab3a..8d00e127 100644 --- a/src/postgres/include/common/unicode_combining_table.h +++ b/src/postgres/include/common/unicode_nonspacing_table.h @@ -1,6 +1,7 @@ -/* generated by src/common/unicode/generate-unicode_combining_table.pl, do not edit */ +/* generated by src/common/unicode/generate-unicode_nonspacing_table.pl, do not edit */ -static const struct mbinterval combining[] = { +static const struct mbinterval nonspacing[] = { + {0x00AD, 0x00AD}, {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD}, @@ -8,13 +9,16 @@ static const struct mbinterval combining[] = { {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, + {0x0600, 0x0605}, {0x0610, 0x061A}, + {0x061C, 0x061C}, {0x064B, 0x065F}, {0x0670, 0x0670}, - {0x06D6, 0x06DC}, + {0x06D6, 0x06DD}, {0x06DF, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, + {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A}, {0x07A6, 0x07B0}, @@ -25,9 +29,8 @@ static const struct mbinterval combining[] = { {0x0825, 0x0827}, {0x0829, 0x082D}, {0x0859, 0x085B}, - {0x0898, 0x089F}, - {0x08CA, 0x08E1}, - {0x08E3, 0x0902}, + {0x0890, 0x089F}, + {0x08CA, 0x0902}, {0x093A, 0x093A}, {0x093C, 0x093C}, {0x0941, 0x0948}, @@ -83,7 +86,7 @@ static const struct mbinterval combining[] = { {0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EBC}, - {0x0EC8, 0x0ECD}, + {0x0EC8, 0x0ECE}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, @@ -114,8 +117,7 @@ static const struct mbinterval combining[] = { {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, - {0x180B, 0x180D}, - {0x180F, 0x180F}, + {0x180B, 0x180F}, {0x1885, 0x1886}, {0x18A9, 0x18A9}, {0x1920, 0x1922}, @@ -152,6 +154,9 @@ static const struct mbinterval combining[] = { {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DFF}, + {0x200B, 0x200F}, + {0x202A, 0x202E}, + {0x2060, 0x206F}, {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F}, @@ -196,6 +201,8 @@ static const struct mbinterval combining[] = { {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, + {0xFEFF, 0xFEFF}, + {0xFFF9, 0xFFFB}, {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, {0x10376, 0x1037A}, @@ -204,6 +211,7 @@ static const struct mbinterval combining[] = { {0x10AE5, 0x10AE6}, {0x10D24, 0x10D27}, {0x10EAB, 0x10EAC}, + {0x10EFD, 0x10EFF}, {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, {0x11001, 0x11001}, @@ -213,7 +221,8 @@ static const struct mbinterval combining[] = { {0x1107F, 0x11081}, {0x110B3, 0x110B6}, {0x110B9, 0x110BA}, - {0x110C2, 0x110C2}, + {0x110BD, 0x110BD}, + {0x110C2, 0x110CD}, {0x11100, 0x11102}, {0x11127, 0x1112B}, {0x1112D, 0x11134}, @@ -226,6 +235,7 @@ static const struct mbinterval combining[] = { {0x11234, 0x11234}, {0x11236, 0x11237}, {0x1123E, 0x1123E}, + {0x11241, 0x11241}, {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, {0x11300, 0x11301}, @@ -281,15 +291,21 @@ static const struct mbinterval combining[] = { {0x11D95, 0x11D95}, {0x11D97, 0x11D97}, {0x11EF3, 0x11EF4}, + {0x11F00, 0x11F01}, + {0x11F36, 0x11F3A}, + {0x11F40, 0x11F40}, + {0x11F42, 0x11F42}, + {0x13430, 0x13440}, + {0x13447, 0x13455}, {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F4F, 0x16F4F}, {0x16F8F, 0x16F92}, {0x16FE4, 0x16FE4}, {0x1BC9D, 0x1BC9E}, - {0x1CF00, 0x1CF46}, + {0x1BCA0, 0x1CF46}, {0x1D167, 0x1D169}, - {0x1D17B, 0x1D182}, + {0x1D173, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, @@ -299,10 +315,12 @@ static const struct mbinterval combining[] = { {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DAAF}, {0x1E000, 0x1E02A}, + {0x1E08F, 0x1E08F}, {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, {0x1E2EC, 0x1E2EF}, + {0x1E4EC, 0x1E4EF}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A}, - {0xE0100, 0xE01EF}, + {0xE0001, 0xE01EF}, }; diff --git a/src/postgres/include/copyfuncs.funcs.c b/src/postgres/include/copyfuncs.funcs.c new file mode 100644 index 00000000..61dc7f13 --- /dev/null +++ b/src/postgres/include/copyfuncs.funcs.c @@ -0,0 +1,5013 @@ +/*------------------------------------------------------------------------- + * + * copyfuncs.funcs.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ +#include "access/amapi.h" +#include "access/sdir.h" +#include "access/tableam.h" +#include "access/tsmapi.h" +#include "commands/event_trigger.h" +#include "commands/trigger.h" +#include "executor/tuptable.h" +#include "foreign/fdwapi.h" +#include "nodes/bitmapset.h" +#include "nodes/execnodes.h" +#include "nodes/extensible.h" +#include "nodes/lockoptions.h" +#include "nodes/miscnodes.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pathnodes.h" +#include "nodes/plannodes.h" +#include "nodes/primnodes.h" +#include "nodes/replnodes.h" +#include "nodes/supportnodes.h" +#include "nodes/value.h" +#include "utils/rel.h" + +static Alias * +_copyAlias(const Alias *from) +{ + Alias *newnode = makeNode(Alias); + + COPY_STRING_FIELD(aliasname); + COPY_NODE_FIELD(colnames); + + return newnode; +} + +static RangeVar * +_copyRangeVar(const RangeVar *from) +{ + RangeVar *newnode = makeNode(RangeVar); + + COPY_STRING_FIELD(catalogname); + COPY_STRING_FIELD(schemaname); + COPY_STRING_FIELD(relname); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(relpersistence); + COPY_NODE_FIELD(alias); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TableFunc * +_copyTableFunc(const TableFunc *from) +{ + TableFunc *newnode = makeNode(TableFunc); + + COPY_NODE_FIELD(ns_uris); + COPY_NODE_FIELD(ns_names); + COPY_NODE_FIELD(docexpr); + COPY_NODE_FIELD(rowexpr); + COPY_NODE_FIELD(colnames); + COPY_NODE_FIELD(coltypes); + COPY_NODE_FIELD(coltypmods); + COPY_NODE_FIELD(colcollations); + COPY_NODE_FIELD(colexprs); + COPY_NODE_FIELD(coldefexprs); + COPY_BITMAPSET_FIELD(notnulls); + COPY_SCALAR_FIELD(ordinalitycol); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static IntoClause * +_copyIntoClause(const IntoClause *from) +{ + IntoClause *newnode = makeNode(IntoClause); + + COPY_NODE_FIELD(rel); + COPY_NODE_FIELD(colNames); + COPY_STRING_FIELD(accessMethod); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(onCommit); + COPY_STRING_FIELD(tableSpaceName); + COPY_NODE_FIELD(viewQuery); + COPY_SCALAR_FIELD(skipData); + + return newnode; +} + +static Var * +_copyVar(const Var *from) +{ + Var *newnode = makeNode(Var); + + COPY_SCALAR_FIELD(varno); + COPY_SCALAR_FIELD(varattno); + COPY_SCALAR_FIELD(vartype); + COPY_SCALAR_FIELD(vartypmod); + COPY_SCALAR_FIELD(varcollid); + COPY_BITMAPSET_FIELD(varnullingrels); + COPY_SCALAR_FIELD(varlevelsup); + COPY_SCALAR_FIELD(varnosyn); + COPY_SCALAR_FIELD(varattnosyn); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static Param * +_copyParam(const Param *from) +{ + Param *newnode = makeNode(Param); + + COPY_SCALAR_FIELD(paramkind); + COPY_SCALAR_FIELD(paramid); + COPY_SCALAR_FIELD(paramtype); + COPY_SCALAR_FIELD(paramtypmod); + COPY_SCALAR_FIELD(paramcollid); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static Aggref * +_copyAggref(const Aggref *from) +{ + Aggref *newnode = makeNode(Aggref); + + COPY_SCALAR_FIELD(aggfnoid); + COPY_SCALAR_FIELD(aggtype); + COPY_SCALAR_FIELD(aggcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_SCALAR_FIELD(aggtranstype); + COPY_NODE_FIELD(aggargtypes); + COPY_NODE_FIELD(aggdirectargs); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(aggorder); + COPY_NODE_FIELD(aggdistinct); + COPY_NODE_FIELD(aggfilter); + COPY_SCALAR_FIELD(aggstar); + COPY_SCALAR_FIELD(aggvariadic); + COPY_SCALAR_FIELD(aggkind); + COPY_SCALAR_FIELD(aggpresorted); + COPY_SCALAR_FIELD(agglevelsup); + COPY_SCALAR_FIELD(aggsplit); + COPY_SCALAR_FIELD(aggno); + COPY_SCALAR_FIELD(aggtransno); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static GroupingFunc * +_copyGroupingFunc(const GroupingFunc *from) +{ + GroupingFunc *newnode = makeNode(GroupingFunc); + + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(refs); + COPY_NODE_FIELD(cols); + COPY_SCALAR_FIELD(agglevelsup); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowFunc * +_copyWindowFunc(const WindowFunc *from) +{ + WindowFunc *newnode = makeNode(WindowFunc); + + COPY_SCALAR_FIELD(winfnoid); + COPY_SCALAR_FIELD(wintype); + COPY_SCALAR_FIELD(wincollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(aggfilter); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(winstar); + COPY_SCALAR_FIELD(winagg); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubscriptingRef * +_copySubscriptingRef(const SubscriptingRef *from) +{ + SubscriptingRef *newnode = makeNode(SubscriptingRef); + + COPY_SCALAR_FIELD(refcontainertype); + COPY_SCALAR_FIELD(refelemtype); + COPY_SCALAR_FIELD(refrestype); + COPY_SCALAR_FIELD(reftypmod); + COPY_SCALAR_FIELD(refcollid); + COPY_NODE_FIELD(refupperindexpr); + COPY_NODE_FIELD(reflowerindexpr); + COPY_NODE_FIELD(refexpr); + COPY_NODE_FIELD(refassgnexpr); + + return newnode; +} + +static FuncExpr * +_copyFuncExpr(const FuncExpr *from) +{ + FuncExpr *newnode = makeNode(FuncExpr); + + COPY_SCALAR_FIELD(funcid); + COPY_SCALAR_FIELD(funcresulttype); + COPY_SCALAR_FIELD(funcretset); + COPY_SCALAR_FIELD(funcvariadic); + COPY_SCALAR_FIELD(funcformat); + COPY_SCALAR_FIELD(funccollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NamedArgExpr * +_copyNamedArgExpr(const NamedArgExpr *from) +{ + NamedArgExpr *newnode = makeNode(NamedArgExpr); + + COPY_NODE_FIELD(arg); + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(argnumber); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static OpExpr * +_copyOpExpr(const OpExpr *from) +{ + OpExpr *newnode = makeNode(OpExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static DistinctExpr * +_copyDistinctExpr(const DistinctExpr *from) +{ + DistinctExpr *newnode = makeNode(DistinctExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NullIfExpr * +_copyNullIfExpr(const NullIfExpr *from) +{ + NullIfExpr *newnode = makeNode(NullIfExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ScalarArrayOpExpr * +_copyScalarArrayOpExpr(const ScalarArrayOpExpr *from) +{ + ScalarArrayOpExpr *newnode = makeNode(ScalarArrayOpExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(hashfuncid); + COPY_SCALAR_FIELD(negfuncid); + COPY_SCALAR_FIELD(useOr); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static BoolExpr * +_copyBoolExpr(const BoolExpr *from) +{ + BoolExpr *newnode = makeNode(BoolExpr); + + COPY_SCALAR_FIELD(boolop); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubLink * +_copySubLink(const SubLink *from) +{ + SubLink *newnode = makeNode(SubLink); + + COPY_SCALAR_FIELD(subLinkType); + COPY_SCALAR_FIELD(subLinkId); + COPY_NODE_FIELD(testexpr); + COPY_NODE_FIELD(operName); + COPY_NODE_FIELD(subselect); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubPlan * +_copySubPlan(const SubPlan *from) +{ + SubPlan *newnode = makeNode(SubPlan); + + COPY_SCALAR_FIELD(subLinkType); + COPY_NODE_FIELD(testexpr); + COPY_NODE_FIELD(paramIds); + COPY_SCALAR_FIELD(plan_id); + COPY_STRING_FIELD(plan_name); + COPY_SCALAR_FIELD(firstColType); + COPY_SCALAR_FIELD(firstColTypmod); + COPY_SCALAR_FIELD(firstColCollation); + COPY_SCALAR_FIELD(useHashTable); + COPY_SCALAR_FIELD(unknownEqFalse); + COPY_SCALAR_FIELD(parallel_safe); + COPY_NODE_FIELD(setParam); + COPY_NODE_FIELD(parParam); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(startup_cost); + COPY_SCALAR_FIELD(per_call_cost); + + return newnode; +} + +static AlternativeSubPlan * +_copyAlternativeSubPlan(const AlternativeSubPlan *from) +{ + AlternativeSubPlan *newnode = makeNode(AlternativeSubPlan); + + COPY_NODE_FIELD(subplans); + + return newnode; +} + +static FieldSelect * +_copyFieldSelect(const FieldSelect *from) +{ + FieldSelect *newnode = makeNode(FieldSelect); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(fieldnum); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + + return newnode; +} + +static FieldStore * +_copyFieldStore(const FieldStore *from) +{ + FieldStore *newnode = makeNode(FieldStore); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(newvals); + COPY_NODE_FIELD(fieldnums); + COPY_SCALAR_FIELD(resulttype); + + return newnode; +} + +static RelabelType * +_copyRelabelType(const RelabelType *from) +{ + RelabelType *newnode = makeNode(RelabelType); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(relabelformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceViaIO * +_copyCoerceViaIO(const CoerceViaIO *from) +{ + CoerceViaIO *newnode = makeNode(CoerceViaIO); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coerceformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ArrayCoerceExpr * +_copyArrayCoerceExpr(const ArrayCoerceExpr *from) +{ + ArrayCoerceExpr *newnode = makeNode(ArrayCoerceExpr); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(elemexpr); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coerceformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ConvertRowtypeExpr * +_copyConvertRowtypeExpr(const ConvertRowtypeExpr *from) +{ + ConvertRowtypeExpr *newnode = makeNode(ConvertRowtypeExpr); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(convertformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CollateExpr * +_copyCollateExpr(const CollateExpr *from) +{ + CollateExpr *newnode = makeNode(CollateExpr); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(collOid); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseExpr * +_copyCaseExpr(const CaseExpr *from) +{ + CaseExpr *newnode = makeNode(CaseExpr); + + COPY_SCALAR_FIELD(casetype); + COPY_SCALAR_FIELD(casecollid); + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(defresult); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseWhen * +_copyCaseWhen(const CaseWhen *from) +{ + CaseWhen *newnode = makeNode(CaseWhen); + + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(result); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseTestExpr * +_copyCaseTestExpr(const CaseTestExpr *from) +{ + CaseTestExpr *newnode = makeNode(CaseTestExpr); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + + return newnode; +} + +static ArrayExpr * +_copyArrayExpr(const ArrayExpr *from) +{ + ArrayExpr *newnode = makeNode(ArrayExpr); + + COPY_SCALAR_FIELD(array_typeid); + COPY_SCALAR_FIELD(array_collid); + COPY_SCALAR_FIELD(element_typeid); + COPY_NODE_FIELD(elements); + COPY_SCALAR_FIELD(multidims); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RowExpr * +_copyRowExpr(const RowExpr *from) +{ + RowExpr *newnode = makeNode(RowExpr); + + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(row_typeid); + COPY_SCALAR_FIELD(row_format); + COPY_NODE_FIELD(colnames); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RowCompareExpr * +_copyRowCompareExpr(const RowCompareExpr *from) +{ + RowCompareExpr *newnode = makeNode(RowCompareExpr); + + COPY_SCALAR_FIELD(rctype); + COPY_NODE_FIELD(opnos); + COPY_NODE_FIELD(opfamilies); + COPY_NODE_FIELD(inputcollids); + COPY_NODE_FIELD(largs); + COPY_NODE_FIELD(rargs); + + return newnode; +} + +static CoalesceExpr * +_copyCoalesceExpr(const CoalesceExpr *from) +{ + CoalesceExpr *newnode = makeNode(CoalesceExpr); + + COPY_SCALAR_FIELD(coalescetype); + COPY_SCALAR_FIELD(coalescecollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static MinMaxExpr * +_copyMinMaxExpr(const MinMaxExpr *from) +{ + MinMaxExpr *newnode = makeNode(MinMaxExpr); + + COPY_SCALAR_FIELD(minmaxtype); + COPY_SCALAR_FIELD(minmaxcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_SCALAR_FIELD(op); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SQLValueFunction * +_copySQLValueFunction(const SQLValueFunction *from) +{ + SQLValueFunction *newnode = makeNode(SQLValueFunction); + + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(type); + COPY_SCALAR_FIELD(typmod); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static XmlExpr * +_copyXmlExpr(const XmlExpr *from) +{ + XmlExpr *newnode = makeNode(XmlExpr); + + COPY_SCALAR_FIELD(op); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(named_args); + COPY_NODE_FIELD(arg_names); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(xmloption); + COPY_SCALAR_FIELD(indent); + COPY_SCALAR_FIELD(type); + COPY_SCALAR_FIELD(typmod); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonFormat * +_copyJsonFormat(const JsonFormat *from) +{ + JsonFormat *newnode = makeNode(JsonFormat); + + COPY_SCALAR_FIELD(format_type); + COPY_SCALAR_FIELD(encoding); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonReturning * +_copyJsonReturning(const JsonReturning *from) +{ + JsonReturning *newnode = makeNode(JsonReturning); + + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(typid); + COPY_SCALAR_FIELD(typmod); + + return newnode; +} + +static JsonValueExpr * +_copyJsonValueExpr(const JsonValueExpr *from) +{ + JsonValueExpr *newnode = makeNode(JsonValueExpr); + + COPY_NODE_FIELD(raw_expr); + COPY_NODE_FIELD(formatted_expr); + COPY_NODE_FIELD(format); + + return newnode; +} + +static JsonConstructorExpr * +_copyJsonConstructorExpr(const JsonConstructorExpr *from) +{ + JsonConstructorExpr *newnode = makeNode(JsonConstructorExpr); + + COPY_SCALAR_FIELD(type); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(func); + COPY_NODE_FIELD(coercion); + COPY_NODE_FIELD(returning); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonIsPredicate * +_copyJsonIsPredicate(const JsonIsPredicate *from) +{ + JsonIsPredicate *newnode = makeNode(JsonIsPredicate); + + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(item_type); + COPY_SCALAR_FIELD(unique_keys); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NullTest * +_copyNullTest(const NullTest *from) +{ + NullTest *newnode = makeNode(NullTest); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(nulltesttype); + COPY_SCALAR_FIELD(argisrow); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static BooleanTest * +_copyBooleanTest(const BooleanTest *from) +{ + BooleanTest *newnode = makeNode(BooleanTest); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(booltesttype); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceToDomain * +_copyCoerceToDomain(const CoerceToDomain *from) +{ + CoerceToDomain *newnode = makeNode(CoerceToDomain); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coercionformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceToDomainValue * +_copyCoerceToDomainValue(const CoerceToDomainValue *from) +{ + CoerceToDomainValue *newnode = makeNode(CoerceToDomainValue); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SetToDefault * +_copySetToDefault(const SetToDefault *from) +{ + SetToDefault *newnode = makeNode(SetToDefault); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CurrentOfExpr * +_copyCurrentOfExpr(const CurrentOfExpr *from) +{ + CurrentOfExpr *newnode = makeNode(CurrentOfExpr); + + COPY_SCALAR_FIELD(cvarno); + COPY_STRING_FIELD(cursor_name); + COPY_SCALAR_FIELD(cursor_param); + + return newnode; +} + +static NextValueExpr * +_copyNextValueExpr(const NextValueExpr *from) +{ + NextValueExpr *newnode = makeNode(NextValueExpr); + + COPY_SCALAR_FIELD(seqid); + COPY_SCALAR_FIELD(typeId); + + return newnode; +} + +static InferenceElem * +_copyInferenceElem(const InferenceElem *from) +{ + InferenceElem *newnode = makeNode(InferenceElem); + + COPY_NODE_FIELD(expr); + COPY_SCALAR_FIELD(infercollid); + COPY_SCALAR_FIELD(inferopclass); + + return newnode; +} + +static TargetEntry * +_copyTargetEntry(const TargetEntry *from) +{ + TargetEntry *newnode = makeNode(TargetEntry); + + COPY_NODE_FIELD(expr); + COPY_SCALAR_FIELD(resno); + COPY_STRING_FIELD(resname); + COPY_SCALAR_FIELD(ressortgroupref); + COPY_SCALAR_FIELD(resorigtbl); + COPY_SCALAR_FIELD(resorigcol); + COPY_SCALAR_FIELD(resjunk); + + return newnode; +} + +static RangeTblRef * +_copyRangeTblRef(const RangeTblRef *from) +{ + RangeTblRef *newnode = makeNode(RangeTblRef); + + COPY_SCALAR_FIELD(rtindex); + + return newnode; +} + +static JoinExpr * +_copyJoinExpr(const JoinExpr *from) +{ + JoinExpr *newnode = makeNode(JoinExpr); + + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(isNatural); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + COPY_NODE_FIELD(usingClause); + COPY_NODE_FIELD(join_using_alias); + COPY_NODE_FIELD(quals); + COPY_NODE_FIELD(alias); + COPY_SCALAR_FIELD(rtindex); + + return newnode; +} + +static FromExpr * +_copyFromExpr(const FromExpr *from) +{ + FromExpr *newnode = makeNode(FromExpr); + + COPY_NODE_FIELD(fromlist); + COPY_NODE_FIELD(quals); + + return newnode; +} + +static OnConflictExpr * +_copyOnConflictExpr(const OnConflictExpr *from) +{ + OnConflictExpr *newnode = makeNode(OnConflictExpr); + + COPY_SCALAR_FIELD(action); + COPY_NODE_FIELD(arbiterElems); + COPY_NODE_FIELD(arbiterWhere); + COPY_SCALAR_FIELD(constraint); + COPY_NODE_FIELD(onConflictSet); + COPY_NODE_FIELD(onConflictWhere); + COPY_SCALAR_FIELD(exclRelIndex); + COPY_NODE_FIELD(exclRelTlist); + + return newnode; +} + +static Query * +_copyQuery(const Query *from) +{ + Query *newnode = makeNode(Query); + + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(querySource); + COPY_SCALAR_FIELD(queryId); + COPY_SCALAR_FIELD(canSetTag); + COPY_NODE_FIELD(utilityStmt); + COPY_SCALAR_FIELD(resultRelation); + COPY_SCALAR_FIELD(hasAggs); + COPY_SCALAR_FIELD(hasWindowFuncs); + COPY_SCALAR_FIELD(hasTargetSRFs); + COPY_SCALAR_FIELD(hasSubLinks); + COPY_SCALAR_FIELD(hasDistinctOn); + COPY_SCALAR_FIELD(hasRecursive); + COPY_SCALAR_FIELD(hasModifyingCTE); + COPY_SCALAR_FIELD(hasForUpdate); + COPY_SCALAR_FIELD(hasRowSecurity); + COPY_SCALAR_FIELD(isReturn); + COPY_NODE_FIELD(cteList); + COPY_NODE_FIELD(rtable); + COPY_NODE_FIELD(rteperminfos); + COPY_NODE_FIELD(jointree); + COPY_NODE_FIELD(mergeActionList); + COPY_SCALAR_FIELD(mergeUseOuterJoin); + COPY_NODE_FIELD(targetList); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(onConflict); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(groupClause); + COPY_SCALAR_FIELD(groupDistinct); + COPY_NODE_FIELD(groupingSets); + COPY_NODE_FIELD(havingQual); + COPY_NODE_FIELD(windowClause); + COPY_NODE_FIELD(distinctClause); + COPY_NODE_FIELD(sortClause); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_NODE_FIELD(rowMarks); + COPY_NODE_FIELD(setOperations); + COPY_NODE_FIELD(constraintDeps); + COPY_NODE_FIELD(withCheckOptions); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static TypeName * +_copyTypeName(const TypeName *from) +{ + TypeName *newnode = makeNode(TypeName); + + COPY_NODE_FIELD(names); + COPY_SCALAR_FIELD(typeOid); + COPY_SCALAR_FIELD(setof); + COPY_SCALAR_FIELD(pct_type); + COPY_NODE_FIELD(typmods); + COPY_SCALAR_FIELD(typemod); + COPY_NODE_FIELD(arrayBounds); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ColumnRef * +_copyColumnRef(const ColumnRef *from) +{ + ColumnRef *newnode = makeNode(ColumnRef); + + COPY_NODE_FIELD(fields); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ParamRef * +_copyParamRef(const ParamRef *from) +{ + ParamRef *newnode = makeNode(ParamRef); + + COPY_SCALAR_FIELD(number); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static A_Expr * +_copyA_Expr(const A_Expr *from) +{ + A_Expr *newnode = makeNode(A_Expr); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(name); + COPY_NODE_FIELD(lexpr); + COPY_NODE_FIELD(rexpr); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TypeCast * +_copyTypeCast(const TypeCast *from) +{ + TypeCast *newnode = makeNode(TypeCast); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(typeName); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CollateClause * +_copyCollateClause(const CollateClause *from) +{ + CollateClause *newnode = makeNode(CollateClause); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(collname); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RoleSpec * +_copyRoleSpec(const RoleSpec *from) +{ + RoleSpec *newnode = makeNode(RoleSpec); + + COPY_SCALAR_FIELD(roletype); + COPY_STRING_FIELD(rolename); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static FuncCall * +_copyFuncCall(const FuncCall *from) +{ + FuncCall *newnode = makeNode(FuncCall); + + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(agg_order); + COPY_NODE_FIELD(agg_filter); + COPY_NODE_FIELD(over); + COPY_SCALAR_FIELD(agg_within_group); + COPY_SCALAR_FIELD(agg_star); + COPY_SCALAR_FIELD(agg_distinct); + COPY_SCALAR_FIELD(func_variadic); + COPY_SCALAR_FIELD(funcformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static A_Star * +_copyA_Star(const A_Star *from) +{ + A_Star *newnode = makeNode(A_Star); + + + return newnode; +} + +static A_Indices * +_copyA_Indices(const A_Indices *from) +{ + A_Indices *newnode = makeNode(A_Indices); + + COPY_SCALAR_FIELD(is_slice); + COPY_NODE_FIELD(lidx); + COPY_NODE_FIELD(uidx); + + return newnode; +} + +static A_Indirection * +_copyA_Indirection(const A_Indirection *from) +{ + A_Indirection *newnode = makeNode(A_Indirection); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(indirection); + + return newnode; +} + +static A_ArrayExpr * +_copyA_ArrayExpr(const A_ArrayExpr *from) +{ + A_ArrayExpr *newnode = makeNode(A_ArrayExpr); + + COPY_NODE_FIELD(elements); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ResTarget * +_copyResTarget(const ResTarget *from) +{ + ResTarget *newnode = makeNode(ResTarget); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(indirection); + COPY_NODE_FIELD(val); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static MultiAssignRef * +_copyMultiAssignRef(const MultiAssignRef *from) +{ + MultiAssignRef *newnode = makeNode(MultiAssignRef); + + COPY_NODE_FIELD(source); + COPY_SCALAR_FIELD(colno); + COPY_SCALAR_FIELD(ncolumns); + + return newnode; +} + +static SortBy * +_copySortBy(const SortBy *from) +{ + SortBy *newnode = makeNode(SortBy); + + COPY_NODE_FIELD(node); + COPY_SCALAR_FIELD(sortby_dir); + COPY_SCALAR_FIELD(sortby_nulls); + COPY_NODE_FIELD(useOp); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowDef * +_copyWindowDef(const WindowDef *from) +{ + WindowDef *newnode = makeNode(WindowDef); + + COPY_STRING_FIELD(name); + COPY_STRING_FIELD(refname); + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeSubselect * +_copyRangeSubselect(const RangeSubselect *from) +{ + RangeSubselect *newnode = makeNode(RangeSubselect); + + COPY_SCALAR_FIELD(lateral); + COPY_NODE_FIELD(subquery); + COPY_NODE_FIELD(alias); + + return newnode; +} + +static RangeFunction * +_copyRangeFunction(const RangeFunction *from) +{ + RangeFunction *newnode = makeNode(RangeFunction); + + COPY_SCALAR_FIELD(lateral); + COPY_SCALAR_FIELD(ordinality); + COPY_SCALAR_FIELD(is_rowsfrom); + COPY_NODE_FIELD(functions); + COPY_NODE_FIELD(alias); + COPY_NODE_FIELD(coldeflist); + + return newnode; +} + +static RangeTableFunc * +_copyRangeTableFunc(const RangeTableFunc *from) +{ + RangeTableFunc *newnode = makeNode(RangeTableFunc); + + COPY_SCALAR_FIELD(lateral); + COPY_NODE_FIELD(docexpr); + COPY_NODE_FIELD(rowexpr); + COPY_NODE_FIELD(namespaces); + COPY_NODE_FIELD(columns); + COPY_NODE_FIELD(alias); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeTableFuncCol * +_copyRangeTableFuncCol(const RangeTableFuncCol *from) +{ + RangeTableFuncCol *newnode = makeNode(RangeTableFuncCol); + + COPY_STRING_FIELD(colname); + COPY_NODE_FIELD(typeName); + COPY_SCALAR_FIELD(for_ordinality); + COPY_SCALAR_FIELD(is_not_null); + COPY_NODE_FIELD(colexpr); + COPY_NODE_FIELD(coldefexpr); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeTableSample * +_copyRangeTableSample(const RangeTableSample *from) +{ + RangeTableSample *newnode = makeNode(RangeTableSample); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(method); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ColumnDef * +_copyColumnDef(const ColumnDef *from) +{ + ColumnDef *newnode = makeNode(ColumnDef); + + COPY_STRING_FIELD(colname); + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(compression); + COPY_SCALAR_FIELD(inhcount); + COPY_SCALAR_FIELD(is_local); + COPY_SCALAR_FIELD(is_not_null); + COPY_SCALAR_FIELD(is_from_type); + COPY_SCALAR_FIELD(storage); + COPY_STRING_FIELD(storage_name); + COPY_NODE_FIELD(raw_default); + COPY_NODE_FIELD(cooked_default); + COPY_SCALAR_FIELD(identity); + COPY_NODE_FIELD(identitySequence); + COPY_SCALAR_FIELD(generated); + COPY_NODE_FIELD(collClause); + COPY_SCALAR_FIELD(collOid); + COPY_NODE_FIELD(constraints); + COPY_NODE_FIELD(fdwoptions); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TableLikeClause * +_copyTableLikeClause(const TableLikeClause *from) +{ + TableLikeClause *newnode = makeNode(TableLikeClause); + + COPY_NODE_FIELD(relation); + COPY_SCALAR_FIELD(options); + COPY_SCALAR_FIELD(relationOid); + + return newnode; +} + +static IndexElem * +_copyIndexElem(const IndexElem *from) +{ + IndexElem *newnode = makeNode(IndexElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + COPY_STRING_FIELD(indexcolname); + COPY_NODE_FIELD(collation); + COPY_NODE_FIELD(opclass); + COPY_NODE_FIELD(opclassopts); + COPY_SCALAR_FIELD(ordering); + COPY_SCALAR_FIELD(nulls_ordering); + + return newnode; +} + +static DefElem * +_copyDefElem(const DefElem *from) +{ + DefElem *newnode = makeNode(DefElem); + + COPY_STRING_FIELD(defnamespace); + COPY_STRING_FIELD(defname); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(defaction); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static LockingClause * +_copyLockingClause(const LockingClause *from) +{ + LockingClause *newnode = makeNode(LockingClause); + + COPY_NODE_FIELD(lockedRels); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + + return newnode; +} + +static XmlSerialize * +_copyXmlSerialize(const XmlSerialize *from) +{ + XmlSerialize *newnode = makeNode(XmlSerialize); + + COPY_SCALAR_FIELD(xmloption); + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(typeName); + COPY_SCALAR_FIELD(indent); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionElem * +_copyPartitionElem(const PartitionElem *from) +{ + PartitionElem *newnode = makeNode(PartitionElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(collation); + COPY_NODE_FIELD(opclass); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionSpec * +_copyPartitionSpec(const PartitionSpec *from) +{ + PartitionSpec *newnode = makeNode(PartitionSpec); + + COPY_SCALAR_FIELD(strategy); + COPY_NODE_FIELD(partParams); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionBoundSpec * +_copyPartitionBoundSpec(const PartitionBoundSpec *from) +{ + PartitionBoundSpec *newnode = makeNode(PartitionBoundSpec); + + COPY_SCALAR_FIELD(strategy); + COPY_SCALAR_FIELD(is_default); + COPY_SCALAR_FIELD(modulus); + COPY_SCALAR_FIELD(remainder); + COPY_NODE_FIELD(listdatums); + COPY_NODE_FIELD(lowerdatums); + COPY_NODE_FIELD(upperdatums); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionRangeDatum * +_copyPartitionRangeDatum(const PartitionRangeDatum *from) +{ + PartitionRangeDatum *newnode = makeNode(PartitionRangeDatum); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(value); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionCmd * +_copyPartitionCmd(const PartitionCmd *from) +{ + PartitionCmd *newnode = makeNode(PartitionCmd); + + COPY_NODE_FIELD(name); + COPY_NODE_FIELD(bound); + COPY_SCALAR_FIELD(concurrent); + + return newnode; +} + +static RangeTblEntry * +_copyRangeTblEntry(const RangeTblEntry *from) +{ + RangeTblEntry *newnode = makeNode(RangeTblEntry); + + COPY_SCALAR_FIELD(rtekind); + COPY_SCALAR_FIELD(relid); + COPY_SCALAR_FIELD(relkind); + COPY_SCALAR_FIELD(rellockmode); + COPY_NODE_FIELD(tablesample); + COPY_SCALAR_FIELD(perminfoindex); + COPY_NODE_FIELD(subquery); + COPY_SCALAR_FIELD(security_barrier); + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(joinmergedcols); + COPY_NODE_FIELD(joinaliasvars); + COPY_NODE_FIELD(joinleftcols); + COPY_NODE_FIELD(joinrightcols); + COPY_NODE_FIELD(join_using_alias); + COPY_NODE_FIELD(functions); + COPY_SCALAR_FIELD(funcordinality); + COPY_NODE_FIELD(tablefunc); + COPY_NODE_FIELD(values_lists); + COPY_STRING_FIELD(ctename); + COPY_SCALAR_FIELD(ctelevelsup); + COPY_SCALAR_FIELD(self_reference); + COPY_NODE_FIELD(coltypes); + COPY_NODE_FIELD(coltypmods); + COPY_NODE_FIELD(colcollations); + COPY_STRING_FIELD(enrname); + COPY_SCALAR_FIELD(enrtuples); + COPY_NODE_FIELD(alias); + COPY_NODE_FIELD(eref); + COPY_SCALAR_FIELD(lateral); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(inFromCl); + COPY_NODE_FIELD(securityQuals); + + return newnode; +} + +static RTEPermissionInfo * +_copyRTEPermissionInfo(const RTEPermissionInfo *from) +{ + RTEPermissionInfo *newnode = makeNode(RTEPermissionInfo); + + COPY_SCALAR_FIELD(relid); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(requiredPerms); + COPY_SCALAR_FIELD(checkAsUser); + COPY_BITMAPSET_FIELD(selectedCols); + COPY_BITMAPSET_FIELD(insertedCols); + COPY_BITMAPSET_FIELD(updatedCols); + + return newnode; +} + +static RangeTblFunction * +_copyRangeTblFunction(const RangeTblFunction *from) +{ + RangeTblFunction *newnode = makeNode(RangeTblFunction); + + COPY_NODE_FIELD(funcexpr); + COPY_SCALAR_FIELD(funccolcount); + COPY_NODE_FIELD(funccolnames); + COPY_NODE_FIELD(funccoltypes); + COPY_NODE_FIELD(funccoltypmods); + COPY_NODE_FIELD(funccolcollations); + COPY_BITMAPSET_FIELD(funcparams); + + return newnode; +} + +static TableSampleClause * +_copyTableSampleClause(const TableSampleClause *from) +{ + TableSampleClause *newnode = makeNode(TableSampleClause); + + COPY_SCALAR_FIELD(tsmhandler); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + + return newnode; +} + +static WithCheckOption * +_copyWithCheckOption(const WithCheckOption *from) +{ + WithCheckOption *newnode = makeNode(WithCheckOption); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(relname); + COPY_STRING_FIELD(polname); + COPY_NODE_FIELD(qual); + COPY_SCALAR_FIELD(cascaded); + + return newnode; +} + +static SortGroupClause * +_copySortGroupClause(const SortGroupClause *from) +{ + SortGroupClause *newnode = makeNode(SortGroupClause); + + COPY_SCALAR_FIELD(tleSortGroupRef); + COPY_SCALAR_FIELD(eqop); + COPY_SCALAR_FIELD(sortop); + COPY_SCALAR_FIELD(nulls_first); + COPY_SCALAR_FIELD(hashable); + + return newnode; +} + +static GroupingSet * +_copyGroupingSet(const GroupingSet *from) +{ + GroupingSet *newnode = makeNode(GroupingSet); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(content); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowClause * +_copyWindowClause(const WindowClause *from) +{ + WindowClause *newnode = makeNode(WindowClause); + + COPY_STRING_FIELD(name); + COPY_STRING_FIELD(refname); + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_NODE_FIELD(runCondition); + COPY_SCALAR_FIELD(startInRangeFunc); + COPY_SCALAR_FIELD(endInRangeFunc); + COPY_SCALAR_FIELD(inRangeColl); + COPY_SCALAR_FIELD(inRangeAsc); + COPY_SCALAR_FIELD(inRangeNullsFirst); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(copiedOrder); + + return newnode; +} + +static RowMarkClause * +_copyRowMarkClause(const RowMarkClause *from) +{ + RowMarkClause *newnode = makeNode(RowMarkClause); + + COPY_SCALAR_FIELD(rti); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + COPY_SCALAR_FIELD(pushedDown); + + return newnode; +} + +static WithClause * +_copyWithClause(const WithClause *from) +{ + WithClause *newnode = makeNode(WithClause); + + COPY_NODE_FIELD(ctes); + COPY_SCALAR_FIELD(recursive); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static InferClause * +_copyInferClause(const InferClause *from) +{ + InferClause *newnode = makeNode(InferClause); + + COPY_NODE_FIELD(indexElems); + COPY_NODE_FIELD(whereClause); + COPY_STRING_FIELD(conname); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static OnConflictClause * +_copyOnConflictClause(const OnConflictClause *from) +{ + OnConflictClause *newnode = makeNode(OnConflictClause); + + COPY_SCALAR_FIELD(action); + COPY_NODE_FIELD(infer); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(whereClause); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CTESearchClause * +_copyCTESearchClause(const CTESearchClause *from) +{ + CTESearchClause *newnode = makeNode(CTESearchClause); + + COPY_NODE_FIELD(search_col_list); + COPY_SCALAR_FIELD(search_breadth_first); + COPY_STRING_FIELD(search_seq_column); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CTECycleClause * +_copyCTECycleClause(const CTECycleClause *from) +{ + CTECycleClause *newnode = makeNode(CTECycleClause); + + COPY_NODE_FIELD(cycle_col_list); + COPY_STRING_FIELD(cycle_mark_column); + COPY_NODE_FIELD(cycle_mark_value); + COPY_NODE_FIELD(cycle_mark_default); + COPY_STRING_FIELD(cycle_path_column); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(cycle_mark_type); + COPY_SCALAR_FIELD(cycle_mark_typmod); + COPY_SCALAR_FIELD(cycle_mark_collation); + COPY_SCALAR_FIELD(cycle_mark_neop); + + return newnode; +} + +static CommonTableExpr * +_copyCommonTableExpr(const CommonTableExpr *from) +{ + CommonTableExpr *newnode = makeNode(CommonTableExpr); + + COPY_STRING_FIELD(ctename); + COPY_NODE_FIELD(aliascolnames); + COPY_SCALAR_FIELD(ctematerialized); + COPY_NODE_FIELD(ctequery); + COPY_NODE_FIELD(search_clause); + COPY_NODE_FIELD(cycle_clause); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(cterecursive); + COPY_SCALAR_FIELD(cterefcount); + COPY_NODE_FIELD(ctecolnames); + COPY_NODE_FIELD(ctecoltypes); + COPY_NODE_FIELD(ctecoltypmods); + COPY_NODE_FIELD(ctecolcollations); + + return newnode; +} + +static MergeWhenClause * +_copyMergeWhenClause(const MergeWhenClause *from) +{ + MergeWhenClause *newnode = makeNode(MergeWhenClause); + + COPY_SCALAR_FIELD(matched); + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(condition); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(values); + + return newnode; +} + +static MergeAction * +_copyMergeAction(const MergeAction *from) +{ + MergeAction *newnode = makeNode(MergeAction); + + COPY_SCALAR_FIELD(matched); + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(updateColnos); + + return newnode; +} + +static TriggerTransition * +_copyTriggerTransition(const TriggerTransition *from) +{ + TriggerTransition *newnode = makeNode(TriggerTransition); + + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(isNew); + COPY_SCALAR_FIELD(isTable); + + return newnode; +} + +static JsonOutput * +_copyJsonOutput(const JsonOutput *from) +{ + JsonOutput *newnode = makeNode(JsonOutput); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(returning); + + return newnode; +} + +static JsonKeyValue * +_copyJsonKeyValue(const JsonKeyValue *from) +{ + JsonKeyValue *newnode = makeNode(JsonKeyValue); + + COPY_NODE_FIELD(key); + COPY_NODE_FIELD(value); + + return newnode; +} + +static JsonObjectConstructor * +_copyJsonObjectConstructor(const JsonObjectConstructor *from) +{ + JsonObjectConstructor *newnode = makeNode(JsonObjectConstructor); + + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(output); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonArrayConstructor * +_copyJsonArrayConstructor(const JsonArrayConstructor *from) +{ + JsonArrayConstructor *newnode = makeNode(JsonArrayConstructor); + + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(output); + COPY_SCALAR_FIELD(absent_on_null); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonArrayQueryConstructor * +_copyJsonArrayQueryConstructor(const JsonArrayQueryConstructor *from) +{ + JsonArrayQueryConstructor *newnode = makeNode(JsonArrayQueryConstructor); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(output); + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(absent_on_null); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonAggConstructor * +_copyJsonAggConstructor(const JsonAggConstructor *from) +{ + JsonAggConstructor *newnode = makeNode(JsonAggConstructor); + + COPY_NODE_FIELD(output); + COPY_NODE_FIELD(agg_filter); + COPY_NODE_FIELD(agg_order); + COPY_NODE_FIELD(over); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonObjectAgg * +_copyJsonObjectAgg(const JsonObjectAgg *from) +{ + JsonObjectAgg *newnode = makeNode(JsonObjectAgg); + + COPY_NODE_FIELD(constructor); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + + return newnode; +} + +static JsonArrayAgg * +_copyJsonArrayAgg(const JsonArrayAgg *from) +{ + JsonArrayAgg *newnode = makeNode(JsonArrayAgg); + + COPY_NODE_FIELD(constructor); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(absent_on_null); + + return newnode; +} + +static RawStmt * +_copyRawStmt(const RawStmt *from) +{ + RawStmt *newnode = makeNode(RawStmt); + + COPY_NODE_FIELD(stmt); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static InsertStmt * +_copyInsertStmt(const InsertStmt *from) +{ + InsertStmt *newnode = makeNode(InsertStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(cols); + COPY_NODE_FIELD(selectStmt); + COPY_NODE_FIELD(onConflictClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + COPY_SCALAR_FIELD(override); + + return newnode; +} + +static DeleteStmt * +_copyDeleteStmt(const DeleteStmt *from) +{ + DeleteStmt *newnode = makeNode(DeleteStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(usingClause); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static UpdateStmt * +_copyUpdateStmt(const UpdateStmt *from) +{ + UpdateStmt *newnode = makeNode(UpdateStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(fromClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static MergeStmt * +_copyMergeStmt(const MergeStmt *from) +{ + MergeStmt *newnode = makeNode(MergeStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(sourceRelation); + COPY_NODE_FIELD(joinCondition); + COPY_NODE_FIELD(mergeWhenClauses); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static SelectStmt * +_copySelectStmt(const SelectStmt *from) +{ + SelectStmt *newnode = makeNode(SelectStmt); + + COPY_NODE_FIELD(distinctClause); + COPY_NODE_FIELD(intoClause); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(fromClause); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(groupClause); + COPY_SCALAR_FIELD(groupDistinct); + COPY_NODE_FIELD(havingClause); + COPY_NODE_FIELD(windowClause); + COPY_NODE_FIELD(valuesLists); + COPY_NODE_FIELD(sortClause); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_NODE_FIELD(lockingClause); + COPY_NODE_FIELD(withClause); + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(all); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + + return newnode; +} + +static SetOperationStmt * +_copySetOperationStmt(const SetOperationStmt *from) +{ + SetOperationStmt *newnode = makeNode(SetOperationStmt); + + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(all); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + COPY_NODE_FIELD(colTypes); + COPY_NODE_FIELD(colTypmods); + COPY_NODE_FIELD(colCollations); + COPY_NODE_FIELD(groupClauses); + + return newnode; +} + +static ReturnStmt * +_copyReturnStmt(const ReturnStmt *from) +{ + ReturnStmt *newnode = makeNode(ReturnStmt); + + COPY_NODE_FIELD(returnval); + + return newnode; +} + +static PLAssignStmt * +_copyPLAssignStmt(const PLAssignStmt *from) +{ + PLAssignStmt *newnode = makeNode(PLAssignStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(indirection); + COPY_SCALAR_FIELD(nnames); + COPY_NODE_FIELD(val); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CreateSchemaStmt * +_copyCreateSchemaStmt(const CreateSchemaStmt *from) +{ + CreateSchemaStmt *newnode = makeNode(CreateSchemaStmt); + + COPY_STRING_FIELD(schemaname); + COPY_NODE_FIELD(authrole); + COPY_NODE_FIELD(schemaElts); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static AlterTableStmt * +_copyAlterTableStmt(const AlterTableStmt *from) +{ + AlterTableStmt *newnode = makeNode(AlterTableStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(cmds); + COPY_SCALAR_FIELD(objtype); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static ReplicaIdentityStmt * +_copyReplicaIdentityStmt(const ReplicaIdentityStmt *from) +{ + ReplicaIdentityStmt *newnode = makeNode(ReplicaIdentityStmt); + + COPY_SCALAR_FIELD(identity_type); + COPY_STRING_FIELD(name); + + return newnode; +} + +static AlterTableCmd * +_copyAlterTableCmd(const AlterTableCmd *from) +{ + AlterTableCmd *newnode = makeNode(AlterTableCmd); + + COPY_SCALAR_FIELD(subtype); + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(num); + COPY_NODE_FIELD(newowner); + COPY_NODE_FIELD(def); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(recurse); + + return newnode; +} + +static AlterCollationStmt * +_copyAlterCollationStmt(const AlterCollationStmt *from) +{ + AlterCollationStmt *newnode = makeNode(AlterCollationStmt); + + COPY_NODE_FIELD(collname); + + return newnode; +} + +static AlterDomainStmt * +_copyAlterDomainStmt(const AlterDomainStmt *from) +{ + AlterDomainStmt *newnode = makeNode(AlterDomainStmt); + + COPY_SCALAR_FIELD(subtype); + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(def); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static GrantStmt * +_copyGrantStmt(const GrantStmt *from) +{ + GrantStmt *newnode = makeNode(GrantStmt); + + COPY_SCALAR_FIELD(is_grant); + COPY_SCALAR_FIELD(targtype); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(objects); + COPY_NODE_FIELD(privileges); + COPY_NODE_FIELD(grantees); + COPY_SCALAR_FIELD(grant_option); + COPY_NODE_FIELD(grantor); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static ObjectWithArgs * +_copyObjectWithArgs(const ObjectWithArgs *from) +{ + ObjectWithArgs *newnode = makeNode(ObjectWithArgs); + + COPY_NODE_FIELD(objname); + COPY_NODE_FIELD(objargs); + COPY_NODE_FIELD(objfuncargs); + COPY_SCALAR_FIELD(args_unspecified); + + return newnode; +} + +static AccessPriv * +_copyAccessPriv(const AccessPriv *from) +{ + AccessPriv *newnode = makeNode(AccessPriv); + + COPY_STRING_FIELD(priv_name); + COPY_NODE_FIELD(cols); + + return newnode; +} + +static GrantRoleStmt * +_copyGrantRoleStmt(const GrantRoleStmt *from) +{ + GrantRoleStmt *newnode = makeNode(GrantRoleStmt); + + COPY_NODE_FIELD(granted_roles); + COPY_NODE_FIELD(grantee_roles); + COPY_SCALAR_FIELD(is_grant); + COPY_NODE_FIELD(opt); + COPY_NODE_FIELD(grantor); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static AlterDefaultPrivilegesStmt * +_copyAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *from) +{ + AlterDefaultPrivilegesStmt *newnode = makeNode(AlterDefaultPrivilegesStmt); + + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(action); + + return newnode; +} + +static CopyStmt * +_copyCopyStmt(const CopyStmt *from) +{ + CopyStmt *newnode = makeNode(CopyStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(attlist); + COPY_SCALAR_FIELD(is_from); + COPY_SCALAR_FIELD(is_program); + COPY_STRING_FIELD(filename); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(whereClause); + + return newnode; +} + +static VariableSetStmt * +_copyVariableSetStmt(const VariableSetStmt *from) +{ + VariableSetStmt *newnode = makeNode(VariableSetStmt); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(is_local); + + return newnode; +} + +static VariableShowStmt * +_copyVariableShowStmt(const VariableShowStmt *from) +{ + VariableShowStmt *newnode = makeNode(VariableShowStmt); + + COPY_STRING_FIELD(name); + + return newnode; +} + +static CreateStmt * +_copyCreateStmt(const CreateStmt *from) +{ + CreateStmt *newnode = makeNode(CreateStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(tableElts); + COPY_NODE_FIELD(inhRelations); + COPY_NODE_FIELD(partbound); + COPY_NODE_FIELD(partspec); + COPY_NODE_FIELD(ofTypename); + COPY_NODE_FIELD(constraints); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(oncommit); + COPY_STRING_FIELD(tablespacename); + COPY_STRING_FIELD(accessMethod); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static Constraint * +_copyConstraint(const Constraint *from) +{ + Constraint *newnode = makeNode(Constraint); + + COPY_SCALAR_FIELD(contype); + COPY_STRING_FIELD(conname); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(is_no_inherit); + COPY_NODE_FIELD(raw_expr); + COPY_STRING_FIELD(cooked_expr); + COPY_SCALAR_FIELD(generated_when); + COPY_SCALAR_FIELD(nulls_not_distinct); + COPY_NODE_FIELD(keys); + COPY_NODE_FIELD(including); + COPY_NODE_FIELD(exclusions); + COPY_NODE_FIELD(options); + COPY_STRING_FIELD(indexname); + COPY_STRING_FIELD(indexspace); + COPY_SCALAR_FIELD(reset_default_tblspc); + COPY_STRING_FIELD(access_method); + COPY_NODE_FIELD(where_clause); + COPY_NODE_FIELD(pktable); + COPY_NODE_FIELD(fk_attrs); + COPY_NODE_FIELD(pk_attrs); + COPY_SCALAR_FIELD(fk_matchtype); + COPY_SCALAR_FIELD(fk_upd_action); + COPY_SCALAR_FIELD(fk_del_action); + COPY_NODE_FIELD(fk_del_set_cols); + COPY_NODE_FIELD(old_conpfeqop); + COPY_SCALAR_FIELD(old_pktable_oid); + COPY_SCALAR_FIELD(skip_validation); + COPY_SCALAR_FIELD(initially_valid); + + return newnode; +} + +static CreateTableSpaceStmt * +_copyCreateTableSpaceStmt(const CreateTableSpaceStmt *from) +{ + CreateTableSpaceStmt *newnode = makeNode(CreateTableSpaceStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_NODE_FIELD(owner); + COPY_STRING_FIELD(location); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropTableSpaceStmt * +_copyDropTableSpaceStmt(const DropTableSpaceStmt *from) +{ + DropTableSpaceStmt *newnode = makeNode(DropTableSpaceStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterTableSpaceOptionsStmt * +_copyAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *from) +{ + AlterTableSpaceOptionsStmt *newnode = makeNode(AlterTableSpaceOptionsStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(isReset); + + return newnode; +} + +static AlterTableMoveAllStmt * +_copyAlterTableMoveAllStmt(const AlterTableMoveAllStmt *from) +{ + AlterTableMoveAllStmt *newnode = makeNode(AlterTableMoveAllStmt); + + COPY_STRING_FIELD(orig_tablespacename); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(roles); + COPY_STRING_FIELD(new_tablespacename); + COPY_SCALAR_FIELD(nowait); + + return newnode; +} + +static CreateExtensionStmt * +_copyCreateExtensionStmt(const CreateExtensionStmt *from) +{ + CreateExtensionStmt *newnode = makeNode(CreateExtensionStmt); + + COPY_STRING_FIELD(extname); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterExtensionStmt * +_copyAlterExtensionStmt(const AlterExtensionStmt *from) +{ + AlterExtensionStmt *newnode = makeNode(AlterExtensionStmt); + + COPY_STRING_FIELD(extname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterExtensionContentsStmt * +_copyAlterExtensionContentsStmt(const AlterExtensionContentsStmt *from) +{ + AlterExtensionContentsStmt *newnode = makeNode(AlterExtensionContentsStmt); + + COPY_STRING_FIELD(extname); + COPY_SCALAR_FIELD(action); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + + return newnode; +} + +static CreateFdwStmt * +_copyCreateFdwStmt(const CreateFdwStmt *from) +{ + CreateFdwStmt *newnode = makeNode(CreateFdwStmt); + + COPY_STRING_FIELD(fdwname); + COPY_NODE_FIELD(func_options); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterFdwStmt * +_copyAlterFdwStmt(const AlterFdwStmt *from) +{ + AlterFdwStmt *newnode = makeNode(AlterFdwStmt); + + COPY_STRING_FIELD(fdwname); + COPY_NODE_FIELD(func_options); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateForeignServerStmt * +_copyCreateForeignServerStmt(const CreateForeignServerStmt *from) +{ + CreateForeignServerStmt *newnode = makeNode(CreateForeignServerStmt); + + COPY_STRING_FIELD(servername); + COPY_STRING_FIELD(servertype); + COPY_STRING_FIELD(version); + COPY_STRING_FIELD(fdwname); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterForeignServerStmt * +_copyAlterForeignServerStmt(const AlterForeignServerStmt *from) +{ + AlterForeignServerStmt *newnode = makeNode(AlterForeignServerStmt); + + COPY_STRING_FIELD(servername); + COPY_STRING_FIELD(version); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(has_version); + + return newnode; +} + +static CreateForeignTableStmt * +_copyCreateForeignTableStmt(const CreateForeignTableStmt *from) +{ + CreateForeignTableStmt *newnode = makeNode(CreateForeignTableStmt); + + COPY_NODE_FIELD(base.relation); + COPY_NODE_FIELD(base.tableElts); + COPY_NODE_FIELD(base.inhRelations); + COPY_NODE_FIELD(base.partbound); + COPY_NODE_FIELD(base.partspec); + COPY_NODE_FIELD(base.ofTypename); + COPY_NODE_FIELD(base.constraints); + COPY_NODE_FIELD(base.options); + COPY_SCALAR_FIELD(base.oncommit); + COPY_STRING_FIELD(base.tablespacename); + COPY_STRING_FIELD(base.accessMethod); + COPY_SCALAR_FIELD(base.if_not_exists); + COPY_STRING_FIELD(servername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateUserMappingStmt * +_copyCreateUserMappingStmt(const CreateUserMappingStmt *from) +{ + CreateUserMappingStmt *newnode = makeNode(CreateUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterUserMappingStmt * +_copyAlterUserMappingStmt(const AlterUserMappingStmt *from) +{ + AlterUserMappingStmt *newnode = makeNode(AlterUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropUserMappingStmt * +_copyDropUserMappingStmt(const DropUserMappingStmt *from) +{ + DropUserMappingStmt *newnode = makeNode(DropUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static ImportForeignSchemaStmt * +_copyImportForeignSchemaStmt(const ImportForeignSchemaStmt *from) +{ + ImportForeignSchemaStmt *newnode = makeNode(ImportForeignSchemaStmt); + + COPY_STRING_FIELD(server_name); + COPY_STRING_FIELD(remote_schema); + COPY_STRING_FIELD(local_schema); + COPY_SCALAR_FIELD(list_type); + COPY_NODE_FIELD(table_list); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreatePolicyStmt * +_copyCreatePolicyStmt(const CreatePolicyStmt *from) +{ + CreatePolicyStmt *newnode = makeNode(CreatePolicyStmt); + + COPY_STRING_FIELD(policy_name); + COPY_NODE_FIELD(table); + COPY_STRING_FIELD(cmd_name); + COPY_SCALAR_FIELD(permissive); + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(with_check); + + return newnode; +} + +static AlterPolicyStmt * +_copyAlterPolicyStmt(const AlterPolicyStmt *from) +{ + AlterPolicyStmt *newnode = makeNode(AlterPolicyStmt); + + COPY_STRING_FIELD(policy_name); + COPY_NODE_FIELD(table); + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(with_check); + + return newnode; +} + +static CreateAmStmt * +_copyCreateAmStmt(const CreateAmStmt *from) +{ + CreateAmStmt *newnode = makeNode(CreateAmStmt); + + COPY_STRING_FIELD(amname); + COPY_NODE_FIELD(handler_name); + COPY_SCALAR_FIELD(amtype); + + return newnode; +} + +static CreateTrigStmt * +_copyCreateTrigStmt(const CreateTrigStmt *from) +{ + CreateTrigStmt *newnode = makeNode(CreateTrigStmt); + + COPY_SCALAR_FIELD(replace); + COPY_SCALAR_FIELD(isconstraint); + COPY_STRING_FIELD(trigname); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(row); + COPY_SCALAR_FIELD(timing); + COPY_SCALAR_FIELD(events); + COPY_NODE_FIELD(columns); + COPY_NODE_FIELD(whenClause); + COPY_NODE_FIELD(transitionRels); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_NODE_FIELD(constrrel); + + return newnode; +} + +static CreateEventTrigStmt * +_copyCreateEventTrigStmt(const CreateEventTrigStmt *from) +{ + CreateEventTrigStmt *newnode = makeNode(CreateEventTrigStmt); + + COPY_STRING_FIELD(trigname); + COPY_STRING_FIELD(eventname); + COPY_NODE_FIELD(whenclause); + COPY_NODE_FIELD(funcname); + + return newnode; +} + +static AlterEventTrigStmt * +_copyAlterEventTrigStmt(const AlterEventTrigStmt *from) +{ + AlterEventTrigStmt *newnode = makeNode(AlterEventTrigStmt); + + COPY_STRING_FIELD(trigname); + COPY_SCALAR_FIELD(tgenabled); + + return newnode; +} + +static CreatePLangStmt * +_copyCreatePLangStmt(const CreatePLangStmt *from) +{ + CreatePLangStmt *newnode = makeNode(CreatePLangStmt); + + COPY_SCALAR_FIELD(replace); + COPY_STRING_FIELD(plname); + COPY_NODE_FIELD(plhandler); + COPY_NODE_FIELD(plinline); + COPY_NODE_FIELD(plvalidator); + COPY_SCALAR_FIELD(pltrusted); + + return newnode; +} + +static CreateRoleStmt * +_copyCreateRoleStmt(const CreateRoleStmt *from) +{ + CreateRoleStmt *newnode = makeNode(CreateRoleStmt); + + COPY_SCALAR_FIELD(stmt_type); + COPY_STRING_FIELD(role); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterRoleStmt * +_copyAlterRoleStmt(const AlterRoleStmt *from) +{ + AlterRoleStmt *newnode = makeNode(AlterRoleStmt); + + COPY_NODE_FIELD(role); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(action); + + return newnode; +} + +static AlterRoleSetStmt * +_copyAlterRoleSetStmt(const AlterRoleSetStmt *from) +{ + AlterRoleSetStmt *newnode = makeNode(AlterRoleSetStmt); + + COPY_NODE_FIELD(role); + COPY_STRING_FIELD(database); + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static DropRoleStmt * +_copyDropRoleStmt(const DropRoleStmt *from) +{ + DropRoleStmt *newnode = makeNode(DropRoleStmt); + + COPY_NODE_FIELD(roles); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static CreateSeqStmt * +_copyCreateSeqStmt(const CreateSeqStmt *from) +{ + CreateSeqStmt *newnode = makeNode(CreateSeqStmt); + + COPY_NODE_FIELD(sequence); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(ownerId); + COPY_SCALAR_FIELD(for_identity); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static AlterSeqStmt * +_copyAlterSeqStmt(const AlterSeqStmt *from) +{ + AlterSeqStmt *newnode = makeNode(AlterSeqStmt); + + COPY_NODE_FIELD(sequence); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(for_identity); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static DefineStmt * +_copyDefineStmt(const DefineStmt *from) +{ + DefineStmt *newnode = makeNode(DefineStmt); + + COPY_SCALAR_FIELD(kind); + COPY_SCALAR_FIELD(oldstyle); + COPY_NODE_FIELD(defnames); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(definition); + COPY_SCALAR_FIELD(if_not_exists); + COPY_SCALAR_FIELD(replace); + + return newnode; +} + +static CreateDomainStmt * +_copyCreateDomainStmt(const CreateDomainStmt *from) +{ + CreateDomainStmt *newnode = makeNode(CreateDomainStmt); + + COPY_NODE_FIELD(domainname); + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(collClause); + COPY_NODE_FIELD(constraints); + + return newnode; +} + +static CreateOpClassStmt * +_copyCreateOpClassStmt(const CreateOpClassStmt *from) +{ + CreateOpClassStmt *newnode = makeNode(CreateOpClassStmt); + + COPY_NODE_FIELD(opclassname); + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + COPY_NODE_FIELD(datatype); + COPY_NODE_FIELD(items); + COPY_SCALAR_FIELD(isDefault); + + return newnode; +} + +static CreateOpClassItem * +_copyCreateOpClassItem(const CreateOpClassItem *from) +{ + CreateOpClassItem *newnode = makeNode(CreateOpClassItem); + + COPY_SCALAR_FIELD(itemtype); + COPY_NODE_FIELD(name); + COPY_SCALAR_FIELD(number); + COPY_NODE_FIELD(order_family); + COPY_NODE_FIELD(class_args); + COPY_NODE_FIELD(storedtype); + + return newnode; +} + +static CreateOpFamilyStmt * +_copyCreateOpFamilyStmt(const CreateOpFamilyStmt *from) +{ + CreateOpFamilyStmt *newnode = makeNode(CreateOpFamilyStmt); + + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + + return newnode; +} + +static AlterOpFamilyStmt * +_copyAlterOpFamilyStmt(const AlterOpFamilyStmt *from) +{ + AlterOpFamilyStmt *newnode = makeNode(AlterOpFamilyStmt); + + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + COPY_SCALAR_FIELD(isDrop); + COPY_NODE_FIELD(items); + + return newnode; +} + +static DropStmt * +_copyDropStmt(const DropStmt *from) +{ + DropStmt *newnode = makeNode(DropStmt); + + COPY_NODE_FIELD(objects); + COPY_SCALAR_FIELD(removeType); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(concurrent); + + return newnode; +} + +static TruncateStmt * +_copyTruncateStmt(const TruncateStmt *from) +{ + TruncateStmt *newnode = makeNode(TruncateStmt); + + COPY_NODE_FIELD(relations); + COPY_SCALAR_FIELD(restart_seqs); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static CommentStmt * +_copyCommentStmt(const CommentStmt *from) +{ + CommentStmt *newnode = makeNode(CommentStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(comment); + + return newnode; +} + +static SecLabelStmt * +_copySecLabelStmt(const SecLabelStmt *from) +{ + SecLabelStmt *newnode = makeNode(SecLabelStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(provider); + COPY_STRING_FIELD(label); + + return newnode; +} + +static DeclareCursorStmt * +_copyDeclareCursorStmt(const DeclareCursorStmt *from) +{ + DeclareCursorStmt *newnode = makeNode(DeclareCursorStmt); + + COPY_STRING_FIELD(portalname); + COPY_SCALAR_FIELD(options); + COPY_NODE_FIELD(query); + + return newnode; +} + +static ClosePortalStmt * +_copyClosePortalStmt(const ClosePortalStmt *from) +{ + ClosePortalStmt *newnode = makeNode(ClosePortalStmt); + + COPY_STRING_FIELD(portalname); + + return newnode; +} + +static FetchStmt * +_copyFetchStmt(const FetchStmt *from) +{ + FetchStmt *newnode = makeNode(FetchStmt); + + COPY_SCALAR_FIELD(direction); + COPY_SCALAR_FIELD(howMany); + COPY_STRING_FIELD(portalname); + COPY_SCALAR_FIELD(ismove); + + return newnode; +} + +static IndexStmt * +_copyIndexStmt(const IndexStmt *from) +{ + IndexStmt *newnode = makeNode(IndexStmt); + + COPY_STRING_FIELD(idxname); + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(accessMethod); + COPY_STRING_FIELD(tableSpace); + COPY_NODE_FIELD(indexParams); + COPY_NODE_FIELD(indexIncludingParams); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(excludeOpNames); + COPY_STRING_FIELD(idxcomment); + COPY_SCALAR_FIELD(indexOid); + COPY_SCALAR_FIELD(oldNumber); + COPY_SCALAR_FIELD(oldCreateSubid); + COPY_SCALAR_FIELD(oldFirstRelfilelocatorSubid); + COPY_SCALAR_FIELD(unique); + COPY_SCALAR_FIELD(nulls_not_distinct); + COPY_SCALAR_FIELD(primary); + COPY_SCALAR_FIELD(isconstraint); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_SCALAR_FIELD(transformed); + COPY_SCALAR_FIELD(concurrent); + COPY_SCALAR_FIELD(if_not_exists); + COPY_SCALAR_FIELD(reset_default_tblspc); + + return newnode; +} + +static CreateStatsStmt * +_copyCreateStatsStmt(const CreateStatsStmt *from) +{ + CreateStatsStmt *newnode = makeNode(CreateStatsStmt); + + COPY_NODE_FIELD(defnames); + COPY_NODE_FIELD(stat_types); + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(relations); + COPY_STRING_FIELD(stxcomment); + COPY_SCALAR_FIELD(transformed); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static StatsElem * +_copyStatsElem(const StatsElem *from) +{ + StatsElem *newnode = makeNode(StatsElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + + return newnode; +} + +static AlterStatsStmt * +_copyAlterStatsStmt(const AlterStatsStmt *from) +{ + AlterStatsStmt *newnode = makeNode(AlterStatsStmt); + + COPY_NODE_FIELD(defnames); + COPY_SCALAR_FIELD(stxstattarget); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static CreateFunctionStmt * +_copyCreateFunctionStmt(const CreateFunctionStmt *from) +{ + CreateFunctionStmt *newnode = makeNode(CreateFunctionStmt); + + COPY_SCALAR_FIELD(is_procedure); + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(parameters); + COPY_NODE_FIELD(returnType); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(sql_body); + + return newnode; +} + +static FunctionParameter * +_copyFunctionParameter(const FunctionParameter *from) +{ + FunctionParameter *newnode = makeNode(FunctionParameter); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(argType); + COPY_SCALAR_FIELD(mode); + COPY_NODE_FIELD(defexpr); + + return newnode; +} + +static AlterFunctionStmt * +_copyAlterFunctionStmt(const AlterFunctionStmt *from) +{ + AlterFunctionStmt *newnode = makeNode(AlterFunctionStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(func); + COPY_NODE_FIELD(actions); + + return newnode; +} + +static DoStmt * +_copyDoStmt(const DoStmt *from) +{ + DoStmt *newnode = makeNode(DoStmt); + + COPY_NODE_FIELD(args); + + return newnode; +} + +static CallStmt * +_copyCallStmt(const CallStmt *from) +{ + CallStmt *newnode = makeNode(CallStmt); + + COPY_NODE_FIELD(funccall); + COPY_NODE_FIELD(funcexpr); + COPY_NODE_FIELD(outargs); + + return newnode; +} + +static RenameStmt * +_copyRenameStmt(const RenameStmt *from) +{ + RenameStmt *newnode = makeNode(RenameStmt); + + COPY_SCALAR_FIELD(renameType); + COPY_SCALAR_FIELD(relationType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(newname); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterObjectDependsStmt * +_copyAlterObjectDependsStmt(const AlterObjectDependsStmt *from) +{ + AlterObjectDependsStmt *newnode = makeNode(AlterObjectDependsStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_NODE_FIELD(extname); + COPY_SCALAR_FIELD(remove); + + return newnode; +} + +static AlterObjectSchemaStmt * +_copyAlterObjectSchemaStmt(const AlterObjectSchemaStmt *from) +{ + AlterObjectSchemaStmt *newnode = makeNode(AlterObjectSchemaStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(newschema); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterOwnerStmt * +_copyAlterOwnerStmt(const AlterOwnerStmt *from) +{ + AlterOwnerStmt *newnode = makeNode(AlterOwnerStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_NODE_FIELD(newowner); + + return newnode; +} + +static AlterOperatorStmt * +_copyAlterOperatorStmt(const AlterOperatorStmt *from) +{ + AlterOperatorStmt *newnode = makeNode(AlterOperatorStmt); + + COPY_NODE_FIELD(opername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterTypeStmt * +_copyAlterTypeStmt(const AlterTypeStmt *from) +{ + AlterTypeStmt *newnode = makeNode(AlterTypeStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(options); + + return newnode; +} + +static RuleStmt * +_copyRuleStmt(const RuleStmt *from) +{ + RuleStmt *newnode = makeNode(RuleStmt); + + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(rulename); + COPY_NODE_FIELD(whereClause); + COPY_SCALAR_FIELD(event); + COPY_SCALAR_FIELD(instead); + COPY_NODE_FIELD(actions); + COPY_SCALAR_FIELD(replace); + + return newnode; +} + +static NotifyStmt * +_copyNotifyStmt(const NotifyStmt *from) +{ + NotifyStmt *newnode = makeNode(NotifyStmt); + + COPY_STRING_FIELD(conditionname); + COPY_STRING_FIELD(payload); + + return newnode; +} + +static ListenStmt * +_copyListenStmt(const ListenStmt *from) +{ + ListenStmt *newnode = makeNode(ListenStmt); + + COPY_STRING_FIELD(conditionname); + + return newnode; +} + +static UnlistenStmt * +_copyUnlistenStmt(const UnlistenStmt *from) +{ + UnlistenStmt *newnode = makeNode(UnlistenStmt); + + COPY_STRING_FIELD(conditionname); + + return newnode; +} + +static TransactionStmt * +_copyTransactionStmt(const TransactionStmt *from) +{ + TransactionStmt *newnode = makeNode(TransactionStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(options); + COPY_STRING_FIELD(savepoint_name); + COPY_STRING_FIELD(gid); + COPY_SCALAR_FIELD(chain); + + return newnode; +} + +static CompositeTypeStmt * +_copyCompositeTypeStmt(const CompositeTypeStmt *from) +{ + CompositeTypeStmt *newnode = makeNode(CompositeTypeStmt); + + COPY_NODE_FIELD(typevar); + COPY_NODE_FIELD(coldeflist); + + return newnode; +} + +static CreateEnumStmt * +_copyCreateEnumStmt(const CreateEnumStmt *from) +{ + CreateEnumStmt *newnode = makeNode(CreateEnumStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(vals); + + return newnode; +} + +static CreateRangeStmt * +_copyCreateRangeStmt(const CreateRangeStmt *from) +{ + CreateRangeStmt *newnode = makeNode(CreateRangeStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(params); + + return newnode; +} + +static AlterEnumStmt * +_copyAlterEnumStmt(const AlterEnumStmt *from) +{ + AlterEnumStmt *newnode = makeNode(AlterEnumStmt); + + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(oldVal); + COPY_STRING_FIELD(newVal); + COPY_STRING_FIELD(newValNeighbor); + COPY_SCALAR_FIELD(newValIsAfter); + COPY_SCALAR_FIELD(skipIfNewValExists); + + return newnode; +} + +static ViewStmt * +_copyViewStmt(const ViewStmt *from) +{ + ViewStmt *newnode = makeNode(ViewStmt); + + COPY_NODE_FIELD(view); + COPY_NODE_FIELD(aliases); + COPY_NODE_FIELD(query); + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(withCheckOption); + + return newnode; +} + +static LoadStmt * +_copyLoadStmt(const LoadStmt *from) +{ + LoadStmt *newnode = makeNode(LoadStmt); + + COPY_STRING_FIELD(filename); + + return newnode; +} + +static CreatedbStmt * +_copyCreatedbStmt(const CreatedbStmt *from) +{ + CreatedbStmt *newnode = makeNode(CreatedbStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterDatabaseStmt * +_copyAlterDatabaseStmt(const AlterDatabaseStmt *from) +{ + AlterDatabaseStmt *newnode = makeNode(AlterDatabaseStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterDatabaseRefreshCollStmt * +_copyAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *from) +{ + AlterDatabaseRefreshCollStmt *newnode = makeNode(AlterDatabaseRefreshCollStmt); + + COPY_STRING_FIELD(dbname); + + return newnode; +} + +static AlterDatabaseSetStmt * +_copyAlterDatabaseSetStmt(const AlterDatabaseSetStmt *from) +{ + AlterDatabaseSetStmt *newnode = makeNode(AlterDatabaseSetStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static DropdbStmt * +_copyDropdbStmt(const DropdbStmt *from) +{ + DropdbStmt *newnode = makeNode(DropdbStmt); + + COPY_STRING_FIELD(dbname); + COPY_SCALAR_FIELD(missing_ok); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterSystemStmt * +_copyAlterSystemStmt(const AlterSystemStmt *from) +{ + AlterSystemStmt *newnode = makeNode(AlterSystemStmt); + + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static ClusterStmt * +_copyClusterStmt(const ClusterStmt *from) +{ + ClusterStmt *newnode = makeNode(ClusterStmt); + + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(indexname); + COPY_NODE_FIELD(params); + + return newnode; +} + +static VacuumStmt * +_copyVacuumStmt(const VacuumStmt *from) +{ + VacuumStmt *newnode = makeNode(VacuumStmt); + + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(rels); + COPY_SCALAR_FIELD(is_vacuumcmd); + + return newnode; +} + +static VacuumRelation * +_copyVacuumRelation(const VacuumRelation *from) +{ + VacuumRelation *newnode = makeNode(VacuumRelation); + + COPY_NODE_FIELD(relation); + COPY_SCALAR_FIELD(oid); + COPY_NODE_FIELD(va_cols); + + return newnode; +} + +static ExplainStmt * +_copyExplainStmt(const ExplainStmt *from) +{ + ExplainStmt *newnode = makeNode(ExplainStmt); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateTableAsStmt * +_copyCreateTableAsStmt(const CreateTableAsStmt *from) +{ + CreateTableAsStmt *newnode = makeNode(CreateTableAsStmt); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(into); + COPY_SCALAR_FIELD(objtype); + COPY_SCALAR_FIELD(is_select_into); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static RefreshMatViewStmt * +_copyRefreshMatViewStmt(const RefreshMatViewStmt *from) +{ + RefreshMatViewStmt *newnode = makeNode(RefreshMatViewStmt); + + COPY_SCALAR_FIELD(concurrent); + COPY_SCALAR_FIELD(skipData); + COPY_NODE_FIELD(relation); + + return newnode; +} + +static CheckPointStmt * +_copyCheckPointStmt(const CheckPointStmt *from) +{ + CheckPointStmt *newnode = makeNode(CheckPointStmt); + + + return newnode; +} + +static DiscardStmt * +_copyDiscardStmt(const DiscardStmt *from) +{ + DiscardStmt *newnode = makeNode(DiscardStmt); + + COPY_SCALAR_FIELD(target); + + return newnode; +} + +static LockStmt * +_copyLockStmt(const LockStmt *from) +{ + LockStmt *newnode = makeNode(LockStmt); + + COPY_NODE_FIELD(relations); + COPY_SCALAR_FIELD(mode); + COPY_SCALAR_FIELD(nowait); + + return newnode; +} + +static ConstraintsSetStmt * +_copyConstraintsSetStmt(const ConstraintsSetStmt *from) +{ + ConstraintsSetStmt *newnode = makeNode(ConstraintsSetStmt); + + COPY_NODE_FIELD(constraints); + COPY_SCALAR_FIELD(deferred); + + return newnode; +} + +static ReindexStmt * +_copyReindexStmt(const ReindexStmt *from) +{ + ReindexStmt *newnode = makeNode(ReindexStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(params); + + return newnode; +} + +static CreateConversionStmt * +_copyCreateConversionStmt(const CreateConversionStmt *from) +{ + CreateConversionStmt *newnode = makeNode(CreateConversionStmt); + + COPY_NODE_FIELD(conversion_name); + COPY_STRING_FIELD(for_encoding_name); + COPY_STRING_FIELD(to_encoding_name); + COPY_NODE_FIELD(func_name); + COPY_SCALAR_FIELD(def); + + return newnode; +} + +static CreateCastStmt * +_copyCreateCastStmt(const CreateCastStmt *from) +{ + CreateCastStmt *newnode = makeNode(CreateCastStmt); + + COPY_NODE_FIELD(sourcetype); + COPY_NODE_FIELD(targettype); + COPY_NODE_FIELD(func); + COPY_SCALAR_FIELD(context); + COPY_SCALAR_FIELD(inout); + + return newnode; +} + +static CreateTransformStmt * +_copyCreateTransformStmt(const CreateTransformStmt *from) +{ + CreateTransformStmt *newnode = makeNode(CreateTransformStmt); + + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(type_name); + COPY_STRING_FIELD(lang); + COPY_NODE_FIELD(fromsql); + COPY_NODE_FIELD(tosql); + + return newnode; +} + +static PrepareStmt * +_copyPrepareStmt(const PrepareStmt *from) +{ + PrepareStmt *newnode = makeNode(PrepareStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(argtypes); + COPY_NODE_FIELD(query); + + return newnode; +} + +static ExecuteStmt * +_copyExecuteStmt(const ExecuteStmt *from) +{ + ExecuteStmt *newnode = makeNode(ExecuteStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(params); + + return newnode; +} + +static DeallocateStmt * +_copyDeallocateStmt(const DeallocateStmt *from) +{ + DeallocateStmt *newnode = makeNode(DeallocateStmt); + + COPY_STRING_FIELD(name); + + return newnode; +} + +static DropOwnedStmt * +_copyDropOwnedStmt(const DropOwnedStmt *from) +{ + DropOwnedStmt *newnode = makeNode(DropOwnedStmt); + + COPY_NODE_FIELD(roles); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static ReassignOwnedStmt * +_copyReassignOwnedStmt(const ReassignOwnedStmt *from) +{ + ReassignOwnedStmt *newnode = makeNode(ReassignOwnedStmt); + + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(newrole); + + return newnode; +} + +static AlterTSDictionaryStmt * +_copyAlterTSDictionaryStmt(const AlterTSDictionaryStmt *from) +{ + AlterTSDictionaryStmt *newnode = makeNode(AlterTSDictionaryStmt); + + COPY_NODE_FIELD(dictname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterTSConfigurationStmt * +_copyAlterTSConfigurationStmt(const AlterTSConfigurationStmt *from) +{ + AlterTSConfigurationStmt *newnode = makeNode(AlterTSConfigurationStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(cfgname); + COPY_NODE_FIELD(tokentype); + COPY_NODE_FIELD(dicts); + COPY_SCALAR_FIELD(override); + COPY_SCALAR_FIELD(replace); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static PublicationTable * +_copyPublicationTable(const PublicationTable *from) +{ + PublicationTable *newnode = makeNode(PublicationTable); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(columns); + + return newnode; +} + +static PublicationObjSpec * +_copyPublicationObjSpec(const PublicationObjSpec *from) +{ + PublicationObjSpec *newnode = makeNode(PublicationObjSpec); + + COPY_SCALAR_FIELD(pubobjtype); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(pubtable); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CreatePublicationStmt * +_copyCreatePublicationStmt(const CreatePublicationStmt *from) +{ + CreatePublicationStmt *newnode = makeNode(CreatePublicationStmt); + + COPY_STRING_FIELD(pubname); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(pubobjects); + COPY_SCALAR_FIELD(for_all_tables); + + return newnode; +} + +static AlterPublicationStmt * +_copyAlterPublicationStmt(const AlterPublicationStmt *from) +{ + AlterPublicationStmt *newnode = makeNode(AlterPublicationStmt); + + COPY_STRING_FIELD(pubname); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(pubobjects); + COPY_SCALAR_FIELD(for_all_tables); + COPY_SCALAR_FIELD(action); + + return newnode; +} + +static CreateSubscriptionStmt * +_copyCreateSubscriptionStmt(const CreateSubscriptionStmt *from) +{ + CreateSubscriptionStmt *newnode = makeNode(CreateSubscriptionStmt); + + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(conninfo); + COPY_NODE_FIELD(publication); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterSubscriptionStmt * +_copyAlterSubscriptionStmt(const AlterSubscriptionStmt *from) +{ + AlterSubscriptionStmt *newnode = makeNode(AlterSubscriptionStmt); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(conninfo); + COPY_NODE_FIELD(publication); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropSubscriptionStmt * +_copyDropSubscriptionStmt(const DropSubscriptionStmt *from) +{ + DropSubscriptionStmt *newnode = makeNode(DropSubscriptionStmt); + + COPY_STRING_FIELD(subname); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static PathKey * +_copyPathKey(const PathKey *from) +{ + PathKey *newnode = makeNode(PathKey); + + COPY_SCALAR_FIELD(pk_eclass); + COPY_SCALAR_FIELD(pk_opfamily); + COPY_SCALAR_FIELD(pk_strategy); + COPY_SCALAR_FIELD(pk_nulls_first); + + return newnode; +} + +static RestrictInfo * +_copyRestrictInfo(const RestrictInfo *from) +{ + RestrictInfo *newnode = makeNode(RestrictInfo); + + COPY_NODE_FIELD(clause); + COPY_SCALAR_FIELD(is_pushed_down); + COPY_SCALAR_FIELD(can_join); + COPY_SCALAR_FIELD(pseudoconstant); + COPY_SCALAR_FIELD(has_clone); + COPY_SCALAR_FIELD(is_clone); + COPY_SCALAR_FIELD(leakproof); + COPY_SCALAR_FIELD(has_volatile); + COPY_SCALAR_FIELD(security_level); + COPY_SCALAR_FIELD(num_base_rels); + COPY_BITMAPSET_FIELD(clause_relids); + COPY_BITMAPSET_FIELD(required_relids); + COPY_BITMAPSET_FIELD(incompatible_relids); + COPY_BITMAPSET_FIELD(outer_relids); + COPY_BITMAPSET_FIELD(left_relids); + COPY_BITMAPSET_FIELD(right_relids); + COPY_NODE_FIELD(orclause); + COPY_SCALAR_FIELD(rinfo_serial); + COPY_SCALAR_FIELD(parent_ec); + COPY_SCALAR_FIELD(eval_cost); + COPY_SCALAR_FIELD(norm_selec); + COPY_SCALAR_FIELD(outer_selec); + COPY_NODE_FIELD(mergeopfamilies); + COPY_SCALAR_FIELD(left_ec); + COPY_SCALAR_FIELD(right_ec); + COPY_SCALAR_FIELD(left_em); + COPY_SCALAR_FIELD(right_em); + newnode->scansel_cache = NIL; + COPY_SCALAR_FIELD(outer_is_left); + COPY_SCALAR_FIELD(hashjoinoperator); + COPY_SCALAR_FIELD(left_bucketsize); + COPY_SCALAR_FIELD(right_bucketsize); + COPY_SCALAR_FIELD(left_mcvfreq); + COPY_SCALAR_FIELD(right_mcvfreq); + COPY_SCALAR_FIELD(left_hasheqoperator); + COPY_SCALAR_FIELD(right_hasheqoperator); + + return newnode; +} + +static PlaceHolderVar * +_copyPlaceHolderVar(const PlaceHolderVar *from) +{ + PlaceHolderVar *newnode = makeNode(PlaceHolderVar); + + COPY_NODE_FIELD(phexpr); + COPY_BITMAPSET_FIELD(phrels); + COPY_BITMAPSET_FIELD(phnullingrels); + COPY_SCALAR_FIELD(phid); + COPY_SCALAR_FIELD(phlevelsup); + + return newnode; +} + +static SpecialJoinInfo * +_copySpecialJoinInfo(const SpecialJoinInfo *from) +{ + SpecialJoinInfo *newnode = makeNode(SpecialJoinInfo); + + COPY_BITMAPSET_FIELD(min_lefthand); + COPY_BITMAPSET_FIELD(min_righthand); + COPY_BITMAPSET_FIELD(syn_lefthand); + COPY_BITMAPSET_FIELD(syn_righthand); + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(ojrelid); + COPY_BITMAPSET_FIELD(commute_above_l); + COPY_BITMAPSET_FIELD(commute_above_r); + COPY_BITMAPSET_FIELD(commute_below_l); + COPY_BITMAPSET_FIELD(commute_below_r); + COPY_SCALAR_FIELD(lhs_strict); + COPY_SCALAR_FIELD(semi_can_btree); + COPY_SCALAR_FIELD(semi_can_hash); + COPY_NODE_FIELD(semi_operators); + COPY_NODE_FIELD(semi_rhs_exprs); + + return newnode; +} + +static AppendRelInfo * +_copyAppendRelInfo(const AppendRelInfo *from) +{ + AppendRelInfo *newnode = makeNode(AppendRelInfo); + + COPY_SCALAR_FIELD(parent_relid); + COPY_SCALAR_FIELD(child_relid); + COPY_SCALAR_FIELD(parent_reltype); + COPY_SCALAR_FIELD(child_reltype); + COPY_NODE_FIELD(translated_vars); + COPY_SCALAR_FIELD(num_child_cols); + COPY_POINTER_FIELD(parent_colnos, from->num_child_cols * sizeof(AttrNumber)); + COPY_SCALAR_FIELD(parent_reloid); + + return newnode; +} + +static PlaceHolderInfo * +_copyPlaceHolderInfo(const PlaceHolderInfo *from) +{ + PlaceHolderInfo *newnode = makeNode(PlaceHolderInfo); + + COPY_SCALAR_FIELD(phid); + COPY_NODE_FIELD(ph_var); + COPY_BITMAPSET_FIELD(ph_eval_at); + COPY_BITMAPSET_FIELD(ph_lateral); + COPY_BITMAPSET_FIELD(ph_needed); + COPY_SCALAR_FIELD(ph_width); + + return newnode; +} + +static PlannedStmt * +_copyPlannedStmt(const PlannedStmt *from) +{ + PlannedStmt *newnode = makeNode(PlannedStmt); + + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(queryId); + COPY_SCALAR_FIELD(hasReturning); + COPY_SCALAR_FIELD(hasModifyingCTE); + COPY_SCALAR_FIELD(canSetTag); + COPY_SCALAR_FIELD(transientPlan); + COPY_SCALAR_FIELD(dependsOnRole); + COPY_SCALAR_FIELD(parallelModeNeeded); + COPY_SCALAR_FIELD(jitFlags); + COPY_NODE_FIELD(planTree); + COPY_NODE_FIELD(rtable); + COPY_NODE_FIELD(permInfos); + COPY_NODE_FIELD(resultRelations); + COPY_NODE_FIELD(appendRelations); + COPY_NODE_FIELD(subplans); + COPY_BITMAPSET_FIELD(rewindPlanIDs); + COPY_NODE_FIELD(rowMarks); + COPY_NODE_FIELD(relationOids); + COPY_NODE_FIELD(invalItems); + COPY_NODE_FIELD(paramExecTypes); + COPY_NODE_FIELD(utilityStmt); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static Result * +_copyResult(const Result *from) +{ + Result *newnode = makeNode(Result); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(resconstantqual); + + return newnode; +} + +static ProjectSet * +_copyProjectSet(const ProjectSet *from) +{ + ProjectSet *newnode = makeNode(ProjectSet); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + + return newnode; +} + +static ModifyTable * +_copyModifyTable(const ModifyTable *from) +{ + ModifyTable *newnode = makeNode(ModifyTable); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(operation); + COPY_SCALAR_FIELD(canSetTag); + COPY_SCALAR_FIELD(nominalRelation); + COPY_SCALAR_FIELD(rootRelation); + COPY_SCALAR_FIELD(partColsUpdated); + COPY_NODE_FIELD(resultRelations); + COPY_NODE_FIELD(updateColnosLists); + COPY_NODE_FIELD(withCheckOptionLists); + COPY_NODE_FIELD(returningLists); + COPY_NODE_FIELD(fdwPrivLists); + COPY_BITMAPSET_FIELD(fdwDirectModifyPlans); + COPY_NODE_FIELD(rowMarks); + COPY_SCALAR_FIELD(epqParam); + COPY_SCALAR_FIELD(onConflictAction); + COPY_NODE_FIELD(arbiterIndexes); + COPY_NODE_FIELD(onConflictSet); + COPY_NODE_FIELD(onConflictCols); + COPY_NODE_FIELD(onConflictWhere); + COPY_SCALAR_FIELD(exclRelRTI); + COPY_NODE_FIELD(exclRelTlist); + COPY_NODE_FIELD(mergeActionLists); + + return newnode; +} + +static Append * +_copyAppend(const Append *from) +{ + Append *newnode = makeNode(Append); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_BITMAPSET_FIELD(apprelids); + COPY_NODE_FIELD(appendplans); + COPY_SCALAR_FIELD(nasyncplans); + COPY_SCALAR_FIELD(first_partial_plan); + COPY_NODE_FIELD(part_prune_info); + + return newnode; +} + +static MergeAppend * +_copyMergeAppend(const MergeAppend *from) +{ + MergeAppend *newnode = makeNode(MergeAppend); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_BITMAPSET_FIELD(apprelids); + COPY_NODE_FIELD(mergeplans); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + COPY_NODE_FIELD(part_prune_info); + + return newnode; +} + +static RecursiveUnion * +_copyRecursiveUnion(const RecursiveUnion *from) +{ + RecursiveUnion *newnode = makeNode(RecursiveUnion); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(wtParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(numGroups); + + return newnode; +} + +static BitmapAnd * +_copyBitmapAnd(const BitmapAnd *from) +{ + BitmapAnd *newnode = makeNode(BitmapAnd); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(bitmapplans); + + return newnode; +} + +static BitmapOr * +_copyBitmapOr(const BitmapOr *from) +{ + BitmapOr *newnode = makeNode(BitmapOr); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(isshared); + COPY_NODE_FIELD(bitmapplans); + + return newnode; +} + +static SeqScan * +_copySeqScan(const SeqScan *from) +{ + SeqScan *newnode = makeNode(SeqScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + + return newnode; +} + +static SampleScan * +_copySampleScan(const SampleScan *from) +{ + SampleScan *newnode = makeNode(SampleScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tablesample); + + return newnode; +} + +static IndexScan * +_copyIndexScan(const IndexScan *from) +{ + IndexScan *newnode = makeNode(IndexScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(indexqualorig); + COPY_NODE_FIELD(indexorderby); + COPY_NODE_FIELD(indexorderbyorig); + COPY_NODE_FIELD(indexorderbyops); + COPY_SCALAR_FIELD(indexorderdir); + + return newnode; +} + +static IndexOnlyScan * +_copyIndexOnlyScan(const IndexOnlyScan *from) +{ + IndexOnlyScan *newnode = makeNode(IndexOnlyScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(recheckqual); + COPY_NODE_FIELD(indexorderby); + COPY_NODE_FIELD(indextlist); + COPY_SCALAR_FIELD(indexorderdir); + + return newnode; +} + +static BitmapIndexScan * +_copyBitmapIndexScan(const BitmapIndexScan *from) +{ + BitmapIndexScan *newnode = makeNode(BitmapIndexScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_SCALAR_FIELD(isshared); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(indexqualorig); + + return newnode; +} + +static BitmapHeapScan * +_copyBitmapHeapScan(const BitmapHeapScan *from) +{ + BitmapHeapScan *newnode = makeNode(BitmapHeapScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(bitmapqualorig); + + return newnode; +} + +static TidScan * +_copyTidScan(const TidScan *from) +{ + TidScan *newnode = makeNode(TidScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tidquals); + + return newnode; +} + +static TidRangeScan * +_copyTidRangeScan(const TidRangeScan *from) +{ + TidRangeScan *newnode = makeNode(TidRangeScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tidrangequals); + + return newnode; +} + +static SubqueryScan * +_copySubqueryScan(const SubqueryScan *from) +{ + SubqueryScan *newnode = makeNode(SubqueryScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(subplan); + COPY_SCALAR_FIELD(scanstatus); + + return newnode; +} + +static FunctionScan * +_copyFunctionScan(const FunctionScan *from) +{ + FunctionScan *newnode = makeNode(FunctionScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(functions); + COPY_SCALAR_FIELD(funcordinality); + + return newnode; +} + +static ValuesScan * +_copyValuesScan(const ValuesScan *from) +{ + ValuesScan *newnode = makeNode(ValuesScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(values_lists); + + return newnode; +} + +static TableFuncScan * +_copyTableFuncScan(const TableFuncScan *from) +{ + TableFuncScan *newnode = makeNode(TableFuncScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tablefunc); + + return newnode; +} + +static CteScan * +_copyCteScan(const CteScan *from) +{ + CteScan *newnode = makeNode(CteScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(ctePlanId); + COPY_SCALAR_FIELD(cteParam); + + return newnode; +} + +static NamedTuplestoreScan * +_copyNamedTuplestoreScan(const NamedTuplestoreScan *from) +{ + NamedTuplestoreScan *newnode = makeNode(NamedTuplestoreScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_STRING_FIELD(enrname); + + return newnode; +} + +static WorkTableScan * +_copyWorkTableScan(const WorkTableScan *from) +{ + WorkTableScan *newnode = makeNode(WorkTableScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(wtParam); + + return newnode; +} + +static ForeignScan * +_copyForeignScan(const ForeignScan *from) +{ + ForeignScan *newnode = makeNode(ForeignScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(operation); + COPY_SCALAR_FIELD(resultRelation); + COPY_SCALAR_FIELD(checkAsUser); + COPY_SCALAR_FIELD(fs_server); + COPY_NODE_FIELD(fdw_exprs); + COPY_NODE_FIELD(fdw_private); + COPY_NODE_FIELD(fdw_scan_tlist); + COPY_NODE_FIELD(fdw_recheck_quals); + COPY_BITMAPSET_FIELD(fs_relids); + COPY_BITMAPSET_FIELD(fs_base_relids); + COPY_SCALAR_FIELD(fsSystemCol); + + return newnode; +} + +static CustomScan * +_copyCustomScan(const CustomScan *from) +{ + CustomScan *newnode = makeNode(CustomScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(flags); + COPY_NODE_FIELD(custom_plans); + COPY_NODE_FIELD(custom_exprs); + COPY_NODE_FIELD(custom_private); + COPY_NODE_FIELD(custom_scan_tlist); + COPY_BITMAPSET_FIELD(custom_relids); + COPY_SCALAR_FIELD(methods); + + return newnode; +} + +static NestLoop * +_copyNestLoop(const NestLoop *from) +{ + NestLoop *newnode = makeNode(NestLoop); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_NODE_FIELD(nestParams); + + return newnode; +} + +static NestLoopParam * +_copyNestLoopParam(const NestLoopParam *from) +{ + NestLoopParam *newnode = makeNode(NestLoopParam); + + COPY_SCALAR_FIELD(paramno); + COPY_NODE_FIELD(paramval); + + return newnode; +} + +static MergeJoin * +_copyMergeJoin(const MergeJoin *from) +{ + MergeJoin *newnode = makeNode(MergeJoin); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_SCALAR_FIELD(skip_mark_restore); + COPY_NODE_FIELD(mergeclauses); + COPY_POINTER_FIELD(mergeFamilies, list_length(from->mergeclauses) * sizeof(Oid)); + COPY_POINTER_FIELD(mergeCollations, list_length(from->mergeclauses) * sizeof(Oid)); + COPY_POINTER_FIELD(mergeStrategies, list_length(from->mergeclauses) * sizeof(int)); + COPY_POINTER_FIELD(mergeNullsFirst, list_length(from->mergeclauses) * sizeof(bool)); + + return newnode; +} + +static HashJoin * +_copyHashJoin(const HashJoin *from) +{ + HashJoin *newnode = makeNode(HashJoin); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_NODE_FIELD(hashclauses); + COPY_NODE_FIELD(hashoperators); + COPY_NODE_FIELD(hashcollations); + COPY_NODE_FIELD(hashkeys); + + return newnode; +} + +static Material * +_copyMaterial(const Material *from) +{ + Material *newnode = makeNode(Material); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + + return newnode; +} + +static Memoize * +_copyMemoize(const Memoize *from) +{ + Memoize *newnode = makeNode(Memoize); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numKeys); + COPY_POINTER_FIELD(hashOperators, from->numKeys * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numKeys * sizeof(Oid)); + COPY_NODE_FIELD(param_exprs); + COPY_SCALAR_FIELD(singlerow); + COPY_SCALAR_FIELD(binary_mode); + COPY_SCALAR_FIELD(est_entries); + COPY_BITMAPSET_FIELD(keyparamids); + + return newnode; +} + +static Sort * +_copySort(const Sort *from) +{ + Sort *newnode = makeNode(Sort); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + + return newnode; +} + +static IncrementalSort * +_copyIncrementalSort(const IncrementalSort *from) +{ + IncrementalSort *newnode = makeNode(IncrementalSort); + + COPY_SCALAR_FIELD(sort.plan.startup_cost); + COPY_SCALAR_FIELD(sort.plan.total_cost); + COPY_SCALAR_FIELD(sort.plan.plan_rows); + COPY_SCALAR_FIELD(sort.plan.plan_width); + COPY_SCALAR_FIELD(sort.plan.parallel_aware); + COPY_SCALAR_FIELD(sort.plan.parallel_safe); + COPY_SCALAR_FIELD(sort.plan.async_capable); + COPY_SCALAR_FIELD(sort.plan.plan_node_id); + COPY_NODE_FIELD(sort.plan.targetlist); + COPY_NODE_FIELD(sort.plan.qual); + COPY_NODE_FIELD(sort.plan.lefttree); + COPY_NODE_FIELD(sort.plan.righttree); + COPY_NODE_FIELD(sort.plan.initPlan); + COPY_BITMAPSET_FIELD(sort.plan.extParam); + COPY_BITMAPSET_FIELD(sort.plan.allParam); + COPY_SCALAR_FIELD(sort.numCols); + COPY_POINTER_FIELD(sort.sortColIdx, from->sort.numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sort.sortOperators, from->sort.numCols * sizeof(Oid)); + COPY_POINTER_FIELD(sort.collations, from->sort.numCols * sizeof(Oid)); + COPY_POINTER_FIELD(sort.nullsFirst, from->sort.numCols * sizeof(bool)); + COPY_SCALAR_FIELD(nPresortedCols); + + return newnode; +} + +static Group * +_copyGroup(const Group *from) +{ + Group *newnode = makeNode(Group); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); + + return newnode; +} + +static Agg * +_copyAgg(const Agg *from) +{ + Agg *newnode = makeNode(Agg); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(aggstrategy); + COPY_SCALAR_FIELD(aggsplit); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(numGroups); + COPY_SCALAR_FIELD(transitionSpace); + COPY_BITMAPSET_FIELD(aggParams); + COPY_NODE_FIELD(groupingSets); + COPY_NODE_FIELD(chain); + + return newnode; +} + +static WindowAgg * +_copyWindowAgg(const WindowAgg *from) +{ + WindowAgg *newnode = makeNode(WindowAgg); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(partNumCols); + COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(ordNumCols); + COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_NODE_FIELD(runCondition); + COPY_NODE_FIELD(runConditionOrig); + COPY_SCALAR_FIELD(startInRangeFunc); + COPY_SCALAR_FIELD(endInRangeFunc); + COPY_SCALAR_FIELD(inRangeColl); + COPY_SCALAR_FIELD(inRangeAsc); + COPY_SCALAR_FIELD(inRangeNullsFirst); + COPY_SCALAR_FIELD(topWindow); + + return newnode; +} + +static Unique * +_copyUnique(const Unique *from) +{ + Unique *newnode = makeNode(Unique); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(uniqColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(uniqOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(uniqCollations, from->numCols * sizeof(Oid)); + + return newnode; +} + +static Gather * +_copyGather(const Gather *from) +{ + Gather *newnode = makeNode(Gather); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(num_workers); + COPY_SCALAR_FIELD(rescan_param); + COPY_SCALAR_FIELD(single_copy); + COPY_SCALAR_FIELD(invisible); + COPY_BITMAPSET_FIELD(initParam); + + return newnode; +} + +static GatherMerge * +_copyGatherMerge(const GatherMerge *from) +{ + GatherMerge *newnode = makeNode(GatherMerge); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(num_workers); + COPY_SCALAR_FIELD(rescan_param); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + COPY_BITMAPSET_FIELD(initParam); + + return newnode; +} + +static Hash * +_copyHash(const Hash *from) +{ + Hash *newnode = makeNode(Hash); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(hashkeys); + COPY_SCALAR_FIELD(skewTable); + COPY_SCALAR_FIELD(skewColumn); + COPY_SCALAR_FIELD(skewInherit); + COPY_SCALAR_FIELD(rows_total); + + return newnode; +} + +static SetOp * +_copySetOp(const SetOp *from) +{ + SetOp *newnode = makeNode(SetOp); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(cmd); + COPY_SCALAR_FIELD(strategy); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(flagColIdx); + COPY_SCALAR_FIELD(firstFlag); + COPY_SCALAR_FIELD(numGroups); + + return newnode; +} + +static LockRows * +_copyLockRows(const LockRows *from) +{ + LockRows *newnode = makeNode(LockRows); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(rowMarks); + COPY_SCALAR_FIELD(epqParam); + + return newnode; +} + +static Limit * +_copyLimit(const Limit *from) +{ + Limit *newnode = makeNode(Limit); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_SCALAR_FIELD(uniqNumCols); + COPY_POINTER_FIELD(uniqColIdx, from->uniqNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(uniqOperators, from->uniqNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(uniqCollations, from->uniqNumCols * sizeof(Oid)); + + return newnode; +} + +static PlanRowMark * +_copyPlanRowMark(const PlanRowMark *from) +{ + PlanRowMark *newnode = makeNode(PlanRowMark); + + COPY_SCALAR_FIELD(rti); + COPY_SCALAR_FIELD(prti); + COPY_SCALAR_FIELD(rowmarkId); + COPY_SCALAR_FIELD(markType); + COPY_SCALAR_FIELD(allMarkTypes); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + COPY_SCALAR_FIELD(isParent); + + return newnode; +} + +static PartitionPruneInfo * +_copyPartitionPruneInfo(const PartitionPruneInfo *from) +{ + PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo); + + COPY_NODE_FIELD(prune_infos); + COPY_BITMAPSET_FIELD(other_subplans); + + return newnode; +} + +static PartitionedRelPruneInfo * +_copyPartitionedRelPruneInfo(const PartitionedRelPruneInfo *from) +{ + PartitionedRelPruneInfo *newnode = makeNode(PartitionedRelPruneInfo); + + COPY_SCALAR_FIELD(rtindex); + COPY_BITMAPSET_FIELD(present_parts); + COPY_SCALAR_FIELD(nparts); + COPY_POINTER_FIELD(subplan_map, from->nparts * sizeof(int)); + COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int)); + COPY_POINTER_FIELD(relid_map, from->nparts * sizeof(Oid)); + COPY_NODE_FIELD(initial_pruning_steps); + COPY_NODE_FIELD(exec_pruning_steps); + COPY_BITMAPSET_FIELD(execparamids); + + return newnode; +} + +static PartitionPruneStepOp * +_copyPartitionPruneStepOp(const PartitionPruneStepOp *from) +{ + PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp); + + COPY_SCALAR_FIELD(step.step_id); + COPY_SCALAR_FIELD(opstrategy); + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(cmpfns); + COPY_BITMAPSET_FIELD(nullkeys); + + return newnode; +} + +static PartitionPruneStepCombine * +_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from) +{ + PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine); + + COPY_SCALAR_FIELD(step.step_id); + COPY_SCALAR_FIELD(combineOp); + COPY_NODE_FIELD(source_stepids); + + return newnode; +} + +static PlanInvalItem * +_copyPlanInvalItem(const PlanInvalItem *from) +{ + PlanInvalItem *newnode = makeNode(PlanInvalItem); + + COPY_SCALAR_FIELD(cacheId); + COPY_SCALAR_FIELD(hashValue); + + return newnode; +} + +static Integer * +_copyInteger(const Integer *from) +{ + Integer *newnode = makeNode(Integer); + + COPY_SCALAR_FIELD(ival); + + return newnode; +} + +static Float * +_copyFloat(const Float *from) +{ + Float *newnode = makeNode(Float); + + COPY_STRING_FIELD(fval); + + return newnode; +} + +static Boolean * +_copyBoolean(const Boolean *from) +{ + Boolean *newnode = makeNode(Boolean); + + COPY_SCALAR_FIELD(boolval); + + return newnode; +} + +static String * +_copyString(const String *from) +{ + String *newnode = makeNode(String); + + COPY_STRING_FIELD(sval); + + return newnode; +} + +static BitString * +_copyBitString(const BitString *from) +{ + BitString *newnode = makeNode(BitString); + + COPY_STRING_FIELD(bsval); + + return newnode; +} + +static ForeignKeyCacheInfo * +_copyForeignKeyCacheInfo(const ForeignKeyCacheInfo *from) +{ + ForeignKeyCacheInfo *newnode = makeNode(ForeignKeyCacheInfo); + + COPY_SCALAR_FIELD(conoid); + COPY_SCALAR_FIELD(conrelid); + COPY_SCALAR_FIELD(confrelid); + COPY_SCALAR_FIELD(nkeys); + COPY_ARRAY_FIELD(conkey); + COPY_ARRAY_FIELD(confkey); + COPY_ARRAY_FIELD(conpfeqop); + + return newnode; +} diff --git a/src/postgres/include/copyfuncs.switch.c b/src/postgres/include/copyfuncs.switch.c new file mode 100644 index 00000000..15404a40 --- /dev/null +++ b/src/postgres/include/copyfuncs.switch.c @@ -0,0 +1,938 @@ +/*------------------------------------------------------------------------- + * + * copyfuncs.switch.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ + case T_Alias: + retval = _copyAlias(from); + break; + case T_RangeVar: + retval = _copyRangeVar(from); + break; + case T_TableFunc: + retval = _copyTableFunc(from); + break; + case T_IntoClause: + retval = _copyIntoClause(from); + break; + case T_Var: + retval = _copyVar(from); + break; + case T_Const: + retval = _copyConst(from); + break; + case T_Param: + retval = _copyParam(from); + break; + case T_Aggref: + retval = _copyAggref(from); + break; + case T_GroupingFunc: + retval = _copyGroupingFunc(from); + break; + case T_WindowFunc: + retval = _copyWindowFunc(from); + break; + case T_SubscriptingRef: + retval = _copySubscriptingRef(from); + break; + case T_FuncExpr: + retval = _copyFuncExpr(from); + break; + case T_NamedArgExpr: + retval = _copyNamedArgExpr(from); + break; + case T_OpExpr: + retval = _copyOpExpr(from); + break; + case T_DistinctExpr: + retval = _copyDistinctExpr(from); + break; + case T_NullIfExpr: + retval = _copyNullIfExpr(from); + break; + case T_ScalarArrayOpExpr: + retval = _copyScalarArrayOpExpr(from); + break; + case T_BoolExpr: + retval = _copyBoolExpr(from); + break; + case T_SubLink: + retval = _copySubLink(from); + break; + case T_SubPlan: + retval = _copySubPlan(from); + break; + case T_AlternativeSubPlan: + retval = _copyAlternativeSubPlan(from); + break; + case T_FieldSelect: + retval = _copyFieldSelect(from); + break; + case T_FieldStore: + retval = _copyFieldStore(from); + break; + case T_RelabelType: + retval = _copyRelabelType(from); + break; + case T_CoerceViaIO: + retval = _copyCoerceViaIO(from); + break; + case T_ArrayCoerceExpr: + retval = _copyArrayCoerceExpr(from); + break; + case T_ConvertRowtypeExpr: + retval = _copyConvertRowtypeExpr(from); + break; + case T_CollateExpr: + retval = _copyCollateExpr(from); + break; + case T_CaseExpr: + retval = _copyCaseExpr(from); + break; + case T_CaseWhen: + retval = _copyCaseWhen(from); + break; + case T_CaseTestExpr: + retval = _copyCaseTestExpr(from); + break; + case T_ArrayExpr: + retval = _copyArrayExpr(from); + break; + case T_RowExpr: + retval = _copyRowExpr(from); + break; + case T_RowCompareExpr: + retval = _copyRowCompareExpr(from); + break; + case T_CoalesceExpr: + retval = _copyCoalesceExpr(from); + break; + case T_MinMaxExpr: + retval = _copyMinMaxExpr(from); + break; + case T_SQLValueFunction: + retval = _copySQLValueFunction(from); + break; + case T_XmlExpr: + retval = _copyXmlExpr(from); + break; + case T_JsonFormat: + retval = _copyJsonFormat(from); + break; + case T_JsonReturning: + retval = _copyJsonReturning(from); + break; + case T_JsonValueExpr: + retval = _copyJsonValueExpr(from); + break; + case T_JsonConstructorExpr: + retval = _copyJsonConstructorExpr(from); + break; + case T_JsonIsPredicate: + retval = _copyJsonIsPredicate(from); + break; + case T_NullTest: + retval = _copyNullTest(from); + break; + case T_BooleanTest: + retval = _copyBooleanTest(from); + break; + case T_CoerceToDomain: + retval = _copyCoerceToDomain(from); + break; + case T_CoerceToDomainValue: + retval = _copyCoerceToDomainValue(from); + break; + case T_SetToDefault: + retval = _copySetToDefault(from); + break; + case T_CurrentOfExpr: + retval = _copyCurrentOfExpr(from); + break; + case T_NextValueExpr: + retval = _copyNextValueExpr(from); + break; + case T_InferenceElem: + retval = _copyInferenceElem(from); + break; + case T_TargetEntry: + retval = _copyTargetEntry(from); + break; + case T_RangeTblRef: + retval = _copyRangeTblRef(from); + break; + case T_JoinExpr: + retval = _copyJoinExpr(from); + break; + case T_FromExpr: + retval = _copyFromExpr(from); + break; + case T_OnConflictExpr: + retval = _copyOnConflictExpr(from); + break; + case T_Query: + retval = _copyQuery(from); + break; + case T_TypeName: + retval = _copyTypeName(from); + break; + case T_ColumnRef: + retval = _copyColumnRef(from); + break; + case T_ParamRef: + retval = _copyParamRef(from); + break; + case T_A_Expr: + retval = _copyA_Expr(from); + break; + case T_A_Const: + retval = _copyA_Const(from); + break; + case T_TypeCast: + retval = _copyTypeCast(from); + break; + case T_CollateClause: + retval = _copyCollateClause(from); + break; + case T_RoleSpec: + retval = _copyRoleSpec(from); + break; + case T_FuncCall: + retval = _copyFuncCall(from); + break; + case T_A_Star: + retval = _copyA_Star(from); + break; + case T_A_Indices: + retval = _copyA_Indices(from); + break; + case T_A_Indirection: + retval = _copyA_Indirection(from); + break; + case T_A_ArrayExpr: + retval = _copyA_ArrayExpr(from); + break; + case T_ResTarget: + retval = _copyResTarget(from); + break; + case T_MultiAssignRef: + retval = _copyMultiAssignRef(from); + break; + case T_SortBy: + retval = _copySortBy(from); + break; + case T_WindowDef: + retval = _copyWindowDef(from); + break; + case T_RangeSubselect: + retval = _copyRangeSubselect(from); + break; + case T_RangeFunction: + retval = _copyRangeFunction(from); + break; + case T_RangeTableFunc: + retval = _copyRangeTableFunc(from); + break; + case T_RangeTableFuncCol: + retval = _copyRangeTableFuncCol(from); + break; + case T_RangeTableSample: + retval = _copyRangeTableSample(from); + break; + case T_ColumnDef: + retval = _copyColumnDef(from); + break; + case T_TableLikeClause: + retval = _copyTableLikeClause(from); + break; + case T_IndexElem: + retval = _copyIndexElem(from); + break; + case T_DefElem: + retval = _copyDefElem(from); + break; + case T_LockingClause: + retval = _copyLockingClause(from); + break; + case T_XmlSerialize: + retval = _copyXmlSerialize(from); + break; + case T_PartitionElem: + retval = _copyPartitionElem(from); + break; + case T_PartitionSpec: + retval = _copyPartitionSpec(from); + break; + case T_PartitionBoundSpec: + retval = _copyPartitionBoundSpec(from); + break; + case T_PartitionRangeDatum: + retval = _copyPartitionRangeDatum(from); + break; + case T_PartitionCmd: + retval = _copyPartitionCmd(from); + break; + case T_RangeTblEntry: + retval = _copyRangeTblEntry(from); + break; + case T_RTEPermissionInfo: + retval = _copyRTEPermissionInfo(from); + break; + case T_RangeTblFunction: + retval = _copyRangeTblFunction(from); + break; + case T_TableSampleClause: + retval = _copyTableSampleClause(from); + break; + case T_WithCheckOption: + retval = _copyWithCheckOption(from); + break; + case T_SortGroupClause: + retval = _copySortGroupClause(from); + break; + case T_GroupingSet: + retval = _copyGroupingSet(from); + break; + case T_WindowClause: + retval = _copyWindowClause(from); + break; + case T_RowMarkClause: + retval = _copyRowMarkClause(from); + break; + case T_WithClause: + retval = _copyWithClause(from); + break; + case T_InferClause: + retval = _copyInferClause(from); + break; + case T_OnConflictClause: + retval = _copyOnConflictClause(from); + break; + case T_CTESearchClause: + retval = _copyCTESearchClause(from); + break; + case T_CTECycleClause: + retval = _copyCTECycleClause(from); + break; + case T_CommonTableExpr: + retval = _copyCommonTableExpr(from); + break; + case T_MergeWhenClause: + retval = _copyMergeWhenClause(from); + break; + case T_MergeAction: + retval = _copyMergeAction(from); + break; + case T_TriggerTransition: + retval = _copyTriggerTransition(from); + break; + case T_JsonOutput: + retval = _copyJsonOutput(from); + break; + case T_JsonKeyValue: + retval = _copyJsonKeyValue(from); + break; + case T_JsonObjectConstructor: + retval = _copyJsonObjectConstructor(from); + break; + case T_JsonArrayConstructor: + retval = _copyJsonArrayConstructor(from); + break; + case T_JsonArrayQueryConstructor: + retval = _copyJsonArrayQueryConstructor(from); + break; + case T_JsonAggConstructor: + retval = _copyJsonAggConstructor(from); + break; + case T_JsonObjectAgg: + retval = _copyJsonObjectAgg(from); + break; + case T_JsonArrayAgg: + retval = _copyJsonArrayAgg(from); + break; + case T_RawStmt: + retval = _copyRawStmt(from); + break; + case T_InsertStmt: + retval = _copyInsertStmt(from); + break; + case T_DeleteStmt: + retval = _copyDeleteStmt(from); + break; + case T_UpdateStmt: + retval = _copyUpdateStmt(from); + break; + case T_MergeStmt: + retval = _copyMergeStmt(from); + break; + case T_SelectStmt: + retval = _copySelectStmt(from); + break; + case T_SetOperationStmt: + retval = _copySetOperationStmt(from); + break; + case T_ReturnStmt: + retval = _copyReturnStmt(from); + break; + case T_PLAssignStmt: + retval = _copyPLAssignStmt(from); + break; + case T_CreateSchemaStmt: + retval = _copyCreateSchemaStmt(from); + break; + case T_AlterTableStmt: + retval = _copyAlterTableStmt(from); + break; + case T_ReplicaIdentityStmt: + retval = _copyReplicaIdentityStmt(from); + break; + case T_AlterTableCmd: + retval = _copyAlterTableCmd(from); + break; + case T_AlterCollationStmt: + retval = _copyAlterCollationStmt(from); + break; + case T_AlterDomainStmt: + retval = _copyAlterDomainStmt(from); + break; + case T_GrantStmt: + retval = _copyGrantStmt(from); + break; + case T_ObjectWithArgs: + retval = _copyObjectWithArgs(from); + break; + case T_AccessPriv: + retval = _copyAccessPriv(from); + break; + case T_GrantRoleStmt: + retval = _copyGrantRoleStmt(from); + break; + case T_AlterDefaultPrivilegesStmt: + retval = _copyAlterDefaultPrivilegesStmt(from); + break; + case T_CopyStmt: + retval = _copyCopyStmt(from); + break; + case T_VariableSetStmt: + retval = _copyVariableSetStmt(from); + break; + case T_VariableShowStmt: + retval = _copyVariableShowStmt(from); + break; + case T_CreateStmt: + retval = _copyCreateStmt(from); + break; + case T_Constraint: + retval = _copyConstraint(from); + break; + case T_CreateTableSpaceStmt: + retval = _copyCreateTableSpaceStmt(from); + break; + case T_DropTableSpaceStmt: + retval = _copyDropTableSpaceStmt(from); + break; + case T_AlterTableSpaceOptionsStmt: + retval = _copyAlterTableSpaceOptionsStmt(from); + break; + case T_AlterTableMoveAllStmt: + retval = _copyAlterTableMoveAllStmt(from); + break; + case T_CreateExtensionStmt: + retval = _copyCreateExtensionStmt(from); + break; + case T_AlterExtensionStmt: + retval = _copyAlterExtensionStmt(from); + break; + case T_AlterExtensionContentsStmt: + retval = _copyAlterExtensionContentsStmt(from); + break; + case T_CreateFdwStmt: + retval = _copyCreateFdwStmt(from); + break; + case T_AlterFdwStmt: + retval = _copyAlterFdwStmt(from); + break; + case T_CreateForeignServerStmt: + retval = _copyCreateForeignServerStmt(from); + break; + case T_AlterForeignServerStmt: + retval = _copyAlterForeignServerStmt(from); + break; + case T_CreateForeignTableStmt: + retval = _copyCreateForeignTableStmt(from); + break; + case T_CreateUserMappingStmt: + retval = _copyCreateUserMappingStmt(from); + break; + case T_AlterUserMappingStmt: + retval = _copyAlterUserMappingStmt(from); + break; + case T_DropUserMappingStmt: + retval = _copyDropUserMappingStmt(from); + break; + case T_ImportForeignSchemaStmt: + retval = _copyImportForeignSchemaStmt(from); + break; + case T_CreatePolicyStmt: + retval = _copyCreatePolicyStmt(from); + break; + case T_AlterPolicyStmt: + retval = _copyAlterPolicyStmt(from); + break; + case T_CreateAmStmt: + retval = _copyCreateAmStmt(from); + break; + case T_CreateTrigStmt: + retval = _copyCreateTrigStmt(from); + break; + case T_CreateEventTrigStmt: + retval = _copyCreateEventTrigStmt(from); + break; + case T_AlterEventTrigStmt: + retval = _copyAlterEventTrigStmt(from); + break; + case T_CreatePLangStmt: + retval = _copyCreatePLangStmt(from); + break; + case T_CreateRoleStmt: + retval = _copyCreateRoleStmt(from); + break; + case T_AlterRoleStmt: + retval = _copyAlterRoleStmt(from); + break; + case T_AlterRoleSetStmt: + retval = _copyAlterRoleSetStmt(from); + break; + case T_DropRoleStmt: + retval = _copyDropRoleStmt(from); + break; + case T_CreateSeqStmt: + retval = _copyCreateSeqStmt(from); + break; + case T_AlterSeqStmt: + retval = _copyAlterSeqStmt(from); + break; + case T_DefineStmt: + retval = _copyDefineStmt(from); + break; + case T_CreateDomainStmt: + retval = _copyCreateDomainStmt(from); + break; + case T_CreateOpClassStmt: + retval = _copyCreateOpClassStmt(from); + break; + case T_CreateOpClassItem: + retval = _copyCreateOpClassItem(from); + break; + case T_CreateOpFamilyStmt: + retval = _copyCreateOpFamilyStmt(from); + break; + case T_AlterOpFamilyStmt: + retval = _copyAlterOpFamilyStmt(from); + break; + case T_DropStmt: + retval = _copyDropStmt(from); + break; + case T_TruncateStmt: + retval = _copyTruncateStmt(from); + break; + case T_CommentStmt: + retval = _copyCommentStmt(from); + break; + case T_SecLabelStmt: + retval = _copySecLabelStmt(from); + break; + case T_DeclareCursorStmt: + retval = _copyDeclareCursorStmt(from); + break; + case T_ClosePortalStmt: + retval = _copyClosePortalStmt(from); + break; + case T_FetchStmt: + retval = _copyFetchStmt(from); + break; + case T_IndexStmt: + retval = _copyIndexStmt(from); + break; + case T_CreateStatsStmt: + retval = _copyCreateStatsStmt(from); + break; + case T_StatsElem: + retval = _copyStatsElem(from); + break; + case T_AlterStatsStmt: + retval = _copyAlterStatsStmt(from); + break; + case T_CreateFunctionStmt: + retval = _copyCreateFunctionStmt(from); + break; + case T_FunctionParameter: + retval = _copyFunctionParameter(from); + break; + case T_AlterFunctionStmt: + retval = _copyAlterFunctionStmt(from); + break; + case T_DoStmt: + retval = _copyDoStmt(from); + break; + case T_CallStmt: + retval = _copyCallStmt(from); + break; + case T_RenameStmt: + retval = _copyRenameStmt(from); + break; + case T_AlterObjectDependsStmt: + retval = _copyAlterObjectDependsStmt(from); + break; + case T_AlterObjectSchemaStmt: + retval = _copyAlterObjectSchemaStmt(from); + break; + case T_AlterOwnerStmt: + retval = _copyAlterOwnerStmt(from); + break; + case T_AlterOperatorStmt: + retval = _copyAlterOperatorStmt(from); + break; + case T_AlterTypeStmt: + retval = _copyAlterTypeStmt(from); + break; + case T_RuleStmt: + retval = _copyRuleStmt(from); + break; + case T_NotifyStmt: + retval = _copyNotifyStmt(from); + break; + case T_ListenStmt: + retval = _copyListenStmt(from); + break; + case T_UnlistenStmt: + retval = _copyUnlistenStmt(from); + break; + case T_TransactionStmt: + retval = _copyTransactionStmt(from); + break; + case T_CompositeTypeStmt: + retval = _copyCompositeTypeStmt(from); + break; + case T_CreateEnumStmt: + retval = _copyCreateEnumStmt(from); + break; + case T_CreateRangeStmt: + retval = _copyCreateRangeStmt(from); + break; + case T_AlterEnumStmt: + retval = _copyAlterEnumStmt(from); + break; + case T_ViewStmt: + retval = _copyViewStmt(from); + break; + case T_LoadStmt: + retval = _copyLoadStmt(from); + break; + case T_CreatedbStmt: + retval = _copyCreatedbStmt(from); + break; + case T_AlterDatabaseStmt: + retval = _copyAlterDatabaseStmt(from); + break; + case T_AlterDatabaseRefreshCollStmt: + retval = _copyAlterDatabaseRefreshCollStmt(from); + break; + case T_AlterDatabaseSetStmt: + retval = _copyAlterDatabaseSetStmt(from); + break; + case T_DropdbStmt: + retval = _copyDropdbStmt(from); + break; + case T_AlterSystemStmt: + retval = _copyAlterSystemStmt(from); + break; + case T_ClusterStmt: + retval = _copyClusterStmt(from); + break; + case T_VacuumStmt: + retval = _copyVacuumStmt(from); + break; + case T_VacuumRelation: + retval = _copyVacuumRelation(from); + break; + case T_ExplainStmt: + retval = _copyExplainStmt(from); + break; + case T_CreateTableAsStmt: + retval = _copyCreateTableAsStmt(from); + break; + case T_RefreshMatViewStmt: + retval = _copyRefreshMatViewStmt(from); + break; + case T_CheckPointStmt: + retval = _copyCheckPointStmt(from); + break; + case T_DiscardStmt: + retval = _copyDiscardStmt(from); + break; + case T_LockStmt: + retval = _copyLockStmt(from); + break; + case T_ConstraintsSetStmt: + retval = _copyConstraintsSetStmt(from); + break; + case T_ReindexStmt: + retval = _copyReindexStmt(from); + break; + case T_CreateConversionStmt: + retval = _copyCreateConversionStmt(from); + break; + case T_CreateCastStmt: + retval = _copyCreateCastStmt(from); + break; + case T_CreateTransformStmt: + retval = _copyCreateTransformStmt(from); + break; + case T_PrepareStmt: + retval = _copyPrepareStmt(from); + break; + case T_ExecuteStmt: + retval = _copyExecuteStmt(from); + break; + case T_DeallocateStmt: + retval = _copyDeallocateStmt(from); + break; + case T_DropOwnedStmt: + retval = _copyDropOwnedStmt(from); + break; + case T_ReassignOwnedStmt: + retval = _copyReassignOwnedStmt(from); + break; + case T_AlterTSDictionaryStmt: + retval = _copyAlterTSDictionaryStmt(from); + break; + case T_AlterTSConfigurationStmt: + retval = _copyAlterTSConfigurationStmt(from); + break; + case T_PublicationTable: + retval = _copyPublicationTable(from); + break; + case T_PublicationObjSpec: + retval = _copyPublicationObjSpec(from); + break; + case T_CreatePublicationStmt: + retval = _copyCreatePublicationStmt(from); + break; + case T_AlterPublicationStmt: + retval = _copyAlterPublicationStmt(from); + break; + case T_CreateSubscriptionStmt: + retval = _copyCreateSubscriptionStmt(from); + break; + case T_AlterSubscriptionStmt: + retval = _copyAlterSubscriptionStmt(from); + break; + case T_DropSubscriptionStmt: + retval = _copyDropSubscriptionStmt(from); + break; + case T_PathKey: + retval = _copyPathKey(from); + break; + case T_RestrictInfo: + retval = _copyRestrictInfo(from); + break; + case T_PlaceHolderVar: + retval = _copyPlaceHolderVar(from); + break; + case T_SpecialJoinInfo: + retval = _copySpecialJoinInfo(from); + break; + case T_AppendRelInfo: + retval = _copyAppendRelInfo(from); + break; + case T_PlaceHolderInfo: + retval = _copyPlaceHolderInfo(from); + break; + case T_PlannedStmt: + retval = _copyPlannedStmt(from); + break; + case T_Result: + retval = _copyResult(from); + break; + case T_ProjectSet: + retval = _copyProjectSet(from); + break; + case T_ModifyTable: + retval = _copyModifyTable(from); + break; + case T_Append: + retval = _copyAppend(from); + break; + case T_MergeAppend: + retval = _copyMergeAppend(from); + break; + case T_RecursiveUnion: + retval = _copyRecursiveUnion(from); + break; + case T_BitmapAnd: + retval = _copyBitmapAnd(from); + break; + case T_BitmapOr: + retval = _copyBitmapOr(from); + break; + case T_SeqScan: + retval = _copySeqScan(from); + break; + case T_SampleScan: + retval = _copySampleScan(from); + break; + case T_IndexScan: + retval = _copyIndexScan(from); + break; + case T_IndexOnlyScan: + retval = _copyIndexOnlyScan(from); + break; + case T_BitmapIndexScan: + retval = _copyBitmapIndexScan(from); + break; + case T_BitmapHeapScan: + retval = _copyBitmapHeapScan(from); + break; + case T_TidScan: + retval = _copyTidScan(from); + break; + case T_TidRangeScan: + retval = _copyTidRangeScan(from); + break; + case T_SubqueryScan: + retval = _copySubqueryScan(from); + break; + case T_FunctionScan: + retval = _copyFunctionScan(from); + break; + case T_ValuesScan: + retval = _copyValuesScan(from); + break; + case T_TableFuncScan: + retval = _copyTableFuncScan(from); + break; + case T_CteScan: + retval = _copyCteScan(from); + break; + case T_NamedTuplestoreScan: + retval = _copyNamedTuplestoreScan(from); + break; + case T_WorkTableScan: + retval = _copyWorkTableScan(from); + break; + case T_ForeignScan: + retval = _copyForeignScan(from); + break; + case T_CustomScan: + retval = _copyCustomScan(from); + break; + case T_NestLoop: + retval = _copyNestLoop(from); + break; + case T_NestLoopParam: + retval = _copyNestLoopParam(from); + break; + case T_MergeJoin: + retval = _copyMergeJoin(from); + break; + case T_HashJoin: + retval = _copyHashJoin(from); + break; + case T_Material: + retval = _copyMaterial(from); + break; + case T_Memoize: + retval = _copyMemoize(from); + break; + case T_Sort: + retval = _copySort(from); + break; + case T_IncrementalSort: + retval = _copyIncrementalSort(from); + break; + case T_Group: + retval = _copyGroup(from); + break; + case T_Agg: + retval = _copyAgg(from); + break; + case T_WindowAgg: + retval = _copyWindowAgg(from); + break; + case T_Unique: + retval = _copyUnique(from); + break; + case T_Gather: + retval = _copyGather(from); + break; + case T_GatherMerge: + retval = _copyGatherMerge(from); + break; + case T_Hash: + retval = _copyHash(from); + break; + case T_SetOp: + retval = _copySetOp(from); + break; + case T_LockRows: + retval = _copyLockRows(from); + break; + case T_Limit: + retval = _copyLimit(from); + break; + case T_PlanRowMark: + retval = _copyPlanRowMark(from); + break; + case T_PartitionPruneInfo: + retval = _copyPartitionPruneInfo(from); + break; + case T_PartitionedRelPruneInfo: + retval = _copyPartitionedRelPruneInfo(from); + break; + case T_PartitionPruneStepOp: + retval = _copyPartitionPruneStepOp(from); + break; + case T_PartitionPruneStepCombine: + retval = _copyPartitionPruneStepCombine(from); + break; + case T_PlanInvalItem: + retval = _copyPlanInvalItem(from); + break; + case T_Bitmapset: + retval = _copyBitmapset(from); + break; + case T_ExtensibleNode: + retval = _copyExtensibleNode(from); + break; + case T_Integer: + retval = _copyInteger(from); + break; + case T_Float: + retval = _copyFloat(from); + break; + case T_Boolean: + retval = _copyBoolean(from); + break; + case T_String: + retval = _copyString(from); + break; + case T_BitString: + retval = _copyBitString(from); + break; + case T_ForeignKeyCacheInfo: + retval = _copyForeignKeyCacheInfo(from); + break; diff --git a/src/postgres/include/datatype/timestamp.h b/src/postgres/include/datatype/timestamp.h index d155f1b0..ab8ccf89 100644 --- a/src/postgres/include/datatype/timestamp.h +++ b/src/postgres/include/datatype/timestamp.h @@ -5,7 +5,7 @@ * * Note: this file must be includable in both frontend and backend contexts. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/datatype/timestamp.h @@ -143,10 +143,17 @@ struct pg_itm_in #define TZDISP_LIMIT ((MAX_TZDISP_HOUR + 1) * SECS_PER_HOUR) /* - * DT_NOBEGIN represents timestamp -infinity; DT_NOEND represents +infinity + * We reserve the minimum and maximum integer values to represent + * timestamp (or timestamptz) -infinity and +infinity. */ -#define DT_NOBEGIN PG_INT64_MIN -#define DT_NOEND PG_INT64_MAX +#define TIMESTAMP_MINUS_INFINITY PG_INT64_MIN +#define TIMESTAMP_INFINITY PG_INT64_MAX + +/* + * Historically these alias for infinity have been used. + */ +#define DT_NOBEGIN TIMESTAMP_MINUS_INFINITY +#define DT_NOEND TIMESTAMP_INFINITY #define TIMESTAMP_NOBEGIN(j) \ do {(j) = DT_NOBEGIN;} while (0) diff --git a/src/postgres/include/equalfuncs.funcs.c b/src/postgres/include/equalfuncs.funcs.c new file mode 100644 index 00000000..f65b2d6f --- /dev/null +++ b/src/postgres/include/equalfuncs.funcs.c @@ -0,0 +1,3097 @@ +/*------------------------------------------------------------------------- + * + * equalfuncs.funcs.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ +#include "access/amapi.h" +#include "access/sdir.h" +#include "access/tableam.h" +#include "access/tsmapi.h" +#include "commands/event_trigger.h" +#include "commands/trigger.h" +#include "executor/tuptable.h" +#include "foreign/fdwapi.h" +#include "nodes/bitmapset.h" +#include "nodes/execnodes.h" +#include "nodes/extensible.h" +#include "nodes/lockoptions.h" +#include "nodes/miscnodes.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pathnodes.h" +#include "nodes/plannodes.h" +#include "nodes/primnodes.h" +#include "nodes/replnodes.h" +#include "nodes/supportnodes.h" +#include "nodes/value.h" +#include "utils/rel.h" + +static bool +_equalAlias(const Alias *a, const Alias *b) +{ + COMPARE_STRING_FIELD(aliasname); + COMPARE_NODE_FIELD(colnames); + + return true; +} + +static bool +_equalRangeVar(const RangeVar *a, const RangeVar *b) +{ + COMPARE_STRING_FIELD(catalogname); + COMPARE_STRING_FIELD(schemaname); + COMPARE_STRING_FIELD(relname); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(relpersistence); + COMPARE_NODE_FIELD(alias); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTableFunc(const TableFunc *a, const TableFunc *b) +{ + COMPARE_NODE_FIELD(ns_uris); + COMPARE_NODE_FIELD(ns_names); + COMPARE_NODE_FIELD(docexpr); + COMPARE_NODE_FIELD(rowexpr); + COMPARE_NODE_FIELD(colnames); + COMPARE_NODE_FIELD(coltypes); + COMPARE_NODE_FIELD(coltypmods); + COMPARE_NODE_FIELD(colcollations); + COMPARE_NODE_FIELD(colexprs); + COMPARE_NODE_FIELD(coldefexprs); + COMPARE_BITMAPSET_FIELD(notnulls); + COMPARE_SCALAR_FIELD(ordinalitycol); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalIntoClause(const IntoClause *a, const IntoClause *b) +{ + COMPARE_NODE_FIELD(rel); + COMPARE_NODE_FIELD(colNames); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(onCommit); + COMPARE_STRING_FIELD(tableSpaceName); + COMPARE_NODE_FIELD(viewQuery); + COMPARE_SCALAR_FIELD(skipData); + + return true; +} + +static bool +_equalVar(const Var *a, const Var *b) +{ + COMPARE_SCALAR_FIELD(varno); + COMPARE_SCALAR_FIELD(varattno); + COMPARE_SCALAR_FIELD(vartype); + COMPARE_SCALAR_FIELD(vartypmod); + COMPARE_SCALAR_FIELD(varcollid); + COMPARE_BITMAPSET_FIELD(varnullingrels); + COMPARE_SCALAR_FIELD(varlevelsup); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalParam(const Param *a, const Param *b) +{ + COMPARE_SCALAR_FIELD(paramkind); + COMPARE_SCALAR_FIELD(paramid); + COMPARE_SCALAR_FIELD(paramtype); + COMPARE_SCALAR_FIELD(paramtypmod); + COMPARE_SCALAR_FIELD(paramcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalAggref(const Aggref *a, const Aggref *b) +{ + COMPARE_SCALAR_FIELD(aggfnoid); + COMPARE_SCALAR_FIELD(aggtype); + COMPARE_SCALAR_FIELD(aggcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(aggargtypes); + COMPARE_NODE_FIELD(aggdirectargs); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(aggorder); + COMPARE_NODE_FIELD(aggdistinct); + COMPARE_NODE_FIELD(aggfilter); + COMPARE_SCALAR_FIELD(aggstar); + COMPARE_SCALAR_FIELD(aggvariadic); + COMPARE_SCALAR_FIELD(aggkind); + COMPARE_SCALAR_FIELD(agglevelsup); + COMPARE_SCALAR_FIELD(aggsplit); + COMPARE_SCALAR_FIELD(aggno); + COMPARE_SCALAR_FIELD(aggtransno); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalGroupingFunc(const GroupingFunc *a, const GroupingFunc *b) +{ + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(agglevelsup); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowFunc(const WindowFunc *a, const WindowFunc *b) +{ + COMPARE_SCALAR_FIELD(winfnoid); + COMPARE_SCALAR_FIELD(wintype); + COMPARE_SCALAR_FIELD(wincollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(aggfilter); + COMPARE_SCALAR_FIELD(winref); + COMPARE_SCALAR_FIELD(winstar); + COMPARE_SCALAR_FIELD(winagg); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubscriptingRef(const SubscriptingRef *a, const SubscriptingRef *b) +{ + COMPARE_SCALAR_FIELD(refcontainertype); + COMPARE_SCALAR_FIELD(refelemtype); + COMPARE_SCALAR_FIELD(refrestype); + COMPARE_SCALAR_FIELD(reftypmod); + COMPARE_SCALAR_FIELD(refcollid); + COMPARE_NODE_FIELD(refupperindexpr); + COMPARE_NODE_FIELD(reflowerindexpr); + COMPARE_NODE_FIELD(refexpr); + COMPARE_NODE_FIELD(refassgnexpr); + + return true; +} + +static bool +_equalFuncExpr(const FuncExpr *a, const FuncExpr *b) +{ + COMPARE_SCALAR_FIELD(funcid); + COMPARE_SCALAR_FIELD(funcresulttype); + COMPARE_SCALAR_FIELD(funcretset); + COMPARE_SCALAR_FIELD(funcvariadic); + COMPARE_SCALAR_FIELD(funccollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNamedArgExpr(const NamedArgExpr *a, const NamedArgExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(argnumber); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalOpExpr(const OpExpr *a, const OpExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalDistinctExpr(const DistinctExpr *a, const DistinctExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNullIfExpr(const NullIfExpr *a, const NullIfExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalScalarArrayOpExpr(const ScalarArrayOpExpr *a, const ScalarArrayOpExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + if (a->hashfuncid != b->hashfuncid && a->hashfuncid != 0 && b->hashfuncid != 0) + return false; + if (a->negfuncid != b->negfuncid && a->negfuncid != 0 && b->negfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(useOr); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalBoolExpr(const BoolExpr *a, const BoolExpr *b) +{ + COMPARE_SCALAR_FIELD(boolop); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubLink(const SubLink *a, const SubLink *b) +{ + COMPARE_SCALAR_FIELD(subLinkType); + COMPARE_SCALAR_FIELD(subLinkId); + COMPARE_NODE_FIELD(testexpr); + COMPARE_NODE_FIELD(operName); + COMPARE_NODE_FIELD(subselect); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubPlan(const SubPlan *a, const SubPlan *b) +{ + COMPARE_SCALAR_FIELD(subLinkType); + COMPARE_NODE_FIELD(testexpr); + COMPARE_NODE_FIELD(paramIds); + COMPARE_SCALAR_FIELD(plan_id); + COMPARE_STRING_FIELD(plan_name); + COMPARE_SCALAR_FIELD(firstColType); + COMPARE_SCALAR_FIELD(firstColTypmod); + COMPARE_SCALAR_FIELD(firstColCollation); + COMPARE_SCALAR_FIELD(useHashTable); + COMPARE_SCALAR_FIELD(unknownEqFalse); + COMPARE_SCALAR_FIELD(parallel_safe); + COMPARE_NODE_FIELD(setParam); + COMPARE_NODE_FIELD(parParam); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(startup_cost); + COMPARE_SCALAR_FIELD(per_call_cost); + + return true; +} + +static bool +_equalAlternativeSubPlan(const AlternativeSubPlan *a, const AlternativeSubPlan *b) +{ + COMPARE_NODE_FIELD(subplans); + + return true; +} + +static bool +_equalFieldSelect(const FieldSelect *a, const FieldSelect *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(fieldnum); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + + return true; +} + +static bool +_equalFieldStore(const FieldStore *a, const FieldStore *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(newvals); + COMPARE_NODE_FIELD(fieldnums); + COMPARE_SCALAR_FIELD(resulttype); + + return true; +} + +static bool +_equalRelabelType(const RelabelType *a, const RelabelType *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceViaIO(const CoerceViaIO *a, const CoerceViaIO *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalArrayCoerceExpr(const ArrayCoerceExpr *a, const ArrayCoerceExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(elemexpr); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalConvertRowtypeExpr(const ConvertRowtypeExpr *a, const ConvertRowtypeExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCollateExpr(const CollateExpr *a, const CollateExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(collOid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseExpr(const CaseExpr *a, const CaseExpr *b) +{ + COMPARE_SCALAR_FIELD(casetype); + COMPARE_SCALAR_FIELD(casecollid); + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(defresult); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseWhen(const CaseWhen *a, const CaseWhen *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(result); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseTestExpr(const CaseTestExpr *a, const CaseTestExpr *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + + return true; +} + +static bool +_equalArrayExpr(const ArrayExpr *a, const ArrayExpr *b) +{ + COMPARE_SCALAR_FIELD(array_typeid); + COMPARE_SCALAR_FIELD(array_collid); + COMPARE_SCALAR_FIELD(element_typeid); + COMPARE_NODE_FIELD(elements); + COMPARE_SCALAR_FIELD(multidims); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRowExpr(const RowExpr *a, const RowExpr *b) +{ + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(row_typeid); + COMPARE_NODE_FIELD(colnames); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRowCompareExpr(const RowCompareExpr *a, const RowCompareExpr *b) +{ + COMPARE_SCALAR_FIELD(rctype); + COMPARE_NODE_FIELD(opnos); + COMPARE_NODE_FIELD(opfamilies); + COMPARE_NODE_FIELD(inputcollids); + COMPARE_NODE_FIELD(largs); + COMPARE_NODE_FIELD(rargs); + + return true; +} + +static bool +_equalCoalesceExpr(const CoalesceExpr *a, const CoalesceExpr *b) +{ + COMPARE_SCALAR_FIELD(coalescetype); + COMPARE_SCALAR_FIELD(coalescecollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalMinMaxExpr(const MinMaxExpr *a, const MinMaxExpr *b) +{ + COMPARE_SCALAR_FIELD(minmaxtype); + COMPARE_SCALAR_FIELD(minmaxcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_SCALAR_FIELD(op); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSQLValueFunction(const SQLValueFunction *a, const SQLValueFunction *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(type); + COMPARE_SCALAR_FIELD(typmod); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalXmlExpr(const XmlExpr *a, const XmlExpr *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(named_args); + COMPARE_NODE_FIELD(arg_names); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(xmloption); + COMPARE_SCALAR_FIELD(indent); + COMPARE_SCALAR_FIELD(type); + COMPARE_SCALAR_FIELD(typmod); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonFormat(const JsonFormat *a, const JsonFormat *b) +{ + COMPARE_SCALAR_FIELD(format_type); + COMPARE_SCALAR_FIELD(encoding); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonReturning(const JsonReturning *a, const JsonReturning *b) +{ + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(typid); + COMPARE_SCALAR_FIELD(typmod); + + return true; +} + +static bool +_equalJsonValueExpr(const JsonValueExpr *a, const JsonValueExpr *b) +{ + COMPARE_NODE_FIELD(raw_expr); + COMPARE_NODE_FIELD(formatted_expr); + COMPARE_NODE_FIELD(format); + + return true; +} + +static bool +_equalJsonConstructorExpr(const JsonConstructorExpr *a, const JsonConstructorExpr *b) +{ + COMPARE_SCALAR_FIELD(type); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(func); + COMPARE_NODE_FIELD(coercion); + COMPARE_NODE_FIELD(returning); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonIsPredicate(const JsonIsPredicate *a, const JsonIsPredicate *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(item_type); + COMPARE_SCALAR_FIELD(unique_keys); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNullTest(const NullTest *a, const NullTest *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(nulltesttype); + COMPARE_SCALAR_FIELD(argisrow); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalBooleanTest(const BooleanTest *a, const BooleanTest *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(booltesttype); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceToDomain(const CoerceToDomain *a, const CoerceToDomain *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceToDomainValue(const CoerceToDomainValue *a, const CoerceToDomainValue *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSetToDefault(const SetToDefault *a, const SetToDefault *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCurrentOfExpr(const CurrentOfExpr *a, const CurrentOfExpr *b) +{ + COMPARE_SCALAR_FIELD(cvarno); + COMPARE_STRING_FIELD(cursor_name); + COMPARE_SCALAR_FIELD(cursor_param); + + return true; +} + +static bool +_equalNextValueExpr(const NextValueExpr *a, const NextValueExpr *b) +{ + COMPARE_SCALAR_FIELD(seqid); + COMPARE_SCALAR_FIELD(typeId); + + return true; +} + +static bool +_equalInferenceElem(const InferenceElem *a, const InferenceElem *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_SCALAR_FIELD(infercollid); + COMPARE_SCALAR_FIELD(inferopclass); + + return true; +} + +static bool +_equalTargetEntry(const TargetEntry *a, const TargetEntry *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_SCALAR_FIELD(resno); + COMPARE_STRING_FIELD(resname); + COMPARE_SCALAR_FIELD(ressortgroupref); + COMPARE_SCALAR_FIELD(resorigtbl); + COMPARE_SCALAR_FIELD(resorigcol); + COMPARE_SCALAR_FIELD(resjunk); + + return true; +} + +static bool +_equalRangeTblRef(const RangeTblRef *a, const RangeTblRef *b) +{ + COMPARE_SCALAR_FIELD(rtindex); + + return true; +} + +static bool +_equalJoinExpr(const JoinExpr *a, const JoinExpr *b) +{ + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(isNatural); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + COMPARE_NODE_FIELD(usingClause); + COMPARE_NODE_FIELD(join_using_alias); + COMPARE_NODE_FIELD(quals); + COMPARE_NODE_FIELD(alias); + COMPARE_SCALAR_FIELD(rtindex); + + return true; +} + +static bool +_equalFromExpr(const FromExpr *a, const FromExpr *b) +{ + COMPARE_NODE_FIELD(fromlist); + COMPARE_NODE_FIELD(quals); + + return true; +} + +static bool +_equalOnConflictExpr(const OnConflictExpr *a, const OnConflictExpr *b) +{ + COMPARE_SCALAR_FIELD(action); + COMPARE_NODE_FIELD(arbiterElems); + COMPARE_NODE_FIELD(arbiterWhere); + COMPARE_SCALAR_FIELD(constraint); + COMPARE_NODE_FIELD(onConflictSet); + COMPARE_NODE_FIELD(onConflictWhere); + COMPARE_SCALAR_FIELD(exclRelIndex); + COMPARE_NODE_FIELD(exclRelTlist); + + return true; +} + +static bool +_equalQuery(const Query *a, const Query *b) +{ + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(querySource); + COMPARE_SCALAR_FIELD(canSetTag); + COMPARE_NODE_FIELD(utilityStmt); + COMPARE_SCALAR_FIELD(resultRelation); + COMPARE_SCALAR_FIELD(hasAggs); + COMPARE_SCALAR_FIELD(hasWindowFuncs); + COMPARE_SCALAR_FIELD(hasTargetSRFs); + COMPARE_SCALAR_FIELD(hasSubLinks); + COMPARE_SCALAR_FIELD(hasDistinctOn); + COMPARE_SCALAR_FIELD(hasRecursive); + COMPARE_SCALAR_FIELD(hasModifyingCTE); + COMPARE_SCALAR_FIELD(hasForUpdate); + COMPARE_SCALAR_FIELD(hasRowSecurity); + COMPARE_SCALAR_FIELD(isReturn); + COMPARE_NODE_FIELD(cteList); + COMPARE_NODE_FIELD(rtable); + COMPARE_NODE_FIELD(rteperminfos); + COMPARE_NODE_FIELD(jointree); + COMPARE_NODE_FIELD(mergeActionList); + COMPARE_SCALAR_FIELD(mergeUseOuterJoin); + COMPARE_NODE_FIELD(targetList); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(onConflict); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(groupClause); + COMPARE_SCALAR_FIELD(groupDistinct); + COMPARE_NODE_FIELD(groupingSets); + COMPARE_NODE_FIELD(havingQual); + COMPARE_NODE_FIELD(windowClause); + COMPARE_NODE_FIELD(distinctClause); + COMPARE_NODE_FIELD(sortClause); + COMPARE_NODE_FIELD(limitOffset); + COMPARE_NODE_FIELD(limitCount); + COMPARE_SCALAR_FIELD(limitOption); + COMPARE_NODE_FIELD(rowMarks); + COMPARE_NODE_FIELD(setOperations); + COMPARE_NODE_FIELD(constraintDeps); + COMPARE_NODE_FIELD(withCheckOptions); + COMPARE_LOCATION_FIELD(stmt_location); + COMPARE_SCALAR_FIELD(stmt_len); + + return true; +} + +static bool +_equalTypeName(const TypeName *a, const TypeName *b) +{ + COMPARE_NODE_FIELD(names); + COMPARE_SCALAR_FIELD(typeOid); + COMPARE_SCALAR_FIELD(setof); + COMPARE_SCALAR_FIELD(pct_type); + COMPARE_NODE_FIELD(typmods); + COMPARE_SCALAR_FIELD(typemod); + COMPARE_NODE_FIELD(arrayBounds); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalColumnRef(const ColumnRef *a, const ColumnRef *b) +{ + COMPARE_NODE_FIELD(fields); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalParamRef(const ParamRef *a, const ParamRef *b) +{ + COMPARE_SCALAR_FIELD(number); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalA_Expr(const A_Expr *a, const A_Expr *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(name); + COMPARE_NODE_FIELD(lexpr); + COMPARE_NODE_FIELD(rexpr); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTypeCast(const TypeCast *a, const TypeCast *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(typeName); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCollateClause(const CollateClause *a, const CollateClause *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(collname); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRoleSpec(const RoleSpec *a, const RoleSpec *b) +{ + COMPARE_SCALAR_FIELD(roletype); + COMPARE_STRING_FIELD(rolename); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalFuncCall(const FuncCall *a, const FuncCall *b) +{ + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(agg_order); + COMPARE_NODE_FIELD(agg_filter); + COMPARE_NODE_FIELD(over); + COMPARE_SCALAR_FIELD(agg_within_group); + COMPARE_SCALAR_FIELD(agg_star); + COMPARE_SCALAR_FIELD(agg_distinct); + COMPARE_SCALAR_FIELD(func_variadic); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalA_Star(const A_Star *a, const A_Star *b) +{ + + return true; +} + +static bool +_equalA_Indices(const A_Indices *a, const A_Indices *b) +{ + COMPARE_SCALAR_FIELD(is_slice); + COMPARE_NODE_FIELD(lidx); + COMPARE_NODE_FIELD(uidx); + + return true; +} + +static bool +_equalA_Indirection(const A_Indirection *a, const A_Indirection *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(indirection); + + return true; +} + +static bool +_equalA_ArrayExpr(const A_ArrayExpr *a, const A_ArrayExpr *b) +{ + COMPARE_NODE_FIELD(elements); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalResTarget(const ResTarget *a, const ResTarget *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(indirection); + COMPARE_NODE_FIELD(val); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalMultiAssignRef(const MultiAssignRef *a, const MultiAssignRef *b) +{ + COMPARE_NODE_FIELD(source); + COMPARE_SCALAR_FIELD(colno); + COMPARE_SCALAR_FIELD(ncolumns); + + return true; +} + +static bool +_equalSortBy(const SortBy *a, const SortBy *b) +{ + COMPARE_NODE_FIELD(node); + COMPARE_SCALAR_FIELD(sortby_dir); + COMPARE_SCALAR_FIELD(sortby_nulls); + COMPARE_NODE_FIELD(useOp); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowDef(const WindowDef *a, const WindowDef *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_STRING_FIELD(refname); + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_SCALAR_FIELD(frameOptions); + COMPARE_NODE_FIELD(startOffset); + COMPARE_NODE_FIELD(endOffset); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeSubselect(const RangeSubselect *a, const RangeSubselect *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_NODE_FIELD(subquery); + COMPARE_NODE_FIELD(alias); + + return true; +} + +static bool +_equalRangeFunction(const RangeFunction *a, const RangeFunction *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_SCALAR_FIELD(ordinality); + COMPARE_SCALAR_FIELD(is_rowsfrom); + COMPARE_NODE_FIELD(functions); + COMPARE_NODE_FIELD(alias); + COMPARE_NODE_FIELD(coldeflist); + + return true; +} + +static bool +_equalRangeTableFunc(const RangeTableFunc *a, const RangeTableFunc *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_NODE_FIELD(docexpr); + COMPARE_NODE_FIELD(rowexpr); + COMPARE_NODE_FIELD(namespaces); + COMPARE_NODE_FIELD(columns); + COMPARE_NODE_FIELD(alias); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeTableFuncCol(const RangeTableFuncCol *a, const RangeTableFuncCol *b) +{ + COMPARE_STRING_FIELD(colname); + COMPARE_NODE_FIELD(typeName); + COMPARE_SCALAR_FIELD(for_ordinality); + COMPARE_SCALAR_FIELD(is_not_null); + COMPARE_NODE_FIELD(colexpr); + COMPARE_NODE_FIELD(coldefexpr); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeTableSample(const RangeTableSample *a, const RangeTableSample *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(method); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalColumnDef(const ColumnDef *a, const ColumnDef *b) +{ + COMPARE_STRING_FIELD(colname); + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(compression); + COMPARE_SCALAR_FIELD(inhcount); + COMPARE_SCALAR_FIELD(is_local); + COMPARE_SCALAR_FIELD(is_not_null); + COMPARE_SCALAR_FIELD(is_from_type); + COMPARE_SCALAR_FIELD(storage); + COMPARE_STRING_FIELD(storage_name); + COMPARE_NODE_FIELD(raw_default); + COMPARE_NODE_FIELD(cooked_default); + COMPARE_SCALAR_FIELD(identity); + COMPARE_NODE_FIELD(identitySequence); + COMPARE_SCALAR_FIELD(generated); + COMPARE_NODE_FIELD(collClause); + COMPARE_SCALAR_FIELD(collOid); + COMPARE_NODE_FIELD(constraints); + COMPARE_NODE_FIELD(fdwoptions); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTableLikeClause(const TableLikeClause *a, const TableLikeClause *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_SCALAR_FIELD(options); + COMPARE_SCALAR_FIELD(relationOid); + + return true; +} + +static bool +_equalIndexElem(const IndexElem *a, const IndexElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + COMPARE_STRING_FIELD(indexcolname); + COMPARE_NODE_FIELD(collation); + COMPARE_NODE_FIELD(opclass); + COMPARE_NODE_FIELD(opclassopts); + COMPARE_SCALAR_FIELD(ordering); + COMPARE_SCALAR_FIELD(nulls_ordering); + + return true; +} + +static bool +_equalDefElem(const DefElem *a, const DefElem *b) +{ + COMPARE_STRING_FIELD(defnamespace); + COMPARE_STRING_FIELD(defname); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(defaction); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalLockingClause(const LockingClause *a, const LockingClause *b) +{ + COMPARE_NODE_FIELD(lockedRels); + COMPARE_SCALAR_FIELD(strength); + COMPARE_SCALAR_FIELD(waitPolicy); + + return true; +} + +static bool +_equalXmlSerialize(const XmlSerialize *a, const XmlSerialize *b) +{ + COMPARE_SCALAR_FIELD(xmloption); + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(typeName); + COMPARE_SCALAR_FIELD(indent); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionElem(const PartitionElem *a, const PartitionElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(collation); + COMPARE_NODE_FIELD(opclass); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionSpec(const PartitionSpec *a, const PartitionSpec *b) +{ + COMPARE_SCALAR_FIELD(strategy); + COMPARE_NODE_FIELD(partParams); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionBoundSpec(const PartitionBoundSpec *a, const PartitionBoundSpec *b) +{ + COMPARE_SCALAR_FIELD(strategy); + COMPARE_SCALAR_FIELD(is_default); + COMPARE_SCALAR_FIELD(modulus); + COMPARE_SCALAR_FIELD(remainder); + COMPARE_NODE_FIELD(listdatums); + COMPARE_NODE_FIELD(lowerdatums); + COMPARE_NODE_FIELD(upperdatums); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionRangeDatum(const PartitionRangeDatum *a, const PartitionRangeDatum *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(value); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionCmd(const PartitionCmd *a, const PartitionCmd *b) +{ + COMPARE_NODE_FIELD(name); + COMPARE_NODE_FIELD(bound); + COMPARE_SCALAR_FIELD(concurrent); + + return true; +} + +static bool +_equalRangeTblEntry(const RangeTblEntry *a, const RangeTblEntry *b) +{ + COMPARE_SCALAR_FIELD(rtekind); + COMPARE_SCALAR_FIELD(relid); + COMPARE_SCALAR_FIELD(relkind); + COMPARE_SCALAR_FIELD(rellockmode); + COMPARE_NODE_FIELD(tablesample); + COMPARE_SCALAR_FIELD(perminfoindex); + COMPARE_NODE_FIELD(subquery); + COMPARE_SCALAR_FIELD(security_barrier); + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(joinmergedcols); + COMPARE_NODE_FIELD(joinaliasvars); + COMPARE_NODE_FIELD(joinleftcols); + COMPARE_NODE_FIELD(joinrightcols); + COMPARE_NODE_FIELD(join_using_alias); + COMPARE_NODE_FIELD(functions); + COMPARE_SCALAR_FIELD(funcordinality); + COMPARE_NODE_FIELD(tablefunc); + COMPARE_NODE_FIELD(values_lists); + COMPARE_STRING_FIELD(ctename); + COMPARE_SCALAR_FIELD(ctelevelsup); + COMPARE_SCALAR_FIELD(self_reference); + COMPARE_NODE_FIELD(coltypes); + COMPARE_NODE_FIELD(coltypmods); + COMPARE_NODE_FIELD(colcollations); + COMPARE_STRING_FIELD(enrname); + COMPARE_SCALAR_FIELD(enrtuples); + COMPARE_NODE_FIELD(alias); + COMPARE_NODE_FIELD(eref); + COMPARE_SCALAR_FIELD(lateral); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(inFromCl); + COMPARE_NODE_FIELD(securityQuals); + + return true; +} + +static bool +_equalRTEPermissionInfo(const RTEPermissionInfo *a, const RTEPermissionInfo *b) +{ + COMPARE_SCALAR_FIELD(relid); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(requiredPerms); + COMPARE_SCALAR_FIELD(checkAsUser); + COMPARE_BITMAPSET_FIELD(selectedCols); + COMPARE_BITMAPSET_FIELD(insertedCols); + COMPARE_BITMAPSET_FIELD(updatedCols); + + return true; +} + +static bool +_equalRangeTblFunction(const RangeTblFunction *a, const RangeTblFunction *b) +{ + COMPARE_NODE_FIELD(funcexpr); + COMPARE_SCALAR_FIELD(funccolcount); + COMPARE_NODE_FIELD(funccolnames); + COMPARE_NODE_FIELD(funccoltypes); + COMPARE_NODE_FIELD(funccoltypmods); + COMPARE_NODE_FIELD(funccolcollations); + COMPARE_BITMAPSET_FIELD(funcparams); + + return true; +} + +static bool +_equalTableSampleClause(const TableSampleClause *a, const TableSampleClause *b) +{ + COMPARE_SCALAR_FIELD(tsmhandler); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + + return true; +} + +static bool +_equalWithCheckOption(const WithCheckOption *a, const WithCheckOption *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(relname); + COMPARE_STRING_FIELD(polname); + COMPARE_NODE_FIELD(qual); + COMPARE_SCALAR_FIELD(cascaded); + + return true; +} + +static bool +_equalSortGroupClause(const SortGroupClause *a, const SortGroupClause *b) +{ + COMPARE_SCALAR_FIELD(tleSortGroupRef); + COMPARE_SCALAR_FIELD(eqop); + COMPARE_SCALAR_FIELD(sortop); + COMPARE_SCALAR_FIELD(nulls_first); + COMPARE_SCALAR_FIELD(hashable); + + return true; +} + +static bool +_equalGroupingSet(const GroupingSet *a, const GroupingSet *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(content); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowClause(const WindowClause *a, const WindowClause *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_STRING_FIELD(refname); + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_SCALAR_FIELD(frameOptions); + COMPARE_NODE_FIELD(startOffset); + COMPARE_NODE_FIELD(endOffset); + COMPARE_NODE_FIELD(runCondition); + COMPARE_SCALAR_FIELD(startInRangeFunc); + COMPARE_SCALAR_FIELD(endInRangeFunc); + COMPARE_SCALAR_FIELD(inRangeColl); + COMPARE_SCALAR_FIELD(inRangeAsc); + COMPARE_SCALAR_FIELD(inRangeNullsFirst); + COMPARE_SCALAR_FIELD(winref); + COMPARE_SCALAR_FIELD(copiedOrder); + + return true; +} + +static bool +_equalRowMarkClause(const RowMarkClause *a, const RowMarkClause *b) +{ + COMPARE_SCALAR_FIELD(rti); + COMPARE_SCALAR_FIELD(strength); + COMPARE_SCALAR_FIELD(waitPolicy); + COMPARE_SCALAR_FIELD(pushedDown); + + return true; +} + +static bool +_equalWithClause(const WithClause *a, const WithClause *b) +{ + COMPARE_NODE_FIELD(ctes); + COMPARE_SCALAR_FIELD(recursive); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalInferClause(const InferClause *a, const InferClause *b) +{ + COMPARE_NODE_FIELD(indexElems); + COMPARE_NODE_FIELD(whereClause); + COMPARE_STRING_FIELD(conname); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalOnConflictClause(const OnConflictClause *a, const OnConflictClause *b) +{ + COMPARE_SCALAR_FIELD(action); + COMPARE_NODE_FIELD(infer); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(whereClause); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCTESearchClause(const CTESearchClause *a, const CTESearchClause *b) +{ + COMPARE_NODE_FIELD(search_col_list); + COMPARE_SCALAR_FIELD(search_breadth_first); + COMPARE_STRING_FIELD(search_seq_column); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCTECycleClause(const CTECycleClause *a, const CTECycleClause *b) +{ + COMPARE_NODE_FIELD(cycle_col_list); + COMPARE_STRING_FIELD(cycle_mark_column); + COMPARE_NODE_FIELD(cycle_mark_value); + COMPARE_NODE_FIELD(cycle_mark_default); + COMPARE_STRING_FIELD(cycle_path_column); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(cycle_mark_type); + COMPARE_SCALAR_FIELD(cycle_mark_typmod); + COMPARE_SCALAR_FIELD(cycle_mark_collation); + COMPARE_SCALAR_FIELD(cycle_mark_neop); + + return true; +} + +static bool +_equalCommonTableExpr(const CommonTableExpr *a, const CommonTableExpr *b) +{ + COMPARE_STRING_FIELD(ctename); + COMPARE_NODE_FIELD(aliascolnames); + COMPARE_SCALAR_FIELD(ctematerialized); + COMPARE_NODE_FIELD(ctequery); + COMPARE_NODE_FIELD(search_clause); + COMPARE_NODE_FIELD(cycle_clause); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(cterecursive); + COMPARE_SCALAR_FIELD(cterefcount); + COMPARE_NODE_FIELD(ctecolnames); + COMPARE_NODE_FIELD(ctecoltypes); + COMPARE_NODE_FIELD(ctecoltypmods); + COMPARE_NODE_FIELD(ctecolcollations); + + return true; +} + +static bool +_equalMergeWhenClause(const MergeWhenClause *a, const MergeWhenClause *b) +{ + COMPARE_SCALAR_FIELD(matched); + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(condition); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(values); + + return true; +} + +static bool +_equalMergeAction(const MergeAction *a, const MergeAction *b) +{ + COMPARE_SCALAR_FIELD(matched); + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(updateColnos); + + return true; +} + +static bool +_equalTriggerTransition(const TriggerTransition *a, const TriggerTransition *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(isNew); + COMPARE_SCALAR_FIELD(isTable); + + return true; +} + +static bool +_equalJsonOutput(const JsonOutput *a, const JsonOutput *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(returning); + + return true; +} + +static bool +_equalJsonKeyValue(const JsonKeyValue *a, const JsonKeyValue *b) +{ + COMPARE_NODE_FIELD(key); + COMPARE_NODE_FIELD(value); + + return true; +} + +static bool +_equalJsonObjectConstructor(const JsonObjectConstructor *a, const JsonObjectConstructor *b) +{ + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(output); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonArrayConstructor(const JsonArrayConstructor *a, const JsonArrayConstructor *b) +{ + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(output); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonArrayQueryConstructor(const JsonArrayQueryConstructor *a, const JsonArrayQueryConstructor *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(output); + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonAggConstructor(const JsonAggConstructor *a, const JsonAggConstructor *b) +{ + COMPARE_NODE_FIELD(output); + COMPARE_NODE_FIELD(agg_filter); + COMPARE_NODE_FIELD(agg_order); + COMPARE_NODE_FIELD(over); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonObjectAgg(const JsonObjectAgg *a, const JsonObjectAgg *b) +{ + COMPARE_NODE_FIELD(constructor); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + + return true; +} + +static bool +_equalJsonArrayAgg(const JsonArrayAgg *a, const JsonArrayAgg *b) +{ + COMPARE_NODE_FIELD(constructor); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(absent_on_null); + + return true; +} + +static bool +_equalRawStmt(const RawStmt *a, const RawStmt *b) +{ + COMPARE_NODE_FIELD(stmt); + COMPARE_LOCATION_FIELD(stmt_location); + COMPARE_SCALAR_FIELD(stmt_len); + + return true; +} + +static bool +_equalInsertStmt(const InsertStmt *a, const InsertStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(cols); + COMPARE_NODE_FIELD(selectStmt); + COMPARE_NODE_FIELD(onConflictClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + COMPARE_SCALAR_FIELD(override); + + return true; +} + +static bool +_equalDeleteStmt(const DeleteStmt *a, const DeleteStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(usingClause); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalUpdateStmt(const UpdateStmt *a, const UpdateStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(fromClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalMergeStmt(const MergeStmt *a, const MergeStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(sourceRelation); + COMPARE_NODE_FIELD(joinCondition); + COMPARE_NODE_FIELD(mergeWhenClauses); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalSelectStmt(const SelectStmt *a, const SelectStmt *b) +{ + COMPARE_NODE_FIELD(distinctClause); + COMPARE_NODE_FIELD(intoClause); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(fromClause); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(groupClause); + COMPARE_SCALAR_FIELD(groupDistinct); + COMPARE_NODE_FIELD(havingClause); + COMPARE_NODE_FIELD(windowClause); + COMPARE_NODE_FIELD(valuesLists); + COMPARE_NODE_FIELD(sortClause); + COMPARE_NODE_FIELD(limitOffset); + COMPARE_NODE_FIELD(limitCount); + COMPARE_SCALAR_FIELD(limitOption); + COMPARE_NODE_FIELD(lockingClause); + COMPARE_NODE_FIELD(withClause); + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(all); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + + return true; +} + +static bool +_equalSetOperationStmt(const SetOperationStmt *a, const SetOperationStmt *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(all); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + COMPARE_NODE_FIELD(colTypes); + COMPARE_NODE_FIELD(colTypmods); + COMPARE_NODE_FIELD(colCollations); + COMPARE_NODE_FIELD(groupClauses); + + return true; +} + +static bool +_equalReturnStmt(const ReturnStmt *a, const ReturnStmt *b) +{ + COMPARE_NODE_FIELD(returnval); + + return true; +} + +static bool +_equalPLAssignStmt(const PLAssignStmt *a, const PLAssignStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(indirection); + COMPARE_SCALAR_FIELD(nnames); + COMPARE_NODE_FIELD(val); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCreateSchemaStmt(const CreateSchemaStmt *a, const CreateSchemaStmt *b) +{ + COMPARE_STRING_FIELD(schemaname); + COMPARE_NODE_FIELD(authrole); + COMPARE_NODE_FIELD(schemaElts); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalAlterTableStmt(const AlterTableStmt *a, const AlterTableStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(cmds); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalReplicaIdentityStmt(const ReplicaIdentityStmt *a, const ReplicaIdentityStmt *b) +{ + COMPARE_SCALAR_FIELD(identity_type); + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalAlterTableCmd(const AlterTableCmd *a, const AlterTableCmd *b) +{ + COMPARE_SCALAR_FIELD(subtype); + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(num); + COMPARE_NODE_FIELD(newowner); + COMPARE_NODE_FIELD(def); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(recurse); + + return true; +} + +static bool +_equalAlterCollationStmt(const AlterCollationStmt *a, const AlterCollationStmt *b) +{ + COMPARE_NODE_FIELD(collname); + + return true; +} + +static bool +_equalAlterDomainStmt(const AlterDomainStmt *a, const AlterDomainStmt *b) +{ + COMPARE_SCALAR_FIELD(subtype); + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(def); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalGrantStmt(const GrantStmt *a, const GrantStmt *b) +{ + COMPARE_SCALAR_FIELD(is_grant); + COMPARE_SCALAR_FIELD(targtype); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(objects); + COMPARE_NODE_FIELD(privileges); + COMPARE_NODE_FIELD(grantees); + COMPARE_SCALAR_FIELD(grant_option); + COMPARE_NODE_FIELD(grantor); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalObjectWithArgs(const ObjectWithArgs *a, const ObjectWithArgs *b) +{ + COMPARE_NODE_FIELD(objname); + COMPARE_NODE_FIELD(objargs); + COMPARE_NODE_FIELD(objfuncargs); + COMPARE_SCALAR_FIELD(args_unspecified); + + return true; +} + +static bool +_equalAccessPriv(const AccessPriv *a, const AccessPriv *b) +{ + COMPARE_STRING_FIELD(priv_name); + COMPARE_NODE_FIELD(cols); + + return true; +} + +static bool +_equalGrantRoleStmt(const GrantRoleStmt *a, const GrantRoleStmt *b) +{ + COMPARE_NODE_FIELD(granted_roles); + COMPARE_NODE_FIELD(grantee_roles); + COMPARE_SCALAR_FIELD(is_grant); + COMPARE_NODE_FIELD(opt); + COMPARE_NODE_FIELD(grantor); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *a, const AlterDefaultPrivilegesStmt *b) +{ + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(action); + + return true; +} + +static bool +_equalCopyStmt(const CopyStmt *a, const CopyStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(attlist); + COMPARE_SCALAR_FIELD(is_from); + COMPARE_SCALAR_FIELD(is_program); + COMPARE_STRING_FIELD(filename); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(whereClause); + + return true; +} + +static bool +_equalVariableSetStmt(const VariableSetStmt *a, const VariableSetStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(is_local); + + return true; +} + +static bool +_equalVariableShowStmt(const VariableShowStmt *a, const VariableShowStmt *b) +{ + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalCreateStmt(const CreateStmt *a, const CreateStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(tableElts); + COMPARE_NODE_FIELD(inhRelations); + COMPARE_NODE_FIELD(partbound); + COMPARE_NODE_FIELD(partspec); + COMPARE_NODE_FIELD(ofTypename); + COMPARE_NODE_FIELD(constraints); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(oncommit); + COMPARE_STRING_FIELD(tablespacename); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalConstraint(const Constraint *a, const Constraint *b) +{ + COMPARE_SCALAR_FIELD(contype); + COMPARE_STRING_FIELD(conname); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(is_no_inherit); + COMPARE_NODE_FIELD(raw_expr); + COMPARE_STRING_FIELD(cooked_expr); + COMPARE_SCALAR_FIELD(generated_when); + COMPARE_SCALAR_FIELD(nulls_not_distinct); + COMPARE_NODE_FIELD(keys); + COMPARE_NODE_FIELD(including); + COMPARE_NODE_FIELD(exclusions); + COMPARE_NODE_FIELD(options); + COMPARE_STRING_FIELD(indexname); + COMPARE_STRING_FIELD(indexspace); + COMPARE_SCALAR_FIELD(reset_default_tblspc); + COMPARE_STRING_FIELD(access_method); + COMPARE_NODE_FIELD(where_clause); + COMPARE_NODE_FIELD(pktable); + COMPARE_NODE_FIELD(fk_attrs); + COMPARE_NODE_FIELD(pk_attrs); + COMPARE_SCALAR_FIELD(fk_matchtype); + COMPARE_SCALAR_FIELD(fk_upd_action); + COMPARE_SCALAR_FIELD(fk_del_action); + COMPARE_NODE_FIELD(fk_del_set_cols); + COMPARE_NODE_FIELD(old_conpfeqop); + COMPARE_SCALAR_FIELD(old_pktable_oid); + COMPARE_SCALAR_FIELD(skip_validation); + COMPARE_SCALAR_FIELD(initially_valid); + + return true; +} + +static bool +_equalCreateTableSpaceStmt(const CreateTableSpaceStmt *a, const CreateTableSpaceStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_NODE_FIELD(owner); + COMPARE_STRING_FIELD(location); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropTableSpaceStmt(const DropTableSpaceStmt *a, const DropTableSpaceStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *a, const AlterTableSpaceOptionsStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(isReset); + + return true; +} + +static bool +_equalAlterTableMoveAllStmt(const AlterTableMoveAllStmt *a, const AlterTableMoveAllStmt *b) +{ + COMPARE_STRING_FIELD(orig_tablespacename); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(roles); + COMPARE_STRING_FIELD(new_tablespacename); + COMPARE_SCALAR_FIELD(nowait); + + return true; +} + +static bool +_equalCreateExtensionStmt(const CreateExtensionStmt *a, const CreateExtensionStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterExtensionStmt(const AlterExtensionStmt *a, const AlterExtensionStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterExtensionContentsStmt(const AlterExtensionContentsStmt *a, const AlterExtensionContentsStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_SCALAR_FIELD(action); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + + return true; +} + +static bool +_equalCreateFdwStmt(const CreateFdwStmt *a, const CreateFdwStmt *b) +{ + COMPARE_STRING_FIELD(fdwname); + COMPARE_NODE_FIELD(func_options); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterFdwStmt(const AlterFdwStmt *a, const AlterFdwStmt *b) +{ + COMPARE_STRING_FIELD(fdwname); + COMPARE_NODE_FIELD(func_options); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateForeignServerStmt(const CreateForeignServerStmt *a, const CreateForeignServerStmt *b) +{ + COMPARE_STRING_FIELD(servername); + COMPARE_STRING_FIELD(servertype); + COMPARE_STRING_FIELD(version); + COMPARE_STRING_FIELD(fdwname); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterForeignServerStmt(const AlterForeignServerStmt *a, const AlterForeignServerStmt *b) +{ + COMPARE_STRING_FIELD(servername); + COMPARE_STRING_FIELD(version); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(has_version); + + return true; +} + +static bool +_equalCreateForeignTableStmt(const CreateForeignTableStmt *a, const CreateForeignTableStmt *b) +{ + COMPARE_NODE_FIELD(base.relation); + COMPARE_NODE_FIELD(base.tableElts); + COMPARE_NODE_FIELD(base.inhRelations); + COMPARE_NODE_FIELD(base.partbound); + COMPARE_NODE_FIELD(base.partspec); + COMPARE_NODE_FIELD(base.ofTypename); + COMPARE_NODE_FIELD(base.constraints); + COMPARE_NODE_FIELD(base.options); + COMPARE_SCALAR_FIELD(base.oncommit); + COMPARE_STRING_FIELD(base.tablespacename); + COMPARE_STRING_FIELD(base.accessMethod); + COMPARE_SCALAR_FIELD(base.if_not_exists); + COMPARE_STRING_FIELD(servername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateUserMappingStmt(const CreateUserMappingStmt *a, const CreateUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterUserMappingStmt(const AlterUserMappingStmt *a, const AlterUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropUserMappingStmt(const DropUserMappingStmt *a, const DropUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalImportForeignSchemaStmt(const ImportForeignSchemaStmt *a, const ImportForeignSchemaStmt *b) +{ + COMPARE_STRING_FIELD(server_name); + COMPARE_STRING_FIELD(remote_schema); + COMPARE_STRING_FIELD(local_schema); + COMPARE_SCALAR_FIELD(list_type); + COMPARE_NODE_FIELD(table_list); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreatePolicyStmt(const CreatePolicyStmt *a, const CreatePolicyStmt *b) +{ + COMPARE_STRING_FIELD(policy_name); + COMPARE_NODE_FIELD(table); + COMPARE_STRING_FIELD(cmd_name); + COMPARE_SCALAR_FIELD(permissive); + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(with_check); + + return true; +} + +static bool +_equalAlterPolicyStmt(const AlterPolicyStmt *a, const AlterPolicyStmt *b) +{ + COMPARE_STRING_FIELD(policy_name); + COMPARE_NODE_FIELD(table); + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(with_check); + + return true; +} + +static bool +_equalCreateAmStmt(const CreateAmStmt *a, const CreateAmStmt *b) +{ + COMPARE_STRING_FIELD(amname); + COMPARE_NODE_FIELD(handler_name); + COMPARE_SCALAR_FIELD(amtype); + + return true; +} + +static bool +_equalCreateTrigStmt(const CreateTrigStmt *a, const CreateTrigStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_SCALAR_FIELD(isconstraint); + COMPARE_STRING_FIELD(trigname); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(row); + COMPARE_SCALAR_FIELD(timing); + COMPARE_SCALAR_FIELD(events); + COMPARE_NODE_FIELD(columns); + COMPARE_NODE_FIELD(whenClause); + COMPARE_NODE_FIELD(transitionRels); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_NODE_FIELD(constrrel); + + return true; +} + +static bool +_equalCreateEventTrigStmt(const CreateEventTrigStmt *a, const CreateEventTrigStmt *b) +{ + COMPARE_STRING_FIELD(trigname); + COMPARE_STRING_FIELD(eventname); + COMPARE_NODE_FIELD(whenclause); + COMPARE_NODE_FIELD(funcname); + + return true; +} + +static bool +_equalAlterEventTrigStmt(const AlterEventTrigStmt *a, const AlterEventTrigStmt *b) +{ + COMPARE_STRING_FIELD(trigname); + COMPARE_SCALAR_FIELD(tgenabled); + + return true; +} + +static bool +_equalCreatePLangStmt(const CreatePLangStmt *a, const CreatePLangStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_STRING_FIELD(plname); + COMPARE_NODE_FIELD(plhandler); + COMPARE_NODE_FIELD(plinline); + COMPARE_NODE_FIELD(plvalidator); + COMPARE_SCALAR_FIELD(pltrusted); + + return true; +} + +static bool +_equalCreateRoleStmt(const CreateRoleStmt *a, const CreateRoleStmt *b) +{ + COMPARE_SCALAR_FIELD(stmt_type); + COMPARE_STRING_FIELD(role); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterRoleStmt(const AlterRoleStmt *a, const AlterRoleStmt *b) +{ + COMPARE_NODE_FIELD(role); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(action); + + return true; +} + +static bool +_equalAlterRoleSetStmt(const AlterRoleSetStmt *a, const AlterRoleSetStmt *b) +{ + COMPARE_NODE_FIELD(role); + COMPARE_STRING_FIELD(database); + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalDropRoleStmt(const DropRoleStmt *a, const DropRoleStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalCreateSeqStmt(const CreateSeqStmt *a, const CreateSeqStmt *b) +{ + COMPARE_NODE_FIELD(sequence); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(ownerId); + COMPARE_SCALAR_FIELD(for_identity); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalAlterSeqStmt(const AlterSeqStmt *a, const AlterSeqStmt *b) +{ + COMPARE_NODE_FIELD(sequence); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(for_identity); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalDefineStmt(const DefineStmt *a, const DefineStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_SCALAR_FIELD(oldstyle); + COMPARE_NODE_FIELD(defnames); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(definition); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_SCALAR_FIELD(replace); + + return true; +} + +static bool +_equalCreateDomainStmt(const CreateDomainStmt *a, const CreateDomainStmt *b) +{ + COMPARE_NODE_FIELD(domainname); + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(collClause); + COMPARE_NODE_FIELD(constraints); + + return true; +} + +static bool +_equalCreateOpClassStmt(const CreateOpClassStmt *a, const CreateOpClassStmt *b) +{ + COMPARE_NODE_FIELD(opclassname); + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + COMPARE_NODE_FIELD(datatype); + COMPARE_NODE_FIELD(items); + COMPARE_SCALAR_FIELD(isDefault); + + return true; +} + +static bool +_equalCreateOpClassItem(const CreateOpClassItem *a, const CreateOpClassItem *b) +{ + COMPARE_SCALAR_FIELD(itemtype); + COMPARE_NODE_FIELD(name); + COMPARE_SCALAR_FIELD(number); + COMPARE_NODE_FIELD(order_family); + COMPARE_NODE_FIELD(class_args); + COMPARE_NODE_FIELD(storedtype); + + return true; +} + +static bool +_equalCreateOpFamilyStmt(const CreateOpFamilyStmt *a, const CreateOpFamilyStmt *b) +{ + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + + return true; +} + +static bool +_equalAlterOpFamilyStmt(const AlterOpFamilyStmt *a, const AlterOpFamilyStmt *b) +{ + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + COMPARE_SCALAR_FIELD(isDrop); + COMPARE_NODE_FIELD(items); + + return true; +} + +static bool +_equalDropStmt(const DropStmt *a, const DropStmt *b) +{ + COMPARE_NODE_FIELD(objects); + COMPARE_SCALAR_FIELD(removeType); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(concurrent); + + return true; +} + +static bool +_equalTruncateStmt(const TruncateStmt *a, const TruncateStmt *b) +{ + COMPARE_NODE_FIELD(relations); + COMPARE_SCALAR_FIELD(restart_seqs); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalCommentStmt(const CommentStmt *a, const CommentStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(comment); + + return true; +} + +static bool +_equalSecLabelStmt(const SecLabelStmt *a, const SecLabelStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(provider); + COMPARE_STRING_FIELD(label); + + return true; +} + +static bool +_equalDeclareCursorStmt(const DeclareCursorStmt *a, const DeclareCursorStmt *b) +{ + COMPARE_STRING_FIELD(portalname); + COMPARE_SCALAR_FIELD(options); + COMPARE_NODE_FIELD(query); + + return true; +} + +static bool +_equalClosePortalStmt(const ClosePortalStmt *a, const ClosePortalStmt *b) +{ + COMPARE_STRING_FIELD(portalname); + + return true; +} + +static bool +_equalFetchStmt(const FetchStmt *a, const FetchStmt *b) +{ + COMPARE_SCALAR_FIELD(direction); + COMPARE_SCALAR_FIELD(howMany); + COMPARE_STRING_FIELD(portalname); + COMPARE_SCALAR_FIELD(ismove); + + return true; +} + +static bool +_equalIndexStmt(const IndexStmt *a, const IndexStmt *b) +{ + COMPARE_STRING_FIELD(idxname); + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_STRING_FIELD(tableSpace); + COMPARE_NODE_FIELD(indexParams); + COMPARE_NODE_FIELD(indexIncludingParams); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(excludeOpNames); + COMPARE_STRING_FIELD(idxcomment); + COMPARE_SCALAR_FIELD(indexOid); + COMPARE_SCALAR_FIELD(oldNumber); + COMPARE_SCALAR_FIELD(oldCreateSubid); + COMPARE_SCALAR_FIELD(oldFirstRelfilelocatorSubid); + COMPARE_SCALAR_FIELD(unique); + COMPARE_SCALAR_FIELD(nulls_not_distinct); + COMPARE_SCALAR_FIELD(primary); + COMPARE_SCALAR_FIELD(isconstraint); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_SCALAR_FIELD(transformed); + COMPARE_SCALAR_FIELD(concurrent); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_SCALAR_FIELD(reset_default_tblspc); + + return true; +} + +static bool +_equalCreateStatsStmt(const CreateStatsStmt *a, const CreateStatsStmt *b) +{ + COMPARE_NODE_FIELD(defnames); + COMPARE_NODE_FIELD(stat_types); + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(relations); + COMPARE_STRING_FIELD(stxcomment); + COMPARE_SCALAR_FIELD(transformed); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalStatsElem(const StatsElem *a, const StatsElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + + return true; +} + +static bool +_equalAlterStatsStmt(const AlterStatsStmt *a, const AlterStatsStmt *b) +{ + COMPARE_NODE_FIELD(defnames); + COMPARE_SCALAR_FIELD(stxstattarget); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalCreateFunctionStmt(const CreateFunctionStmt *a, const CreateFunctionStmt *b) +{ + COMPARE_SCALAR_FIELD(is_procedure); + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(parameters); + COMPARE_NODE_FIELD(returnType); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(sql_body); + + return true; +} + +static bool +_equalFunctionParameter(const FunctionParameter *a, const FunctionParameter *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(argType); + COMPARE_SCALAR_FIELD(mode); + COMPARE_NODE_FIELD(defexpr); + + return true; +} + +static bool +_equalAlterFunctionStmt(const AlterFunctionStmt *a, const AlterFunctionStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(func); + COMPARE_NODE_FIELD(actions); + + return true; +} + +static bool +_equalDoStmt(const DoStmt *a, const DoStmt *b) +{ + COMPARE_NODE_FIELD(args); + + return true; +} + +static bool +_equalCallStmt(const CallStmt *a, const CallStmt *b) +{ + COMPARE_NODE_FIELD(funccall); + COMPARE_NODE_FIELD(funcexpr); + COMPARE_NODE_FIELD(outargs); + + return true; +} + +static bool +_equalRenameStmt(const RenameStmt *a, const RenameStmt *b) +{ + COMPARE_SCALAR_FIELD(renameType); + COMPARE_SCALAR_FIELD(relationType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(newname); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterObjectDependsStmt(const AlterObjectDependsStmt *a, const AlterObjectDependsStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_NODE_FIELD(extname); + COMPARE_SCALAR_FIELD(remove); + + return true; +} + +static bool +_equalAlterObjectSchemaStmt(const AlterObjectSchemaStmt *a, const AlterObjectSchemaStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(newschema); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterOwnerStmt(const AlterOwnerStmt *a, const AlterOwnerStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_NODE_FIELD(newowner); + + return true; +} + +static bool +_equalAlterOperatorStmt(const AlterOperatorStmt *a, const AlterOperatorStmt *b) +{ + COMPARE_NODE_FIELD(opername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterTypeStmt(const AlterTypeStmt *a, const AlterTypeStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalRuleStmt(const RuleStmt *a, const RuleStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(rulename); + COMPARE_NODE_FIELD(whereClause); + COMPARE_SCALAR_FIELD(event); + COMPARE_SCALAR_FIELD(instead); + COMPARE_NODE_FIELD(actions); + COMPARE_SCALAR_FIELD(replace); + + return true; +} + +static bool +_equalNotifyStmt(const NotifyStmt *a, const NotifyStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + COMPARE_STRING_FIELD(payload); + + return true; +} + +static bool +_equalListenStmt(const ListenStmt *a, const ListenStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + + return true; +} + +static bool +_equalUnlistenStmt(const UnlistenStmt *a, const UnlistenStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + + return true; +} + +static bool +_equalTransactionStmt(const TransactionStmt *a, const TransactionStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(options); + COMPARE_STRING_FIELD(savepoint_name); + COMPARE_STRING_FIELD(gid); + COMPARE_SCALAR_FIELD(chain); + + return true; +} + +static bool +_equalCompositeTypeStmt(const CompositeTypeStmt *a, const CompositeTypeStmt *b) +{ + COMPARE_NODE_FIELD(typevar); + COMPARE_NODE_FIELD(coldeflist); + + return true; +} + +static bool +_equalCreateEnumStmt(const CreateEnumStmt *a, const CreateEnumStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(vals); + + return true; +} + +static bool +_equalCreateRangeStmt(const CreateRangeStmt *a, const CreateRangeStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalAlterEnumStmt(const AlterEnumStmt *a, const AlterEnumStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(oldVal); + COMPARE_STRING_FIELD(newVal); + COMPARE_STRING_FIELD(newValNeighbor); + COMPARE_SCALAR_FIELD(newValIsAfter); + COMPARE_SCALAR_FIELD(skipIfNewValExists); + + return true; +} + +static bool +_equalViewStmt(const ViewStmt *a, const ViewStmt *b) +{ + COMPARE_NODE_FIELD(view); + COMPARE_NODE_FIELD(aliases); + COMPARE_NODE_FIELD(query); + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(withCheckOption); + + return true; +} + +static bool +_equalLoadStmt(const LoadStmt *a, const LoadStmt *b) +{ + COMPARE_STRING_FIELD(filename); + + return true; +} + +static bool +_equalCreatedbStmt(const CreatedbStmt *a, const CreatedbStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterDatabaseStmt(const AlterDatabaseStmt *a, const AlterDatabaseStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *a, const AlterDatabaseRefreshCollStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + + return true; +} + +static bool +_equalAlterDatabaseSetStmt(const AlterDatabaseSetStmt *a, const AlterDatabaseSetStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalDropdbStmt(const DropdbStmt *a, const DropdbStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterSystemStmt(const AlterSystemStmt *a, const AlterSystemStmt *b) +{ + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalClusterStmt(const ClusterStmt *a, const ClusterStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(indexname); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalVacuumStmt(const VacuumStmt *a, const VacuumStmt *b) +{ + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(rels); + COMPARE_SCALAR_FIELD(is_vacuumcmd); + + return true; +} + +static bool +_equalVacuumRelation(const VacuumRelation *a, const VacuumRelation *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_SCALAR_FIELD(oid); + COMPARE_NODE_FIELD(va_cols); + + return true; +} + +static bool +_equalExplainStmt(const ExplainStmt *a, const ExplainStmt *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateTableAsStmt(const CreateTableAsStmt *a, const CreateTableAsStmt *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(into); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_SCALAR_FIELD(is_select_into); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalRefreshMatViewStmt(const RefreshMatViewStmt *a, const RefreshMatViewStmt *b) +{ + COMPARE_SCALAR_FIELD(concurrent); + COMPARE_SCALAR_FIELD(skipData); + COMPARE_NODE_FIELD(relation); + + return true; +} + +static bool +_equalCheckPointStmt(const CheckPointStmt *a, const CheckPointStmt *b) +{ + + return true; +} + +static bool +_equalDiscardStmt(const DiscardStmt *a, const DiscardStmt *b) +{ + COMPARE_SCALAR_FIELD(target); + + return true; +} + +static bool +_equalLockStmt(const LockStmt *a, const LockStmt *b) +{ + COMPARE_NODE_FIELD(relations); + COMPARE_SCALAR_FIELD(mode); + COMPARE_SCALAR_FIELD(nowait); + + return true; +} + +static bool +_equalConstraintsSetStmt(const ConstraintsSetStmt *a, const ConstraintsSetStmt *b) +{ + COMPARE_NODE_FIELD(constraints); + COMPARE_SCALAR_FIELD(deferred); + + return true; +} + +static bool +_equalReindexStmt(const ReindexStmt *a, const ReindexStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalCreateConversionStmt(const CreateConversionStmt *a, const CreateConversionStmt *b) +{ + COMPARE_NODE_FIELD(conversion_name); + COMPARE_STRING_FIELD(for_encoding_name); + COMPARE_STRING_FIELD(to_encoding_name); + COMPARE_NODE_FIELD(func_name); + COMPARE_SCALAR_FIELD(def); + + return true; +} + +static bool +_equalCreateCastStmt(const CreateCastStmt *a, const CreateCastStmt *b) +{ + COMPARE_NODE_FIELD(sourcetype); + COMPARE_NODE_FIELD(targettype); + COMPARE_NODE_FIELD(func); + COMPARE_SCALAR_FIELD(context); + COMPARE_SCALAR_FIELD(inout); + + return true; +} + +static bool +_equalCreateTransformStmt(const CreateTransformStmt *a, const CreateTransformStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(type_name); + COMPARE_STRING_FIELD(lang); + COMPARE_NODE_FIELD(fromsql); + COMPARE_NODE_FIELD(tosql); + + return true; +} + +static bool +_equalPrepareStmt(const PrepareStmt *a, const PrepareStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(argtypes); + COMPARE_NODE_FIELD(query); + + return true; +} + +static bool +_equalExecuteStmt(const ExecuteStmt *a, const ExecuteStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalDeallocateStmt(const DeallocateStmt *a, const DeallocateStmt *b) +{ + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalDropOwnedStmt(const DropOwnedStmt *a, const DropOwnedStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalReassignOwnedStmt(const ReassignOwnedStmt *a, const ReassignOwnedStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(newrole); + + return true; +} + +static bool +_equalAlterTSDictionaryStmt(const AlterTSDictionaryStmt *a, const AlterTSDictionaryStmt *b) +{ + COMPARE_NODE_FIELD(dictname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterTSConfigurationStmt(const AlterTSConfigurationStmt *a, const AlterTSConfigurationStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(cfgname); + COMPARE_NODE_FIELD(tokentype); + COMPARE_NODE_FIELD(dicts); + COMPARE_SCALAR_FIELD(override); + COMPARE_SCALAR_FIELD(replace); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalPublicationTable(const PublicationTable *a, const PublicationTable *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(columns); + + return true; +} + +static bool +_equalPublicationObjSpec(const PublicationObjSpec *a, const PublicationObjSpec *b) +{ + COMPARE_SCALAR_FIELD(pubobjtype); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(pubtable); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCreatePublicationStmt(const CreatePublicationStmt *a, const CreatePublicationStmt *b) +{ + COMPARE_STRING_FIELD(pubname); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(pubobjects); + COMPARE_SCALAR_FIELD(for_all_tables); + + return true; +} + +static bool +_equalAlterPublicationStmt(const AlterPublicationStmt *a, const AlterPublicationStmt *b) +{ + COMPARE_STRING_FIELD(pubname); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(pubobjects); + COMPARE_SCALAR_FIELD(for_all_tables); + COMPARE_SCALAR_FIELD(action); + + return true; +} + +static bool +_equalCreateSubscriptionStmt(const CreateSubscriptionStmt *a, const CreateSubscriptionStmt *b) +{ + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(conninfo); + COMPARE_NODE_FIELD(publication); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterSubscriptionStmt(const AlterSubscriptionStmt *a, const AlterSubscriptionStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(conninfo); + COMPARE_NODE_FIELD(publication); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropSubscriptionStmt(const DropSubscriptionStmt *a, const DropSubscriptionStmt *b) +{ + COMPARE_STRING_FIELD(subname); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalPathKey(const PathKey *a, const PathKey *b) +{ + COMPARE_SCALAR_FIELD(pk_eclass); + COMPARE_SCALAR_FIELD(pk_opfamily); + COMPARE_SCALAR_FIELD(pk_strategy); + COMPARE_SCALAR_FIELD(pk_nulls_first); + + return true; +} + +static bool +_equalRestrictInfo(const RestrictInfo *a, const RestrictInfo *b) +{ + COMPARE_NODE_FIELD(clause); + COMPARE_SCALAR_FIELD(is_pushed_down); + COMPARE_SCALAR_FIELD(has_clone); + COMPARE_SCALAR_FIELD(is_clone); + COMPARE_SCALAR_FIELD(security_level); + COMPARE_BITMAPSET_FIELD(required_relids); + COMPARE_BITMAPSET_FIELD(incompatible_relids); + COMPARE_BITMAPSET_FIELD(outer_relids); + COMPARE_SCALAR_FIELD(rinfo_serial); + + return true; +} + +static bool +_equalPlaceHolderVar(const PlaceHolderVar *a, const PlaceHolderVar *b) +{ + COMPARE_BITMAPSET_FIELD(phnullingrels); + COMPARE_SCALAR_FIELD(phid); + COMPARE_SCALAR_FIELD(phlevelsup); + + return true; +} + +static bool +_equalSpecialJoinInfo(const SpecialJoinInfo *a, const SpecialJoinInfo *b) +{ + COMPARE_BITMAPSET_FIELD(min_lefthand); + COMPARE_BITMAPSET_FIELD(min_righthand); + COMPARE_BITMAPSET_FIELD(syn_lefthand); + COMPARE_BITMAPSET_FIELD(syn_righthand); + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(ojrelid); + COMPARE_BITMAPSET_FIELD(commute_above_l); + COMPARE_BITMAPSET_FIELD(commute_above_r); + COMPARE_BITMAPSET_FIELD(commute_below_l); + COMPARE_BITMAPSET_FIELD(commute_below_r); + COMPARE_SCALAR_FIELD(lhs_strict); + COMPARE_SCALAR_FIELD(semi_can_btree); + COMPARE_SCALAR_FIELD(semi_can_hash); + COMPARE_NODE_FIELD(semi_operators); + COMPARE_NODE_FIELD(semi_rhs_exprs); + + return true; +} + +static bool +_equalAppendRelInfo(const AppendRelInfo *a, const AppendRelInfo *b) +{ + COMPARE_SCALAR_FIELD(parent_relid); + COMPARE_SCALAR_FIELD(child_relid); + COMPARE_SCALAR_FIELD(parent_reltype); + COMPARE_SCALAR_FIELD(child_reltype); + COMPARE_NODE_FIELD(translated_vars); + COMPARE_SCALAR_FIELD(num_child_cols); + COMPARE_POINTER_FIELD(parent_colnos, a->num_child_cols * sizeof(AttrNumber)); + COMPARE_SCALAR_FIELD(parent_reloid); + + return true; +} + +static bool +_equalPlaceHolderInfo(const PlaceHolderInfo *a, const PlaceHolderInfo *b) +{ + COMPARE_SCALAR_FIELD(phid); + COMPARE_NODE_FIELD(ph_var); + COMPARE_BITMAPSET_FIELD(ph_eval_at); + COMPARE_BITMAPSET_FIELD(ph_lateral); + COMPARE_BITMAPSET_FIELD(ph_needed); + COMPARE_SCALAR_FIELD(ph_width); + + return true; +} + +static bool +_equalInteger(const Integer *a, const Integer *b) +{ + COMPARE_SCALAR_FIELD(ival); + + return true; +} + +static bool +_equalFloat(const Float *a, const Float *b) +{ + COMPARE_STRING_FIELD(fval); + + return true; +} + +static bool +_equalBoolean(const Boolean *a, const Boolean *b) +{ + COMPARE_SCALAR_FIELD(boolval); + + return true; +} + +static bool +_equalString(const String *a, const String *b) +{ + COMPARE_STRING_FIELD(sval); + + return true; +} + +static bool +_equalBitString(const BitString *a, const BitString *b) +{ + COMPARE_STRING_FIELD(bsval); + + return true; +} diff --git a/src/postgres/include/equalfuncs.switch.c b/src/postgres/include/equalfuncs.switch.c new file mode 100644 index 00000000..6fde221e --- /dev/null +++ b/src/postgres/include/equalfuncs.switch.c @@ -0,0 +1,785 @@ +/*------------------------------------------------------------------------- + * + * equalfuncs.switch.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ + case T_Alias: + retval = _equalAlias(a, b); + break; + case T_RangeVar: + retval = _equalRangeVar(a, b); + break; + case T_TableFunc: + retval = _equalTableFunc(a, b); + break; + case T_IntoClause: + retval = _equalIntoClause(a, b); + break; + case T_Var: + retval = _equalVar(a, b); + break; + case T_Const: + retval = _equalConst(a, b); + break; + case T_Param: + retval = _equalParam(a, b); + break; + case T_Aggref: + retval = _equalAggref(a, b); + break; + case T_GroupingFunc: + retval = _equalGroupingFunc(a, b); + break; + case T_WindowFunc: + retval = _equalWindowFunc(a, b); + break; + case T_SubscriptingRef: + retval = _equalSubscriptingRef(a, b); + break; + case T_FuncExpr: + retval = _equalFuncExpr(a, b); + break; + case T_NamedArgExpr: + retval = _equalNamedArgExpr(a, b); + break; + case T_OpExpr: + retval = _equalOpExpr(a, b); + break; + case T_DistinctExpr: + retval = _equalDistinctExpr(a, b); + break; + case T_NullIfExpr: + retval = _equalNullIfExpr(a, b); + break; + case T_ScalarArrayOpExpr: + retval = _equalScalarArrayOpExpr(a, b); + break; + case T_BoolExpr: + retval = _equalBoolExpr(a, b); + break; + case T_SubLink: + retval = _equalSubLink(a, b); + break; + case T_SubPlan: + retval = _equalSubPlan(a, b); + break; + case T_AlternativeSubPlan: + retval = _equalAlternativeSubPlan(a, b); + break; + case T_FieldSelect: + retval = _equalFieldSelect(a, b); + break; + case T_FieldStore: + retval = _equalFieldStore(a, b); + break; + case T_RelabelType: + retval = _equalRelabelType(a, b); + break; + case T_CoerceViaIO: + retval = _equalCoerceViaIO(a, b); + break; + case T_ArrayCoerceExpr: + retval = _equalArrayCoerceExpr(a, b); + break; + case T_ConvertRowtypeExpr: + retval = _equalConvertRowtypeExpr(a, b); + break; + case T_CollateExpr: + retval = _equalCollateExpr(a, b); + break; + case T_CaseExpr: + retval = _equalCaseExpr(a, b); + break; + case T_CaseWhen: + retval = _equalCaseWhen(a, b); + break; + case T_CaseTestExpr: + retval = _equalCaseTestExpr(a, b); + break; + case T_ArrayExpr: + retval = _equalArrayExpr(a, b); + break; + case T_RowExpr: + retval = _equalRowExpr(a, b); + break; + case T_RowCompareExpr: + retval = _equalRowCompareExpr(a, b); + break; + case T_CoalesceExpr: + retval = _equalCoalesceExpr(a, b); + break; + case T_MinMaxExpr: + retval = _equalMinMaxExpr(a, b); + break; + case T_SQLValueFunction: + retval = _equalSQLValueFunction(a, b); + break; + case T_XmlExpr: + retval = _equalXmlExpr(a, b); + break; + case T_JsonFormat: + retval = _equalJsonFormat(a, b); + break; + case T_JsonReturning: + retval = _equalJsonReturning(a, b); + break; + case T_JsonValueExpr: + retval = _equalJsonValueExpr(a, b); + break; + case T_JsonConstructorExpr: + retval = _equalJsonConstructorExpr(a, b); + break; + case T_JsonIsPredicate: + retval = _equalJsonIsPredicate(a, b); + break; + case T_NullTest: + retval = _equalNullTest(a, b); + break; + case T_BooleanTest: + retval = _equalBooleanTest(a, b); + break; + case T_CoerceToDomain: + retval = _equalCoerceToDomain(a, b); + break; + case T_CoerceToDomainValue: + retval = _equalCoerceToDomainValue(a, b); + break; + case T_SetToDefault: + retval = _equalSetToDefault(a, b); + break; + case T_CurrentOfExpr: + retval = _equalCurrentOfExpr(a, b); + break; + case T_NextValueExpr: + retval = _equalNextValueExpr(a, b); + break; + case T_InferenceElem: + retval = _equalInferenceElem(a, b); + break; + case T_TargetEntry: + retval = _equalTargetEntry(a, b); + break; + case T_RangeTblRef: + retval = _equalRangeTblRef(a, b); + break; + case T_JoinExpr: + retval = _equalJoinExpr(a, b); + break; + case T_FromExpr: + retval = _equalFromExpr(a, b); + break; + case T_OnConflictExpr: + retval = _equalOnConflictExpr(a, b); + break; + case T_Query: + retval = _equalQuery(a, b); + break; + case T_TypeName: + retval = _equalTypeName(a, b); + break; + case T_ColumnRef: + retval = _equalColumnRef(a, b); + break; + case T_ParamRef: + retval = _equalParamRef(a, b); + break; + case T_A_Expr: + retval = _equalA_Expr(a, b); + break; + case T_A_Const: + retval = _equalA_Const(a, b); + break; + case T_TypeCast: + retval = _equalTypeCast(a, b); + break; + case T_CollateClause: + retval = _equalCollateClause(a, b); + break; + case T_RoleSpec: + retval = _equalRoleSpec(a, b); + break; + case T_FuncCall: + retval = _equalFuncCall(a, b); + break; + case T_A_Star: + retval = _equalA_Star(a, b); + break; + case T_A_Indices: + retval = _equalA_Indices(a, b); + break; + case T_A_Indirection: + retval = _equalA_Indirection(a, b); + break; + case T_A_ArrayExpr: + retval = _equalA_ArrayExpr(a, b); + break; + case T_ResTarget: + retval = _equalResTarget(a, b); + break; + case T_MultiAssignRef: + retval = _equalMultiAssignRef(a, b); + break; + case T_SortBy: + retval = _equalSortBy(a, b); + break; + case T_WindowDef: + retval = _equalWindowDef(a, b); + break; + case T_RangeSubselect: + retval = _equalRangeSubselect(a, b); + break; + case T_RangeFunction: + retval = _equalRangeFunction(a, b); + break; + case T_RangeTableFunc: + retval = _equalRangeTableFunc(a, b); + break; + case T_RangeTableFuncCol: + retval = _equalRangeTableFuncCol(a, b); + break; + case T_RangeTableSample: + retval = _equalRangeTableSample(a, b); + break; + case T_ColumnDef: + retval = _equalColumnDef(a, b); + break; + case T_TableLikeClause: + retval = _equalTableLikeClause(a, b); + break; + case T_IndexElem: + retval = _equalIndexElem(a, b); + break; + case T_DefElem: + retval = _equalDefElem(a, b); + break; + case T_LockingClause: + retval = _equalLockingClause(a, b); + break; + case T_XmlSerialize: + retval = _equalXmlSerialize(a, b); + break; + case T_PartitionElem: + retval = _equalPartitionElem(a, b); + break; + case T_PartitionSpec: + retval = _equalPartitionSpec(a, b); + break; + case T_PartitionBoundSpec: + retval = _equalPartitionBoundSpec(a, b); + break; + case T_PartitionRangeDatum: + retval = _equalPartitionRangeDatum(a, b); + break; + case T_PartitionCmd: + retval = _equalPartitionCmd(a, b); + break; + case T_RangeTblEntry: + retval = _equalRangeTblEntry(a, b); + break; + case T_RTEPermissionInfo: + retval = _equalRTEPermissionInfo(a, b); + break; + case T_RangeTblFunction: + retval = _equalRangeTblFunction(a, b); + break; + case T_TableSampleClause: + retval = _equalTableSampleClause(a, b); + break; + case T_WithCheckOption: + retval = _equalWithCheckOption(a, b); + break; + case T_SortGroupClause: + retval = _equalSortGroupClause(a, b); + break; + case T_GroupingSet: + retval = _equalGroupingSet(a, b); + break; + case T_WindowClause: + retval = _equalWindowClause(a, b); + break; + case T_RowMarkClause: + retval = _equalRowMarkClause(a, b); + break; + case T_WithClause: + retval = _equalWithClause(a, b); + break; + case T_InferClause: + retval = _equalInferClause(a, b); + break; + case T_OnConflictClause: + retval = _equalOnConflictClause(a, b); + break; + case T_CTESearchClause: + retval = _equalCTESearchClause(a, b); + break; + case T_CTECycleClause: + retval = _equalCTECycleClause(a, b); + break; + case T_CommonTableExpr: + retval = _equalCommonTableExpr(a, b); + break; + case T_MergeWhenClause: + retval = _equalMergeWhenClause(a, b); + break; + case T_MergeAction: + retval = _equalMergeAction(a, b); + break; + case T_TriggerTransition: + retval = _equalTriggerTransition(a, b); + break; + case T_JsonOutput: + retval = _equalJsonOutput(a, b); + break; + case T_JsonKeyValue: + retval = _equalJsonKeyValue(a, b); + break; + case T_JsonObjectConstructor: + retval = _equalJsonObjectConstructor(a, b); + break; + case T_JsonArrayConstructor: + retval = _equalJsonArrayConstructor(a, b); + break; + case T_JsonArrayQueryConstructor: + retval = _equalJsonArrayQueryConstructor(a, b); + break; + case T_JsonAggConstructor: + retval = _equalJsonAggConstructor(a, b); + break; + case T_JsonObjectAgg: + retval = _equalJsonObjectAgg(a, b); + break; + case T_JsonArrayAgg: + retval = _equalJsonArrayAgg(a, b); + break; + case T_RawStmt: + retval = _equalRawStmt(a, b); + break; + case T_InsertStmt: + retval = _equalInsertStmt(a, b); + break; + case T_DeleteStmt: + retval = _equalDeleteStmt(a, b); + break; + case T_UpdateStmt: + retval = _equalUpdateStmt(a, b); + break; + case T_MergeStmt: + retval = _equalMergeStmt(a, b); + break; + case T_SelectStmt: + retval = _equalSelectStmt(a, b); + break; + case T_SetOperationStmt: + retval = _equalSetOperationStmt(a, b); + break; + case T_ReturnStmt: + retval = _equalReturnStmt(a, b); + break; + case T_PLAssignStmt: + retval = _equalPLAssignStmt(a, b); + break; + case T_CreateSchemaStmt: + retval = _equalCreateSchemaStmt(a, b); + break; + case T_AlterTableStmt: + retval = _equalAlterTableStmt(a, b); + break; + case T_ReplicaIdentityStmt: + retval = _equalReplicaIdentityStmt(a, b); + break; + case T_AlterTableCmd: + retval = _equalAlterTableCmd(a, b); + break; + case T_AlterCollationStmt: + retval = _equalAlterCollationStmt(a, b); + break; + case T_AlterDomainStmt: + retval = _equalAlterDomainStmt(a, b); + break; + case T_GrantStmt: + retval = _equalGrantStmt(a, b); + break; + case T_ObjectWithArgs: + retval = _equalObjectWithArgs(a, b); + break; + case T_AccessPriv: + retval = _equalAccessPriv(a, b); + break; + case T_GrantRoleStmt: + retval = _equalGrantRoleStmt(a, b); + break; + case T_AlterDefaultPrivilegesStmt: + retval = _equalAlterDefaultPrivilegesStmt(a, b); + break; + case T_CopyStmt: + retval = _equalCopyStmt(a, b); + break; + case T_VariableSetStmt: + retval = _equalVariableSetStmt(a, b); + break; + case T_VariableShowStmt: + retval = _equalVariableShowStmt(a, b); + break; + case T_CreateStmt: + retval = _equalCreateStmt(a, b); + break; + case T_Constraint: + retval = _equalConstraint(a, b); + break; + case T_CreateTableSpaceStmt: + retval = _equalCreateTableSpaceStmt(a, b); + break; + case T_DropTableSpaceStmt: + retval = _equalDropTableSpaceStmt(a, b); + break; + case T_AlterTableSpaceOptionsStmt: + retval = _equalAlterTableSpaceOptionsStmt(a, b); + break; + case T_AlterTableMoveAllStmt: + retval = _equalAlterTableMoveAllStmt(a, b); + break; + case T_CreateExtensionStmt: + retval = _equalCreateExtensionStmt(a, b); + break; + case T_AlterExtensionStmt: + retval = _equalAlterExtensionStmt(a, b); + break; + case T_AlterExtensionContentsStmt: + retval = _equalAlterExtensionContentsStmt(a, b); + break; + case T_CreateFdwStmt: + retval = _equalCreateFdwStmt(a, b); + break; + case T_AlterFdwStmt: + retval = _equalAlterFdwStmt(a, b); + break; + case T_CreateForeignServerStmt: + retval = _equalCreateForeignServerStmt(a, b); + break; + case T_AlterForeignServerStmt: + retval = _equalAlterForeignServerStmt(a, b); + break; + case T_CreateForeignTableStmt: + retval = _equalCreateForeignTableStmt(a, b); + break; + case T_CreateUserMappingStmt: + retval = _equalCreateUserMappingStmt(a, b); + break; + case T_AlterUserMappingStmt: + retval = _equalAlterUserMappingStmt(a, b); + break; + case T_DropUserMappingStmt: + retval = _equalDropUserMappingStmt(a, b); + break; + case T_ImportForeignSchemaStmt: + retval = _equalImportForeignSchemaStmt(a, b); + break; + case T_CreatePolicyStmt: + retval = _equalCreatePolicyStmt(a, b); + break; + case T_AlterPolicyStmt: + retval = _equalAlterPolicyStmt(a, b); + break; + case T_CreateAmStmt: + retval = _equalCreateAmStmt(a, b); + break; + case T_CreateTrigStmt: + retval = _equalCreateTrigStmt(a, b); + break; + case T_CreateEventTrigStmt: + retval = _equalCreateEventTrigStmt(a, b); + break; + case T_AlterEventTrigStmt: + retval = _equalAlterEventTrigStmt(a, b); + break; + case T_CreatePLangStmt: + retval = _equalCreatePLangStmt(a, b); + break; + case T_CreateRoleStmt: + retval = _equalCreateRoleStmt(a, b); + break; + case T_AlterRoleStmt: + retval = _equalAlterRoleStmt(a, b); + break; + case T_AlterRoleSetStmt: + retval = _equalAlterRoleSetStmt(a, b); + break; + case T_DropRoleStmt: + retval = _equalDropRoleStmt(a, b); + break; + case T_CreateSeqStmt: + retval = _equalCreateSeqStmt(a, b); + break; + case T_AlterSeqStmt: + retval = _equalAlterSeqStmt(a, b); + break; + case T_DefineStmt: + retval = _equalDefineStmt(a, b); + break; + case T_CreateDomainStmt: + retval = _equalCreateDomainStmt(a, b); + break; + case T_CreateOpClassStmt: + retval = _equalCreateOpClassStmt(a, b); + break; + case T_CreateOpClassItem: + retval = _equalCreateOpClassItem(a, b); + break; + case T_CreateOpFamilyStmt: + retval = _equalCreateOpFamilyStmt(a, b); + break; + case T_AlterOpFamilyStmt: + retval = _equalAlterOpFamilyStmt(a, b); + break; + case T_DropStmt: + retval = _equalDropStmt(a, b); + break; + case T_TruncateStmt: + retval = _equalTruncateStmt(a, b); + break; + case T_CommentStmt: + retval = _equalCommentStmt(a, b); + break; + case T_SecLabelStmt: + retval = _equalSecLabelStmt(a, b); + break; + case T_DeclareCursorStmt: + retval = _equalDeclareCursorStmt(a, b); + break; + case T_ClosePortalStmt: + retval = _equalClosePortalStmt(a, b); + break; + case T_FetchStmt: + retval = _equalFetchStmt(a, b); + break; + case T_IndexStmt: + retval = _equalIndexStmt(a, b); + break; + case T_CreateStatsStmt: + retval = _equalCreateStatsStmt(a, b); + break; + case T_StatsElem: + retval = _equalStatsElem(a, b); + break; + case T_AlterStatsStmt: + retval = _equalAlterStatsStmt(a, b); + break; + case T_CreateFunctionStmt: + retval = _equalCreateFunctionStmt(a, b); + break; + case T_FunctionParameter: + retval = _equalFunctionParameter(a, b); + break; + case T_AlterFunctionStmt: + retval = _equalAlterFunctionStmt(a, b); + break; + case T_DoStmt: + retval = _equalDoStmt(a, b); + break; + case T_CallStmt: + retval = _equalCallStmt(a, b); + break; + case T_RenameStmt: + retval = _equalRenameStmt(a, b); + break; + case T_AlterObjectDependsStmt: + retval = _equalAlterObjectDependsStmt(a, b); + break; + case T_AlterObjectSchemaStmt: + retval = _equalAlterObjectSchemaStmt(a, b); + break; + case T_AlterOwnerStmt: + retval = _equalAlterOwnerStmt(a, b); + break; + case T_AlterOperatorStmt: + retval = _equalAlterOperatorStmt(a, b); + break; + case T_AlterTypeStmt: + retval = _equalAlterTypeStmt(a, b); + break; + case T_RuleStmt: + retval = _equalRuleStmt(a, b); + break; + case T_NotifyStmt: + retval = _equalNotifyStmt(a, b); + break; + case T_ListenStmt: + retval = _equalListenStmt(a, b); + break; + case T_UnlistenStmt: + retval = _equalUnlistenStmt(a, b); + break; + case T_TransactionStmt: + retval = _equalTransactionStmt(a, b); + break; + case T_CompositeTypeStmt: + retval = _equalCompositeTypeStmt(a, b); + break; + case T_CreateEnumStmt: + retval = _equalCreateEnumStmt(a, b); + break; + case T_CreateRangeStmt: + retval = _equalCreateRangeStmt(a, b); + break; + case T_AlterEnumStmt: + retval = _equalAlterEnumStmt(a, b); + break; + case T_ViewStmt: + retval = _equalViewStmt(a, b); + break; + case T_LoadStmt: + retval = _equalLoadStmt(a, b); + break; + case T_CreatedbStmt: + retval = _equalCreatedbStmt(a, b); + break; + case T_AlterDatabaseStmt: + retval = _equalAlterDatabaseStmt(a, b); + break; + case T_AlterDatabaseRefreshCollStmt: + retval = _equalAlterDatabaseRefreshCollStmt(a, b); + break; + case T_AlterDatabaseSetStmt: + retval = _equalAlterDatabaseSetStmt(a, b); + break; + case T_DropdbStmt: + retval = _equalDropdbStmt(a, b); + break; + case T_AlterSystemStmt: + retval = _equalAlterSystemStmt(a, b); + break; + case T_ClusterStmt: + retval = _equalClusterStmt(a, b); + break; + case T_VacuumStmt: + retval = _equalVacuumStmt(a, b); + break; + case T_VacuumRelation: + retval = _equalVacuumRelation(a, b); + break; + case T_ExplainStmt: + retval = _equalExplainStmt(a, b); + break; + case T_CreateTableAsStmt: + retval = _equalCreateTableAsStmt(a, b); + break; + case T_RefreshMatViewStmt: + retval = _equalRefreshMatViewStmt(a, b); + break; + case T_CheckPointStmt: + retval = _equalCheckPointStmt(a, b); + break; + case T_DiscardStmt: + retval = _equalDiscardStmt(a, b); + break; + case T_LockStmt: + retval = _equalLockStmt(a, b); + break; + case T_ConstraintsSetStmt: + retval = _equalConstraintsSetStmt(a, b); + break; + case T_ReindexStmt: + retval = _equalReindexStmt(a, b); + break; + case T_CreateConversionStmt: + retval = _equalCreateConversionStmt(a, b); + break; + case T_CreateCastStmt: + retval = _equalCreateCastStmt(a, b); + break; + case T_CreateTransformStmt: + retval = _equalCreateTransformStmt(a, b); + break; + case T_PrepareStmt: + retval = _equalPrepareStmt(a, b); + break; + case T_ExecuteStmt: + retval = _equalExecuteStmt(a, b); + break; + case T_DeallocateStmt: + retval = _equalDeallocateStmt(a, b); + break; + case T_DropOwnedStmt: + retval = _equalDropOwnedStmt(a, b); + break; + case T_ReassignOwnedStmt: + retval = _equalReassignOwnedStmt(a, b); + break; + case T_AlterTSDictionaryStmt: + retval = _equalAlterTSDictionaryStmt(a, b); + break; + case T_AlterTSConfigurationStmt: + retval = _equalAlterTSConfigurationStmt(a, b); + break; + case T_PublicationTable: + retval = _equalPublicationTable(a, b); + break; + case T_PublicationObjSpec: + retval = _equalPublicationObjSpec(a, b); + break; + case T_CreatePublicationStmt: + retval = _equalCreatePublicationStmt(a, b); + break; + case T_AlterPublicationStmt: + retval = _equalAlterPublicationStmt(a, b); + break; + case T_CreateSubscriptionStmt: + retval = _equalCreateSubscriptionStmt(a, b); + break; + case T_AlterSubscriptionStmt: + retval = _equalAlterSubscriptionStmt(a, b); + break; + case T_DropSubscriptionStmt: + retval = _equalDropSubscriptionStmt(a, b); + break; + case T_PathKey: + retval = _equalPathKey(a, b); + break; + case T_RestrictInfo: + retval = _equalRestrictInfo(a, b); + break; + case T_PlaceHolderVar: + retval = _equalPlaceHolderVar(a, b); + break; + case T_SpecialJoinInfo: + retval = _equalSpecialJoinInfo(a, b); + break; + case T_AppendRelInfo: + retval = _equalAppendRelInfo(a, b); + break; + case T_PlaceHolderInfo: + retval = _equalPlaceHolderInfo(a, b); + break; + case T_Bitmapset: + retval = _equalBitmapset(a, b); + break; + case T_ExtensibleNode: + retval = _equalExtensibleNode(a, b); + break; + case T_Integer: + retval = _equalInteger(a, b); + break; + case T_Float: + retval = _equalFloat(a, b); + break; + case T_Boolean: + retval = _equalBoolean(a, b); + break; + case T_String: + retval = _equalString(a, b); + break; + case T_BitString: + retval = _equalBitString(a, b); + break; diff --git a/src/postgres/include/executor/execdesc.h b/src/postgres/include/executor/execdesc.h index e79e2c00..af2bf36d 100644 --- a/src/postgres/include/executor/execdesc.h +++ b/src/postgres/include/executor/execdesc.h @@ -5,7 +5,7 @@ * and related modules. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/execdesc.h diff --git a/src/postgres/include/executor/executor.h b/src/postgres/include/executor/executor.h index 82925b4b..ac022479 100644 --- a/src/postgres/include/executor/executor.h +++ b/src/postgres/include/executor/executor.h @@ -4,7 +4,7 @@ * support for the POSTGRES executor module * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/executor.h @@ -36,6 +36,11 @@ * of startup should occur. However, error checks (such as permission checks) * should be performed. * + * EXPLAIN_GENERIC can only be used together with EXPLAIN_ONLY. It indicates + * that a generic plan is being shown using EXPLAIN (GENERIC_PLAN), which + * means that missing parameter values must be tolerated. Currently, the only + * effect is to suppress execution-time partition pruning. + * * REWIND indicates that the plan node should try to efficiently support * rescans without parameter changes. (Nodes must support ExecReScan calls * in any case, but if this flag was not given, they are at liberty to do it @@ -52,13 +57,18 @@ * AfterTriggerBeginQuery/AfterTriggerEndQuery. This does not necessarily * mean that the plan can't queue any AFTER triggers; just that the caller * is responsible for there being a trigger context for them to be queued in. + * + * WITH_NO_DATA indicates that we are performing REFRESH MATERIALIZED VIEW + * ... WITH NO DATA. Currently, the only effect is to suppress errors about + * scanning unpopulated materialized views. */ -#define EXEC_FLAG_EXPLAIN_ONLY 0x0001 /* EXPLAIN, no ANALYZE */ -#define EXEC_FLAG_REWIND 0x0002 /* need efficient rescan */ -#define EXEC_FLAG_BACKWARD 0x0004 /* need backward scan */ -#define EXEC_FLAG_MARK 0x0008 /* need mark/restore */ -#define EXEC_FLAG_SKIP_TRIGGERS 0x0010 /* skip AfterTrigger calls */ -#define EXEC_FLAG_WITH_NO_DATA 0x0020 /* rel scannability doesn't matter */ +#define EXEC_FLAG_EXPLAIN_ONLY 0x0001 /* EXPLAIN, no ANALYZE */ +#define EXEC_FLAG_EXPLAIN_GENERIC 0x0002 /* EXPLAIN (GENERIC_PLAN) */ +#define EXEC_FLAG_REWIND 0x0004 /* need efficient rescan */ +#define EXEC_FLAG_BACKWARD 0x0008 /* need backward scan */ +#define EXEC_FLAG_MARK 0x0010 /* need mark/restore */ +#define EXEC_FLAG_SKIP_TRIGGERS 0x0020 /* skip AfterTrigger setup */ +#define EXEC_FLAG_WITH_NO_DATA 0x0040 /* REFRESH ... WITH NO DATA */ /* Hook for plugins to get control in ExecutorStart() */ @@ -80,8 +90,10 @@ extern PGDLLIMPORT ExecutorFinish_hook_type ExecutorFinish_hook; typedef void (*ExecutorEnd_hook_type) (QueryDesc *queryDesc); extern PGDLLIMPORT ExecutorEnd_hook_type ExecutorEnd_hook; -/* Hook for plugins to get control in ExecCheckRTPerms() */ -typedef bool (*ExecutorCheckPerms_hook_type) (List *, bool); +/* Hook for plugins to get control in ExecCheckPermissions() */ +typedef bool (*ExecutorCheckPerms_hook_type) (List *rangeTable, + List *rtePermInfos, + bool ereport_on_violation); extern PGDLLIMPORT ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook; @@ -196,7 +208,8 @@ extern void standard_ExecutorFinish(QueryDesc *queryDesc); extern void ExecutorEnd(QueryDesc *queryDesc); extern void standard_ExecutorEnd(QueryDesc *queryDesc); extern void ExecutorRewind(QueryDesc *queryDesc); -extern bool ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation); +extern bool ExecCheckPermissions(List *rangeTable, + List *rteperminfos, bool ereport_on_violation); extern void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation); extern void InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, @@ -218,9 +231,10 @@ extern LockTupleMode ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo); extern ExecRowMark *ExecFindRowMark(EState *estate, Index rti, bool missing_ok); extern ExecAuxRowMark *ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist); extern TupleTableSlot *EvalPlanQual(EPQState *epqstate, Relation relation, - Index rti, TupleTableSlot *testslot); + Index rti, TupleTableSlot *inputslot); extern void EvalPlanQualInit(EPQState *epqstate, EState *parentestate, - Plan *subplan, List *auxrowmarks, int epqParam); + Plan *subplan, List *auxrowmarks, + int epqParam, List *resultRelations); extern void EvalPlanQualSetPlan(EPQState *epqstate, Plan *subplan, List *auxrowmarks); extern TupleTableSlot *EvalPlanQualSlot(EPQState *epqstate, @@ -239,7 +253,7 @@ extern PlanState *ExecInitNode(Plan *node, EState *estate, int eflags); extern void ExecSetExecProcNode(PlanState *node, ExecProcNodeMtd function); extern Node *MultiExecProcNode(PlanState *node); extern void ExecEndNode(PlanState *node); -extern bool ExecShutdownNode(PlanState *node); +extern void ExecShutdownNode(PlanState *node); extern void ExecSetTupleBound(int64 tuples_needed, PlanState *child_node); @@ -432,7 +446,7 @@ ExecQualAndReset(ExprState *state, ExprContext *econtext) } #endif -extern bool ExecCheck(ExprState *state, ExprContext *context); +extern bool ExecCheck(ExprState *state, ExprContext *econtext); /* * prototypes from functions in execSRF.c @@ -473,7 +487,7 @@ extern void ExecInitResultSlot(PlanState *planstate, extern void ExecInitResultTupleSlotTL(PlanState *planstate, const TupleTableSlotOps *tts_ops); extern void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, - TupleDesc tupleDesc, + TupleDesc tupledesc, const TupleTableSlotOps *tts_ops); extern TupleTableSlot *ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, @@ -565,7 +579,7 @@ extern bool ExecRelationIsTargetRelation(EState *estate, Index scanrelid); extern Relation ExecOpenScanRelation(EState *estate, Index scanrelid, int eflags); -extern void ExecInitRangeTable(EState *estate, List *rangeTable); +extern void ExecInitRangeTable(EState *estate, List *rangeTable, List *permInfos); extern void ExecCloseRangeTableRelations(EState *estate); extern void ExecCloseResultRelations(EState *estate); @@ -600,7 +614,9 @@ extern TupleTableSlot *ExecGetTriggerOldSlot(EState *estate, ResultRelInfo *relI extern TupleTableSlot *ExecGetTriggerNewSlot(EState *estate, ResultRelInfo *relInfo); extern TupleTableSlot *ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo); extern TupleConversionMap *ExecGetChildToRootMap(ResultRelInfo *resultRelInfo); +extern TupleConversionMap *ExecGetRootToChildMap(ResultRelInfo *resultRelInfo, EState *estate); +extern Oid ExecGetResultRelCheckAsUser(ResultRelInfo *relInfo, EState *estate); extern Bitmapset *ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate); extern Bitmapset *ExecGetUpdatedCols(ResultRelInfo *relinfo, EState *estate); extern Bitmapset *ExecGetExtraUpdatedCols(ResultRelInfo *relinfo, EState *estate); @@ -615,7 +631,8 @@ extern List *ExecInsertIndexTuples(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, bool update, bool noDupErr, - bool *specConflict, List *arbiterIndexes); + bool *specConflict, List *arbiterIndexes, + bool onlySummarizing); extern bool ExecCheckIndexConstraints(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, ItemPointer conflictTid, diff --git a/src/postgres/include/executor/functions.h b/src/postgres/include/executor/functions.h index 4c20cf4d..5d9f3256 100644 --- a/src/postgres/include/executor/functions.h +++ b/src/postgres/include/executor/functions.h @@ -4,7 +4,7 @@ * Declarations for execution of SQL-language functions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/functions.h diff --git a/src/postgres/include/executor/instrument.h b/src/postgres/include/executor/instrument.h index 2945cce3..87e5e218 100644 --- a/src/postgres/include/executor/instrument.h +++ b/src/postgres/include/executor/instrument.h @@ -4,7 +4,7 @@ * definitions for run-time statistics collection * * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/executor/instrument.h * diff --git a/src/postgres/include/executor/spi.h b/src/postgres/include/executor/spi.h index b2c0c748..d1de139a 100644 --- a/src/postgres/include/executor/spi.h +++ b/src/postgres/include/executor/spi.h @@ -3,7 +3,7 @@ * spi.h * Server Programming Interface public declarations * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/spi.h @@ -174,7 +174,7 @@ extern void *SPI_palloc(Size size); extern void *SPI_repalloc(void *pointer, Size size); extern void SPI_pfree(void *pointer); extern Datum SPI_datumTransfer(Datum value, bool typByVal, int typLen); -extern void SPI_freetuple(HeapTuple pointer); +extern void SPI_freetuple(HeapTuple tuple); extern void SPI_freetuptable(SPITupleTable *tuptable); extern Portal SPI_cursor_open(const char *name, SPIPlanPtr plan, diff --git a/src/postgres/include/executor/tablefunc.h b/src/postgres/include/executor/tablefunc.h index 23b7ae55..ca235ae1 100644 --- a/src/postgres/include/executor/tablefunc.h +++ b/src/postgres/include/executor/tablefunc.h @@ -3,7 +3,7 @@ * tablefunc.h * interface for TableFunc executor node * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/tablefunc.h diff --git a/src/postgres/include/executor/tuptable.h b/src/postgres/include/executor/tuptable.h index 6306bb6f..4210d6d8 100644 --- a/src/postgres/include/executor/tuptable.h +++ b/src/postgres/include/executor/tuptable.h @@ -4,7 +4,7 @@ * tuple table support stuff * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/tuptable.h @@ -46,7 +46,6 @@ * A "minimal" tuple is handled similarly to a palloc'd regular tuple. * At present, minimal tuples never are stored in buffers, so there is no * parallel to case 1. Note that a minimal tuple has no "system columns". - * (Actually, it could have an OID, but we have no need to access the OID.) * * A "virtual" tuple is an optimization used to minimize physical data copying * in a nest of plan nodes. Until materialized pass-by-reference Datums in @@ -68,8 +67,8 @@ * A TupleTableSlot can also be "empty", indicated by flag TTS_FLAG_EMPTY set * in tts_flags, holding no valid data. This is the only valid state for a * freshly-created slot that has not yet had a tuple descriptor assigned to - * it. In this state, TTS_SHOULDFREE should not be set in tts_flags, tts_tuple - * must be NULL and tts_nvalid zero. + * it. In this state, TTS_FLAG_SHOULDFREE should not be set in tts_flags and + * tts_nvalid should be set to zero. * * The tupleDescriptor is simply referenced, not copied, by the TupleTableSlot * code. The caller of ExecSetSlotDescriptor() is responsible for providing @@ -79,8 +78,8 @@ * mechanism to do more. However, the slot will increment the tupdesc * reference count if a reference-counted tupdesc is supplied.) * - * When TTS_SHOULDFREE is set in tts_flags, the physical tuple is "owned" by - * the slot and should be freed when the slot's reference to the tuple is + * When TTS_FLAG_SHOULDFREE is set in tts_flags, the physical tuple is "owned" + * by the slot and should be freed when the slot's reference to the tuple is * dropped. * * tts_values/tts_isnull are allocated either when the slot is created (when @@ -237,6 +236,8 @@ extern PGDLLIMPORT const TupleTableSlotOps TTSOpsBufferHeapTuple; typedef struct VirtualTupleTableSlot { + pg_node_attr(abstract) + TupleTableSlot base; char *data; /* data for materialized slots */ @@ -244,6 +245,8 @@ typedef struct VirtualTupleTableSlot typedef struct HeapTupleTableSlot { + pg_node_attr(abstract) + TupleTableSlot base; #define FIELDNO_HEAPTUPLETABLESLOT_TUPLE 1 @@ -256,19 +259,23 @@ typedef struct HeapTupleTableSlot /* heap tuple residing in a buffer */ typedef struct BufferHeapTupleTableSlot { + pg_node_attr(abstract) + HeapTupleTableSlot base; /* * If buffer is not InvalidBuffer, then the slot is holding a pin on the * indicated buffer page; drop the pin when we release the slot's * reference to that buffer. (TTS_FLAG_SHOULDFREE should not be set in - * such a case, since presumably tts_tuple is pointing into the buffer.) + * such a case, since presumably base.tuple is pointing into the buffer.) */ Buffer buffer; /* tuple's buffer, or InvalidBuffer */ } BufferHeapTupleTableSlot; typedef struct MinimalTupleTableSlot { + pg_node_attr(abstract) + TupleTableSlot base; /* @@ -366,7 +373,7 @@ slot_getallattrs(TupleTableSlot *slot) static inline bool slot_attisnull(TupleTableSlot *slot, int attnum) { - AssertArg(attnum > 0); + Assert(attnum > 0); if (attnum > slot->tts_nvalid) slot_getsomeattrs(slot, attnum); @@ -381,7 +388,7 @@ static inline Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull) { - AssertArg(attnum > 0); + Assert(attnum > 0); if (attnum > slot->tts_nvalid) slot_getsomeattrs(slot, attnum); @@ -401,7 +408,7 @@ slot_getattr(TupleTableSlot *slot, int attnum, static inline Datum slot_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull) { - AssertArg(attnum < 0); /* caller error */ + Assert(attnum < 0); /* caller error */ if (attnum == TableOidAttributeNumber) { @@ -475,7 +482,7 @@ static inline TupleTableSlot * ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot) { Assert(!TTS_EMPTY(srcslot)); - AssertArg(srcslot != dstslot); + Assert(srcslot != dstslot); dstslot->tts_ops->copyslot(dstslot, srcslot); diff --git a/src/postgres/include/fmgr.h b/src/postgres/include/fmgr.h index 5314b737..b120f5e7 100644 --- a/src/postgres/include/fmgr.h +++ b/src/postgres/include/fmgr.h @@ -8,7 +8,7 @@ * or call fmgr-callable functions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/fmgr.h @@ -413,7 +413,7 @@ typedef const Pg_finfo_record *(*PGFInfoFunction) (void); * info function, since authors shouldn't need to be explicitly aware of it. */ #define PG_FUNCTION_INFO_V1(funcname) \ -extern Datum funcname(PG_FUNCTION_ARGS); \ +extern PGDLLEXPORT Datum funcname(PG_FUNCTION_ARGS); \ extern PGDLLEXPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \ const Pg_finfo_record * \ CppConcat(pg_finfo_,funcname) (void) \ @@ -424,6 +424,17 @@ CppConcat(pg_finfo_,funcname) (void) \ extern int no_such_variable +/* + * Declare _PG_init/_PG_fini centrally. Historically each shared library had + * its own declaration; but now that we want to mark these PGDLLEXPORT, using + * central declarations avoids each extension having to add that. Any + * existing declarations in extensions will continue to work if fmgr.h is + * included before them, otherwise compilation for Windows will fail. + */ +extern PGDLLEXPORT void _PG_init(void); +extern PGDLLEXPORT void _PG_fini(void); + + /*------------------------------------------------------------------------- * Support for verifying backend compatibility of loaded modules * @@ -689,6 +700,14 @@ extern Datum OidFunctionCall9Coll(Oid functionId, Oid collation, /* Special cases for convenient invocation of datatype I/O functions. */ extern Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod); +extern bool InputFunctionCallSafe(FmgrInfo *flinfo, char *str, + Oid typioparam, int32 typmod, + fmNodePtr escontext, + Datum *result); +extern bool DirectInputFunctionCallSafe(PGFunction func, char *str, + Oid typioparam, int32 typmod, + fmNodePtr escontext, + Datum *result); extern Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod); extern char *OutputFunctionCall(FmgrInfo *flinfo, Datum val); diff --git a/src/postgres/include/foreign/fdwapi.h b/src/postgres/include/foreign/fdwapi.h new file mode 100644 index 00000000..996c62e3 --- /dev/null +++ b/src/postgres/include/foreign/fdwapi.h @@ -0,0 +1,294 @@ +/*------------------------------------------------------------------------- + * + * fdwapi.h + * API for foreign-data wrappers + * + * Copyright (c) 2010-2023, PostgreSQL Global Development Group + * + * src/include/foreign/fdwapi.h + * + *------------------------------------------------------------------------- + */ +#ifndef FDWAPI_H +#define FDWAPI_H + +#include "access/parallel.h" +#include "nodes/execnodes.h" +#include "nodes/pathnodes.h" + +/* To avoid including explain.h here, reference ExplainState thus: */ +struct ExplainState; + + +/* + * Callback function signatures --- see fdwhandler.sgml for more info. + */ + +typedef void (*GetForeignRelSize_function) (PlannerInfo *root, + RelOptInfo *baserel, + Oid foreigntableid); + +typedef void (*GetForeignPaths_function) (PlannerInfo *root, + RelOptInfo *baserel, + Oid foreigntableid); + +typedef ForeignScan *(*GetForeignPlan_function) (PlannerInfo *root, + RelOptInfo *baserel, + Oid foreigntableid, + ForeignPath *best_path, + List *tlist, + List *scan_clauses, + Plan *outer_plan); + +typedef void (*BeginForeignScan_function) (ForeignScanState *node, + int eflags); + +typedef TupleTableSlot *(*IterateForeignScan_function) (ForeignScanState *node); + +typedef bool (*RecheckForeignScan_function) (ForeignScanState *node, + TupleTableSlot *slot); + +typedef void (*ReScanForeignScan_function) (ForeignScanState *node); + +typedef void (*EndForeignScan_function) (ForeignScanState *node); + +typedef void (*GetForeignJoinPaths_function) (PlannerInfo *root, + RelOptInfo *joinrel, + RelOptInfo *outerrel, + RelOptInfo *innerrel, + JoinType jointype, + JoinPathExtraData *extra); + +typedef void (*GetForeignUpperPaths_function) (PlannerInfo *root, + UpperRelationKind stage, + RelOptInfo *input_rel, + RelOptInfo *output_rel, + void *extra); + +typedef void (*AddForeignUpdateTargets_function) (PlannerInfo *root, + Index rtindex, + RangeTblEntry *target_rte, + Relation target_relation); + +typedef List *(*PlanForeignModify_function) (PlannerInfo *root, + ModifyTable *plan, + Index resultRelation, + int subplan_index); + +typedef void (*BeginForeignModify_function) (ModifyTableState *mtstate, + ResultRelInfo *rinfo, + List *fdw_private, + int subplan_index, + int eflags); + +typedef TupleTableSlot *(*ExecForeignInsert_function) (EState *estate, + ResultRelInfo *rinfo, + TupleTableSlot *slot, + TupleTableSlot *planSlot); + +typedef TupleTableSlot **(*ExecForeignBatchInsert_function) (EState *estate, + ResultRelInfo *rinfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int *numSlots); + +typedef int (*GetForeignModifyBatchSize_function) (ResultRelInfo *rinfo); + +typedef TupleTableSlot *(*ExecForeignUpdate_function) (EState *estate, + ResultRelInfo *rinfo, + TupleTableSlot *slot, + TupleTableSlot *planSlot); + +typedef TupleTableSlot *(*ExecForeignDelete_function) (EState *estate, + ResultRelInfo *rinfo, + TupleTableSlot *slot, + TupleTableSlot *planSlot); + +typedef void (*EndForeignModify_function) (EState *estate, + ResultRelInfo *rinfo); + +typedef void (*BeginForeignInsert_function) (ModifyTableState *mtstate, + ResultRelInfo *rinfo); + +typedef void (*EndForeignInsert_function) (EState *estate, + ResultRelInfo *rinfo); + +typedef int (*IsForeignRelUpdatable_function) (Relation rel); + +typedef bool (*PlanDirectModify_function) (PlannerInfo *root, + ModifyTable *plan, + Index resultRelation, + int subplan_index); + +typedef void (*BeginDirectModify_function) (ForeignScanState *node, + int eflags); + +typedef TupleTableSlot *(*IterateDirectModify_function) (ForeignScanState *node); + +typedef void (*EndDirectModify_function) (ForeignScanState *node); + +typedef RowMarkType (*GetForeignRowMarkType_function) (RangeTblEntry *rte, + LockClauseStrength strength); + +typedef void (*RefetchForeignRow_function) (EState *estate, + ExecRowMark *erm, + Datum rowid, + TupleTableSlot *slot, + bool *updated); + +typedef void (*ExplainForeignScan_function) (ForeignScanState *node, + struct ExplainState *es); + +typedef void (*ExplainForeignModify_function) (ModifyTableState *mtstate, + ResultRelInfo *rinfo, + List *fdw_private, + int subplan_index, + struct ExplainState *es); + +typedef void (*ExplainDirectModify_function) (ForeignScanState *node, + struct ExplainState *es); + +typedef int (*AcquireSampleRowsFunc) (Relation relation, int elevel, + HeapTuple *rows, int targrows, + double *totalrows, + double *totaldeadrows); + +typedef bool (*AnalyzeForeignTable_function) (Relation relation, + AcquireSampleRowsFunc *func, + BlockNumber *totalpages); + +typedef List *(*ImportForeignSchema_function) (ImportForeignSchemaStmt *stmt, + Oid serverOid); + +typedef void (*ExecForeignTruncate_function) (List *rels, + DropBehavior behavior, + bool restart_seqs); + +typedef Size (*EstimateDSMForeignScan_function) (ForeignScanState *node, + ParallelContext *pcxt); +typedef void (*InitializeDSMForeignScan_function) (ForeignScanState *node, + ParallelContext *pcxt, + void *coordinate); +typedef void (*ReInitializeDSMForeignScan_function) (ForeignScanState *node, + ParallelContext *pcxt, + void *coordinate); +typedef void (*InitializeWorkerForeignScan_function) (ForeignScanState *node, + shm_toc *toc, + void *coordinate); +typedef void (*ShutdownForeignScan_function) (ForeignScanState *node); +typedef bool (*IsForeignScanParallelSafe_function) (PlannerInfo *root, + RelOptInfo *rel, + RangeTblEntry *rte); +typedef List *(*ReparameterizeForeignPathByChild_function) (PlannerInfo *root, + List *fdw_private, + RelOptInfo *child_rel); + +typedef bool (*IsForeignPathAsyncCapable_function) (ForeignPath *path); + +typedef void (*ForeignAsyncRequest_function) (AsyncRequest *areq); + +typedef void (*ForeignAsyncConfigureWait_function) (AsyncRequest *areq); + +typedef void (*ForeignAsyncNotify_function) (AsyncRequest *areq); + +/* + * FdwRoutine is the struct returned by a foreign-data wrapper's handler + * function. It provides pointers to the callback functions needed by the + * planner and executor. + * + * More function pointers are likely to be added in the future. Therefore + * it's recommended that the handler initialize the struct with + * makeNode(FdwRoutine) so that all fields are set to NULL. This will + * ensure that no fields are accidentally left undefined. + */ +typedef struct FdwRoutine +{ + NodeTag type; + + /* Functions for scanning foreign tables */ + GetForeignRelSize_function GetForeignRelSize; + GetForeignPaths_function GetForeignPaths; + GetForeignPlan_function GetForeignPlan; + BeginForeignScan_function BeginForeignScan; + IterateForeignScan_function IterateForeignScan; + ReScanForeignScan_function ReScanForeignScan; + EndForeignScan_function EndForeignScan; + + /* + * Remaining functions are optional. Set the pointer to NULL for any that + * are not provided. + */ + + /* Functions for remote-join planning */ + GetForeignJoinPaths_function GetForeignJoinPaths; + + /* Functions for remote upper-relation (post scan/join) planning */ + GetForeignUpperPaths_function GetForeignUpperPaths; + + /* Functions for updating foreign tables */ + AddForeignUpdateTargets_function AddForeignUpdateTargets; + PlanForeignModify_function PlanForeignModify; + BeginForeignModify_function BeginForeignModify; + ExecForeignInsert_function ExecForeignInsert; + ExecForeignBatchInsert_function ExecForeignBatchInsert; + GetForeignModifyBatchSize_function GetForeignModifyBatchSize; + ExecForeignUpdate_function ExecForeignUpdate; + ExecForeignDelete_function ExecForeignDelete; + EndForeignModify_function EndForeignModify; + BeginForeignInsert_function BeginForeignInsert; + EndForeignInsert_function EndForeignInsert; + IsForeignRelUpdatable_function IsForeignRelUpdatable; + PlanDirectModify_function PlanDirectModify; + BeginDirectModify_function BeginDirectModify; + IterateDirectModify_function IterateDirectModify; + EndDirectModify_function EndDirectModify; + + /* Functions for SELECT FOR UPDATE/SHARE row locking */ + GetForeignRowMarkType_function GetForeignRowMarkType; + RefetchForeignRow_function RefetchForeignRow; + RecheckForeignScan_function RecheckForeignScan; + + /* Support functions for EXPLAIN */ + ExplainForeignScan_function ExplainForeignScan; + ExplainForeignModify_function ExplainForeignModify; + ExplainDirectModify_function ExplainDirectModify; + + /* Support functions for ANALYZE */ + AnalyzeForeignTable_function AnalyzeForeignTable; + + /* Support functions for IMPORT FOREIGN SCHEMA */ + ImportForeignSchema_function ImportForeignSchema; + + /* Support functions for TRUNCATE */ + ExecForeignTruncate_function ExecForeignTruncate; + + /* Support functions for parallelism under Gather node */ + IsForeignScanParallelSafe_function IsForeignScanParallelSafe; + EstimateDSMForeignScan_function EstimateDSMForeignScan; + InitializeDSMForeignScan_function InitializeDSMForeignScan; + ReInitializeDSMForeignScan_function ReInitializeDSMForeignScan; + InitializeWorkerForeignScan_function InitializeWorkerForeignScan; + ShutdownForeignScan_function ShutdownForeignScan; + + /* Support functions for path reparameterization. */ + ReparameterizeForeignPathByChild_function ReparameterizeForeignPathByChild; + + /* Support functions for asynchronous execution */ + IsForeignPathAsyncCapable_function IsForeignPathAsyncCapable; + ForeignAsyncRequest_function ForeignAsyncRequest; + ForeignAsyncConfigureWait_function ForeignAsyncConfigureWait; + ForeignAsyncNotify_function ForeignAsyncNotify; +} FdwRoutine; + + +/* Functions in foreign/foreign.c */ +extern FdwRoutine *GetFdwRoutine(Oid fdwhandler); +extern Oid GetForeignServerIdByRelId(Oid relid); +extern FdwRoutine *GetFdwRoutineByServerId(Oid serverid); +extern FdwRoutine *GetFdwRoutineByRelId(Oid relid); +extern FdwRoutine *GetFdwRoutineForRelation(Relation relation, bool makecopy); +extern bool IsImportableForeignTable(const char *tablename, + ImportForeignSchemaStmt *stmt); +extern Path *GetExistingLocalJoinPath(RelOptInfo *joinrel); + +#endif /* FDWAPI_H */ diff --git a/src/postgres/include/funcapi.h b/src/postgres/include/funcapi.h index 8c47054e..cc0cca32 100644 --- a/src/postgres/include/funcapi.h +++ b/src/postgres/include/funcapi.h @@ -8,7 +8,7 @@ * or call FUNCAPI-callable functions or macros. * * - * Copyright (c) 2002-2022, PostgreSQL Global Development Group + * Copyright (c) 2002-2023, PostgreSQL Global Development Group * * src/include/funcapi.h * @@ -204,7 +204,7 @@ extern TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple); * Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple) - convert a * HeapTupleHeader to a Datum. * - * Macro declarations: + * Inline declarations: * HeapTupleGetDatum(HeapTuple tuple) - convert a HeapTuple to a Datum. * * Obsolete routines and macros: @@ -217,10 +217,6 @@ extern TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple); *---------- */ -#define HeapTupleGetDatum(tuple) HeapTupleHeaderGetDatum((tuple)->t_data) -/* obsolete version of above */ -#define TupleGetDatum(_slot, _tuple) HeapTupleGetDatum(_tuple) - extern TupleDesc RelationNameGetTupleDesc(const char *relname); extern TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases); @@ -230,6 +226,15 @@ extern AttInMetadata *TupleDescGetAttInMetadata(TupleDesc tupdesc); extern HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values); extern Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple); +static inline Datum +HeapTupleGetDatum(const HeapTupleData *tuple) +{ + return HeapTupleHeaderGetDatum(tuple->t_data); +} + +/* obsolete version of above */ +#define TupleGetDatum(_slot, _tuple) HeapTupleGetDatum(_tuple) + /*---------- * Support for Set Returning Functions (SRFs) @@ -293,11 +298,6 @@ extern Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple); * BlessTupleDesc(). */ extern void InitMaterializedSRF(FunctionCallInfo fcinfo, bits32 flags); -/* Compatibility declarations, for v15 */ -#define SRF_SINGLE_USE_EXPECTED MAT_SRF_USE_EXPECTED_DESC -#define SRF_SINGLE_BLESS MAT_SRF_BLESS -extern void SetSingleFuncCall(FunctionCallInfo fcinfo, bits32 flags); - extern FuncCallContext *init_MultiFuncCall(PG_FUNCTION_ARGS); extern FuncCallContext *per_MultiFuncCall(PG_FUNCTION_ARGS); extern void end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx); @@ -354,7 +354,7 @@ extern void end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx); * "VARIADIC NULL". */ extern int extract_variadic_args(FunctionCallInfo fcinfo, int variadic_start, - bool convert_unknown, Datum **values, + bool convert_unknown, Datum **args, Oid **types, bool **nulls); #endif /* FUNCAPI_H */ diff --git a/src/postgres/include/getaddrinfo.h b/src/postgres/include/getaddrinfo.h deleted file mode 100644 index 2042c2d3..00000000 --- a/src/postgres/include/getaddrinfo.h +++ /dev/null @@ -1,162 +0,0 @@ -/*------------------------------------------------------------------------- - * - * getaddrinfo.h - * Support getaddrinfo() on platforms that don't have it. - * - * Note: we use our own routines on platforms that don't HAVE_STRUCT_ADDRINFO, - * whether or not the library routine getaddrinfo() can be found. This - * policy is needed because on some platforms a manually installed libbind.a - * may provide getaddrinfo(), yet the system headers may not provide the - * struct definitions needed to call it. To avoid conflict with the libbind - * definition in such cases, we rename our routines to pg_xxx() via macros. - * - * This code will also work on platforms where struct addrinfo is defined - * in the system headers but no getaddrinfo() can be located. - * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group - * - * src/include/getaddrinfo.h - * - *------------------------------------------------------------------------- - */ -#ifndef GETADDRINFO_H -#define GETADDRINFO_H - -#include -#include - - -/* Various macros that ought to be in , but might not be */ - -#ifndef EAI_FAIL -#ifndef WIN32 -#define EAI_BADFLAGS (-1) -#define EAI_NONAME (-2) -#define EAI_AGAIN (-3) -#define EAI_FAIL (-4) -#define EAI_FAMILY (-6) -#define EAI_SOCKTYPE (-7) -#define EAI_SERVICE (-8) -#define EAI_MEMORY (-10) -#define EAI_SYSTEM (-11) -#else /* WIN32 */ -#ifdef _MSC_VER -#ifndef WSA_NOT_ENOUGH_MEMORY -#define WSA_NOT_ENOUGH_MEMORY (WSAENOBUFS) -#endif -#define WSATYPE_NOT_FOUND (WSABASEERR+109) -#endif -#define EAI_AGAIN WSATRY_AGAIN -#define EAI_BADFLAGS WSAEINVAL -#define EAI_FAIL WSANO_RECOVERY -#define EAI_FAMILY WSAEAFNOSUPPORT -#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY -#define EAI_NODATA WSANO_DATA -#define EAI_NONAME WSAHOST_NOT_FOUND -#define EAI_SERVICE WSATYPE_NOT_FOUND -#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT -#endif /* !WIN32 */ -#endif /* !EAI_FAIL */ - -#ifndef AI_PASSIVE -#define AI_PASSIVE 0x0001 -#endif - -#ifndef AI_NUMERICHOST -/* - * some platforms don't support AI_NUMERICHOST; define as zero if using - * the system version of getaddrinfo... - */ -#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO) -#define AI_NUMERICHOST 0 -#else -#define AI_NUMERICHOST 0x0004 -#endif -#endif - -#ifndef NI_NUMERICHOST -#define NI_NUMERICHOST 1 -#endif -#ifndef NI_NUMERICSERV -#define NI_NUMERICSERV 2 -#endif -#ifndef NI_NAMEREQD -#define NI_NAMEREQD 4 -#endif - -#ifndef NI_MAXHOST -#define NI_MAXHOST 1025 -#endif -#ifndef NI_MAXSERV -#define NI_MAXSERV 32 -#endif - - -#ifndef HAVE_STRUCT_ADDRINFO - -#ifndef WIN32 -struct addrinfo -{ - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - size_t ai_addrlen; - struct sockaddr *ai_addr; - char *ai_canonname; - struct addrinfo *ai_next; -}; -#else -/* - * The order of the structure elements on Win32 doesn't match the - * order specified in the standard, but we have to match it for - * IPv6 to work. - */ -struct addrinfo -{ - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - size_t ai_addrlen; - char *ai_canonname; - struct sockaddr *ai_addr; - struct addrinfo *ai_next; -}; -#endif -#endif /* HAVE_STRUCT_ADDRINFO */ - - -#ifndef HAVE_GETADDRINFO - -/* Rename private copies per comments above */ -#ifdef getaddrinfo -#undef getaddrinfo -#endif -#define getaddrinfo pg_getaddrinfo - -#ifdef freeaddrinfo -#undef freeaddrinfo -#endif -#define freeaddrinfo pg_freeaddrinfo - -#ifdef gai_strerror -#undef gai_strerror -#endif -#define gai_strerror pg_gai_strerror - -#ifdef getnameinfo -#undef getnameinfo -#endif -#define getnameinfo pg_getnameinfo - -extern int getaddrinfo(const char *node, const char *service, - const struct addrinfo *hints, struct addrinfo **res); -extern void freeaddrinfo(struct addrinfo *res); -extern const char *gai_strerror(int errcode); -extern int getnameinfo(const struct sockaddr *sa, int salen, - char *node, int nodelen, - char *service, int servicelen, int flags); -#endif /* HAVE_GETADDRINFO */ - -#endif /* GETADDRINFO_H */ diff --git a/src/postgres/include/gram.h b/src/postgres/include/gram.h new file mode 100644 index 00000000..dfbd2c40 --- /dev/null +++ b/src/postgres/include/gram.h @@ -0,0 +1,1127 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* 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. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + IDENT = 258, + UIDENT = 259, + FCONST = 260, + SCONST = 261, + USCONST = 262, + BCONST = 263, + XCONST = 264, + Op = 265, + ICONST = 266, + PARAM = 267, + TYPECAST = 268, + DOT_DOT = 269, + COLON_EQUALS = 270, + EQUALS_GREATER = 271, + LESS_EQUALS = 272, + GREATER_EQUALS = 273, + NOT_EQUALS = 274, + SQL_COMMENT = 275, + C_COMMENT = 276, + ABORT_P = 277, + ABSENT = 278, + ABSOLUTE_P = 279, + ACCESS = 280, + ACTION = 281, + ADD_P = 282, + ADMIN = 283, + AFTER = 284, + AGGREGATE = 285, + ALL = 286, + ALSO = 287, + ALTER = 288, + ALWAYS = 289, + ANALYSE = 290, + ANALYZE = 291, + AND = 292, + ANY = 293, + ARRAY = 294, + AS = 295, + ASC = 296, + ASENSITIVE = 297, + ASSERTION = 298, + ASSIGNMENT = 299, + ASYMMETRIC = 300, + ATOMIC = 301, + AT = 302, + ATTACH = 303, + ATTRIBUTE = 304, + AUTHORIZATION = 305, + BACKWARD = 306, + BEFORE = 307, + BEGIN_P = 308, + BETWEEN = 309, + BIGINT = 310, + BINARY = 311, + BIT = 312, + BOOLEAN_P = 313, + BOTH = 314, + BREADTH = 315, + BY = 316, + CACHE = 317, + CALL = 318, + CALLED = 319, + CASCADE = 320, + CASCADED = 321, + CASE = 322, + CAST = 323, + CATALOG_P = 324, + CHAIN = 325, + CHAR_P = 326, + CHARACTER = 327, + CHARACTERISTICS = 328, + CHECK = 329, + CHECKPOINT = 330, + CLASS = 331, + CLOSE = 332, + CLUSTER = 333, + COALESCE = 334, + COLLATE = 335, + COLLATION = 336, + COLUMN = 337, + COLUMNS = 338, + COMMENT = 339, + COMMENTS = 340, + COMMIT = 341, + COMMITTED = 342, + COMPRESSION = 343, + CONCURRENTLY = 344, + CONFIGURATION = 345, + CONFLICT = 346, + CONNECTION = 347, + CONSTRAINT = 348, + CONSTRAINTS = 349, + CONTENT_P = 350, + CONTINUE_P = 351, + CONVERSION_P = 352, + COPY = 353, + COST = 354, + CREATE = 355, + CROSS = 356, + CSV = 357, + CUBE = 358, + CURRENT_P = 359, + CURRENT_CATALOG = 360, + CURRENT_DATE = 361, + CURRENT_ROLE = 362, + CURRENT_SCHEMA = 363, + CURRENT_TIME = 364, + CURRENT_TIMESTAMP = 365, + CURRENT_USER = 366, + CURSOR = 367, + CYCLE = 368, + DATA_P = 369, + DATABASE = 370, + DAY_P = 371, + DEALLOCATE = 372, + DEC = 373, + DECIMAL_P = 374, + DECLARE = 375, + DEFAULT = 376, + DEFAULTS = 377, + DEFERRABLE = 378, + DEFERRED = 379, + DEFINER = 380, + DELETE_P = 381, + DELIMITER = 382, + DELIMITERS = 383, + DEPENDS = 384, + DEPTH = 385, + DESC = 386, + DETACH = 387, + DICTIONARY = 388, + DISABLE_P = 389, + DISCARD = 390, + DISTINCT = 391, + DO = 392, + DOCUMENT_P = 393, + DOMAIN_P = 394, + DOUBLE_P = 395, + DROP = 396, + EACH = 397, + ELSE = 398, + ENABLE_P = 399, + ENCODING = 400, + ENCRYPTED = 401, + END_P = 402, + ENUM_P = 403, + ESCAPE = 404, + EVENT = 405, + EXCEPT = 406, + EXCLUDE = 407, + EXCLUDING = 408, + EXCLUSIVE = 409, + EXECUTE = 410, + EXISTS = 411, + EXPLAIN = 412, + EXPRESSION = 413, + EXTENSION = 414, + EXTERNAL = 415, + EXTRACT = 416, + FALSE_P = 417, + FAMILY = 418, + FETCH = 419, + FILTER = 420, + FINALIZE = 421, + FIRST_P = 422, + FLOAT_P = 423, + FOLLOWING = 424, + FOR = 425, + FORCE = 426, + FOREIGN = 427, + FORMAT = 428, + FORWARD = 429, + FREEZE = 430, + FROM = 431, + FULL = 432, + FUNCTION = 433, + FUNCTIONS = 434, + GENERATED = 435, + GLOBAL = 436, + GRANT = 437, + GRANTED = 438, + GREATEST = 439, + GROUP_P = 440, + GROUPING = 441, + GROUPS = 442, + HANDLER = 443, + HAVING = 444, + HEADER_P = 445, + HOLD = 446, + HOUR_P = 447, + IDENTITY_P = 448, + IF_P = 449, + ILIKE = 450, + IMMEDIATE = 451, + IMMUTABLE = 452, + IMPLICIT_P = 453, + IMPORT_P = 454, + IN_P = 455, + INCLUDE = 456, + INCLUDING = 457, + INCREMENT = 458, + INDENT = 459, + INDEX = 460, + INDEXES = 461, + INHERIT = 462, + INHERITS = 463, + INITIALLY = 464, + INLINE_P = 465, + INNER_P = 466, + INOUT = 467, + INPUT_P = 468, + INSENSITIVE = 469, + INSERT = 470, + INSTEAD = 471, + INT_P = 472, + INTEGER = 473, + INTERSECT = 474, + INTERVAL = 475, + INTO = 476, + INVOKER = 477, + IS = 478, + ISNULL = 479, + ISOLATION = 480, + JOIN = 481, + JSON = 482, + JSON_ARRAY = 483, + JSON_ARRAYAGG = 484, + JSON_OBJECT = 485, + JSON_OBJECTAGG = 486, + KEY = 487, + KEYS = 488, + LABEL = 489, + LANGUAGE = 490, + LARGE_P = 491, + LAST_P = 492, + LATERAL_P = 493, + LEADING = 494, + LEAKPROOF = 495, + LEAST = 496, + LEFT = 497, + LEVEL = 498, + LIKE = 499, + LIMIT = 500, + LISTEN = 501, + LOAD = 502, + LOCAL = 503, + LOCALTIME = 504, + LOCALTIMESTAMP = 505, + LOCATION = 506, + LOCK_P = 507, + LOCKED = 508, + LOGGED = 509, + MAPPING = 510, + MATCH = 511, + MATCHED = 512, + MATERIALIZED = 513, + MAXVALUE = 514, + MERGE = 515, + METHOD = 516, + MINUTE_P = 517, + MINVALUE = 518, + MODE = 519, + MONTH_P = 520, + MOVE = 521, + NAME_P = 522, + NAMES = 523, + NATIONAL = 524, + NATURAL = 525, + NCHAR = 526, + NEW = 527, + NEXT = 528, + NFC = 529, + NFD = 530, + NFKC = 531, + NFKD = 532, + NO = 533, + NONE = 534, + NORMALIZE = 535, + NORMALIZED = 536, + NOT = 537, + NOTHING = 538, + NOTIFY = 539, + NOTNULL = 540, + NOWAIT = 541, + NULL_P = 542, + NULLIF = 543, + NULLS_P = 544, + NUMERIC = 545, + OBJECT_P = 546, + OF = 547, + OFF = 548, + OFFSET = 549, + OIDS = 550, + OLD = 551, + ON = 552, + ONLY = 553, + OPERATOR = 554, + OPTION = 555, + OPTIONS = 556, + OR = 557, + ORDER = 558, + ORDINALITY = 559, + OTHERS = 560, + OUT_P = 561, + OUTER_P = 562, + OVER = 563, + OVERLAPS = 564, + OVERLAY = 565, + OVERRIDING = 566, + OWNED = 567, + OWNER = 568, + PARALLEL = 569, + PARAMETER = 570, + PARSER = 571, + PARTIAL = 572, + PARTITION = 573, + PASSING = 574, + PASSWORD = 575, + PLACING = 576, + PLANS = 577, + POLICY = 578, + POSITION = 579, + PRECEDING = 580, + PRECISION = 581, + PRESERVE = 582, + PREPARE = 583, + PREPARED = 584, + PRIMARY = 585, + PRIOR = 586, + PRIVILEGES = 587, + PROCEDURAL = 588, + PROCEDURE = 589, + PROCEDURES = 590, + PROGRAM = 591, + PUBLICATION = 592, + QUOTE = 593, + RANGE = 594, + READ = 595, + REAL = 596, + REASSIGN = 597, + RECHECK = 598, + RECURSIVE = 599, + REF_P = 600, + REFERENCES = 601, + REFERENCING = 602, + REFRESH = 603, + REINDEX = 604, + RELATIVE_P = 605, + RELEASE = 606, + RENAME = 607, + REPEATABLE = 608, + REPLACE = 609, + REPLICA = 610, + RESET = 611, + RESTART = 612, + RESTRICT = 613, + RETURN = 614, + RETURNING = 615, + RETURNS = 616, + REVOKE = 617, + RIGHT = 618, + ROLE = 619, + ROLLBACK = 620, + ROLLUP = 621, + ROUTINE = 622, + ROUTINES = 623, + ROW = 624, + ROWS = 625, + RULE = 626, + SAVEPOINT = 627, + SCALAR = 628, + SCHEMA = 629, + SCHEMAS = 630, + SCROLL = 631, + SEARCH = 632, + SECOND_P = 633, + SECURITY = 634, + SELECT = 635, + SEQUENCE = 636, + SEQUENCES = 637, + SERIALIZABLE = 638, + SERVER = 639, + SESSION = 640, + SESSION_USER = 641, + SET = 642, + SETS = 643, + SETOF = 644, + SHARE = 645, + SHOW = 646, + SIMILAR = 647, + SIMPLE = 648, + SKIP = 649, + SMALLINT = 650, + SNAPSHOT = 651, + SOME = 652, + SQL_P = 653, + STABLE = 654, + STANDALONE_P = 655, + START = 656, + STATEMENT = 657, + STATISTICS = 658, + STDIN = 659, + STDOUT = 660, + STORAGE = 661, + STORED = 662, + STRICT_P = 663, + STRIP_P = 664, + SUBSCRIPTION = 665, + SUBSTRING = 666, + SUPPORT = 667, + SYMMETRIC = 668, + SYSID = 669, + SYSTEM_P = 670, + SYSTEM_USER = 671, + TABLE = 672, + TABLES = 673, + TABLESAMPLE = 674, + TABLESPACE = 675, + TEMP = 676, + TEMPLATE = 677, + TEMPORARY = 678, + TEXT_P = 679, + THEN = 680, + TIES = 681, + TIME = 682, + TIMESTAMP = 683, + TO = 684, + TRAILING = 685, + TRANSACTION = 686, + TRANSFORM = 687, + TREAT = 688, + TRIGGER = 689, + TRIM = 690, + TRUE_P = 691, + TRUNCATE = 692, + TRUSTED = 693, + TYPE_P = 694, + TYPES_P = 695, + UESCAPE = 696, + UNBOUNDED = 697, + UNCOMMITTED = 698, + UNENCRYPTED = 699, + UNION = 700, + UNIQUE = 701, + UNKNOWN = 702, + UNLISTEN = 703, + UNLOGGED = 704, + UNTIL = 705, + UPDATE = 706, + USER = 707, + USING = 708, + VACUUM = 709, + VALID = 710, + VALIDATE = 711, + VALIDATOR = 712, + VALUE_P = 713, + VALUES = 714, + VARCHAR = 715, + VARIADIC = 716, + VARYING = 717, + VERBOSE = 718, + VERSION_P = 719, + VIEW = 720, + VIEWS = 721, + VOLATILE = 722, + WHEN = 723, + WHERE = 724, + WHITESPACE_P = 725, + WINDOW = 726, + WITH = 727, + WITHIN = 728, + WITHOUT = 729, + WORK = 730, + WRAPPER = 731, + WRITE = 732, + XML_P = 733, + XMLATTRIBUTES = 734, + XMLCONCAT = 735, + XMLELEMENT = 736, + XMLEXISTS = 737, + XMLFOREST = 738, + XMLNAMESPACES = 739, + XMLPARSE = 740, + XMLPI = 741, + XMLROOT = 742, + XMLSERIALIZE = 743, + XMLTABLE = 744, + YEAR_P = 745, + YES_P = 746, + ZONE = 747, + FORMAT_LA = 748, + NOT_LA = 749, + NULLS_LA = 750, + WITH_LA = 751, + WITHOUT_LA = 752, + MODE_TYPE_NAME = 753, + MODE_PLPGSQL_EXPR = 754, + MODE_PLPGSQL_ASSIGN1 = 755, + MODE_PLPGSQL_ASSIGN2 = 756, + MODE_PLPGSQL_ASSIGN3 = 757, + UMINUS = 758 + }; +#endif +/* Tokens. */ +#define IDENT 258 +#define UIDENT 259 +#define FCONST 260 +#define SCONST 261 +#define USCONST 262 +#define BCONST 263 +#define XCONST 264 +#define Op 265 +#define ICONST 266 +#define PARAM 267 +#define TYPECAST 268 +#define DOT_DOT 269 +#define COLON_EQUALS 270 +#define EQUALS_GREATER 271 +#define LESS_EQUALS 272 +#define GREATER_EQUALS 273 +#define NOT_EQUALS 274 +#define SQL_COMMENT 275 +#define C_COMMENT 276 +#define ABORT_P 277 +#define ABSENT 278 +#define ABSOLUTE_P 279 +#define ACCESS 280 +#define ACTION 281 +#define ADD_P 282 +#define ADMIN 283 +#define AFTER 284 +#define AGGREGATE 285 +#define ALL 286 +#define ALSO 287 +#define ALTER 288 +#define ALWAYS 289 +#define ANALYSE 290 +#define ANALYZE 291 +#define AND 292 +#define ANY 293 +#define ARRAY 294 +#define AS 295 +#define ASC 296 +#define ASENSITIVE 297 +#define ASSERTION 298 +#define ASSIGNMENT 299 +#define ASYMMETRIC 300 +#define ATOMIC 301 +#define AT 302 +#define ATTACH 303 +#define ATTRIBUTE 304 +#define AUTHORIZATION 305 +#define BACKWARD 306 +#define BEFORE 307 +#define BEGIN_P 308 +#define BETWEEN 309 +#define BIGINT 310 +#define BINARY 311 +#define BIT 312 +#define BOOLEAN_P 313 +#define BOTH 314 +#define BREADTH 315 +#define BY 316 +#define CACHE 317 +#define CALL 318 +#define CALLED 319 +#define CASCADE 320 +#define CASCADED 321 +#define CASE 322 +#define CAST 323 +#define CATALOG_P 324 +#define CHAIN 325 +#define CHAR_P 326 +#define CHARACTER 327 +#define CHARACTERISTICS 328 +#define CHECK 329 +#define CHECKPOINT 330 +#define CLASS 331 +#define CLOSE 332 +#define CLUSTER 333 +#define COALESCE 334 +#define COLLATE 335 +#define COLLATION 336 +#define COLUMN 337 +#define COLUMNS 338 +#define COMMENT 339 +#define COMMENTS 340 +#define COMMIT 341 +#define COMMITTED 342 +#define COMPRESSION 343 +#define CONCURRENTLY 344 +#define CONFIGURATION 345 +#define CONFLICT 346 +#define CONNECTION 347 +#define CONSTRAINT 348 +#define CONSTRAINTS 349 +#define CONTENT_P 350 +#define CONTINUE_P 351 +#define CONVERSION_P 352 +#define COPY 353 +#define COST 354 +#define CREATE 355 +#define CROSS 356 +#define CSV 357 +#define CUBE 358 +#define CURRENT_P 359 +#define CURRENT_CATALOG 360 +#define CURRENT_DATE 361 +#define CURRENT_ROLE 362 +#define CURRENT_SCHEMA 363 +#define CURRENT_TIME 364 +#define CURRENT_TIMESTAMP 365 +#define CURRENT_USER 366 +#define CURSOR 367 +#define CYCLE 368 +#define DATA_P 369 +#define DATABASE 370 +#define DAY_P 371 +#define DEALLOCATE 372 +#define DEC 373 +#define DECIMAL_P 374 +#define DECLARE 375 +#define DEFAULT 376 +#define DEFAULTS 377 +#define DEFERRABLE 378 +#define DEFERRED 379 +#define DEFINER 380 +#define DELETE_P 381 +#define DELIMITER 382 +#define DELIMITERS 383 +#define DEPENDS 384 +#define DEPTH 385 +#define DESC 386 +#define DETACH 387 +#define DICTIONARY 388 +#define DISABLE_P 389 +#define DISCARD 390 +#define DISTINCT 391 +#define DO 392 +#define DOCUMENT_P 393 +#define DOMAIN_P 394 +#define DOUBLE_P 395 +#define DROP 396 +#define EACH 397 +#define ELSE 398 +#define ENABLE_P 399 +#define ENCODING 400 +#define ENCRYPTED 401 +#define END_P 402 +#define ENUM_P 403 +#define ESCAPE 404 +#define EVENT 405 +#define EXCEPT 406 +#define EXCLUDE 407 +#define EXCLUDING 408 +#define EXCLUSIVE 409 +#define EXECUTE 410 +#define EXISTS 411 +#define EXPLAIN 412 +#define EXPRESSION 413 +#define EXTENSION 414 +#define EXTERNAL 415 +#define EXTRACT 416 +#define FALSE_P 417 +#define FAMILY 418 +#define FETCH 419 +#define FILTER 420 +#define FINALIZE 421 +#define FIRST_P 422 +#define FLOAT_P 423 +#define FOLLOWING 424 +#define FOR 425 +#define FORCE 426 +#define FOREIGN 427 +#define FORMAT 428 +#define FORWARD 429 +#define FREEZE 430 +#define FROM 431 +#define FULL 432 +#define FUNCTION 433 +#define FUNCTIONS 434 +#define GENERATED 435 +#define GLOBAL 436 +#define GRANT 437 +#define GRANTED 438 +#define GREATEST 439 +#define GROUP_P 440 +#define GROUPING 441 +#define GROUPS 442 +#define HANDLER 443 +#define HAVING 444 +#define HEADER_P 445 +#define HOLD 446 +#define HOUR_P 447 +#define IDENTITY_P 448 +#define IF_P 449 +#define ILIKE 450 +#define IMMEDIATE 451 +#define IMMUTABLE 452 +#define IMPLICIT_P 453 +#define IMPORT_P 454 +#define IN_P 455 +#define INCLUDE 456 +#define INCLUDING 457 +#define INCREMENT 458 +#define INDENT 459 +#define INDEX 460 +#define INDEXES 461 +#define INHERIT 462 +#define INHERITS 463 +#define INITIALLY 464 +#define INLINE_P 465 +#define INNER_P 466 +#define INOUT 467 +#define INPUT_P 468 +#define INSENSITIVE 469 +#define INSERT 470 +#define INSTEAD 471 +#define INT_P 472 +#define INTEGER 473 +#define INTERSECT 474 +#define INTERVAL 475 +#define INTO 476 +#define INVOKER 477 +#define IS 478 +#define ISNULL 479 +#define ISOLATION 480 +#define JOIN 481 +#define JSON 482 +#define JSON_ARRAY 483 +#define JSON_ARRAYAGG 484 +#define JSON_OBJECT 485 +#define JSON_OBJECTAGG 486 +#define KEY 487 +#define KEYS 488 +#define LABEL 489 +#define LANGUAGE 490 +#define LARGE_P 491 +#define LAST_P 492 +#define LATERAL_P 493 +#define LEADING 494 +#define LEAKPROOF 495 +#define LEAST 496 +#define LEFT 497 +#define LEVEL 498 +#define LIKE 499 +#define LIMIT 500 +#define LISTEN 501 +#define LOAD 502 +#define LOCAL 503 +#define LOCALTIME 504 +#define LOCALTIMESTAMP 505 +#define LOCATION 506 +#define LOCK_P 507 +#define LOCKED 508 +#define LOGGED 509 +#define MAPPING 510 +#define MATCH 511 +#define MATCHED 512 +#define MATERIALIZED 513 +#define MAXVALUE 514 +#define MERGE 515 +#define METHOD 516 +#define MINUTE_P 517 +#define MINVALUE 518 +#define MODE 519 +#define MONTH_P 520 +#define MOVE 521 +#define NAME_P 522 +#define NAMES 523 +#define NATIONAL 524 +#define NATURAL 525 +#define NCHAR 526 +#define NEW 527 +#define NEXT 528 +#define NFC 529 +#define NFD 530 +#define NFKC 531 +#define NFKD 532 +#define NO 533 +#define NONE 534 +#define NORMALIZE 535 +#define NORMALIZED 536 +#define NOT 537 +#define NOTHING 538 +#define NOTIFY 539 +#define NOTNULL 540 +#define NOWAIT 541 +#define NULL_P 542 +#define NULLIF 543 +#define NULLS_P 544 +#define NUMERIC 545 +#define OBJECT_P 546 +#define OF 547 +#define OFF 548 +#define OFFSET 549 +#define OIDS 550 +#define OLD 551 +#define ON 552 +#define ONLY 553 +#define OPERATOR 554 +#define OPTION 555 +#define OPTIONS 556 +#define OR 557 +#define ORDER 558 +#define ORDINALITY 559 +#define OTHERS 560 +#define OUT_P 561 +#define OUTER_P 562 +#define OVER 563 +#define OVERLAPS 564 +#define OVERLAY 565 +#define OVERRIDING 566 +#define OWNED 567 +#define OWNER 568 +#define PARALLEL 569 +#define PARAMETER 570 +#define PARSER 571 +#define PARTIAL 572 +#define PARTITION 573 +#define PASSING 574 +#define PASSWORD 575 +#define PLACING 576 +#define PLANS 577 +#define POLICY 578 +#define POSITION 579 +#define PRECEDING 580 +#define PRECISION 581 +#define PRESERVE 582 +#define PREPARE 583 +#define PREPARED 584 +#define PRIMARY 585 +#define PRIOR 586 +#define PRIVILEGES 587 +#define PROCEDURAL 588 +#define PROCEDURE 589 +#define PROCEDURES 590 +#define PROGRAM 591 +#define PUBLICATION 592 +#define QUOTE 593 +#define RANGE 594 +#define READ 595 +#define REAL 596 +#define REASSIGN 597 +#define RECHECK 598 +#define RECURSIVE 599 +#define REF_P 600 +#define REFERENCES 601 +#define REFERENCING 602 +#define REFRESH 603 +#define REINDEX 604 +#define RELATIVE_P 605 +#define RELEASE 606 +#define RENAME 607 +#define REPEATABLE 608 +#define REPLACE 609 +#define REPLICA 610 +#define RESET 611 +#define RESTART 612 +#define RESTRICT 613 +#define RETURN 614 +#define RETURNING 615 +#define RETURNS 616 +#define REVOKE 617 +#define RIGHT 618 +#define ROLE 619 +#define ROLLBACK 620 +#define ROLLUP 621 +#define ROUTINE 622 +#define ROUTINES 623 +#define ROW 624 +#define ROWS 625 +#define RULE 626 +#define SAVEPOINT 627 +#define SCALAR 628 +#define SCHEMA 629 +#define SCHEMAS 630 +#define SCROLL 631 +#define SEARCH 632 +#define SECOND_P 633 +#define SECURITY 634 +#define SELECT 635 +#define SEQUENCE 636 +#define SEQUENCES 637 +#define SERIALIZABLE 638 +#define SERVER 639 +#define SESSION 640 +#define SESSION_USER 641 +#define SET 642 +#define SETS 643 +#define SETOF 644 +#define SHARE 645 +#define SHOW 646 +#define SIMILAR 647 +#define SIMPLE 648 +#define SKIP 649 +#define SMALLINT 650 +#define SNAPSHOT 651 +#define SOME 652 +#define SQL_P 653 +#define STABLE 654 +#define STANDALONE_P 655 +#define START 656 +#define STATEMENT 657 +#define STATISTICS 658 +#define STDIN 659 +#define STDOUT 660 +#define STORAGE 661 +#define STORED 662 +#define STRICT_P 663 +#define STRIP_P 664 +#define SUBSCRIPTION 665 +#define SUBSTRING 666 +#define SUPPORT 667 +#define SYMMETRIC 668 +#define SYSID 669 +#define SYSTEM_P 670 +#define SYSTEM_USER 671 +#define TABLE 672 +#define TABLES 673 +#define TABLESAMPLE 674 +#define TABLESPACE 675 +#define TEMP 676 +#define TEMPLATE 677 +#define TEMPORARY 678 +#define TEXT_P 679 +#define THEN 680 +#define TIES 681 +#define TIME 682 +#define TIMESTAMP 683 +#define TO 684 +#define TRAILING 685 +#define TRANSACTION 686 +#define TRANSFORM 687 +#define TREAT 688 +#define TRIGGER 689 +#define TRIM 690 +#define TRUE_P 691 +#define TRUNCATE 692 +#define TRUSTED 693 +#define TYPE_P 694 +#define TYPES_P 695 +#define UESCAPE 696 +#define UNBOUNDED 697 +#define UNCOMMITTED 698 +#define UNENCRYPTED 699 +#define UNION 700 +#define UNIQUE 701 +#define UNKNOWN 702 +#define UNLISTEN 703 +#define UNLOGGED 704 +#define UNTIL 705 +#define UPDATE 706 +#define USER 707 +#define USING 708 +#define VACUUM 709 +#define VALID 710 +#define VALIDATE 711 +#define VALIDATOR 712 +#define VALUE_P 713 +#define VALUES 714 +#define VARCHAR 715 +#define VARIADIC 716 +#define VARYING 717 +#define VERBOSE 718 +#define VERSION_P 719 +#define VIEW 720 +#define VIEWS 721 +#define VOLATILE 722 +#define WHEN 723 +#define WHERE 724 +#define WHITESPACE_P 725 +#define WINDOW 726 +#define WITH 727 +#define WITHIN 728 +#define WITHOUT 729 +#define WORK 730 +#define WRAPPER 731 +#define WRITE 732 +#define XML_P 733 +#define XMLATTRIBUTES 734 +#define XMLCONCAT 735 +#define XMLELEMENT 736 +#define XMLEXISTS 737 +#define XMLFOREST 738 +#define XMLNAMESPACES 739 +#define XMLPARSE 740 +#define XMLPI 741 +#define XMLROOT 742 +#define XMLSERIALIZE 743 +#define XMLTABLE 744 +#define YEAR_P 745 +#define YES_P 746 +#define ZONE 747 +#define FORMAT_LA 748 +#define NOT_LA 749 +#define NULLS_LA 750 +#define WITH_LA 751 +#define WITHOUT_LA 752 +#define MODE_TYPE_NAME 753 +#define MODE_PLPGSQL_EXPR 754 +#define MODE_PLPGSQL_ASSIGN1 755 +#define MODE_PLPGSQL_ASSIGN2 756 +#define MODE_PLPGSQL_ASSIGN3 757 +#define UMINUS 758 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 234 "gram.y" +{ + core_YYSTYPE core_yystype; + /* these fields must match core_YYSTYPE: */ + int ival; + char *str; + const char *keyword; + + char chr; + bool boolean; + JoinType jtype; + DropBehavior dbehavior; + OnCommitAction oncommit; + List *list; + Node *node; + ObjectType objtype; + TypeName *typnam; + FunctionParameter *fun_param; + FunctionParameterMode fun_param_mode; + ObjectWithArgs *objwithargs; + DefElem *defelt; + SortBy *sortby; + WindowDef *windef; + JoinExpr *jexpr; + IndexElem *ielem; + StatsElem *selem; + Alias *alias; + RangeVar *range; + IntoClause *into; + WithClause *with; + InferClause *infer; + OnConflictClause *onconflict; + A_Indices *aind; + ResTarget *target; + struct PrivTarget *privtarget; + AccessPriv *accesspriv; + struct ImportQual *importqual; + InsertStmt *istmt; + VariableSetStmt *vsetstmt; + PartitionElem *partelem; + PartitionSpec *partspec; + PartitionBoundSpec *partboundspec; + RoleSpec *rolespec; + PublicationObjSpec *publicationobjectspec; + struct SelectLimit *selectlimit; + SetQuantifier setquantifier; + struct GroupClause *groupclause; + MergeWhenClause *mergewhen; + struct KeyActions *keyactions; + struct KeyAction *keyaction; +} +/* Line 1529 of yacc.c. */ +#line 1106 "gram.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +} YYLTYPE; +# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif + + diff --git a/src/postgres/include/parser/gramparse.h b/src/postgres/include/gramparse.h similarity index 91% rename from src/postgres/include/parser/gramparse.h rename to src/postgres/include/gramparse.h index d9d4ac57..1b9fef3e 100644 --- a/src/postgres/include/parser/gramparse.h +++ b/src/postgres/include/gramparse.h @@ -4,14 +4,14 @@ * Shared definitions for the "raw" parser (flex and bison phases only) * * NOTE: this file is only meant to be included in the core parsing files, - * ie, parser.c, gram.y, scan.l, and src/common/keywords.c. + * i.e., parser.c, gram.y, and scan.l. * Definitions that are needed outside the core parser should be in parser.h. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * src/include/parser/gramparse.h + * src/backend/parser/gramparse.h * *------------------------------------------------------------------------- */ @@ -26,7 +26,7 @@ * NB: include gram.h only AFTER including scanner.h, because scanner.h * is what #defines YYLTYPE. */ -#include "parser/gram.h" +#include "gram.h" /* * The YY_EXTRA data that a flex scanner allows us to pass around. Private diff --git a/src/postgres/include/jit/jit.h b/src/postgres/include/jit/jit.h index d1940332..14f2e36b 100644 --- a/src/postgres/include/jit/jit.h +++ b/src/postgres/include/jit/jit.h @@ -2,7 +2,7 @@ * jit.h * Provider independent JIT infrastructure. * - * Copyright (c) 2016-2022, PostgreSQL Global Development Group + * Copyright (c) 2016-2023, PostgreSQL Global Development Group * * src/include/jit/jit.h * @@ -63,7 +63,7 @@ typedef struct JitContext typedef struct JitProviderCallbacks JitProviderCallbacks; -extern void _PG_jit_provider_init(JitProviderCallbacks *cb); +extern PGDLLEXPORT void _PG_jit_provider_init(JitProviderCallbacks *cb); typedef void (*JitProviderInit) (JitProviderCallbacks *cb); typedef void (*JitProviderResetAfterErrorCB) (void); typedef void (*JitProviderReleaseContextCB) (JitContext *context); diff --git a/src/postgres/include/kwlist_d.h b/src/postgres/include/kwlist_d.h index 568dc8a6..e8af2602 100644 --- a/src/postgres/include/kwlist_d.h +++ b/src/postgres/include/kwlist_d.h @@ -3,7 +3,7 @@ * kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -23,6 +23,7 @@ static const char ScanKeywords_kw_string[] = "abort\0" + "absent\0" "absolute\0" "access\0" "action\0" @@ -172,6 +173,7 @@ static const char ScanKeywords_kw_string[] = "for\0" "force\0" "foreign\0" + "format\0" "forward\0" "freeze\0" "from\0" @@ -202,6 +204,7 @@ static const char ScanKeywords_kw_string[] = "include\0" "including\0" "increment\0" + "indent\0" "index\0" "indexes\0" "inherit\0" @@ -224,7 +227,13 @@ static const char ScanKeywords_kw_string[] = "isnull\0" "isolation\0" "join\0" + "json\0" + "json_array\0" + "json_arrayagg\0" + "json_object\0" + "json_objectagg\0" "key\0" + "keys\0" "label\0" "language\0" "large\0" @@ -364,6 +373,7 @@ static const char ScanKeywords_kw_string[] = "rows\0" "rule\0" "savepoint\0" + "scalar\0" "schema\0" "schemas\0" "scroll\0" @@ -406,6 +416,7 @@ static const char ScanKeywords_kw_string[] = "symmetric\0" "sysid\0" "system\0" + "system_user\0" "table\0" "tables\0" "tablesample\0" @@ -486,588 +497,601 @@ static const char ScanKeywords_kw_string[] = static const uint16 ScanKeywords_kw_offsets[] = { 0, 6, - 15, + 13, 22, 29, - 33, - 39, - 45, - 55, - 59, - 64, - 70, + 36, + 40, + 46, + 52, + 62, + 66, + 71, 77, - 85, - 93, - 97, - 101, - 107, - 110, + 84, + 92, + 100, + 104, + 108, 114, - 125, - 135, - 146, - 157, - 160, + 117, + 121, + 132, + 142, + 153, + 164, 167, 174, - 184, - 198, - 207, + 181, + 191, + 205, 214, - 220, - 228, + 221, + 227, 235, 242, - 246, - 254, - 259, - 267, - 270, - 276, - 281, + 249, + 253, + 261, + 266, + 274, + 277, + 283, 288, - 296, - 305, - 310, - 315, - 323, - 329, - 334, - 344, - 360, - 366, - 377, - 383, - 389, - 397, - 406, - 414, - 424, + 295, + 303, + 312, + 317, + 322, + 330, + 336, + 341, + 351, + 367, + 373, + 384, + 390, + 396, + 404, + 413, + 421, 431, - 439, - 447, - 456, + 438, + 446, + 454, 463, - 473, - 485, - 498, - 512, - 521, - 532, - 543, - 555, - 563, - 572, - 583, - 588, - 593, + 470, + 480, + 492, + 505, + 519, + 528, + 539, + 550, + 562, + 570, + 579, + 590, + 595, 600, - 606, - 610, - 615, - 623, - 639, - 652, - 665, - 680, - 693, - 711, - 724, + 607, + 613, + 617, + 622, + 630, + 646, + 659, + 672, + 687, + 700, + 718, 731, - 737, - 742, - 751, - 755, - 766, - 770, - 778, - 786, - 794, - 803, - 814, - 823, - 831, + 738, + 744, + 749, + 758, + 762, + 773, + 777, + 785, + 793, + 801, + 810, + 821, + 830, 838, - 848, - 859, - 867, - 873, - 878, + 845, + 855, + 866, + 874, + 880, 885, - 896, - 904, - 912, - 921, - 924, - 933, + 892, + 903, + 911, + 919, + 928, + 931, 940, 947, - 952, - 957, - 962, + 954, + 959, + 964, 969, - 978, - 988, - 992, - 997, + 976, + 985, + 995, + 999, 1004, - 1010, + 1011, 1017, - 1025, - 1035, - 1045, - 1053, + 1024, + 1032, + 1042, + 1052, 1060, - 1068, - 1079, - 1089, - 1098, - 1106, - 1112, + 1067, + 1075, + 1086, + 1096, + 1105, + 1113, 1119, - 1125, + 1126, 1132, - 1141, - 1147, - 1153, - 1163, - 1167, - 1173, - 1181, - 1189, - 1196, - 1201, - 1206, + 1139, + 1148, + 1154, + 1160, + 1170, + 1174, + 1180, + 1188, + 1195, + 1203, + 1210, 1215, - 1225, - 1235, - 1242, - 1248, + 1220, + 1229, + 1239, + 1249, 1256, - 1265, - 1271, - 1280, - 1287, - 1295, - 1302, + 1262, + 1270, + 1279, + 1285, + 1294, + 1301, 1309, - 1314, - 1319, + 1316, + 1323, 1328, - 1331, - 1337, - 1347, - 1357, - 1366, - 1373, - 1376, - 1384, - 1394, - 1404, - 1410, + 1333, + 1342, + 1345, + 1351, + 1361, + 1371, + 1380, + 1387, + 1390, + 1398, + 1408, 1418, - 1426, - 1435, - 1445, - 1452, - 1458, - 1464, - 1470, - 1482, - 1489, - 1497, - 1501, - 1509, - 1519, - 1528, - 1533, - 1541, - 1544, - 1551, - 1561, - 1566, - 1570, - 1576, - 1585, - 1591, - 1596, - 1604, - 1612, - 1622, - 1628, - 1633, - 1639, + 1425, + 1431, + 1439, + 1447, + 1456, + 1466, + 1473, + 1479, + 1485, + 1491, + 1503, + 1510, + 1518, + 1522, + 1530, + 1540, + 1549, + 1554, + 1562, + 1565, + 1572, + 1582, + 1587, + 1592, + 1603, + 1617, + 1629, 1644, - 1650, - 1657, - 1662, + 1648, + 1653, + 1659, 1668, - 1678, - 1693, - 1702, - 1707, - 1714, - 1721, - 1729, - 1735, - 1743, - 1756, - 1765, - 1771, - 1778, + 1674, + 1679, + 1687, + 1695, + 1705, + 1711, + 1716, + 1722, + 1727, + 1733, + 1740, + 1745, + 1751, + 1761, + 1776, 1785, - 1794, - 1799, - 1805, - 1810, - 1815, - 1821, - 1830, - 1838, - 1844, + 1790, + 1797, + 1804, + 1812, + 1818, + 1826, + 1839, 1848, - 1853, - 1857, + 1854, 1861, - 1866, - 1871, - 1874, - 1879, - 1889, - 1900, + 1868, + 1877, + 1882, + 1888, + 1893, + 1898, 1904, - 1912, - 1919, + 1913, + 1921, 1927, - 1934, - 1939, - 1946, - 1952, - 1960, - 1967, - 1970, - 1974, - 1981, - 1986, - 1990, - 1993, - 1998, - 2007, - 2014, + 1931, + 1936, + 1940, + 1944, + 1949, + 1954, + 1957, + 1962, + 1972, + 1983, + 1987, + 1995, + 2002, + 2010, + 2017, 2022, - 2025, - 2031, - 2042, - 2049, + 2029, + 2035, + 2043, + 2050, 2053, - 2059, + 2057, 2064, + 2069, 2073, + 2076, 2081, - 2092, - 2098, - 2104, - 2113, - 2123, - 2130, - 2138, - 2148, + 2090, + 2097, + 2105, + 2108, + 2114, + 2125, + 2132, + 2136, + 2142, + 2147, 2156, - 2165, - 2173, - 2179, - 2186, - 2195, - 2205, - 2215, - 2223, - 2232, - 2241, - 2249, - 2255, - 2266, - 2277, - 2287, + 2164, + 2175, + 2181, + 2187, + 2196, + 2206, + 2213, + 2221, + 2231, + 2239, + 2248, + 2256, + 2262, + 2269, + 2278, + 2288, 2298, 2306, - 2318, + 2315, 2324, - 2330, - 2335, - 2340, + 2332, + 2338, 2349, - 2357, - 2367, - 2371, - 2382, - 2394, - 2402, - 2410, - 2419, - 2427, - 2434, - 2445, - 2453, - 2461, - 2467, - 2475, - 2484, - 2491, - 2501, - 2509, - 2516, - 2522, - 2527, + 2360, + 2370, + 2381, + 2389, + 2401, + 2407, + 2413, + 2418, + 2423, + 2432, + 2440, + 2450, + 2454, + 2465, + 2477, + 2485, + 2493, + 2502, + 2510, + 2517, + 2528, 2536, - 2543, - 2551, - 2560, - 2564, - 2569, + 2544, + 2550, + 2558, + 2567, 2574, 2584, - 2591, + 2592, 2599, - 2606, - 2613, - 2620, - 2629, - 2636, - 2645, - 2655, - 2668, - 2675, - 2683, + 2605, + 2610, + 2619, + 2626, + 2634, + 2643, + 2647, + 2652, + 2657, + 2667, + 2674, + 2681, + 2689, 2696, - 2700, - 2706, - 2711, - 2717, - 2722, - 2730, - 2737, - 2742, - 2751, - 2760, + 2703, + 2710, + 2719, + 2726, + 2735, + 2745, + 2758, 2765, - 2769, - 2776, - 2787, - 2793, - 2803, - 2814, + 2773, + 2786, + 2790, + 2796, + 2801, + 2807, + 2812, 2820, 2827, - 2835, - 2842, - 2849, + 2832, + 2841, + 2850, 2855, - 2868, - 2878, - 2886, - 2896, - 2902, - 2909, - 2915, - 2922, - 2934, + 2859, + 2866, + 2877, + 2883, + 2893, + 2904, + 2910, + 2917, + 2925, + 2932, + 2939, 2945, - 2950, - 2959, - 2969, - 2974, - 2979, - 2984, - 2989, + 2958, + 2968, + 2976, + 2986, + 2992, 2999, - 3002, 3011, - 3023, - 3033, - 3039, + 3017, + 3024, + 3036, 3047, 3052, - 3057, - 3066, - 3074, - 3079, - 3085, - 3093, - 3103, - 3115, - 3127, - 3133, - 3140, - 3148, - 3157, - 3166, - 3172, - 3179, - 3184, - 3190, - 3197, - 3203, - 3212, - 3222, - 3228, + 3061, + 3071, + 3076, + 3081, + 3086, + 3091, + 3101, + 3104, + 3113, + 3125, + 3135, + 3141, + 3149, + 3154, + 3159, + 3168, + 3176, + 3181, + 3187, + 3195, + 3205, + 3217, + 3229, 3235, - 3243, - 3252, - 3260, + 3242, + 3250, + 3259, 3268, - 3276, + 3274, 3281, - 3287, - 3296, - 3301, - 3307, - 3318, - 3325, + 3286, + 3292, + 3299, + 3305, + 3314, + 3324, 3330, 3337, 3345, - 3350, - 3358, - 3364, - 3368, - 3382, - 3392, + 3354, + 3362, + 3370, + 3378, + 3383, + 3389, + 3398, 3403, - 3413, - 3423, - 3437, - 3446, + 3409, + 3420, + 3427, + 3432, + 3439, + 3447, 3452, 3460, - 3473, - 3482, - 3487, - 3491, + 3466, + 3470, + 3484, + 3494, + 3505, + 3515, + 3525, + 3539, + 3548, + 3554, + 3562, + 3575, + 3584, + 3589, + 3593, }; -#define SCANKEYWORDS_NUM_KEYWORDS 460 +#define SCANKEYWORDS_NUM_KEYWORDS 471 static int ScanKeywords_hash_func(const void *key, size_t keylen) { - static const int16 h[921] = { - 207, -201, 0, 223, -255, 28, 32767, -86, - 32767, 0, -35, -938, 32767, 32767, -13, 32767, - 450, 62, 42, 327, 309, -13, 0, 114, - 32767, -230, 135, -12, 424, 191, -114, 32767, - 45, 440, 673, 0, 0, 224, 286, 32767, - 32767, 16, 5, 0, 32767, 32767, -349, 32767, - -43, 32767, 32767, 32767, 32767, 32767, 0, 32767, - 32767, 262, 573, -75, 32767, 32767, 1113, 88, - 111, 32767, 7, -41, 223, 32767, 478, 275, - 32767, 0, 245, 1004, 59, 32767, 322, 256, - -130, 32767, 0, 378, 606, 994, -59, 32767, - -219, 32767, 489, 32767, -328, 32767, 88, 32767, - -228, 0, 1181, -705, 32767, 32767, 149, 32767, - 32767, 177, 0, 0, 32767, 32767, 32767, 473, - 142, 167, 130, 345, 461, 50, 426, 32767, - 32767, -104, 333, 32767, 5, 32767, 32767, 115, - 0, 34, 32767, -178, 32767, 32767, 0, 32767, - 32767, 32767, 429, 573, 32767, 3, 32767, 0, - 237, 32767, 324, 379, 32767, 409, 32767, 32767, - 362, -707, 638, 32767, 32767, -18, 23, 127, - 32767, 32767, -55, 0, 254, 32767, 0, 32767, - -16, 389, 32767, -287, 0, -43, 32767, 0, - 32767, 157, 23, 438, 907, 0, 32767, -213, - 299, 32767, 0, 32767, 32767, 229, 32767, 32767, - 32767, 32767, 186, 32767, 81, 32767, -707, 525, - 732, 515, 32767, 32767, 0, 32767, 32767, 126, - 32767, 32767, 0, 443, 32767, 102, -148, 188, - 393, 32767, 383, 32767, 212, 247, 32767, 389, - 54, -258, 0, 6, -32, 32767, 261, -190, - 112, 32767, 32767, 32767, 0, 32767, 0, 32767, - 32767, 215, 32767, 196, 32767, 445, 32767, 32767, - -456, -66, 161, 32767, 617, -484, 230, 32767, - 1078, 77, 124, 32767, 32767, -44, 32767, -271, - 148, 20, 344, 83, 32767, 32767, 32767, 108, - -768, 269, 32767, 32767, -66, 0, 32767, 32767, - 524, 433, 32767, 32767, 0, 32767, -564, -138, - 0, 4, 463, 354, 32767, 57, 0, 32767, - 552, 351, 32767, 32767, 0, 32767, 32767, 32767, - 65, 32767, 32767, 285, 158, 32767, 32767, -931, - 281, 32767, 32767, 32767, 32767, -357, -115, 32767, - 294, 435, 2, 32767, 305, 32767, 35, 434, - 32767, 172, 0, 32767, 326, -597, 263, 2, - 32767, -111, -79, 32767, 32767, -717, 198, 32767, - -715, 407, 32767, 32767, 159, 214, -135, 379, - 672, 656, 278, 0, 32767, 32767, 32767, 1109, - 830, -173, 32767, 32767, 334, 32767, 32767, 32767, - 32767, -447, 270, 61, 281, 32767, 0, 116, - 32767, 99, -302, 32767, 32767, 0, 39, 32767, - -61, 276, -45, 144, -121, 32767, 0, 198, - 325, 72, 294, -174, -218, 73, -489, 32767, - -372, 32767, 32767, 360, 345, 283, -453, 32767, - 32767, 32767, 283, 806, 0, 32767, 32767, 32767, - -65, 0, 32767, 8, 32767, 150, 32767, -251, - 132, 0, 32767, 32767, 272, 32767, 15, -417, - 889, -77, 0, 0, 16, 32767, 32767, 32767, - 94, 32767, 32767, 32767, 32767, 219, 32767, -416, - 391, 31, 208, 396, 0, 143, -37, 32767, - 252, 0, 32767, 185, 32767, -140, 0, 32767, - 456, -258, 32767, 381, 32767, 393, 32767, 32767, - 32767, 32767, 1160, 32767, 32767, 384, 201, 197, - 32767, 0, 131, 469, 89, 32767, 397, 0, - 32767, 211, 32767, 102, 138, 32767, -379, 264, - 32767, 386, 6, 32767, 32767, 162, 53, -81, - -135, 59, 338, 230, 0, 0, 19, 8, - 32767, 785, 423, 0, 257, 301, 523, -398, - 421, 0, 32767, 0, 32767, 32767, 0, -758, - 0, 562, 32767, 0, 32767, 32767, -213, 32767, - 28, 32767, -696, 173, -413, 352, -223, 472, - 275, 316, 32767, -186, 323, 32767, -163, 221, - 246, 29, 222, -1042, 0, 33, 184, 32767, - 32767, 0, 32767, 32767, 805, 32767, 305, 8, - 226, 84, 32767, 379, 0, 32767, 134, 82, - 32767, 399, 32767, 0, 0, 617, 32767, 32767, - 31, 0, 256, 0, 32767, 103, 302, 32767, - 208, 32767, -56, 0, -146, 32767, 243, 32767, - 0, 32767, 32767, 32767, 32767, 784, 32767, 32767, - 0, 197, 32767, 32767, 914, 155, -50, 32767, - 32767, 32767, 292, 1122, 32767, 0, 32767, -167, - 32767, 139, 113, 113, 32767, 410, 32767, 459, - 331, 0, 295, 0, 0, 483, -345, 32767, - 32767, -456, 32767, 32767, 0, 32767, 304, 32767, - 138, 32767, 520, 326, 412, -237, 453, 32767, - 50, 328, 32767, 32767, 0, -116, 0, -754, - 0, -149, 32767, 32767, 28, -398, 0, 32767, - 32767, -89, 353, -64, 51, 139, 32767, 32767, - 66, 32767, 314, 209, 1218, 32767, 32767, 325, - 0, 268, 32767, 32767, 446, 32767, 0, 32767, - -115, 32767, 32767, 32767, 239, 344, 32767, 5, - 32767, 0, -314, 0, -327, 32767, 181, 32767, - 107, 393, 0, 32767, 12, 582, 119, 32767, - -751, 32767, -578, 0, 349, 0, 32767, 404, - 307, 85, 32767, 452, 53, -307, 0, 0, - 32767, 32767, 664, 32767, 32767, 32767, -44, 32767, - 0, 259, 366, 32767, 0, 0, 32767, -97, - -131, 0, 32767, 178, 32767, 779, -231, -73, - 0, 0, 145, 487, 223, 0, 0, 86, - 32767, 0, 32767, 192, 321, 32767, 32767, 32767, - -360, -140, 32767, 32767, 32767, 507, 32767, 247, - 416, 32767, 0, 32767, 68, 98, 32767, 0, - -268, 0, 32767, 204, 32767, 0, 739, 112, - -283, 1180, 193, 32767, 32767, 220, 0, 0, - 0, 0, 0, 32767, 0, 32767, 32767, 32767, - 32767, 206, -374, 0, 315, 32767, 0, 0, - -37, -363, 32767, 32767, 258, 32767, 459, 32767, - 128, -1018, 374, 32767, 0, 32767, 0, -602, - 32767, 346, 76, 363, 387, 296, -186, 32, - 21, 32767, 32767, 32767, 32767, 32767, 32767, 32767, - 0, 32767, 0, 165, 32767, 32767, 32767, 0, - 790, -10, 32767, 32767, 32767, 32767, 0, 32767, - 0, 228, 32767, -993, 32, -878, -154, 32767, - 72, 369, 411, 585, 32767, 32767, 124, 32767, - -253, -177, 294, 32767, 335, 0, 9, 0, - 32767, 442, 0, 0, 32767, 449, 448, 0, - 0, 32767, 0, 593, 0, 32767, 242, 432, - 0, 32767, 0, 32767, 32767, 1360, 0, 32767, - 238 + static const int16 h[943] = { + 543, -186, 201, 0, 32767, 32767, 32767, 32767, + 221, -207, 32767, 0, 135, 283, 32767, 454, + 14, 79, 32767, 32767, 77, 32767, 102, 160, + 0, 32767, 151, 32767, 30, 392, -322, 452, + 32767, 0, 32767, 0, 0, 32767, 32767, 32767, + 234, 32767, 0, 32767, 0, 631, 32767, 368, + 80, 0, 0, -115, 32767, 285, 32767, 423, + 0, 32767, 155, 229, 32767, 126, 291, 165, + -22, 400, 327, 32767, 32767, 32767, 32767, -399, + 0, 406, 32767, 210, 1102, -203, 32767, 32767, + 32767, -944, 0, -188, 32767, 32767, 0, 347, + 32767, 0, 559, 316, 133, 32767, 202, 32767, + 305, 0, 32767, -94, 32767, 0, 32767, -222, + 32767, 138, 32767, -52, 32767, 32767, 279, 69, + -136, 0, 32767, 32767, 189, 32767, 32767, 88, + 0, 32767, 32767, 274, 32767, 514, 769, 248, + 32767, 32767, 32767, 32767, 32767, 32767, 0, 81, + 8, -29, 32767, 32767, 32767, -174, 258, 0, + 465, 211, 32767, 0, -229, 32767, -191, 32767, + 1263, 48, 32767, 343, 0, 58, 0, 32767, + 32767, 855, 0, 415, 0, -217, 32767, 1195, + 32767, 32767, 166, 32767, 42, 262, -736, 0, + 32767, 32767, 418, 178, 122, 32767, 46, 32767, + 32767, 32767, 229, 443, 32767, 32767, 250, 32767, + -300, 0, 32767, 1153, 32767, 108, 32767, -462, + 266, 32767, 478, -220, 235, 32767, 32767, -127, + 32767, 32767, 32767, 427, -231, 156, 32767, 0, + 0, 148, -218, 142, 73, 420, 32767, 32767, + 523, 32767, -36, 32767, 32767, 467, 844, -415, + 32767, 32767, -148, 179, 361, 32767, 151, 0, + 0, 32767, 145, 32767, 248, 110, 29, 125, + 282, 32767, -36, 43, 32767, 1125, 32767, 530, + 251, 519, 191, 0, 32767, -34, -502, 313, + 462, 845, 32767, 32767, -255, 412, 32767, 78, + 0, 32767, 444, 161, 0, 32767, 308, 32767, + -273, 400, 32767, 296, 32767, 32767, 72, 32767, + 32767, 34, 32767, 364, 151, -63, 4, 229, + 0, -276, 32767, 32767, 32767, 32767, -406, 32767, + 203, 32767, 140, 187, 160, 32767, 286, 0, + 32767, 32767, -88, 0, 100, -361, 32767, 9, + 0, -456, 32767, -37, -404, 32767, -969, 32767, + 371, 95, 0, 703, -31, 263, 373, -745, + 507, 14, 32767, -159, 0, 32767, 47, 299, + -126, 0, 32767, 83, 32767, 32767, 420, 236, + 32767, 32767, 0, 310, 89, 233, 32767, 93, + 32767, 0, 816, 60, 301, 211, 193, 0, + 452, -107, -403, -242, 353, 18, 32767, 32767, + 32767, 243, 104, 32767, 32767, 32767, -305, 32767, + -1048, 54, 0, 383, 32767, 32767, 32767, 226, + 319, 0, 32767, 32767, 32767, -130, 537, 32767, + 0, -206, 240, 696, 121, 32767, 180, 164, + 32767, 390, 185, 32767, 220, 545, 29, 32767, + 0, 32767, 32767, 1120, -163, 32767, 32767, 32767, + -368, 136, 445, 171, 233, 32767, 73, 32767, + 92, 32767, 0, 32767, 0, 208, 354, 32767, + 54, 32767, 32767, -246, -93, 389, 32767, 32767, + 32767, 32767, 50, 32767, 32767, 308, 32767, -278, + 0, 32767, 32767, -1172, 32767, 8, 32767, 0, + 32767, 341, 304, 242, -174, -92, 76, 419, + 32767, 87, 32767, -262, 32767, 32767, 32767, 109, + 200, 0, 32767, 0, 85, 530, 32767, -316, + 32767, 0, -286, 32767, 193, 268, 32767, 32767, + 278, 32767, 32767, 155, 445, 95, -310, 32767, + 207, -56, 32767, 32767, 0, -127, 232, -283, + 103, 32767, 1, 0, 32767, 32767, -485, 350, + 79, -56, -354, 32767, 121, 24, 81, 20, + 325, 40, 248, 32767, 32767, 32767, 358, 32767, + -56, 32767, 0, 174, -28, -301, -92, 32767, + 114, 295, 32767, 363, -355, 32767, 290, 0, + 32767, 32767, 32767, 122, 55, -142, 32767, 50, + 32767, 32767, 152, 571, 1397, 0, 472, -448, + 185, 140, 228, 435, 0, 32767, 32767, 414, + 32767, 379, 92, 185, 23, 299, 32767, 32767, + 0, 32767, 32767, 32767, 306, 439, -198, 219, + 340, 32767, 416, 0, -123, 377, 32767, 32767, + 0, 32767, 670, -670, 339, 32767, 32767, 32767, + 0, -256, 70, 514, 331, 0, 302, 469, + 0, 370, 32767, 32767, 42, 255, 212, 0, + 322, 277, 32767, -163, 32767, 216, 32767, 32767, + 0, 32767, 190, 32767, 32767, 0, 32767, 0, + -409, 1366, 32767, 32767, 32767, 193, 32767, 325, + 32767, 0, 142, 466, 32767, 32767, 32767, 113, + 32767, 32767, 62, 0, -62, 113, -90, 34, + -256, 32767, 32767, -936, 32767, 32767, 32767, 0, + -64, 0, -34, 451, 290, 108, 32767, 276, + 842, 0, 556, -153, 32767, 412, -168, 32767, + 32767, 1331, 407, 234, -60, 115, 457, -73, + 502, 772, 32767, 33, 404, -925, 32767, 32767, + 421, -123, 32767, 32767, 32767, 0, 0, 32767, + 32767, 32767, 429, 0, 3, 769, -81, 306, + 64, 32767, 192, 96, 0, 63, 44, 32767, + 32767, 32767, 32767, 0, 284, 32767, 575, 32767, + 32767, 12, 32767, 516, 116, 32767, 32767, 150, + 442, 134, 32767, 198, -45, 249, 40, 373, + 32767, 0, 32767, 32767, 0, 0, 352, 32767, + 117, 32767, 426, 0, 0, 32767, 32767, 32767, + 32767, -92, 32767, -442, 32767, 269, 32767, 32767, + 32767, 429, 32767, 0, 32767, 0, 143, 32767, + 508, -66, 32767, 280, 32767, 39, 162, 32767, + 32767, 0, 32767, 31, 32767, 32767, 32767, 0, + 32767, 257, -90, -249, 224, 272, 32767, 32767, + 313, -467, 214, 0, -85, 32767, 48, 0, + 32767, -336, 202, 0, 447, 90, 264, 32767, + 32767, 0, 101, 32767, 32767, 32767, 0, 32767, + 32767, 227, -1093, 32767, 0, 32767, 27, 174, + 32767, 7, 32767, -621, 146, 32767, 32767, 32767, + 854, 0, 32767, 161, 0, 137, 32767, 32767, + 32767, 32767, 0, 391, 219, 276, 32767, 168, + 32767, 32767, 0, 32767, 32767, 32767, 1, -4, + 32767, 0, 293, 0, 374, 256, 0, 0, + 32767, 355, 212, 404, 0, 186, 32767, 0, + 359, 32767, 32767, 172, 32767, 32767, -131, 0, + 402, 0, 56, 32767, 462, 389, 82, 0, + 32767, 0, 32767, 0, 32767, 32767, 32767, 32767, + 106, 425, -160, 31, 32767, 55, 0, 0, + 32767, 32767, 430, 1224, 179, -179, 0, 397, + 32767, 0, 0, 0, -60, 47, 32767, 396, + 32767, 326, 383, 369, 32767, 368, 32767 }; const unsigned char *k = (const unsigned char *) key; @@ -1079,9 +1103,9 @@ ScanKeywords_hash_func(const void *key, size_t keylen) unsigned char c = *k++ | 0x20; a = a * 257 + c; - b = b * 127 + c; + b = b * 31 + c; } - return h[a % 921] + h[b % 921]; + return h[a % 943] + h[b % 943]; } const ScanKeywordList ScanKeywords = { diff --git a/src/postgres/include/lib/dshash.h b/src/postgres/include/lib/dshash.h index 28f8db2e..ece55521 100644 --- a/src/postgres/include/lib/dshash.h +++ b/src/postgres/include/lib/dshash.h @@ -3,7 +3,7 @@ * dshash.h * Concurrent hash tables backed by dynamic shared memory areas. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -23,6 +23,9 @@ typedef struct dshash_table dshash_table; /* A handle for a dshash_table which can be shared with other processes. */ typedef dsa_pointer dshash_table_handle; +/* Sentinel value to use for invalid dshash_table handles. */ +#define DSHASH_HANDLE_INVALID ((dshash_table_handle) InvalidDsaPointer) + /* The type for hash values. */ typedef uint32 dshash_hash; diff --git a/src/postgres/include/lib/ilist.h b/src/postgres/include/lib/ilist.h index 7ab0888f..095107a9 100644 --- a/src/postgres/include/lib/ilist.h +++ b/src/postgres/include/lib/ilist.h @@ -10,20 +10,36 @@ * the link fields in the remainder would be wasted space. But usually, * it saves space to not have separately-allocated list nodes.) * + * The doubly-linked list comes in 2 forms. dlist_head defines a head of a + * doubly-linked list of dlist_nodes, whereas dclist_head defines the head of + * a doubly-linked list of dlist_nodes with an additional 'count' field to + * keep track of how many items are contained within the given list. For + * simplicity, dlist_head and dclist_head share the same node and iterator + * types. The functions to manipulate a dlist_head always have a name + * starting with "dlist", whereas functions to manipulate a dclist_head have a + * name starting with "dclist". dclist_head comes with an additional function + * (dclist_count) to return the number of entries in the list. dclists are + * able to store a maximum of PG_UINT32_MAX elements. It is up to the caller + * to ensure no more than this many items are added to a dclist. + * * None of the functions here allocate any memory; they just manipulate - * externally managed memory. The APIs for singly and doubly linked lists - * are identical as far as capabilities of both allow. + * externally managed memory. With the exception doubly-linked count lists + * providing the ability to obtain the number of items in the list, the APIs + * for singly and both doubly linked lists are identical as far as + * capabilities of both allow. * * Each list has a list header, which exists even when the list is empty. * An empty singly-linked list has a NULL pointer in its header. - * There are two kinds of empty doubly linked lists: those that have been - * initialized to NULL, and those that have been initialized to circularity. + * + * For both doubly-linked list types, there are two valid ways to represent an + * empty list. The head's 'next' pointer can either be NULL or the head's + * 'next' and 'prev' links can both point back to the list head (circular). * (If a dlist is modified and then all its elements are deleted, it will be - * in the circular state.) We prefer circular dlists because there are some + * in the circular state.). We prefer circular dlists because there are some * operations that can be done without branches (and thus faster) on lists * that use circular representation. However, it is often convenient to * initialize list headers to zeroes rather than setting them up with an - * explicit initialization function, so we also allow the other case. + * explicit initialization function, so we also allow the NULL initialization. * * EXAMPLES * @@ -96,7 +112,7 @@ * } * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -146,15 +162,17 @@ typedef struct dlist_head /* - * Doubly linked list iterator. + * Doubly linked list iterator type for dlist_head and dclist_head types. * - * Used as state in dlist_foreach() and dlist_reverse_foreach(). To get the - * current element of the iteration use the 'cur' member. + * Used as state in dlist_foreach() and dlist_reverse_foreach() (and the + * dclist variant thereof). + * + * To get the current element of the iteration use the 'cur' member. * * Iterations using this are *not* allowed to change the list while iterating! * * NB: We use an extra "end" field here to avoid multiple evaluations of - * arguments in the dlist_foreach() macro. + * arguments in the dlist_foreach() and dclist_foreach() macros. */ typedef struct dlist_iter { @@ -163,10 +181,12 @@ typedef struct dlist_iter } dlist_iter; /* - * Doubly linked list iterator allowing some modifications while iterating. + * Doubly linked list iterator for both dlist_head and dclist_head types. + * This iterator type allows some modifications while iterating. * - * Used as state in dlist_foreach_modify(). To get the current element of the - * iteration use the 'cur' member. + * Used as state in dlist_foreach_modify() and dclist_foreach_modify(). + * + * To get the current element of the iteration use the 'cur' member. * * Iterations using this are only allowed to change the list at the current * point of iteration. It is fine to delete the current node, but it is *not* @@ -182,6 +202,19 @@ typedef struct dlist_mutable_iter dlist_node *end; /* last node we'll iterate to */ } dlist_mutable_iter; +/* + * Head of a doubly linked list with a count of the number of items + * + * This internally makes use of a dlist to implement the actual list. When + * items are added or removed from the list the count is updated to reflect + * the current number of items in the list. + */ +typedef struct dclist_head +{ + dlist_head dlist; /* the actual list header */ + uint32 count; /* the number of items in the list */ +} dclist_head; + /* * Node of a singly linked list. * @@ -246,17 +279,19 @@ typedef struct slist_mutable_iter /* Static initializers */ #define DLIST_STATIC_INIT(name) {{&(name).head, &(name).head}} +#define DCLIST_STATIC_INIT(name) {{{&(name).dlist.head, &(name).dlist.head}}, 0} #define SLIST_STATIC_INIT(name) {{NULL}} /* Prototypes for functions too big to be inline */ /* Caution: this is O(n); consider using slist_delete_current() instead */ -extern void slist_delete(slist_head *head, slist_node *node); +extern void slist_delete(slist_head *head, const slist_node *node); #ifdef ILIST_DEBUG -extern void dlist_check(dlist_head *head); -extern void slist_check(slist_head *head); +extern void dlist_member_check(const dlist_head *head, const dlist_node *node); +extern void dlist_check(const dlist_head *head); +extern void slist_check(const slist_head *head); #else /* * These seemingly useless casts to void are here to keep the compiler quiet @@ -264,6 +299,7 @@ extern void slist_check(slist_head *head); * in which functions the only point of passing the list head pointer is to be * able to run these checks. */ +#define dlist_member_check(head, node) ((void) (head)) #define dlist_check(head) ((void) (head)) #define slist_check(head) ((void) (head)) #endif /* ILIST_DEBUG */ @@ -280,13 +316,24 @@ dlist_init(dlist_head *head) head->head.next = head->head.prev = &head->head; } +/* + * Initialize a doubly linked list element. + * + * This is only needed when dlist_node_is_detached() may be needed. + */ +static inline void +dlist_node_init(dlist_node *node) +{ + node->next = node->prev = NULL; +} + /* * Is the list empty? * * An empty list has either its first 'next' pointer set to NULL, or to itself. */ static inline bool -dlist_is_empty(dlist_head *head) +dlist_is_empty(const dlist_head *head) { dlist_check(head); @@ -361,6 +408,41 @@ dlist_delete(dlist_node *node) node->next->prev = node->prev; } +/* + * Like dlist_delete(), but also sets next/prev to NULL to signal not being in + * a list. + */ +static inline void +dlist_delete_thoroughly(dlist_node *node) +{ + node->prev->next = node->next; + node->next->prev = node->prev; + node->next = NULL; + node->prev = NULL; +} + +/* + * Same as dlist_delete, but performs checks in ILIST_DEBUG builds to ensure + * that 'node' belongs to 'head'. + */ +static inline void +dlist_delete_from(dlist_head *head, dlist_node *node) +{ + dlist_member_check(head, node); + dlist_delete(node); +} + +/* + * Like dlist_delete_from, but also sets next/prev to NULL to signal not + * being in a list. + */ +static inline void +dlist_delete_from_thoroughly(dlist_head *head, dlist_node *node) +{ + dlist_member_check(head, node); + dlist_delete_thoroughly(node); +} + /* * Remove and return the first node from a list (there must be one). */ @@ -418,7 +500,7 @@ dlist_move_tail(dlist_head *head, dlist_node *node) * Caution: unreliable if 'node' is not in the list. */ static inline bool -dlist_has_next(dlist_head *head, dlist_node *node) +dlist_has_next(const dlist_head *head, const dlist_node *node) { return node->next != &head->head; } @@ -428,11 +510,26 @@ dlist_has_next(dlist_head *head, dlist_node *node) * Caution: unreliable if 'node' is not in the list. */ static inline bool -dlist_has_prev(dlist_head *head, dlist_node *node) +dlist_has_prev(const dlist_head *head, const dlist_node *node) { return node->prev != &head->head; } +/* + * Check if node is detached. A node is only detached if it either has been + * initialized with dlist_init_node(), or deleted with + * dlist_delete_thoroughly() / dlist_delete_from_thoroughly() / + * dclist_delete_from_thoroughly(). + */ +static inline bool +dlist_node_is_detached(const dlist_node *node) +{ + Assert((node->next == NULL && node->prev == NULL) || + (node->next != NULL && node->prev != NULL)); + + return node->next == NULL; +} + /* * Return the next node in the list (there must be one). */ @@ -562,6 +659,322 @@ dlist_tail_node(dlist_head *head) (iter).cur != (iter).end; \ (iter).cur = (iter).cur->prev) +/* doubly-linked count list implementation */ + +/* + * dclist_init + * Initialize a doubly linked count list. + * + * Previous state will be thrown away without any cleanup. + */ +static inline void +dclist_init(dclist_head *head) +{ + dlist_init(&head->dlist); + head->count = 0; +} + +/* + * dclist_is_empty + * Returns true if the list is empty, otherwise false. + */ +static inline bool +dclist_is_empty(const dclist_head *head) +{ + Assert(dlist_is_empty(&head->dlist) == (head->count == 0)); + return (head->count == 0); +} + +/* + * dclist_push_head + * Insert a node at the beginning of the list. + */ +static inline void +dclist_push_head(dclist_head *head, dlist_node *node) +{ + if (head->dlist.head.next == NULL) /* convert NULL header to circular */ + dclist_init(head); + + dlist_push_head(&head->dlist, node); + head->count++; + + Assert(head->count > 0); /* count overflow check */ +} + +/* + * dclist_push_tail + * Insert a node at the end of the list. + */ +static inline void +dclist_push_tail(dclist_head *head, dlist_node *node) +{ + if (head->dlist.head.next == NULL) /* convert NULL header to circular */ + dclist_init(head); + + dlist_push_tail(&head->dlist, node); + head->count++; + + Assert(head->count > 0); /* count overflow check */ +} + +/* + * dclist_insert_after + * Insert a node after another *in the same list* + * + * Caution: 'after' must be a member of 'head'. + */ +static inline void +dclist_insert_after(dclist_head *head, dlist_node *after, dlist_node *node) +{ + dlist_member_check(&head->dlist, after); + Assert(head->count > 0); /* must be at least 1 already */ + + dlist_insert_after(after, node); + head->count++; + + Assert(head->count > 0); /* count overflow check */ +} + +/* + * dclist_insert_before + * Insert a node before another *in the same list* + * + * Caution: 'before' must be a member of 'head'. + */ +static inline void +dclist_insert_before(dclist_head *head, dlist_node *before, dlist_node *node) +{ + dlist_member_check(&head->dlist, before); + Assert(head->count > 0); /* must be at least 1 already */ + + dlist_insert_before(before, node); + head->count++; + + Assert(head->count > 0); /* count overflow check */ +} + +/* + * dclist_delete_from + * Deletes 'node' from 'head'. + * + * Caution: 'node' must be a member of 'head'. + */ +static inline void +dclist_delete_from(dclist_head *head, dlist_node *node) +{ + Assert(head->count > 0); + + dlist_delete_from(&head->dlist, node); + head->count--; +} + +/* + * Like dclist_delete_from(), but also sets next/prev to NULL to signal not + * being in a list. + */ +static inline void +dclist_delete_from_thoroughly(dclist_head *head, dlist_node *node) +{ + Assert(head->count > 0); + + dlist_delete_from_thoroughly(&head->dlist, node); + head->count--; +} + +/* + * dclist_pop_head_node + * Remove and return the first node from a list (there must be one). + */ +static inline dlist_node * +dclist_pop_head_node(dclist_head *head) +{ + dlist_node *node; + + Assert(head->count > 0); + + node = dlist_pop_head_node(&head->dlist); + head->count--; + return node; +} + +/* + * dclist_move_head + * Move 'node' from its current position in the list to the head position + * in 'head'. + * + * Caution: 'node' must be a member of 'head'. + */ +static inline void +dclist_move_head(dclist_head *head, dlist_node *node) +{ + dlist_member_check(&head->dlist, node); + Assert(head->count > 0); + + dlist_move_head(&head->dlist, node); +} + +/* + * dclist_move_tail + * Move 'node' from its current position in the list to the tail position + * in 'head'. + * + * Caution: 'node' must be a member of 'head'. + */ +static inline void +dclist_move_tail(dclist_head *head, dlist_node *node) +{ + dlist_member_check(&head->dlist, node); + Assert(head->count > 0); + + dlist_move_tail(&head->dlist, node); +} + +/* + * dclist_has_next + * Check whether 'node' has a following node. + * + * Caution: 'node' must be a member of 'head'. + */ +static inline bool +dclist_has_next(const dclist_head *head, const dlist_node *node) +{ + dlist_member_check(&head->dlist, node); + Assert(head->count > 0); + + return dlist_has_next(&head->dlist, node); +} + +/* + * dclist_has_prev + * Check whether 'node' has a preceding node. + * + * Caution: 'node' must be a member of 'head'. + */ +static inline bool +dclist_has_prev(const dclist_head *head, const dlist_node *node) +{ + dlist_member_check(&head->dlist, node); + Assert(head->count > 0); + + return dlist_has_prev(&head->dlist, node); +} + +/* + * dclist_next_node + * Return the next node in the list (there must be one). + */ +static inline dlist_node * +dclist_next_node(dclist_head *head, dlist_node *node) +{ + Assert(head->count > 0); + + return dlist_next_node(&head->dlist, node); +} + +/* + * dclist_prev_node + * Return the prev node in the list (there must be one). + */ +static inline dlist_node * +dclist_prev_node(dclist_head *head, dlist_node *node) +{ + Assert(head->count > 0); + + return dlist_prev_node(&head->dlist, node); +} + +/* internal support function to get address of head element's struct */ +static inline void * +dclist_head_element_off(dclist_head *head, size_t off) +{ + Assert(!dclist_is_empty(head)); + + return (char *) head->dlist.head.next - off; +} + +/* + * dclist_head_node + * Return the first node in the list (there must be one). + */ +static inline dlist_node * +dclist_head_node(dclist_head *head) +{ + Assert(head->count > 0); + + return (dlist_node *) dlist_head_element_off(&head->dlist, 0); +} + +/* internal support function to get address of tail element's struct */ +static inline void * +dclist_tail_element_off(dclist_head *head, size_t off) +{ + Assert(!dclist_is_empty(head)); + + return (char *) head->dlist.head.prev - off; +} + +/* + * Return the last node in the list (there must be one). + */ +static inline dlist_node * +dclist_tail_node(dclist_head *head) +{ + Assert(head->count > 0); + + return (dlist_node *) dlist_tail_element_off(&head->dlist, 0); +} + +/* + * dclist_count + * Returns the stored number of entries in 'head' + */ +static inline uint32 +dclist_count(const dclist_head *head) +{ + Assert(dlist_is_empty(&head->dlist) == (head->count == 0)); + + return head->count; +} + +/* + * Return the containing struct of 'type' where 'membername' is the dlist_node + * pointed at by 'ptr'. + * + * This is used to convert a dlist_node * back to its containing struct. + * + * Note: This is effectively just the same as dlist_container, so reuse that. + */ +#define dclist_container(type, membername, ptr) \ + dlist_container(type, membername, ptr) + + /* + * Return the address of the first element in the list. + * + * The list must not be empty. + */ +#define dclist_head_element(type, membername, lhead) \ + (AssertVariableIsOfTypeMacro(((type *) NULL)->membername, dlist_node), \ + (type *) dclist_head_element_off(lhead, offsetof(type, membername))) + + /* + * Return the address of the last element in the list. + * + * The list must not be empty. + */ +#define dclist_tail_element(type, membername, lhead) \ + (AssertVariableIsOfTypeMacro(((type *) NULL)->membername, dlist_node), \ + ((type *) dclist_tail_element_off(lhead, offsetof(type, membername)))) + + +/* Iterators for dclists */ +#define dclist_foreach(iter, lhead) \ + dlist_foreach(iter, &((lhead)->dlist)) + +#define dclist_foreach_modify(iter, lhead) \ + dlist_foreach_modify(iter, &((lhead)->dlist)) + +#define dclist_reverse_foreach(iter, lhead) \ + dlist_reverse_foreach(iter, &((lhead)->dlist)) /* singly linked list implementation */ @@ -579,7 +992,7 @@ slist_init(slist_head *head) * Is the list empty? */ static inline bool -slist_is_empty(slist_head *head) +slist_is_empty(const slist_head *head) { slist_check(head); @@ -627,7 +1040,7 @@ slist_pop_head_node(slist_head *head) * Check whether 'node' has a following node. */ static inline bool -slist_has_next(slist_head *head, slist_node *node) +slist_has_next(const slist_head *head, const slist_node *node) { slist_check(head); diff --git a/src/postgres/include/lib/pairingheap.h b/src/postgres/include/lib/pairingheap.h index 26b1cad5..5691e103 100644 --- a/src/postgres/include/lib/pairingheap.h +++ b/src/postgres/include/lib/pairingheap.h @@ -3,7 +3,7 @@ * * A Pairing Heap implementation * - * Portions Copyright (c) 2012-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2012-2023, PostgreSQL Global Development Group * * src/include/lib/pairingheap.h */ diff --git a/src/postgres/include/lib/simplehash.h b/src/postgres/include/lib/simplehash.h index d03a0018..b7adc16b 100644 --- a/src/postgres/include/lib/simplehash.h +++ b/src/postgres/include/lib/simplehash.h @@ -87,7 +87,7 @@ * looking or is done - buckets following a deleted element are shifted * backwards, unless they're empty or already at their optimal position. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/lib/simplehash.h @@ -546,13 +546,13 @@ SH_GROW(SH_TYPE * tb, uint64 newsize) if (oldentry->status == SH_STATUS_IN_USE) { uint32 hash; - uint32 startelem; + uint32 startelem2; uint32 curelem; SH_ELEMENT_TYPE *newentry; hash = SH_ENTRY_HASH(tb, oldentry); - startelem = SH_INITIAL_BUCKET(tb, hash); - curelem = startelem; + startelem2 = SH_INITIAL_BUCKET(tb, hash); + curelem = startelem2; /* find empty element to put data into */ while (true) @@ -564,7 +564,7 @@ SH_GROW(SH_TYPE * tb, uint64 newsize) break; } - curelem = SH_NEXT(tb, curelem, startelem); + curelem = SH_NEXT(tb, curelem, startelem2); } /* copy entry to new slot */ @@ -810,7 +810,7 @@ SH_LOOKUP_HASH_INTERNAL(SH_TYPE * tb, SH_KEY_TYPE key, uint32 hash) } /* - * Lookup up entry in hash table. Returns NULL if key not present. + * Lookup entry in hash table. Returns NULL if key not present. */ SH_SCOPE SH_ELEMENT_TYPE * SH_LOOKUP(SH_TYPE * tb, SH_KEY_TYPE key) @@ -821,7 +821,7 @@ SH_LOOKUP(SH_TYPE * tb, SH_KEY_TYPE key) } /* - * Lookup up entry in hash table using an already-calculated hash. + * Lookup entry in hash table using an already-calculated hash. * * Returns NULL if key not present. */ @@ -964,7 +964,6 @@ SH_DELETE_ITEM(SH_TYPE * tb, SH_ELEMENT_TYPE * entry) SH_SCOPE void SH_START_ITERATE(SH_TYPE * tb, SH_ITERATOR * iter) { - int i; uint64 startelem = PG_UINT64_MAX; /* @@ -972,7 +971,7 @@ SH_START_ITERATE(SH_TYPE * tb, SH_ITERATOR * iter) * supported, we want to start/end at an element that cannot be affected * by elements being shifted. */ - for (i = 0; i < tb->size; i++) + for (uint32 i = 0; i < tb->size; i++) { SH_ELEMENT_TYPE *entry = &tb->data[i]; @@ -983,6 +982,7 @@ SH_START_ITERATE(SH_TYPE * tb, SH_ITERATOR * iter) } } + /* we should have found an empty element */ Assert(startelem < SH_MAX_SIZE); /* diff --git a/src/postgres/include/lib/sort_template.h b/src/postgres/include/lib/sort_template.h index 3122a930..1edd05c7 100644 --- a/src/postgres/include/lib/sort_template.h +++ b/src/postgres/include/lib/sort_template.h @@ -5,7 +5,7 @@ * A template for a sort algorithm that supports varying degrees of * specialization. * - * Copyright (c) 2021-2022, PostgreSQL Global Development Group + * Copyright (c) 2021-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1992-1994, Regents of the University of California * * Usage notes: diff --git a/src/postgres/include/lib/stringinfo.h b/src/postgres/include/lib/stringinfo.h index 9b755c48..36a416f8 100644 --- a/src/postgres/include/lib/stringinfo.h +++ b/src/postgres/include/lib/stringinfo.h @@ -8,7 +8,7 @@ * (null-terminated text) or arbitrary binary data. All storage is allocated * with palloc() (falling back to malloc in frontend code). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/lib/stringinfo.h @@ -142,7 +142,7 @@ extern void appendStringInfoSpaces(StringInfo str, int count); * if necessary. */ extern void appendBinaryStringInfo(StringInfo str, - const char *data, int datalen); + const void *data, int datalen); /*------------------------ * appendBinaryStringInfoNT @@ -150,7 +150,7 @@ extern void appendBinaryStringInfo(StringInfo str, * if necessary. Does not ensure a trailing null-byte exists. */ extern void appendBinaryStringInfoNT(StringInfo str, - const char *data, int datalen); + const void *data, int datalen); /*------------------------ * enlargeStringInfo diff --git a/src/postgres/include/libpq/auth.h b/src/postgres/include/libpq/auth.h index d3c189ef..7fac05b8 100644 --- a/src/postgres/include/libpq/auth.h +++ b/src/postgres/include/libpq/auth.h @@ -4,7 +4,7 @@ * Definitions for network authentication routines * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/auth.h @@ -18,7 +18,7 @@ extern PGDLLIMPORT char *pg_krb_server_keyfile; extern PGDLLIMPORT bool pg_krb_caseins_users; -extern PGDLLIMPORT char *pg_krb_realm; +extern PGDLLIMPORT bool pg_gss_accept_delegation; extern void ClientAuthentication(Port *port); extern void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, @@ -28,4 +28,10 @@ extern void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, typedef void (*ClientAuthentication_hook_type) (Port *, int); extern PGDLLIMPORT ClientAuthentication_hook_type ClientAuthentication_hook; +/* hook type for password manglers */ +typedef char *(*auth_password_hook_typ) (char *input); + +/* Default LDAP password mutator hook, can be overridden by a shared library */ +extern PGDLLIMPORT auth_password_hook_typ ldap_password_hook; + #endif /* AUTH_H */ diff --git a/src/postgres/include/libpq/crypt.h b/src/postgres/include/libpq/crypt.h index 3238cf66..ddcd2746 100644 --- a/src/postgres/include/libpq/crypt.h +++ b/src/postgres/include/libpq/crypt.h @@ -3,7 +3,7 @@ * crypt.h * Interface to libpq/crypt.c * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/crypt.h diff --git a/src/postgres/include/libpq/hba.h b/src/postgres/include/libpq/hba.h index d06da818..189f6d0d 100644 --- a/src/postgres/include/libpq/hba.h +++ b/src/postgres/include/libpq/hba.h @@ -77,8 +77,23 @@ typedef enum ClientCertName clientCertDN } ClientCertName; +/* + * A single string token lexed from an authentication configuration file + * (pg_ident.conf or pg_hba.conf), together with whether the token has + * been quoted. If "string" begins with a slash, it may optionally + * contain a regular expression (currently used for pg_ident.conf when + * building IdentLines and for pg_hba.conf when building HbaLines). + */ +typedef struct AuthToken +{ + char *string; + bool quoted; + regex_t *regex; +} AuthToken; + typedef struct HbaLine { + char *sourcefile; int linenumber; char *rawline; ConnType conntype; @@ -127,22 +142,10 @@ typedef struct IdentLine int linenumber; char *usermap; - char *ident_user; - char *pg_role; - regex_t re; + AuthToken *system_user; + AuthToken *pg_user; } IdentLine; -/* - * A single string token lexed from an authentication configuration file - * (pg_ident.conf or pg_hba.conf), together with whether the token has - * been quoted. - */ -typedef struct AuthToken -{ - char *string; - bool quoted; -} AuthToken; - /* * TokenizedAuthLine represents one line lexed from an authentication * configuration file. Each item in the "fields" list is a sub-list of @@ -155,6 +158,7 @@ typedef struct AuthToken typedef struct TokenizedAuthLine { List *fields; /* List of lists of AuthTokens */ + char *file_name; /* File name of origin */ int line_num; /* Line number */ char *raw_line; /* Raw line text */ char *err_msg; /* Error message if any */ @@ -168,12 +172,15 @@ extern bool load_ident(void); extern const char *hba_authname(UserAuth auth_method); extern void hba_getauthmethod(hbaPort *port); extern int check_usermap(const char *usermap_name, - const char *pg_role, const char *auth_user, + const char *pg_user, const char *system_user, bool case_insensitive); extern HbaLine *parse_hba_line(TokenizedAuthLine *tok_line, int elevel); extern IdentLine *parse_ident_line(TokenizedAuthLine *tok_line, int elevel); extern bool pg_isblank(const char c); -extern MemoryContext tokenize_auth_file(const char *filename, FILE *file, - List **tok_lines, int elevel); +extern FILE *open_auth_file(const char *filename, int elevel, int depth, + char **err_msg); +extern void free_auth_file(FILE *file, int depth); +extern void tokenize_auth_file(const char *filename, FILE *file, + List **tok_lines, int elevel, int depth); #endif /* HBA_H */ diff --git a/src/postgres/include/libpq/libpq-be.h b/src/postgres/include/libpq/libpq-be.h index 90c20da2..3b2ce990 100644 --- a/src/postgres/include/libpq/libpq-be.h +++ b/src/postgres/include/libpq/libpq-be.h @@ -8,7 +8,7 @@ * Structs that need to be client-visible are in pqcomm.h. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/libpq-be.h @@ -23,9 +23,7 @@ #include #include #endif -#ifdef HAVE_NETINET_TCP_H #include -#endif #ifdef ENABLE_GSS #if defined(HAVE_GSSAPI_H) @@ -33,14 +31,6 @@ #else #include #endif /* HAVE_GSSAPI_H */ -/* - * GSSAPI brings in headers that set a lot of things in the global namespace on win32, - * that doesn't match the msvc build. It gives a bunch of compiler warnings that we ignore, - * but also defines a symbol that simply does not exist. Undefine it again. - */ -#ifdef _MSC_VER -#undef HAVE_GETADDRINFO -#endif #endif /* ENABLE_GSS */ #ifdef ENABLE_SSPI @@ -94,10 +84,42 @@ typedef struct * GSSAPI auth was not used */ bool auth; /* GSSAPI Authentication used */ bool enc; /* GSSAPI encryption in use */ + bool delegated_creds; /* GSSAPI Delegated credentials */ #endif } pg_gssinfo; #endif +/* + * ClientConnectionInfo includes the fields describing the client connection + * that are copied over to parallel workers as nothing from Port does that. + * The same rules apply for allocations here as for Port (everything must be + * malloc'd or palloc'd in TopMemoryContext). + * + * If you add a struct member here, remember to also handle serialization in + * SerializeClientConnectionInfo() and co. + */ +typedef struct ClientConnectionInfo +{ + /* + * Authenticated identity. The meaning of this identifier is dependent on + * auth_method; it is the identity (if any) that the user presented during + * the authentication cycle, before they were assigned a database role. + * (It is effectively the "SYSTEM-USERNAME" of a pg_ident usermap -- + * though the exact string in use may be different, depending on pg_hba + * options.) + * + * authn_id is NULL if the user has not actually been authenticated, for + * example if the "trust" auth method is in use. + */ + const char *authn_id; + + /* + * The HBA method that determined the above authn_id. This only has + * meaning if authn_id is not NULL; otherwise it's undefined. + */ + UserAuth auth_method; +} ClientConnectionInfo; + /* * This is used by the postmaster in its communication with frontends. It * contains all state information needed during this communication before the @@ -158,19 +180,6 @@ typedef struct Port */ HbaLine *hba; - /* - * Authenticated identity. The meaning of this identifier is dependent on - * hba->auth_method; it is the identity (if any) that the user presented - * during the authentication cycle, before they were assigned a database - * role. (It is effectively the "SYSTEM-USERNAME" of a pg_ident usermap - * -- though the exact string in use may be different, depending on pg_hba - * options.) - * - * authn_id is NULL if the user has not actually been authenticated, for - * example if the "trust" auth method is in use. - */ - const char *authn_id; - /* * TCP keepalive and user timeout settings. * @@ -300,7 +309,7 @@ extern void be_tls_get_peer_serial(Port *port, char *ptr, size_t len); * This is not supported with old versions of OpenSSL that don't have * the X509_get_signature_nid() function. */ -#if defined(USE_OPENSSL) && defined(HAVE_X509_GET_SIGNATURE_NID) +#if defined(USE_OPENSSL) && (defined(HAVE_X509_GET_SIGNATURE_NID) || defined(HAVE_X509_GET_SIGNATURE_INFO)) #define HAVE_BE_TLS_GET_CERTIFICATE_HASH extern char *be_tls_get_certificate_hash(Port *port, size_t *len); #endif @@ -320,6 +329,7 @@ extern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook; extern bool be_gssapi_get_auth(Port *port); extern bool be_gssapi_get_enc(Port *port); extern const char *be_gssapi_get_princ(Port *port); +extern bool be_gssapi_get_delegation(Port *port); /* Read and write to a GSSAPI-encrypted connection. */ extern ssize_t be_gssapi_read(Port *port, void *ptr, size_t len); @@ -327,6 +337,7 @@ extern ssize_t be_gssapi_write(Port *port, void *ptr, size_t len); #endif /* ENABLE_GSS */ extern PGDLLIMPORT ProtocolVersion FrontendProtocol; +extern PGDLLIMPORT ClientConnectionInfo MyClientConnectionInfo; /* TCP keepalives configuration. These are no-ops on an AF_UNIX socket. */ diff --git a/src/postgres/include/libpq/libpq.h b/src/postgres/include/libpq/libpq.h index 2de7d9ba..50fc781f 100644 --- a/src/postgres/include/libpq/libpq.h +++ b/src/postgres/include/libpq/libpq.h @@ -4,7 +4,7 @@ * POSTGRES LIBPQ buffer structure definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/libpq.h diff --git a/src/postgres/include/libpq/pqcomm.h b/src/postgres/include/libpq/pqcomm.h index b418283d..c8509025 100644 --- a/src/postgres/include/libpq/pqcomm.h +++ b/src/postgres/include/libpq/pqcomm.h @@ -6,7 +6,7 @@ * NOTE: for historical reasons, this does not correspond to pqcomm.c. * pqcomm.c's routines are declared in libpq.h. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/pqcomm.h @@ -17,54 +17,22 @@ #define PQCOMM_H #include -#include -#ifdef HAVE_SYS_UN_H #include -#endif +#include #include -#ifdef HAVE_STRUCT_SOCKADDR_STORAGE - -#ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY -#ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY -#define ss_family __ss_family -#else -#error struct sockaddr_storage does not provide an ss_family member -#endif -#endif - -#ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN -#define ss_len __ss_len -#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1 -#endif -#else /* !HAVE_STRUCT_SOCKADDR_STORAGE */ - -/* Define a struct sockaddr_storage if we don't have one. */ - -struct sockaddr_storage -{ - union - { - struct sockaddr sa; /* get the system-dependent fields */ - int64 ss_align; /* ensures struct is properly aligned */ - char ss_pad[128]; /* ensures struct has desired size */ - } ss_stuff; -}; - -#define ss_family ss_stuff.sa.sa_family -/* It should have an ss_len field if sockaddr has sa_len. */ -#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN -#define ss_len ss_stuff.sa.sa_len -#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1 -#endif -#endif /* HAVE_STRUCT_SOCKADDR_STORAGE */ - typedef struct { struct sockaddr_storage addr; socklen_t salen; } SockAddr; +typedef struct +{ + int family; + SockAddr addr; +} AddrInfo; + /* Configure the UNIX socket location for the well known port. */ #define UNIXSOCK_PATH(path, port, sockdir) \ @@ -154,13 +122,14 @@ extern PGDLLIMPORT bool Db_user_namespace; #define AUTH_REQ_PASSWORD 3 /* Password */ #define AUTH_REQ_CRYPT 4 /* crypt password. Not supported any more. */ #define AUTH_REQ_MD5 5 /* md5 password */ -#define AUTH_REQ_SCM_CREDS 6 /* transfer SCM credentials */ +/* 6 is available. It was used for SCM creds, not supported any more. */ #define AUTH_REQ_GSS 7 /* GSSAPI without wrap() */ #define AUTH_REQ_GSS_CONT 8 /* Continue GSS exchanges */ #define AUTH_REQ_SSPI 9 /* SSPI negotiate without wrap() */ #define AUTH_REQ_SASL 10 /* Begin SASL authentication */ #define AUTH_REQ_SASL_CONT 11 /* Continue SASL authentication */ #define AUTH_REQ_SASL_FIN 12 /* Final SASL message */ +#define AUTH_REQ_MAX AUTH_REQ_SASL_FIN /* maximum AUTH_REQ_* value */ typedef uint32 AuthRequest; diff --git a/src/postgres/include/libpq/pqformat.h b/src/postgres/include/libpq/pqformat.h index cd834825..0d2f958a 100644 --- a/src/postgres/include/libpq/pqformat.h +++ b/src/postgres/include/libpq/pqformat.h @@ -3,7 +3,7 @@ * pqformat.h * Definitions for formatting and parsing frontend/backend messages * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/pqformat.h @@ -22,7 +22,7 @@ extern void pq_beginmessage_reuse(StringInfo buf, char msgtype); extern void pq_endmessage(StringInfo buf); extern void pq_endmessage_reuse(StringInfo buf); -extern void pq_sendbytes(StringInfo buf, const char *data, int datalen); +extern void pq_sendbytes(StringInfo buf, const void *data, int datalen); extern void pq_sendcountedtext(StringInfo buf, const char *str, int slen, bool countincludesself); extern void pq_sendtext(StringInfo buf, const char *str, int slen); diff --git a/src/postgres/include/libpq/pqsignal.h b/src/postgres/include/libpq/pqsignal.h index 41227a30..023bcd13 100644 --- a/src/postgres/include/libpq/pqsignal.h +++ b/src/postgres/include/libpq/pqsignal.h @@ -3,7 +3,7 @@ * pqsignal.h * Backend signal(2) support (see also src/port/pqsignal.c) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/libpq/pqsignal.h @@ -15,15 +15,30 @@ #include -#ifndef WIN32 -#define PG_SETMASK(mask) sigprocmask(SIG_SETMASK, mask, NULL) -#else +#ifdef WIN32 /* Emulate POSIX sigset_t APIs on Windows */ typedef int sigset_t; -extern int pqsigsetmask(int mask); - -#define PG_SETMASK(mask) pqsigsetmask(*(mask)) +#define SA_RESTART 1 +#define SA_NODEFER 2 + +struct sigaction +{ + void (*sa_handler) (int); + /* sa_sigaction not yet implemented */ + sigset_t sa_mask; + int sa_flags; +}; + +extern int pqsigprocmask(int how, const sigset_t *set, sigset_t *oset); +extern int pqsigaction(int signum, const struct sigaction *act, + struct sigaction *oldact); + +#define SIG_BLOCK 1 +#define SIG_UNBLOCK 2 +#define SIG_SETMASK 3 +#define sigprocmask(how, set, oset) pqsigprocmask((how), (set), (oset)) +#define sigaction(signum, act, oldact) pqsigaction((signum), (act), (oldact)) #define sigemptyset(set) (*(set) = 0) #define sigfillset(set) (*(set) = ~0) #define sigaddset(set, signum) (*(set) |= (sigmask(signum))) @@ -36,7 +51,4 @@ extern PGDLLIMPORT sigset_t StartupBlockSig; extern void pqinitmask(void); -/* pqsigfunc is declared in src/include/port.h */ -extern pqsigfunc pqsignal_pm(int signo, pqsigfunc func); - #endif /* PQSIGNAL_H */ diff --git a/src/postgres/include/libpq/sasl.h b/src/postgres/include/libpq/sasl.h new file mode 100644 index 00000000..7a1b1ed0 --- /dev/null +++ b/src/postgres/include/libpq/sasl.h @@ -0,0 +1,136 @@ +/*------------------------------------------------------------------------- + * + * sasl.h + * Defines the SASL mechanism interface for the backend. + * + * Each SASL mechanism defines a frontend and a backend callback structure. + * + * See src/interfaces/libpq/fe-auth-sasl.h for the frontend counterpart. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/libpq/sasl.h + * + *------------------------------------------------------------------------- + */ + +#ifndef PG_SASL_H +#define PG_SASL_H + +#include "lib/stringinfo.h" +#include "libpq/libpq-be.h" + +/* Status codes for message exchange */ +#define PG_SASL_EXCHANGE_CONTINUE 0 +#define PG_SASL_EXCHANGE_SUCCESS 1 +#define PG_SASL_EXCHANGE_FAILURE 2 + +/* + * Backend SASL mechanism callbacks. + * + * To implement a backend mechanism, declare a pg_be_sasl_mech struct with + * appropriate callback implementations. Then pass the mechanism to + * CheckSASLAuth() during ClientAuthentication(), once the server has decided + * which authentication method to use. + */ +typedef struct pg_be_sasl_mech +{ + /*--------- + * get_mechanisms() + * + * Retrieves the list of SASL mechanism names supported by this + * implementation. + * + * Input parameters: + * + * port: The client Port + * + * Output parameters: + * + * buf: A StringInfo buffer that the callback should populate with + * supported mechanism names. The names are appended into this + * StringInfo, each one ending with '\0' bytes. + *--------- + */ + void (*get_mechanisms) (Port *port, StringInfo buf); + + /*--------- + * init() + * + * Initializes mechanism-specific state for a connection. This callback + * must return a pointer to its allocated state, which will be passed + * as-is as the first argument to the other callbacks. + * + * Input parameters: + * + * port: The client Port. + * + * mech: The actual mechanism name in use by the client. + * + * shadow_pass: The stored secret for the role being authenticated, or + * NULL if one does not exist. Mechanisms that do not use + * shadow entries may ignore this parameter. If a + * mechanism uses shadow entries but shadow_pass is NULL, + * the implementation must continue the exchange as if the + * user existed and the password did not match, to avoid + * disclosing valid user names. + *--------- + */ + void *(*init) (Port *port, const char *mech, const char *shadow_pass); + + /*--------- + * exchange() + * + * Produces a server challenge to be sent to the client. The callback + * must return one of the PG_SASL_EXCHANGE_* values, depending on + * whether the exchange continues, has finished successfully, or has + * failed. + * + * Input parameters: + * + * state: The opaque mechanism state returned by init() + * + * input: The response data sent by the client, or NULL if the + * mechanism is client-first but the client did not send an + * initial response. (This can only happen during the first + * message from the client.) This is guaranteed to be + * null-terminated for safety, but SASL allows embedded + * nulls in responses, so mechanisms must be careful to + * check inputlen. + * + * inputlen: The length of the challenge data sent by the server, or + * -1 if the client did not send an initial response + * + * Output parameters, to be set by the callback function: + * + * output: A palloc'd buffer containing either the server's next + * challenge (if PG_SASL_EXCHANGE_CONTINUE is returned) or + * the server's outcome data (if PG_SASL_EXCHANGE_SUCCESS is + * returned and the mechanism requires data to be sent during + * a successful outcome). The callback should set this to + * NULL if the exchange is over and no output should be sent, + * which should correspond to either PG_SASL_EXCHANGE_FAILURE + * or a PG_SASL_EXCHANGE_SUCCESS with no outcome data. + * + * outputlen: The length of the challenge data. Ignored if *output is + * NULL. + * + * logdetail: Set to an optional DETAIL message to be printed to the + * server log, to disambiguate failure modes. (The client + * will only ever see the same generic authentication + * failure message.) Ignored if the exchange is completed + * with PG_SASL_EXCHANGE_SUCCESS. + *--------- + */ + int (*exchange) (void *state, + const char *input, int inputlen, + char **output, int *outputlen, + const char **logdetail); +} pg_be_sasl_mech; + +/* Common implementation for auth.c */ +extern int CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port, + char *shadow_pass, const char **logdetail); + +#endif /* PG_SASL_H */ diff --git a/src/postgres/include/libpq/scram.h b/src/postgres/include/libpq/scram.h new file mode 100644 index 00000000..310bc365 --- /dev/null +++ b/src/postgres/include/libpq/scram.h @@ -0,0 +1,37 @@ +/*------------------------------------------------------------------------- + * + * scram.h + * Interface to libpq/scram.c + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/libpq/scram.h + * + *------------------------------------------------------------------------- + */ +#ifndef PG_SCRAM_H +#define PG_SCRAM_H + +#include "common/cryptohash.h" +#include "lib/stringinfo.h" +#include "libpq/libpq-be.h" +#include "libpq/sasl.h" + +/* Number of iterations when generating new secrets */ +extern PGDLLIMPORT int scram_sha_256_iterations; + +/* SASL implementation callbacks */ +extern PGDLLIMPORT const pg_be_sasl_mech pg_be_scram_mech; + +/* Routines to handle and check SCRAM-SHA-256 secret */ +extern char *pg_be_scram_build_secret(const char *password); +extern bool parse_scram_secret(const char *secret, + int *iterations, + pg_cryptohash_type *hash_type, + int *key_length, char **salt, + uint8 *stored_key, uint8 *server_key); +extern bool scram_verify_plain_password(const char *username, + const char *password, const char *secret); + +#endif /* PG_SCRAM_H */ diff --git a/src/postgres/include/mb/pg_wchar.h b/src/postgres/include/mb/pg_wchar.h index 31f5b393..25276b19 100644 --- a/src/postgres/include/mb/pg_wchar.h +++ b/src/postgres/include/mb/pg_wchar.h @@ -3,7 +3,7 @@ * pg_wchar.h * multibyte-character support * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/mb/pg_wchar.h @@ -19,6 +19,8 @@ #ifndef PG_WCHAR_H #define PG_WCHAR_H +#include "port/simd.h" + /* * The pg_wchar type */ @@ -604,11 +606,11 @@ extern int pg_encoding_wchar2mb_with_len(int encoding, extern int pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2); extern int pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n); extern int pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n); -extern size_t pg_wchar_strlen(const pg_wchar *wstr); +extern size_t pg_wchar_strlen(const pg_wchar *str); extern int pg_mblen(const char *mbstr); extern int pg_dsplen(const char *mbstr); extern int pg_mbstrlen(const char *mbstr); -extern int pg_mbstrlen_with_len(const char *mbstr, int len); +extern int pg_mbstrlen_with_len(const char *mbstr, int limit); extern int pg_mbcliplen(const char *mbstr, int len, int limit); extern int pg_encoding_mbcliplen(int encoding, const char *mbstr, int len, int limit); @@ -639,7 +641,7 @@ extern int pg_do_encoding_conversion_buf(Oid proc, int src_encoding, int dest_encoding, unsigned char *src, int srclen, - unsigned char *dst, int dstlen, + unsigned char *dest, int destlen, bool noError); extern char *pg_client_to_server(const char *s, int len); @@ -648,6 +650,7 @@ extern char *pg_any_to_server(const char *s, int len, int encoding); extern char *pg_server_to_any(const char *s, int len, int encoding); extern void pg_unicode_to_server(pg_wchar c, unsigned char *s); +extern bool pg_unicode_to_server_noerror(pg_wchar c, unsigned char *s); extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc); extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc); @@ -704,24 +707,28 @@ extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len); * Verify a chunk of bytes for valid ASCII. * * Returns false if the input contains any zero bytes or bytes with the - * high-bit set. Input len must be a multiple of 8. + * high-bit set. Input len must be a multiple of the chunk size (8 or 16). */ static inline bool is_valid_ascii(const unsigned char *s, int len) { - uint64 chunk, - highbit_cum = UINT64CONST(0), - zero_cum = UINT64CONST(0x8080808080808080); + const unsigned char *const s_end = s + len; + Vector8 chunk; + Vector8 highbit_cum = vector8_broadcast(0); +#ifdef USE_NO_SIMD + Vector8 zero_cum = vector8_broadcast(0x80); +#endif Assert(len % sizeof(chunk) == 0); - while (len > 0) + while (s < s_end) { - memcpy(&chunk, s, sizeof(chunk)); + vector8_load(&chunk, s); + + /* Capture any zero bytes in this chunk. */ +#ifdef USE_NO_SIMD /* - * Capture any zero bytes in this chunk. - * * First, add 0x7f to each byte. This sets the high bit in each byte, * unless it was a zero. If any resulting high bits are zero, the * corresponding high bits in the zero accumulator will be cleared. @@ -732,22 +739,32 @@ is_valid_ascii(const unsigned char *s, int len) * any input bytes did have the high bit set, it doesn't matter * because we check for those separately. */ - zero_cum &= (chunk + UINT64CONST(0x7f7f7f7f7f7f7f7f)); + zero_cum &= (chunk + vector8_broadcast(0x7F)); +#else - /* Capture any set bits in this chunk. */ - highbit_cum |= chunk; + /* + * Set all bits in each lane of the highbit accumulator where input + * bytes are zero. + */ + highbit_cum = vector8_or(highbit_cum, + vector8_eq(chunk, vector8_broadcast(0))); +#endif + + /* Capture all set bits in this chunk. */ + highbit_cum = vector8_or(highbit_cum, chunk); s += sizeof(chunk); - len -= sizeof(chunk); } /* Check if any high bits in the high bit accumulator got set. */ - if (highbit_cum & UINT64CONST(0x8080808080808080)) + if (vector8_is_highbit_set(highbit_cum)) return false; +#ifdef USE_NO_SIMD /* Check if any high bits in the zero accumulator got cleared. */ - if (zero_cum != UINT64CONST(0x8080808080808080)) + if (zero_cum != vector8_broadcast(0x80)) return false; +#endif return true; } diff --git a/src/postgres/include/mb/stringinfo_mb.h b/src/postgres/include/mb/stringinfo_mb.h index 8781ffdf..9c533f3e 100644 --- a/src/postgres/include/mb/stringinfo_mb.h +++ b/src/postgres/include/mb/stringinfo_mb.h @@ -3,7 +3,7 @@ * stringinfo_mb.h * multibyte support for StringInfo * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/mb/stringinfo_mb.h diff --git a/src/postgres/include/miscadmin.h b/src/postgres/include/miscadmin.h index d06c547a..6e5284d5 100644 --- a/src/postgres/include/miscadmin.h +++ b/src/postgres/include/miscadmin.h @@ -10,7 +10,7 @@ * Over time, this has also become the preferred place for widely known * resource-limitation stuff, such as work_mem and check_stack_depth(). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/miscadmin.h @@ -263,6 +263,15 @@ extern PGDLLIMPORT double hash_mem_multiplier; extern PGDLLIMPORT int maintenance_work_mem; extern PGDLLIMPORT int max_parallel_maintenance_workers; +/* + * Upper and lower hard limits for the buffer access strategy ring size + * specified by the VacuumBufferUsageLimit GUC and BUFFER_USAGE_LIMIT option + * to VACUUM and ANALYZE. + */ +#define MIN_BAS_VAC_RING_SIZE_KB 128 +#define MAX_BAS_VAC_RING_SIZE_KB (16 * 1024 * 1024) + +extern PGDLLIMPORT int VacuumBufferUsageLimit; extern PGDLLIMPORT int VacuumCostPageHit; extern PGDLLIMPORT int VacuumCostPageMiss; extern PGDLLIMPORT int VacuumCostPageDirty; @@ -279,15 +288,7 @@ extern PGDLLIMPORT bool VacuumCostActive; /* in tcop/postgres.c */ -#if defined(__ia64__) || defined(__ia64) -typedef struct -{ - char *stack_base_ptr; - char *register_stack_base_ptr; -} pg_stack_base_t; -#else typedef char *pg_stack_base_t; -#endif extern pg_stack_base_t set_stack_base(void); extern void restore_stack_base(pg_stack_base_t base); @@ -299,7 +300,7 @@ extern void PreventCommandIfReadOnly(const char *cmdname); extern void PreventCommandIfParallelMode(const char *cmdname); extern void PreventCommandDuringRecovery(const char *cmdname); -/* in utils/misc/guc.c */ +/* in utils/misc/guc_tables.c */ extern PGDLLIMPORT int trace_recovery_messages; extern int trace_recovery(int trace_level); @@ -318,26 +319,30 @@ extern PGDLLIMPORT char *DatabasePath; /* now in utils/init/miscinit.c */ extern void InitPostmasterChild(void); extern void InitStandaloneProcess(const char *argv0); +extern void InitProcessLocalLatch(void); extern void SwitchToSharedLatch(void); extern void SwitchBackToLocalLatch(void); typedef enum BackendType { B_INVALID = 0, + B_ARCHIVER, B_AUTOVAC_LAUNCHER, B_AUTOVAC_WORKER, B_BACKEND, B_BG_WORKER, B_BG_WRITER, B_CHECKPOINTER, + B_LOGGER, + B_STANDALONE_BACKEND, B_STARTUP, B_WAL_RECEIVER, B_WAL_SENDER, B_WAL_WRITER, - B_ARCHIVER, - B_LOGGER, } BackendType; +#define BACKEND_NUM_TYPES (B_WAL_WRITER + 1) + extern PGDLLIMPORT BackendType MyBackendType; extern const char *GetBackendTypeDesc(BackendType backendType); @@ -359,11 +364,14 @@ extern bool InSecurityRestrictedOperation(void); extern bool InNoForceRLSOperation(void); extern void GetUserIdAndContext(Oid *userid, bool *sec_def_context); extern void SetUserIdAndContext(Oid userid, bool sec_def_context); -extern void InitializeSessionUserId(const char *rolename, Oid useroid); +extern void InitializeSessionUserId(const char *rolename, Oid roleid); extern void InitializeSessionUserIdStandalone(void); extern void SetSessionAuthorization(Oid userid, bool is_superuser); extern Oid GetCurrentRoleId(void); extern void SetCurrentRoleId(Oid roleid, bool is_superuser); +extern void InitializeSystemUser(const char *authn_id, + const char *auth_method); +extern const char *GetSystemUser(void); /* in utils/misc/superuser.c */ extern bool superuser(void); /* current user is superuser */ @@ -411,7 +419,7 @@ extern PGDLLIMPORT ProcessingMode Mode; #define SetProcessingMode(mode) \ do { \ - AssertArg((mode) == BootstrapProcessing || \ + Assert((mode) == BootstrapProcessing || \ (mode) == InitProcessing || \ (mode) == NormalProcessing); \ Mode = (mode); \ @@ -489,6 +497,10 @@ extern bool has_rolreplication(Oid roleid); typedef void (*shmem_request_hook_type) (void); extern PGDLLIMPORT shmem_request_hook_type shmem_request_hook; +extern Size EstimateClientConnectionInfoSpace(void); +extern void SerializeClientConnectionInfo(Size maxsize, char *start_address); +extern void RestoreClientConnectionInfo(char *conninfo); + /* in executor/nodeHash.c */ extern size_t get_hash_memory_limit(void); diff --git a/src/postgres/include/nodes/bitmapset.h b/src/postgres/include/nodes/bitmapset.h index 75b5ce1a..14de6a9f 100644 --- a/src/postgres/include/nodes/bitmapset.h +++ b/src/postgres/include/nodes/bitmapset.h @@ -5,13 +5,11 @@ * * A bitmap set can represent any set of nonnegative integers, although * it is mainly intended for sets where the maximum value is not large, - * say at most a few hundred. By convention, a NULL pointer is always - * accepted by all operations to represent the empty set. (But beware - * that this is not the only representation of the empty set. Use - * bms_is_empty() in preference to testing for NULL.) + * say at most a few hundred. By convention, we always represent the + * empty set by a NULL pointer. * * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * src/include/nodes/bitmapset.h * @@ -20,6 +18,8 @@ #ifndef BITMAPSET_H #define BITMAPSET_H +#include "nodes/nodes.h" + /* * Forward decl to save including pg_list.h */ @@ -48,6 +48,9 @@ typedef int32 signedbitmapword; /* must be the matching signed type */ typedef struct Bitmapset { + pg_node_attr(custom_copy_equal, special_read_write, no_query_jumble) + + NodeTag type; int nwords; /* number of words in array */ bitmapword words[FLEXIBLE_ARRAY_MEMBER]; /* really [nwords] */ } Bitmapset; @@ -97,7 +100,9 @@ extern int bms_num_members(const Bitmapset *a); /* optimized tests when we don't need to know exact membership count: */ extern BMS_Membership bms_membership(const Bitmapset *a); -extern bool bms_is_empty(const Bitmapset *a); + +/* NULL is now the only allowed representation of an empty bitmapset */ +#define bms_is_empty(a) ((a) == NULL) /* these routines recycle (modify or free) their non-const inputs: */ @@ -110,7 +115,6 @@ extern Bitmapset *bms_del_members(Bitmapset *a, const Bitmapset *b); extern Bitmapset *bms_join(Bitmapset *a, Bitmapset *b); /* support for iterating through the integer elements of a set: */ -extern int bms_first_member(Bitmapset *a); extern int bms_next_member(const Bitmapset *a, int prevbit); extern int bms_prev_member(const Bitmapset *a, int prevbit); diff --git a/src/postgres/include/nodes/execnodes.h b/src/postgres/include/nodes/execnodes.h index 57288013..869465d6 100644 --- a/src/postgres/include/nodes/execnodes.h +++ b/src/postgres/include/nodes/execnodes.h @@ -3,8 +3,23 @@ * execnodes.h * definitions for executor state nodes * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Most plan node types declared in plannodes.h have a corresponding + * execution-state node type declared here. An exception is that + * expression nodes (subtypes of Expr) are usually represented by steps + * of an ExprState, and fully handled within execExpr* - but sometimes + * their state needs to be shared with other parts of the executor, as + * for example with SubPlanState, which nodeSubplan.c has to modify. + * + * Node types declared in this file do not have any copy/equal/out/read + * support. (That is currently hard-wired in gen_node_support.pl, rather + * than being explicitly represented by pg_node_attr decorations here.) + * There is no need for copy, equal, or read support for executor trees. + * Output support could be useful for debugging; but there are a lot of + * specialized fields that would require custom code, so for now it's + * not provided. + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/execnodes.h @@ -47,7 +62,7 @@ struct LogicalTapeSet; /* ---------------- * ExprState node * - * ExprState is the top-level node for expression evaluation. + * ExprState represents the evaluation state for a whole expression tree. * It contains instructions (in ->steps) to evaluate the expression. * ---------------- */ @@ -146,6 +161,7 @@ typedef struct ExprState * IndexUnchanged aminsert hint, cached for retail inserts * Concurrent are we doing a concurrent index build? * BrokenHotChain did we detect any broken HOT chains? + * Summarizing is it a summarizing index? * ParallelWorkers # of workers requested (excludes leader) * Am Oid of index AM * AmCache private cache area for index AM @@ -179,6 +195,7 @@ typedef struct IndexInfo bool ii_IndexUnchanged; bool ii_Concurrent; bool ii_BrokenHotChain; + bool ii_Summarizing; int ii_ParallelWorkers; Oid ii_Am; void *ii_AmCache; @@ -447,6 +464,9 @@ typedef struct ResultRelInfo */ AttrNumber ri_RowIdAttNo; + /* For UPDATE, attnums of generated columns to be computed */ + Bitmapset *ri_extraUpdatedCols; + /* Projection to generate new tuple in an INSERT/UPDATE */ ProjectionInfo *ri_projectNew; /* Slot to hold that tuple */ @@ -498,11 +518,13 @@ typedef struct ResultRelInfo /* array of constraint-checking expr states */ ExprState **ri_ConstraintExprs; - /* array of stored generated columns expr states */ - ExprState **ri_GeneratedExprs; + /* arrays of stored generated columns expr states, for INSERT and UPDATE */ + ExprState **ri_GeneratedExprsI; + ExprState **ri_GeneratedExprsU; /* number of stored generated columns we need to compute */ - int ri_NumGeneratedNeeded; + int ri_NumGeneratedNeededI; + int ri_NumGeneratedNeededU; /* list of RETURNING expressions */ List *ri_returningList; @@ -523,6 +545,21 @@ typedef struct ResultRelInfo /* partition check expression state (NULL if not set up yet) */ ExprState *ri_PartitionCheckExpr; + /* + * Map to convert child result relation tuples to the format of the table + * actually mentioned in the query (called "root"). Computed only if + * needed. A NULL map value indicates that no conversion is needed, so we + * must have a separate flag to show if the map has been computed. + */ + TupleConversionMap *ri_ChildToRootMap; + bool ri_ChildToRootMapValid; + + /* + * As above, but in the other direction. + */ + TupleConversionMap *ri_RootToChildMap; + bool ri_RootToChildMapValid; + /* * Information needed by tuple routing target relations * @@ -531,23 +568,12 @@ typedef struct ResultRelInfo * mentioned in the query is an inherited table, nor when tuple routing is * not needed. * - * RootToPartitionMap and PartitionTupleSlot, initialized by - * ExecInitRoutingInfo, are non-NULL if partition has a different tuple - * format than the root table. + * PartitionTupleSlot is non-NULL if RootToChild conversion is needed and + * the relation is a partition. */ struct ResultRelInfo *ri_RootResultRelInfo; - TupleConversionMap *ri_RootToPartitionMap; TupleTableSlot *ri_PartitionTupleSlot; - /* - * Map to convert child result relation tuples to the format of the table - * actually mentioned in the query (called "root"). Computed only if - * needed. A NULL map value indicates that no conversion is needed, so we - * must have a separate flag to show if the map has been computed. - */ - TupleConversionMap *ri_ChildToRootMap; - bool ri_ChildToRootMapValid; - /* for use by copyfrom.c when performing multi-inserts */ struct CopyMultiInsertBuffer *ri_CopyMultiInsertBuffer; @@ -595,6 +621,7 @@ typedef struct EState * pointers, or NULL if not yet opened */ struct ExecRowMark **es_rowmarks; /* Array of per-range-table-entry * ExecRowMarks, or NULL if none */ + List *es_rteperminfos; /* List of RTEPermissionInfo */ PlannedStmt *es_plannedstmt; /* link to top of plan tree */ const char *es_sourceText; /* Source text from QueryDesc */ @@ -633,7 +660,10 @@ typedef struct EState List *es_tupleTable; /* List of TupleTableSlots */ - uint64 es_processed; /* # of tuples processed */ + uint64 es_processed; /* # of tuples processed during one + * ExecutorRun() call. */ + uint64 es_total_processed; /* total # of tuples aggregated across all + * ExecutorRun() calls. */ int es_top_eflags; /* eflags passed to ExecutorStart */ int es_instrument; /* OR of InstrumentOption flags */ @@ -677,6 +707,13 @@ typedef struct EState int es_jit_flags; struct JitContext *es_jit; struct JitInstrumentation *es_jit_worker_instr; + + /* + * Lists of ResultRelInfos for foreign tables on which batch-inserts are + * to be executed and owning ModifyTableStates, stored in the same order. + */ + List *es_insert_pending_result_relations; + List *es_insert_pending_modifytables; } EState; @@ -684,8 +721,8 @@ typedef struct EState * ExecRowMark - * runtime representation of FOR [KEY] UPDATE/SHARE clauses * - * When doing UPDATE, DELETE, or SELECT FOR [KEY] UPDATE/SHARE, we will have an - * ExecRowMark for each non-target relation in the query (except inheritance + * When doing UPDATE/DELETE/MERGE/SELECT FOR [KEY] UPDATE/SHARE, we will have + * an ExecRowMark for each non-target relation in the query (except inheritance * parent RTEs, which can be ignored at runtime). Virtual relations such as * subqueries-in-FROM will have an ExecRowMark with relation == NULL. See * PlanRowMark for details about most of the fields. In addition to fields @@ -993,6 +1030,8 @@ typedef TupleTableSlot *(*ExecProcNodeMtd) (struct PlanState *pstate); */ typedef struct PlanState { + pg_node_attr(abstract) + NodeTag type; Plan *plan; /* associated Plan node */ @@ -1130,15 +1169,16 @@ typedef struct PlanState */ typedef struct EPQState { - /* Initialized at EvalPlanQualInit() time: */ - + /* These are initialized by EvalPlanQualInit() and do not change later: */ EState *parentestate; /* main query's EState */ int epqParam; /* ID of Param to force scan node re-eval */ + List *resultRelations; /* integer list of RT indexes, or NIL */ /* - * Tuples to be substituted by scan nodes. They need to set up, before - * calling EvalPlanQual()/EvalPlanQualNext(), into the slot returned by - * EvalPlanQualSlot(scanrelid). The array is indexed by scanrelid - 1. + * relsubs_slot[scanrelid - 1] holds the EPQ test tuple to be returned by + * the scan node for the scanrelid'th RT index, in place of performing an + * actual table scan. Callers should use EvalPlanQualSlot() to fetch + * these slots. */ List *tuple_table; /* tuple table for relsubs_slot */ TupleTableSlot **relsubs_slot; @@ -1172,11 +1212,21 @@ typedef struct EPQState ExecAuxRowMark **relsubs_rowmark; /* - * True if a relation's EPQ tuple has been fetched for relation, indexed - * by scanrelid - 1. + * relsubs_done[scanrelid - 1] is true if there is no EPQ tuple for this + * target relation or it has already been fetched in the current scan of + * this target relation within the current EvalPlanQual test. */ bool *relsubs_done; + /* + * relsubs_blocked[scanrelid - 1] is true if there is no EPQ tuple for + * this target relation during the current EvalPlanQual test. We keep + * these flags set for all relids listed in resultRelations, but + * transiently clear the one for the relation whose tuple is actually + * passed to EvalPlanQual(). + */ + bool *relsubs_blocked; + PlanState *recheckplanstate; /* EPQ specific exec nodes, for ->plan */ } EPQState; @@ -1317,6 +1367,7 @@ struct AppendState ParallelAppendState *as_pstate; /* parallel coordination info */ Size pstate_len; /* size of parallel coordination info */ struct PartitionPruneState *as_prune_state; + bool as_valid_subplans_identified; /* is as_valid_subplans valid? */ Bitmapset *as_valid_subplans; Bitmapset *as_valid_asyncplans; /* valid asynchronous plans indexes */ bool (*choose_next_subplan) (AppendState *); @@ -1932,6 +1983,7 @@ typedef struct CustomScanState List *custom_ps; /* list of child PlanState nodes, if any */ Size pscan_len; /* size of parallel coordination information */ const struct CustomExecMethods *methods; + const struct TupleTableSlotOps *slotOps; } CustomScanState; /* ---------------------------------------------------------------- @@ -2034,7 +2086,8 @@ typedef struct MergeJoinState * OuterTupleSlot is empty!) * hj_OuterTupleSlot tuple slot for outer tuples * hj_HashTupleSlot tuple slot for inner (hashed) tuples - * hj_NullOuterTupleSlot prepared null tuple for right/full outer joins + * hj_NullOuterTupleSlot prepared null tuple for right/right-anti/full + * outer joins * hj_NullInnerTupleSlot prepared null tuple for left/full outer joins * hj_FirstOuterTupleSlot first tuple retrieved from outer plan * hj_JoinState current state of ExecHashJoin state machine diff --git a/src/postgres/include/nodes/extensible.h b/src/postgres/include/nodes/extensible.h index 6244c8d9..7d51c603 100644 --- a/src/postgres/include/nodes/extensible.h +++ b/src/postgres/include/nodes/extensible.h @@ -4,7 +4,7 @@ * Definitions for extensible nodes and custom scans * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/extensible.h @@ -31,6 +31,8 @@ */ typedef struct ExtensibleNode { + pg_node_attr(custom_copy_equal, custom_read_write) + NodeTag type; const char *extnodename; /* identifier of ExtensibleNodeMethods */ } ExtensibleNode; @@ -70,8 +72,8 @@ typedef struct ExtensibleNodeMethods void (*nodeRead) (struct ExtensibleNode *node); } ExtensibleNodeMethods; -extern void RegisterExtensibleNodeMethods(const ExtensibleNodeMethods *method); -extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *name, +extern void RegisterExtensibleNodeMethods(const ExtensibleNodeMethods *methods); +extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *extnodename, bool missing_ok); /* diff --git a/src/postgres/include/nodes/lockoptions.h b/src/postgres/include/nodes/lockoptions.h index 399f7296..bc5e9833 100644 --- a/src/postgres/include/nodes/lockoptions.h +++ b/src/postgres/include/nodes/lockoptions.h @@ -4,7 +4,7 @@ * Common header for some locking-related declarations. * * - * Copyright (c) 2014-2022, PostgreSQL Global Development Group + * Copyright (c) 2014-2023, PostgreSQL Global Development Group * * src/include/nodes/lockoptions.h * diff --git a/src/postgres/include/nodes/makefuncs.h b/src/postgres/include/nodes/makefuncs.h index 50de4c62..31807030 100644 --- a/src/postgres/include/nodes/makefuncs.h +++ b/src/postgres/include/nodes/makefuncs.h @@ -4,7 +4,7 @@ * prototypes for the creator functions of various nodes * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/makefuncs.h @@ -96,7 +96,9 @@ extern List *make_ands_implicit(Expr *clause); extern IndexInfo *makeIndexInfo(int numattrs, int numkeyattrs, Oid amoid, List *expressions, List *predicates, - bool unique, bool nulls_not_distinct, bool isready, bool concurrent); + bool unique, bool nulls_not_distinct, + bool isready, bool concurrent, + bool summarizing); extern DefElem *makeDefElem(char *name, Node *arg, int location); extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg, @@ -106,4 +108,14 @@ extern GroupingSet *makeGroupingSet(GroupingSetKind kind, List *content, int loc extern VacuumRelation *makeVacuumRelation(RangeVar *relation, Oid oid, List *va_cols); +extern JsonFormat *makeJsonFormat(JsonFormatType type, JsonEncoding encoding, + int location); +extern JsonValueExpr *makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr, + JsonFormat *format); +extern Node *makeJsonKeyValue(Node *key, Node *value); +extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format, + JsonValueType item_type, bool unique_keys, + int location); +extern JsonEncoding makeJsonEncoding(char *name); + #endif /* MAKEFUNC_H */ diff --git a/src/postgres/include/nodes/memnodes.h b/src/postgres/include/nodes/memnodes.h index bbbe151e..ff6453bb 100644 --- a/src/postgres/include/nodes/memnodes.h +++ b/src/postgres/include/nodes/memnodes.h @@ -4,7 +4,7 @@ * POSTGRES memory context node definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/memnodes.h @@ -59,11 +59,12 @@ typedef struct MemoryContextMethods { void *(*alloc) (MemoryContext context, Size size); /* call this free_p in case someone #define's free() */ - void (*free_p) (MemoryContext context, void *pointer); - void *(*realloc) (MemoryContext context, void *pointer, Size size); + void (*free_p) (void *pointer); + void *(*realloc) (void *pointer, Size size); void (*reset) (MemoryContext context); void (*delete_context) (MemoryContext context); - Size (*get_chunk_space) (MemoryContext context, void *pointer); + MemoryContext (*get_chunk_context) (void *pointer); + Size (*get_chunk_space) (void *pointer); bool (*is_empty) (MemoryContext context); void (*stats) (MemoryContext context, MemoryStatsPrintFunc printfunc, void *passthru, @@ -77,6 +78,8 @@ typedef struct MemoryContextMethods typedef struct MemoryContextData { + pg_node_attr(abstract) /* there are no nodes of this type */ + NodeTag type; /* identifies exact kind of context */ /* these two fields are placed here to minimize alignment wastage: */ bool isReset; /* T = no space alloced since last reset */ diff --git a/src/postgres/include/nodes/miscnodes.h b/src/postgres/include/nodes/miscnodes.h new file mode 100644 index 00000000..79cc0db4 --- /dev/null +++ b/src/postgres/include/nodes/miscnodes.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------- + * + * miscnodes.h + * Definitions for hard-to-classify node types. + * + * Node types declared here are not part of parse trees, plan trees, + * or execution state trees. We only assign them NodeTag values because + * IsA() tests provide a convenient way to disambiguate what kind of + * structure is being passed through assorted APIs, such as function + * "context" pointers. + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/nodes/miscnodes.h + * + *------------------------------------------------------------------------- + */ +#ifndef MISCNODES_H +#define MISCNODES_H + +#include "nodes/nodes.h" + +/* + * ErrorSaveContext - + * function call context node for handling of "soft" errors + * + * A caller wishing to trap soft errors must initialize a struct like this + * with all fields zero/NULL except for the NodeTag. Optionally, set + * details_wanted = true if more than the bare knowledge that a soft error + * occurred is required. The struct is then passed to a SQL-callable function + * via the FunctionCallInfo.context field; or below the level of SQL calls, + * it could be passed to a subroutine directly. + * + * After calling code that might report an error this way, check + * error_occurred to see if an error happened. If so, and if details_wanted + * is true, error_data has been filled with error details (stored in the + * callee's memory context!). FreeErrorData() can be called to release + * error_data, although that step is typically not necessary if the called + * code was run in a short-lived context. + */ +typedef struct ErrorSaveContext +{ + NodeTag type; + bool error_occurred; /* set to true if we detect a soft error */ + bool details_wanted; /* does caller want more info than that? */ + ErrorData *error_data; /* details of error, if so */ +} ErrorSaveContext; + +/* Often-useful macro for checking if a soft error was reported */ +#define SOFT_ERROR_OCCURRED(escontext) \ + ((escontext) != NULL && IsA(escontext, ErrorSaveContext) && \ + ((ErrorSaveContext *) (escontext))->error_occurred) + +#endif /* MISCNODES_H */ diff --git a/src/postgres/include/nodes/nodeFuncs.h b/src/postgres/include/nodes/nodeFuncs.h index 93c60bde..20921b45 100644 --- a/src/postgres/include/nodes/nodeFuncs.h +++ b/src/postgres/include/nodes/nodeFuncs.h @@ -3,7 +3,7 @@ * nodeFuncs.h * Various general-purpose manipulations of Node trees * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/nodeFuncs.h @@ -15,6 +15,8 @@ #include "nodes/parsenodes.h" +struct PlanState; /* avoid including execnodes.h too */ + /* flags bits for query_tree_walker and query_tree_mutator */ #define QTW_IGNORE_RT_SUBQUERIES 0x01 /* subqueries in rtable */ @@ -27,11 +29,19 @@ #define QTW_EXAMINE_RTES_AFTER 0x20 /* examine RTE nodes after their * contents */ #define QTW_DONT_COPY_QUERY 0x40 /* do not copy top Query */ -#define QTW_EXAMINE_SORTGROUP 0x80 /* include SortGroupNode lists */ +#define QTW_EXAMINE_SORTGROUP 0x80 /* include SortGroupClause lists */ /* callback function for check_functions_in_node */ typedef bool (*check_function_callback) (Oid func_id, void *context); +/* callback functions for tree walkers */ +typedef bool (*tree_walker_callback) (Node *node, void *context); +typedef bool (*planstate_tree_walker_callback) (struct PlanState *planstate, + void *context); + +/* callback functions for tree mutators */ +typedef Node *(*tree_mutator_callback) (Node *node, void *context); + extern Oid exprType(const Node *expr); extern int32 exprTypmod(const Node *expr); @@ -129,34 +139,84 @@ get_notclausearg(const void *notclause) extern bool check_functions_in_node(Node *node, check_function_callback checker, void *context); -extern bool expression_tree_walker(Node *node, bool (*walker) (), - void *context); -extern Node *expression_tree_mutator(Node *node, Node *(*mutator) (), - void *context); - -extern bool query_tree_walker(Query *query, bool (*walker) (), - void *context, int flags); -extern Query *query_tree_mutator(Query *query, Node *(*mutator) (), - void *context, int flags); - -extern bool range_table_walker(List *rtable, bool (*walker) (), - void *context, int flags); -extern List *range_table_mutator(List *rtable, Node *(*mutator) (), - void *context, int flags); - -extern bool range_table_entry_walker(RangeTblEntry *rte, bool (*walker) (), - void *context, int flags); - -extern bool query_or_expression_tree_walker(Node *node, bool (*walker) (), - void *context, int flags); -extern Node *query_or_expression_tree_mutator(Node *node, Node *(*mutator) (), - void *context, int flags); +/* + * The following functions are usually passed walker or mutator callbacks + * that are declared like "bool walker(Node *node, my_struct *context)" + * rather than "bool walker(Node *node, void *context)" as a strict reading + * of the C standard would require. Changing the callbacks' declarations + * to "void *" would create serious hazards of passing them the wrong context + * struct type, so we respectfully decline to support the standard's position + * that a pointer to struct is incompatible with "void *". Instead, silence + * related compiler warnings by inserting casts into these macro wrappers. + */ -extern bool raw_expression_tree_walker(Node *node, bool (*walker) (), +#define expression_tree_walker(n, w, c) \ + expression_tree_walker_impl(n, (tree_walker_callback) (w), c) +#define expression_tree_mutator(n, m, c) \ + expression_tree_mutator_impl(n, (tree_mutator_callback) (m), c) + +#define query_tree_walker(q, w, c, f) \ + query_tree_walker_impl(q, (tree_walker_callback) (w), c, f) +#define query_tree_mutator(q, m, c, f) \ + query_tree_mutator_impl(q, (tree_mutator_callback) (m), c, f) + +#define range_table_walker(rt, w, c, f) \ + range_table_walker_impl(rt, (tree_walker_callback) (w), c, f) +#define range_table_mutator(rt, m, c, f) \ + range_table_mutator_impl(rt, (tree_mutator_callback) (m), c, f) + +#define range_table_entry_walker(r, w, c, f) \ + range_table_entry_walker_impl(r, (tree_walker_callback) (w), c, f) + +#define query_or_expression_tree_walker(n, w, c, f) \ + query_or_expression_tree_walker_impl(n, (tree_walker_callback) (w), c, f) +#define query_or_expression_tree_mutator(n, m, c, f) \ + query_or_expression_tree_mutator_impl(n, (tree_mutator_callback) (m), c, f) + +#define raw_expression_tree_walker(n, w, c) \ + raw_expression_tree_walker_impl(n, (tree_walker_callback) (w), c) + +#define planstate_tree_walker(ps, w, c) \ + planstate_tree_walker_impl(ps, (planstate_tree_walker_callback) (w), c) + +extern bool expression_tree_walker_impl(Node *node, + tree_walker_callback walker, + void *context); +extern Node *expression_tree_mutator_impl(Node *node, + tree_mutator_callback mutator, + void *context); + +extern bool query_tree_walker_impl(Query *query, + tree_walker_callback walker, + void *context, int flags); +extern Query *query_tree_mutator_impl(Query *query, + tree_mutator_callback mutator, + void *context, int flags); + +extern bool range_table_walker_impl(List *rtable, + tree_walker_callback walker, + void *context, int flags); +extern List *range_table_mutator_impl(List *rtable, + tree_mutator_callback mutator, + void *context, int flags); + +extern bool range_table_entry_walker_impl(RangeTblEntry *rte, + tree_walker_callback walker, + void *context, int flags); + +extern bool query_or_expression_tree_walker_impl(Node *node, + tree_walker_callback walker, + void *context, int flags); +extern Node *query_or_expression_tree_mutator_impl(Node *node, + tree_mutator_callback mutator, + void *context, int flags); + +extern bool raw_expression_tree_walker_impl(Node *node, + tree_walker_callback walker, + void *context); + +extern bool planstate_tree_walker_impl(struct PlanState *planstate, + planstate_tree_walker_callback walker, void *context); -struct PlanState; -extern bool planstate_tree_walker(struct PlanState *planstate, bool (*walker) (), - void *context); - #endif /* NODEFUNCS_H */ diff --git a/src/postgres/include/nodes/nodes.h b/src/postgres/include/nodes/nodes.h index 8f5c0ec1..13ea9cae 100644 --- a/src/postgres/include/nodes/nodes.h +++ b/src/postgres/include/nodes/nodes.h @@ -4,7 +4,7 @@ * Definitions for tagged nodes. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/nodes.h @@ -27,515 +27,98 @@ typedef enum NodeTag { T_Invalid = 0, - /* - * TAGS FOR EXECUTOR NODES (execnodes.h) - */ - T_IndexInfo, - T_ExprContext, - T_ProjectionInfo, - T_JunkFilter, - T_OnConflictSetState, - T_MergeActionState, - T_ResultRelInfo, - T_EState, - T_TupleTableSlot, - - /* - * TAGS FOR PLAN NODES (plannodes.h) - */ - T_Plan, - T_Result, - T_ProjectSet, - T_ModifyTable, - T_Append, - T_MergeAppend, - T_RecursiveUnion, - T_BitmapAnd, - T_BitmapOr, - T_Scan, - T_SeqScan, - T_SampleScan, - T_IndexScan, - T_IndexOnlyScan, - T_BitmapIndexScan, - T_BitmapHeapScan, - T_TidScan, - T_TidRangeScan, - T_SubqueryScan, - T_FunctionScan, - T_ValuesScan, - T_TableFuncScan, - T_CteScan, - T_NamedTuplestoreScan, - T_WorkTableScan, - T_ForeignScan, - T_CustomScan, - T_Join, - T_NestLoop, - T_MergeJoin, - T_HashJoin, - T_Material, - T_Memoize, - T_Sort, - T_IncrementalSort, - T_Group, - T_Agg, - T_WindowAgg, - T_Unique, - T_Gather, - T_GatherMerge, - T_Hash, - T_SetOp, - T_LockRows, - T_Limit, - /* these aren't subclasses of Plan: */ - T_NestLoopParam, - T_PlanRowMark, - T_PartitionPruneInfo, - T_PartitionedRelPruneInfo, - T_PartitionPruneStepOp, - T_PartitionPruneStepCombine, - T_PlanInvalItem, - - /* - * TAGS FOR PLAN STATE NODES (execnodes.h) - * - * These should correspond one-to-one with Plan node types. - */ - T_PlanState, - T_ResultState, - T_ProjectSetState, - T_ModifyTableState, - T_AppendState, - T_MergeAppendState, - T_RecursiveUnionState, - T_BitmapAndState, - T_BitmapOrState, - T_ScanState, - T_SeqScanState, - T_SampleScanState, - T_IndexScanState, - T_IndexOnlyScanState, - T_BitmapIndexScanState, - T_BitmapHeapScanState, - T_TidScanState, - T_TidRangeScanState, - T_SubqueryScanState, - T_FunctionScanState, - T_TableFuncScanState, - T_ValuesScanState, - T_CteScanState, - T_NamedTuplestoreScanState, - T_WorkTableScanState, - T_ForeignScanState, - T_CustomScanState, - T_JoinState, - T_NestLoopState, - T_MergeJoinState, - T_HashJoinState, - T_MaterialState, - T_MemoizeState, - T_SortState, - T_IncrementalSortState, - T_GroupState, - T_AggState, - T_WindowAggState, - T_UniqueState, - T_GatherState, - T_GatherMergeState, - T_HashState, - T_SetOpState, - T_LockRowsState, - T_LimitState, - - /* - * TAGS FOR PRIMITIVE NODES (primnodes.h) - */ - T_Alias, - T_RangeVar, - T_TableFunc, - T_Var, - T_Const, - T_Param, - T_Aggref, - T_GroupingFunc, - T_WindowFunc, - T_SubscriptingRef, - T_FuncExpr, - T_NamedArgExpr, - T_OpExpr, - T_DistinctExpr, - T_NullIfExpr, - T_ScalarArrayOpExpr, - T_BoolExpr, - T_SubLink, - T_SubPlan, - T_AlternativeSubPlan, - T_FieldSelect, - T_FieldStore, - T_RelabelType, - T_CoerceViaIO, - T_ArrayCoerceExpr, - T_ConvertRowtypeExpr, - T_CollateExpr, - T_CaseExpr, - T_CaseWhen, - T_CaseTestExpr, - T_ArrayExpr, - T_RowExpr, - T_RowCompareExpr, - T_CoalesceExpr, - T_MinMaxExpr, - T_SQLValueFunction, - T_XmlExpr, - T_NullTest, - T_BooleanTest, - T_CoerceToDomain, - T_CoerceToDomainValue, - T_SetToDefault, - T_CurrentOfExpr, - T_NextValueExpr, - T_InferenceElem, - T_TargetEntry, - T_RangeTblRef, - T_JoinExpr, - T_FromExpr, - T_OnConflictExpr, - T_IntoClause, - - /* - * TAGS FOR EXPRESSION STATE NODES (execnodes.h) - * - * ExprState represents the evaluation state for a whole expression tree. - * Most Expr-based plan nodes do not have a corresponding expression state - * node, they're fully handled within execExpr* - but sometimes the state - * needs to be shared with other parts of the executor, as for example - * with SubPlanState, which nodeSubplan.c has to modify. - */ - T_ExprState, - T_WindowFuncExprState, - T_SetExprState, - T_SubPlanState, - T_DomainConstraintState, - - /* - * TAGS FOR PLANNER NODES (pathnodes.h) - */ - T_PlannerInfo, - T_PlannerGlobal, - T_RelOptInfo, - T_IndexOptInfo, - T_ForeignKeyOptInfo, - T_ParamPathInfo, - T_Path, - T_IndexPath, - T_BitmapHeapPath, - T_BitmapAndPath, - T_BitmapOrPath, - T_TidPath, - T_TidRangePath, - T_SubqueryScanPath, - T_ForeignPath, - T_CustomPath, - T_NestPath, - T_MergePath, - T_HashPath, - T_AppendPath, - T_MergeAppendPath, - T_GroupResultPath, - T_MaterialPath, - T_MemoizePath, - T_UniquePath, - T_GatherPath, - T_GatherMergePath, - T_ProjectionPath, - T_ProjectSetPath, - T_SortPath, - T_IncrementalSortPath, - T_GroupPath, - T_UpperUniquePath, - T_AggPath, - T_GroupingSetsPath, - T_MinMaxAggPath, - T_WindowAggPath, - T_SetOpPath, - T_RecursiveUnionPath, - T_LockRowsPath, - T_ModifyTablePath, - T_LimitPath, - /* these aren't subclasses of Path: */ - T_EquivalenceClass, - T_EquivalenceMember, - T_PathKey, - T_PathKeyInfo, - T_PathTarget, - T_RestrictInfo, - T_IndexClause, - T_PlaceHolderVar, - T_SpecialJoinInfo, - T_AppendRelInfo, - T_RowIdentityVarInfo, - T_PlaceHolderInfo, - T_MinMaxAggInfo, - T_PlannerParamItem, - T_RollupData, - T_GroupingSetData, - T_StatisticExtInfo, - T_MergeAction, - - /* - * TAGS FOR MEMORY NODES (memnodes.h) - */ - T_AllocSetContext, - T_SlabContext, - T_GenerationContext, - - /* - * TAGS FOR VALUE NODES (value.h) - */ - T_Integer, - T_Float, - T_Boolean, - T_String, - T_BitString, - - /* - * TAGS FOR LIST NODES (pg_list.h) - */ - T_List, - T_IntList, - T_OidList, - - /* - * TAGS FOR EXTENSIBLE NODES (extensible.h) - */ - T_ExtensibleNode, - - /* - * TAGS FOR STATEMENT NODES (mostly in parsenodes.h) - */ - T_RawStmt, - T_Query, - T_PlannedStmt, - T_InsertStmt, - T_DeleteStmt, - T_UpdateStmt, - T_MergeStmt, - T_SelectStmt, - T_ReturnStmt, - T_PLAssignStmt, - T_AlterTableStmt, - T_AlterTableCmd, - T_AlterDomainStmt, - T_SetOperationStmt, - T_GrantStmt, - T_GrantRoleStmt, - T_AlterDefaultPrivilegesStmt, - T_ClosePortalStmt, - T_ClusterStmt, - T_CopyStmt, - T_CreateStmt, - T_DefineStmt, - T_DropStmt, - T_TruncateStmt, - T_CommentStmt, - T_FetchStmt, - T_IndexStmt, - T_CreateFunctionStmt, - T_AlterFunctionStmt, - T_DoStmt, - T_RenameStmt, - T_RuleStmt, - T_NotifyStmt, - T_ListenStmt, - T_UnlistenStmt, - T_TransactionStmt, - T_ViewStmt, - T_LoadStmt, - T_CreateDomainStmt, - T_CreatedbStmt, - T_DropdbStmt, - T_VacuumStmt, - T_ExplainStmt, - T_CreateTableAsStmt, - T_CreateSeqStmt, - T_AlterSeqStmt, - T_VariableSetStmt, - T_VariableShowStmt, - T_DiscardStmt, - T_CreateTrigStmt, - T_CreatePLangStmt, - T_CreateRoleStmt, - T_AlterRoleStmt, - T_DropRoleStmt, - T_LockStmt, - T_ConstraintsSetStmt, - T_ReindexStmt, - T_CheckPointStmt, - T_CreateSchemaStmt, - T_AlterDatabaseStmt, - T_AlterDatabaseRefreshCollStmt, - T_AlterDatabaseSetStmt, - T_AlterRoleSetStmt, - T_CreateConversionStmt, - T_CreateCastStmt, - T_CreateOpClassStmt, - T_CreateOpFamilyStmt, - T_AlterOpFamilyStmt, - T_PrepareStmt, - T_ExecuteStmt, - T_DeallocateStmt, - T_DeclareCursorStmt, - T_CreateTableSpaceStmt, - T_DropTableSpaceStmt, - T_AlterObjectDependsStmt, - T_AlterObjectSchemaStmt, - T_AlterOwnerStmt, - T_AlterOperatorStmt, - T_AlterTypeStmt, - T_DropOwnedStmt, - T_ReassignOwnedStmt, - T_CompositeTypeStmt, - T_CreateEnumStmt, - T_CreateRangeStmt, - T_AlterEnumStmt, - T_AlterTSDictionaryStmt, - T_AlterTSConfigurationStmt, - T_CreateFdwStmt, - T_AlterFdwStmt, - T_CreateForeignServerStmt, - T_AlterForeignServerStmt, - T_CreateUserMappingStmt, - T_AlterUserMappingStmt, - T_DropUserMappingStmt, - T_AlterTableSpaceOptionsStmt, - T_AlterTableMoveAllStmt, - T_SecLabelStmt, - T_CreateForeignTableStmt, - T_ImportForeignSchemaStmt, - T_CreateExtensionStmt, - T_AlterExtensionStmt, - T_AlterExtensionContentsStmt, - T_CreateEventTrigStmt, - T_AlterEventTrigStmt, - T_RefreshMatViewStmt, - T_ReplicaIdentityStmt, - T_AlterSystemStmt, - T_CreatePolicyStmt, - T_AlterPolicyStmt, - T_CreateTransformStmt, - T_CreateAmStmt, - T_CreatePublicationStmt, - T_AlterPublicationStmt, - T_CreateSubscriptionStmt, - T_AlterSubscriptionStmt, - T_DropSubscriptionStmt, - T_CreateStatsStmt, - T_AlterCollationStmt, - T_CallStmt, - T_AlterStatsStmt, - - /* - * TAGS FOR PARSE TREE NODES (parsenodes.h) - */ - T_A_Expr, - T_ColumnRef, - T_ParamRef, - T_A_Const, - T_FuncCall, - T_A_Star, - T_A_Indices, - T_A_Indirection, - T_A_ArrayExpr, - T_ResTarget, - T_MultiAssignRef, - T_TypeCast, - T_CollateClause, - T_SortBy, - T_WindowDef, - T_RangeSubselect, - T_RangeFunction, - T_RangeTableSample, - T_RangeTableFunc, - T_RangeTableFuncCol, - T_TypeName, - T_ColumnDef, - T_IndexElem, - T_StatsElem, - T_Constraint, - T_DefElem, - T_RangeTblEntry, - T_RangeTblFunction, - T_TableSampleClause, - T_WithCheckOption, - T_SortGroupClause, - T_GroupingSet, - T_WindowClause, - T_ObjectWithArgs, - T_AccessPriv, - T_CreateOpClassItem, - T_TableLikeClause, - T_FunctionParameter, - T_LockingClause, - T_RowMarkClause, - T_XmlSerialize, - T_WithClause, - T_InferClause, - T_OnConflictClause, - T_CTESearchClause, - T_CTECycleClause, - T_CommonTableExpr, - T_MergeWhenClause, - T_RoleSpec, - T_TriggerTransition, - T_PartitionElem, - T_PartitionSpec, - T_PartitionBoundSpec, - T_PartitionRangeDatum, - T_PartitionCmd, - T_VacuumRelation, - T_PublicationObjSpec, - T_PublicationTable, - - /* - * TAGS FOR REPLICATION GRAMMAR PARSE NODES (replnodes.h) - */ - T_IdentifySystemCmd, - T_BaseBackupCmd, - T_CreateReplicationSlotCmd, - T_DropReplicationSlotCmd, - T_ReadReplicationSlotCmd, - T_StartReplicationCmd, - T_TimeLineHistoryCmd, - - /* - * TAGS FOR RANDOM OTHER STUFF - * - * These are objects that aren't part of parse/plan/execute node tree - * structures, but we give them NodeTags anyway for identification - * purposes (usually because they are involved in APIs where we want to - * pass multiple object types through the same pointer). - */ - T_TriggerData, /* in commands/trigger.h */ - T_EventTriggerData, /* in commands/event_trigger.h */ - T_ReturnSetInfo, /* in nodes/execnodes.h */ - T_WindowObjectData, /* private in nodeWindowAgg.c */ - T_TIDBitmap, /* in nodes/tidbitmap.h */ - T_InlineCodeBlock, /* in nodes/parsenodes.h */ - T_FdwRoutine, /* in foreign/fdwapi.h */ - T_IndexAmRoutine, /* in access/amapi.h */ - T_TableAmRoutine, /* in access/tableam.h */ - T_TsmRoutine, /* in access/tsmapi.h */ - T_ForeignKeyCacheInfo, /* in utils/rel.h */ - T_CallContext, /* in nodes/parsenodes.h */ - T_SupportRequestSimplify, /* in nodes/supportnodes.h */ - T_SupportRequestSelectivity, /* in nodes/supportnodes.h */ - T_SupportRequestCost, /* in nodes/supportnodes.h */ - T_SupportRequestRows, /* in nodes/supportnodes.h */ - T_SupportRequestIndexCondition, /* in nodes/supportnodes.h */ - T_SupportRequestWFuncMonotonic /* in nodes/supportnodes.h */ +#include "nodes/nodetags.h" } NodeTag; +/* + * pg_node_attr() - Used in node definitions to set extra information for + * gen_node_support.pl + * + * Attributes can be attached to a node as a whole (place the attribute + * specification on the first line after the struct's opening brace) + * or to a specific field (place it at the end of that field's line). The + * argument is a comma-separated list of attributes. Unrecognized attributes + * cause an error. + * + * Valid node attributes: + * + * - abstract: Abstract types are types that cannot be instantiated but that + * can be supertypes of other types. We track their fields, so that + * subtypes can use them, but we don't emit a node tag, so you can't + * instantiate them. + * + * - custom_copy_equal: Has custom implementations in copyfuncs.c and + * equalfuncs.c. + * + * - custom_read_write: Has custom implementations in outfuncs.c and + * readfuncs.c. + * + * - custom_query_jumble: Has custom implementation in queryjumblefuncs.c. + * + * - no_copy: Does not support copyObject() at all. + * + * - no_equal: Does not support equal() at all. + * + * - no_copy_equal: Shorthand for both no_copy and no_equal. + * + * - no_query_jumble: Does not support JumbleQuery() at all. + * + * - no_read: Does not support nodeRead() at all. + * + * - nodetag_only: Does not support copyObject(), equal(), jumbleQuery() + * outNode() or nodeRead(). + * + * - special_read_write: Has special treatment in outNode() and nodeRead(). + * + * - nodetag_number(VALUE): assign the specified nodetag number instead of + * an auto-generated number. Typically this would only be used in stable + * branches, to give a newly-added node type a number without breaking ABI + * by changing the numbers of existing node types. + * + * Node types can be supertypes of other types whether or not they are marked + * abstract: if a node struct appears as the first field of another struct + * type, then it is the supertype of that type. The no_copy, no_equal, + * no_query_jumble and no_read node attributes are automatically inherited + * from the supertype. (Notice that nodetag_only does not inherit, so it's + * not quite equivalent to a combination of other attributes.) + * + * Valid node field attributes: + * + * - array_size(OTHERFIELD): This field is a dynamically allocated array with + * size indicated by the mentioned other field. The other field is either a + * scalar or a list, in which case the length of the list is used. + * + * - copy_as(VALUE): In copyObject(), replace the field's value with VALUE. + * + * - copy_as_scalar: In copyObject(), copy the field as a scalar value + * (e.g. a pointer) even if it is a node-type pointer. + * + * - equal_as_scalar: In equal(), compare the field as a scalar value + * even if it is a node-type pointer. + * + * - equal_ignore: Ignore the field for equality. + * + * - equal_ignore_if_zero: Ignore the field for equality if it is zero. + * (Otherwise, compare normally.) + * + * - query_jumble_ignore: Ignore the field for the query jumbling. Note + * that typmod and collation information are usually irrelevant for the + * query jumbling. + * + * - query_jumble_location: Mark the field as a location to track. This is + * only allowed for integer fields that include "location" in their name. + * + * - read_as(VALUE): In nodeRead(), replace the field's value with VALUE. + * + * - read_write_ignore: Ignore the field for read/write. This is only allowed + * if the node type is marked no_read or read_as() is also specified. + * + * - write_only_relids, write_only_nondefault_pathtarget, write_only_req_outer: + * Special handling for Path struct; see there. + * + */ +#define pg_node_attr(...) + /* * The first field of a node of any type is guaranteed to be the NodeTag. * Hence the type of any node can be gotten by casting it to Node. Declaring @@ -652,7 +235,7 @@ extern int16 *readAttrNumberCols(int numCols); /* * nodes/copyfuncs.c */ -extern void *copyObjectImpl(const void *obj); +extern void *copyObjectImpl(const void *from); /* cast result back to argument type, if supported by compiler */ #ifdef HAVE_TYPEOF @@ -734,6 +317,7 @@ typedef enum JoinType */ JOIN_SEMI, /* 1 copy of each LHS row that has match(es) */ JOIN_ANTI, /* 1 copy of each LHS row that has no match */ + JOIN_RIGHT_ANTI, /* 1 copy of each RHS row that has no match */ /* * These codes are used internally in the planner, but are not supported @@ -766,7 +350,8 @@ typedef enum JoinType ((1 << JOIN_LEFT) | \ (1 << JOIN_FULL) | \ (1 << JOIN_RIGHT) | \ - (1 << JOIN_ANTI))) != 0) + (1 << JOIN_ANTI) | \ + (1 << JOIN_RIGHT_ANTI))) != 0) /* * AggStrategy - diff --git a/src/postgres/include/nodes/nodetags.h b/src/postgres/include/nodes/nodetags.h new file mode 100644 index 00000000..f75ac7a0 --- /dev/null +++ b/src/postgres/include/nodes/nodetags.h @@ -0,0 +1,471 @@ +/*------------------------------------------------------------------------- + * + * nodetags.h + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ + T_List = 1, + T_Alias = 2, + T_RangeVar = 3, + T_TableFunc = 4, + T_IntoClause = 5, + T_Var = 6, + T_Const = 7, + T_Param = 8, + T_Aggref = 9, + T_GroupingFunc = 10, + T_WindowFunc = 11, + T_SubscriptingRef = 12, + T_FuncExpr = 13, + T_NamedArgExpr = 14, + T_OpExpr = 15, + T_DistinctExpr = 16, + T_NullIfExpr = 17, + T_ScalarArrayOpExpr = 18, + T_BoolExpr = 19, + T_SubLink = 20, + T_SubPlan = 21, + T_AlternativeSubPlan = 22, + T_FieldSelect = 23, + T_FieldStore = 24, + T_RelabelType = 25, + T_CoerceViaIO = 26, + T_ArrayCoerceExpr = 27, + T_ConvertRowtypeExpr = 28, + T_CollateExpr = 29, + T_CaseExpr = 30, + T_CaseWhen = 31, + T_CaseTestExpr = 32, + T_ArrayExpr = 33, + T_RowExpr = 34, + T_RowCompareExpr = 35, + T_CoalesceExpr = 36, + T_MinMaxExpr = 37, + T_SQLValueFunction = 38, + T_XmlExpr = 39, + T_JsonFormat = 40, + T_JsonReturning = 41, + T_JsonValueExpr = 42, + T_JsonConstructorExpr = 43, + T_JsonIsPredicate = 44, + T_NullTest = 45, + T_BooleanTest = 46, + T_CoerceToDomain = 47, + T_CoerceToDomainValue = 48, + T_SetToDefault = 49, + T_CurrentOfExpr = 50, + T_NextValueExpr = 51, + T_InferenceElem = 52, + T_TargetEntry = 53, + T_RangeTblRef = 54, + T_JoinExpr = 55, + T_FromExpr = 56, + T_OnConflictExpr = 57, + T_Query = 58, + T_TypeName = 59, + T_ColumnRef = 60, + T_ParamRef = 61, + T_A_Expr = 62, + T_A_Const = 63, + T_TypeCast = 64, + T_CollateClause = 65, + T_RoleSpec = 66, + T_FuncCall = 67, + T_A_Star = 68, + T_A_Indices = 69, + T_A_Indirection = 70, + T_A_ArrayExpr = 71, + T_ResTarget = 72, + T_MultiAssignRef = 73, + T_SortBy = 74, + T_WindowDef = 75, + T_RangeSubselect = 76, + T_RangeFunction = 77, + T_RangeTableFunc = 78, + T_RangeTableFuncCol = 79, + T_RangeTableSample = 80, + T_ColumnDef = 81, + T_TableLikeClause = 82, + T_IndexElem = 83, + T_DefElem = 84, + T_LockingClause = 85, + T_XmlSerialize = 86, + T_PartitionElem = 87, + T_PartitionSpec = 88, + T_PartitionBoundSpec = 89, + T_PartitionRangeDatum = 90, + T_PartitionCmd = 91, + T_RangeTblEntry = 92, + T_RTEPermissionInfo = 93, + T_RangeTblFunction = 94, + T_TableSampleClause = 95, + T_WithCheckOption = 96, + T_SortGroupClause = 97, + T_GroupingSet = 98, + T_WindowClause = 99, + T_RowMarkClause = 100, + T_WithClause = 101, + T_InferClause = 102, + T_OnConflictClause = 103, + T_CTESearchClause = 104, + T_CTECycleClause = 105, + T_CommonTableExpr = 106, + T_MergeWhenClause = 107, + T_MergeAction = 108, + T_TriggerTransition = 109, + T_JsonOutput = 110, + T_JsonKeyValue = 111, + T_JsonObjectConstructor = 112, + T_JsonArrayConstructor = 113, + T_JsonArrayQueryConstructor = 114, + T_JsonAggConstructor = 115, + T_JsonObjectAgg = 116, + T_JsonArrayAgg = 117, + T_RawStmt = 118, + T_InsertStmt = 119, + T_DeleteStmt = 120, + T_UpdateStmt = 121, + T_MergeStmt = 122, + T_SelectStmt = 123, + T_SetOperationStmt = 124, + T_ReturnStmt = 125, + T_PLAssignStmt = 126, + T_CreateSchemaStmt = 127, + T_AlterTableStmt = 128, + T_ReplicaIdentityStmt = 129, + T_AlterTableCmd = 130, + T_AlterCollationStmt = 131, + T_AlterDomainStmt = 132, + T_GrantStmt = 133, + T_ObjectWithArgs = 134, + T_AccessPriv = 135, + T_GrantRoleStmt = 136, + T_AlterDefaultPrivilegesStmt = 137, + T_CopyStmt = 138, + T_VariableSetStmt = 139, + T_VariableShowStmt = 140, + T_CreateStmt = 141, + T_Constraint = 142, + T_CreateTableSpaceStmt = 143, + T_DropTableSpaceStmt = 144, + T_AlterTableSpaceOptionsStmt = 145, + T_AlterTableMoveAllStmt = 146, + T_CreateExtensionStmt = 147, + T_AlterExtensionStmt = 148, + T_AlterExtensionContentsStmt = 149, + T_CreateFdwStmt = 150, + T_AlterFdwStmt = 151, + T_CreateForeignServerStmt = 152, + T_AlterForeignServerStmt = 153, + T_CreateForeignTableStmt = 154, + T_CreateUserMappingStmt = 155, + T_AlterUserMappingStmt = 156, + T_DropUserMappingStmt = 157, + T_ImportForeignSchemaStmt = 158, + T_CreatePolicyStmt = 159, + T_AlterPolicyStmt = 160, + T_CreateAmStmt = 161, + T_CreateTrigStmt = 162, + T_CreateEventTrigStmt = 163, + T_AlterEventTrigStmt = 164, + T_CreatePLangStmt = 165, + T_CreateRoleStmt = 166, + T_AlterRoleStmt = 167, + T_AlterRoleSetStmt = 168, + T_DropRoleStmt = 169, + T_CreateSeqStmt = 170, + T_AlterSeqStmt = 171, + T_DefineStmt = 172, + T_CreateDomainStmt = 173, + T_CreateOpClassStmt = 174, + T_CreateOpClassItem = 175, + T_CreateOpFamilyStmt = 176, + T_AlterOpFamilyStmt = 177, + T_DropStmt = 178, + T_TruncateStmt = 179, + T_CommentStmt = 180, + T_SecLabelStmt = 181, + T_DeclareCursorStmt = 182, + T_ClosePortalStmt = 183, + T_FetchStmt = 184, + T_IndexStmt = 185, + T_CreateStatsStmt = 186, + T_StatsElem = 187, + T_AlterStatsStmt = 188, + T_CreateFunctionStmt = 189, + T_FunctionParameter = 190, + T_AlterFunctionStmt = 191, + T_DoStmt = 192, + T_InlineCodeBlock = 193, + T_CallStmt = 194, + T_CallContext = 195, + T_RenameStmt = 196, + T_AlterObjectDependsStmt = 197, + T_AlterObjectSchemaStmt = 198, + T_AlterOwnerStmt = 199, + T_AlterOperatorStmt = 200, + T_AlterTypeStmt = 201, + T_RuleStmt = 202, + T_NotifyStmt = 203, + T_ListenStmt = 204, + T_UnlistenStmt = 205, + T_TransactionStmt = 206, + T_CompositeTypeStmt = 207, + T_CreateEnumStmt = 208, + T_CreateRangeStmt = 209, + T_AlterEnumStmt = 210, + T_ViewStmt = 211, + T_LoadStmt = 212, + T_CreatedbStmt = 213, + T_AlterDatabaseStmt = 214, + T_AlterDatabaseRefreshCollStmt = 215, + T_AlterDatabaseSetStmt = 216, + T_DropdbStmt = 217, + T_AlterSystemStmt = 218, + T_ClusterStmt = 219, + T_VacuumStmt = 220, + T_VacuumRelation = 221, + T_ExplainStmt = 222, + T_CreateTableAsStmt = 223, + T_RefreshMatViewStmt = 224, + T_CheckPointStmt = 225, + T_DiscardStmt = 226, + T_LockStmt = 227, + T_ConstraintsSetStmt = 228, + T_ReindexStmt = 229, + T_CreateConversionStmt = 230, + T_CreateCastStmt = 231, + T_CreateTransformStmt = 232, + T_PrepareStmt = 233, + T_ExecuteStmt = 234, + T_DeallocateStmt = 235, + T_DropOwnedStmt = 236, + T_ReassignOwnedStmt = 237, + T_AlterTSDictionaryStmt = 238, + T_AlterTSConfigurationStmt = 239, + T_PublicationTable = 240, + T_PublicationObjSpec = 241, + T_CreatePublicationStmt = 242, + T_AlterPublicationStmt = 243, + T_CreateSubscriptionStmt = 244, + T_AlterSubscriptionStmt = 245, + T_DropSubscriptionStmt = 246, + T_PlannerGlobal = 247, + T_PlannerInfo = 248, + T_RelOptInfo = 249, + T_IndexOptInfo = 250, + T_ForeignKeyOptInfo = 251, + T_StatisticExtInfo = 252, + T_JoinDomain = 253, + T_EquivalenceClass = 254, + T_EquivalenceMember = 255, + T_PathKey = 256, + T_PathTarget = 257, + T_ParamPathInfo = 258, + T_Path = 259, + T_IndexPath = 260, + T_IndexClause = 261, + T_BitmapHeapPath = 262, + T_BitmapAndPath = 263, + T_BitmapOrPath = 264, + T_TidPath = 265, + T_TidRangePath = 266, + T_SubqueryScanPath = 267, + T_ForeignPath = 268, + T_CustomPath = 269, + T_AppendPath = 270, + T_MergeAppendPath = 271, + T_GroupResultPath = 272, + T_MaterialPath = 273, + T_MemoizePath = 274, + T_UniquePath = 275, + T_GatherPath = 276, + T_GatherMergePath = 277, + T_NestPath = 278, + T_MergePath = 279, + T_HashPath = 280, + T_ProjectionPath = 281, + T_ProjectSetPath = 282, + T_SortPath = 283, + T_IncrementalSortPath = 284, + T_GroupPath = 285, + T_UpperUniquePath = 286, + T_AggPath = 287, + T_GroupingSetData = 288, + T_RollupData = 289, + T_GroupingSetsPath = 290, + T_MinMaxAggPath = 291, + T_WindowAggPath = 292, + T_SetOpPath = 293, + T_RecursiveUnionPath = 294, + T_LockRowsPath = 295, + T_ModifyTablePath = 296, + T_LimitPath = 297, + T_RestrictInfo = 298, + T_PlaceHolderVar = 299, + T_SpecialJoinInfo = 300, + T_OuterJoinClauseInfo = 301, + T_AppendRelInfo = 302, + T_RowIdentityVarInfo = 303, + T_PlaceHolderInfo = 304, + T_MinMaxAggInfo = 305, + T_PlannerParamItem = 306, + T_AggInfo = 307, + T_AggTransInfo = 308, + T_PlannedStmt = 309, + T_Result = 310, + T_ProjectSet = 311, + T_ModifyTable = 312, + T_Append = 313, + T_MergeAppend = 314, + T_RecursiveUnion = 315, + T_BitmapAnd = 316, + T_BitmapOr = 317, + T_SeqScan = 318, + T_SampleScan = 319, + T_IndexScan = 320, + T_IndexOnlyScan = 321, + T_BitmapIndexScan = 322, + T_BitmapHeapScan = 323, + T_TidScan = 324, + T_TidRangeScan = 325, + T_SubqueryScan = 326, + T_FunctionScan = 327, + T_ValuesScan = 328, + T_TableFuncScan = 329, + T_CteScan = 330, + T_NamedTuplestoreScan = 331, + T_WorkTableScan = 332, + T_ForeignScan = 333, + T_CustomScan = 334, + T_NestLoop = 335, + T_NestLoopParam = 336, + T_MergeJoin = 337, + T_HashJoin = 338, + T_Material = 339, + T_Memoize = 340, + T_Sort = 341, + T_IncrementalSort = 342, + T_Group = 343, + T_Agg = 344, + T_WindowAgg = 345, + T_Unique = 346, + T_Gather = 347, + T_GatherMerge = 348, + T_Hash = 349, + T_SetOp = 350, + T_LockRows = 351, + T_Limit = 352, + T_PlanRowMark = 353, + T_PartitionPruneInfo = 354, + T_PartitionedRelPruneInfo = 355, + T_PartitionPruneStepOp = 356, + T_PartitionPruneStepCombine = 357, + T_PlanInvalItem = 358, + T_ExprState = 359, + T_IndexInfo = 360, + T_ExprContext = 361, + T_ReturnSetInfo = 362, + T_ProjectionInfo = 363, + T_JunkFilter = 364, + T_OnConflictSetState = 365, + T_MergeActionState = 366, + T_ResultRelInfo = 367, + T_EState = 368, + T_WindowFuncExprState = 369, + T_SetExprState = 370, + T_SubPlanState = 371, + T_DomainConstraintState = 372, + T_ResultState = 373, + T_ProjectSetState = 374, + T_ModifyTableState = 375, + T_AppendState = 376, + T_MergeAppendState = 377, + T_RecursiveUnionState = 378, + T_BitmapAndState = 379, + T_BitmapOrState = 380, + T_ScanState = 381, + T_SeqScanState = 382, + T_SampleScanState = 383, + T_IndexScanState = 384, + T_IndexOnlyScanState = 385, + T_BitmapIndexScanState = 386, + T_BitmapHeapScanState = 387, + T_TidScanState = 388, + T_TidRangeScanState = 389, + T_SubqueryScanState = 390, + T_FunctionScanState = 391, + T_ValuesScanState = 392, + T_TableFuncScanState = 393, + T_CteScanState = 394, + T_NamedTuplestoreScanState = 395, + T_WorkTableScanState = 396, + T_ForeignScanState = 397, + T_CustomScanState = 398, + T_JoinState = 399, + T_NestLoopState = 400, + T_MergeJoinState = 401, + T_HashJoinState = 402, + T_MaterialState = 403, + T_MemoizeState = 404, + T_SortState = 405, + T_IncrementalSortState = 406, + T_GroupState = 407, + T_AggState = 408, + T_WindowAggState = 409, + T_UniqueState = 410, + T_GatherState = 411, + T_GatherMergeState = 412, + T_HashState = 413, + T_SetOpState = 414, + T_LockRowsState = 415, + T_LimitState = 416, + T_IndexAmRoutine = 417, + T_TableAmRoutine = 418, + T_TsmRoutine = 419, + T_EventTriggerData = 420, + T_TriggerData = 421, + T_TupleTableSlot = 422, + T_FdwRoutine = 423, + T_Bitmapset = 424, + T_ExtensibleNode = 425, + T_ErrorSaveContext = 426, + T_IdentifySystemCmd = 427, + T_BaseBackupCmd = 428, + T_CreateReplicationSlotCmd = 429, + T_DropReplicationSlotCmd = 430, + T_StartReplicationCmd = 431, + T_ReadReplicationSlotCmd = 432, + T_TimeLineHistoryCmd = 433, + T_SupportRequestSimplify = 434, + T_SupportRequestSelectivity = 435, + T_SupportRequestCost = 436, + T_SupportRequestRows = 437, + T_SupportRequestIndexCondition = 438, + T_SupportRequestWFuncMonotonic = 439, + T_SupportRequestOptimizeWindowClause = 440, + T_Integer = 441, + T_Float = 442, + T_Boolean = 443, + T_String = 444, + T_BitString = 445, + T_ForeignKeyCacheInfo = 446, + T_IntList = 447, + T_OidList = 448, + T_XidList = 449, + T_AllocSetContext = 450, + T_GenerationContext = 451, + T_SlabContext = 452, + T_TIDBitmap = 453, + T_WindowObjectData = 454, diff --git a/src/postgres/include/nodes/params.h b/src/postgres/include/nodes/params.h index de2dd907..ad23113a 100644 --- a/src/postgres/include/nodes/params.h +++ b/src/postgres/include/nodes/params.h @@ -4,7 +4,7 @@ * Support for finding the values associated with Param nodes. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/params.h @@ -163,8 +163,8 @@ extern ParamListInfo copyParamList(ParamListInfo from); extern Size EstimateParamListSpace(ParamListInfo paramLI); extern void SerializeParamList(ParamListInfo paramLI, char **start_address); extern ParamListInfo RestoreParamList(char **start_address); -extern char *BuildParamLogString(ParamListInfo params, char **paramTextValues, - int valueLen); +extern char *BuildParamLogString(ParamListInfo params, char **knownTextValues, + int maxlen); extern void ParamsErrorCallback(void *arg); #endif /* PARAMS_H */ diff --git a/src/postgres/include/nodes/parsenodes.h b/src/postgres/include/nodes/parsenodes.h index 1e728034..9dca3b65 100644 --- a/src/postgres/include/nodes/parsenodes.h +++ b/src/postgres/include/nodes/parsenodes.h @@ -12,7 +12,7 @@ * identifying statement boundaries in multi-statement source strings. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/parsenodes.h @@ -22,6 +22,7 @@ #ifndef PARSENODES_H #define PARSENODES_H +#include "common/relpath.h" #include "nodes/bitmapset.h" #include "nodes/lockoptions.h" #include "nodes/primnodes.h" @@ -72,12 +73,12 @@ typedef enum SetQuantifier /* * Grantable rights are encoded so that we can OR them together in a bitmask. - * The present representation of AclItem limits us to 16 distinct rights, - * even though AclMode is defined as uint32. See utils/acl.h. + * The present representation of AclItem limits us to 32 distinct rights, + * even though AclMode is defined as uint64. See utils/acl.h. * * Caution: changing these codes breaks stored ACLs, hence forces initdb. */ -typedef uint32 AclMode; /* a bitmask of privilege bits */ +typedef uint64 AclMode; /* a bitmask of privilege bits */ #define ACL_INSERT (1<<0) /* for relations */ #define ACL_SELECT (1<<1) @@ -87,8 +88,7 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */ #define ACL_REFERENCES (1<<5) #define ACL_TRIGGER (1<<6) #define ACL_EXECUTE (1<<7) /* for functions */ -#define ACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and - * servers */ +#define ACL_USAGE (1<<8) /* for various object types */ #define ACL_CREATE (1<<9) /* for namespaces and databases */ #define ACL_CREATE_TEMP (1<<10) /* for databases */ #define ACL_CONNECT (1<<11) /* for databases */ @@ -114,6 +114,11 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */ * * Planning converts a Query tree into a Plan tree headed by a PlannedStmt * node --- the Query structure is not used by the executor. + * + * All the fields ignored for the query jumbling are not semantically + * significant (such as alias names), as is ignored anything that can + * be deduced from child nodes (else we'd just be double-hashing that + * piece of information). */ typedef struct Query { @@ -121,41 +126,69 @@ typedef struct Query CmdType commandType; /* select|insert|update|delete|merge|utility */ - QuerySource querySource; /* where did I come from? */ + /* where did I come from? */ + QuerySource querySource pg_node_attr(query_jumble_ignore); - uint64 queryId; /* query identifier (can be set by plugins) */ + /* + * query identifier (can be set by plugins); ignored for equal, as it + * might not be set; also not stored. This is the result of the query + * jumble, hence ignored. + */ + uint64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0)); - bool canSetTag; /* do I set the command result tag? */ + /* do I set the command result tag? */ + bool canSetTag pg_node_attr(query_jumble_ignore); Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */ - int resultRelation; /* rtable index of target relation for - * INSERT/UPDATE/DELETE/MERGE; 0 for SELECT */ - - bool hasAggs; /* has aggregates in tlist or havingQual */ - bool hasWindowFuncs; /* has window functions in tlist */ - bool hasTargetSRFs; /* has set-returning functions in tlist */ - bool hasSubLinks; /* has subquery SubLink */ - bool hasDistinctOn; /* distinctClause is from DISTINCT ON */ - bool hasRecursive; /* WITH RECURSIVE was specified */ - bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */ - bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */ - bool hasRowSecurity; /* rewriter has applied some RLS policy */ - - bool isReturn; /* is a RETURN statement */ + /* + * rtable index of target relation for INSERT/UPDATE/DELETE/MERGE; 0 for + * SELECT. This is ignored in the query jumble as unrelated to the + * compilation of the query ID. + */ + int resultRelation pg_node_attr(query_jumble_ignore); + + /* has aggregates in tlist or havingQual */ + bool hasAggs pg_node_attr(query_jumble_ignore); + /* has window functions in tlist */ + bool hasWindowFuncs pg_node_attr(query_jumble_ignore); + /* has set-returning functions in tlist */ + bool hasTargetSRFs pg_node_attr(query_jumble_ignore); + /* has subquery SubLink */ + bool hasSubLinks pg_node_attr(query_jumble_ignore); + /* distinctClause is from DISTINCT ON */ + bool hasDistinctOn pg_node_attr(query_jumble_ignore); + /* WITH RECURSIVE was specified */ + bool hasRecursive pg_node_attr(query_jumble_ignore); + /* has INSERT/UPDATE/DELETE in WITH */ + bool hasModifyingCTE pg_node_attr(query_jumble_ignore); + /* FOR [KEY] UPDATE/SHARE was specified */ + bool hasForUpdate pg_node_attr(query_jumble_ignore); + /* rewriter has applied some RLS policy */ + bool hasRowSecurity pg_node_attr(query_jumble_ignore); + /* is a RETURN statement */ + bool isReturn pg_node_attr(query_jumble_ignore); List *cteList; /* WITH list (of CommonTableExpr's) */ List *rtable; /* list of range table entries */ + + /* + * list of RTEPermissionInfo nodes for the rtable entries having + * perminfoindex > 0 + */ + List *rteperminfos pg_node_attr(query_jumble_ignore); FromExpr *jointree; /* table join tree (FROM and WHERE clauses); * also USING clause for MERGE */ List *mergeActionList; /* list of actions for MERGE (only) */ - bool mergeUseOuterJoin; /* whether to use outer join */ + /* whether to use outer join */ + bool mergeUseOuterJoin pg_node_attr(query_jumble_ignore); List *targetList; /* target list (of TargetEntry) */ - OverridingKind override; /* OVERRIDING clause */ + /* OVERRIDING clause */ + OverridingKind override pg_node_attr(query_jumble_ignore); OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */ @@ -183,11 +216,14 @@ typedef struct Query Node *setOperations; /* set-operation tree if this is top level of * a UNION/INTERSECT/EXCEPT query */ - List *constraintDeps; /* a list of pg_constraint OIDs that the query - * depends on to be semantically valid */ + /* + * A list of pg_constraint OIDs that the query depends on to be + * semantically valid + */ + List *constraintDeps pg_node_attr(query_jumble_ignore); - List *withCheckOptions; /* a list of WithCheckOption's (added - * during rewrite) */ + /* a list of WithCheckOption's (added during rewrite) */ + List *withCheckOptions pg_node_attr(query_jumble_ignore); /* * The following two fields identify the portion of the source text string @@ -195,8 +231,10 @@ typedef struct Query * Queries, not in sub-queries. When not set, they might both be zero, or * both be -1 meaning "unknown". */ - int stmt_location; /* start location, or -1 if unknown */ - int stmt_len; /* length in bytes; 0 means "rest of string" */ + /* start location, or -1 if unknown */ + int stmt_location; + /* length in bytes; 0 means "rest of string" */ + int stmt_len pg_node_attr(query_jumble_ignore); } Query; @@ -287,6 +325,8 @@ typedef enum A_Expr_Kind typedef struct A_Expr { + pg_node_attr(custom_read_write) + NodeTag type; A_Expr_Kind kind; /* see above */ List *name; /* possibly-qualified name of operator */ @@ -297,24 +337,26 @@ typedef struct A_Expr /* * A_Const - a literal constant + * + * Value nodes are inline for performance. You can treat 'val' as a node, + * as in IsA(&val, Integer). 'val' is not valid if isnull is true. */ +union ValUnion +{ + Node node; + Integer ival; + Float fval; + Boolean boolval; + String sval; + BitString bsval; +}; + typedef struct A_Const { - NodeTag type; + pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble) - /* - * Value nodes are inline for performance. You can treat 'val' as a node, - * as in IsA(&val, Integer). 'val' is not valid if isnull is true. - */ - union ValUnion - { - Node node; - Integer ival; - Float fval; - Boolean boolval; - String sval; - BitString bsval; - } val; + NodeTag type; + union ValUnion val; bool isnull; /* SQL NULL constant */ int location; /* token location, or -1 if unknown */ } A_Const; @@ -683,6 +725,7 @@ typedef struct ColumnDef bool is_not_null; /* NOT NULL constraint specified? */ bool is_from_type; /* column definition came from table type */ char storage; /* attstorage setting, or 0 for default */ + char *storage_name; /* attstorage setting name or NULL for default */ Node *raw_default; /* default value (untransformed parse tree) */ Node *cooked_default; /* default value (transformed expr tree) */ char identity; /* attidentity setting */ @@ -796,6 +839,7 @@ typedef struct XmlSerialize XmlOptionType xmloption; /* DOCUMENT or CONTENT */ Node *expr; TypeName *typeName; + bool indent; /* [NO] INDENT */ int location; /* token location, or -1 if unknown */ } XmlSerialize; @@ -817,6 +861,13 @@ typedef struct PartitionElem int location; /* token location, or -1 if unknown */ } PartitionElem; +typedef enum PartitionStrategy +{ + PARTITION_STRATEGY_LIST = 'l', + PARTITION_STRATEGY_RANGE = 'r', + PARTITION_STRATEGY_HASH = 'h' +} PartitionStrategy; + /* * PartitionSpec - parse-time representation of a partition key specification * @@ -825,17 +876,11 @@ typedef struct PartitionElem typedef struct PartitionSpec { NodeTag type; - char *strategy; /* partitioning strategy ('hash', 'list' or - * 'range') */ + PartitionStrategy strategy; List *partParams; /* List of PartitionElems */ int location; /* token location, or -1 if unknown */ } PartitionSpec; -/* Internal codes for partitioning strategies */ -#define PARTITION_STRATEGY_HASH 'h' -#define PARTITION_STRATEGY_LIST 'l' -#define PARTITION_STRATEGY_RANGE 'r' - /* * PartitionBoundSpec - a partition bound specification * @@ -955,37 +1000,6 @@ typedef struct PartitionCmd * control visibility. But it is needed by ruleutils.c to determine * whether RTEs should be shown in decompiled queries. * - * requiredPerms and checkAsUser specify run-time access permissions - * checks to be performed at query startup. The user must have *all* - * of the permissions that are OR'd together in requiredPerms (zero - * indicates no permissions checking). If checkAsUser is not zero, - * then do the permissions checks using the access rights of that user, - * not the current effective user ID. (This allows rules to act as - * setuid gateways.) Permissions checks only apply to RELATION RTEs. - * - * For SELECT/INSERT/UPDATE permissions, if the user doesn't have - * table-wide permissions then it is sufficient to have the permissions - * on all columns identified in selectedCols (for SELECT) and/or - * insertedCols and/or updatedCols (INSERT with ON CONFLICT DO UPDATE may - * have all 3). selectedCols, insertedCols and updatedCols are bitmapsets, - * which cannot have negative integer members, so we subtract - * FirstLowInvalidHeapAttributeNumber from column numbers before storing - * them in these fields. A whole-row Var reference is represented by - * setting the bit for InvalidAttrNumber. - * - * updatedCols is also used in some other places, for example, to determine - * which triggers to fire and in FDWs to know which changed columns they - * need to ship off. - * - * Generated columns that are caused to be updated by an update to a base - * column are listed in extraUpdatedCols. This is not considered for - * permission checking, but it is useful in those places that want to know - * the full set of columns being updated as opposed to only the ones the - * user explicitly mentioned in the query. (There is currently no need for - * an extraInsertedCols, but it could exist.) Note that extraUpdatedCols - * is populated during query rewrite, NOT in the parser, since generated - * columns could be added after a rule has been parsed and stored. - * * securityQuals is a list of security barrier quals (boolean expressions), * to be tested in the listed order before returning a row from the * relation. It is always NIL in parser output. Entries are added by the @@ -1011,6 +1025,8 @@ typedef enum RTEKind typedef struct RangeTblEntry { + pg_node_attr(custom_read_write, custom_query_jumble) + NodeTag type; RTEKind rtekind; /* see above */ @@ -1024,11 +1040,6 @@ typedef struct RangeTblEntry /* * Fields valid for a plain relation RTE (else zero): * - * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate - * that the tuple format of the tuplestore is the same as the referenced - * relation. This allows plans referencing AFTER trigger transition - * tables to be invalidated if the underlying table is altered. - * * rellockmode is really LOCKMODE, but it's declared int to avoid having * to include lock-related headers here. It must be RowExclusiveLock if * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if @@ -1039,11 +1050,29 @@ typedef struct RangeTblEntry * current query; this happens if a DO ALSO rule simply scans the original * target table. We leave such RTEs with their original lockmode so as to * avoid getting an additional, lesser lock. + * + * perminfoindex is 1-based index of the RTEPermissionInfo belonging to + * this RTE in the containing struct's list of same; 0 if permissions need + * not be checked for this RTE. + * + * As a special case, relid, relkind, rellockmode, and perminfoindex can + * also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we + * convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY + * containing the view's query. We still need to perform run-time locking + * and permission checks on the view, even though it's not directly used + * in the query anymore, and the most expedient way to do that is to + * retain these fields from the old state of the RTE. + * + * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate + * that the tuple format of the tuplestore is the same as the referenced + * relation. This allows plans referencing AFTER trigger transition + * tables to be invalidated if the underlying table is altered. */ Oid relid; /* OID of the relation */ char relkind; /* relation kind (see pg_class.relkind) */ int rellockmode; /* lock level that query requires on the rel */ struct TableSampleClause *tablesample; /* sampling info, or NULL */ + Index perminfoindex; /* * Fields valid for a subquery RTE (else NULL): @@ -1067,6 +1096,14 @@ typedef struct RangeTblEntry * alias Vars are generated only for merged columns). We keep these * entries only because they're needed in expandRTE() and similar code. * + * Vars appearing within joinaliasvars are marked with varnullingrels sets + * that describe the nulling effects of this join and lower ones. This is + * essential for FULL JOIN cases, because the COALESCE expression only + * describes the semantics correctly if its inputs have been nulled by the + * join. For other cases, it allows expandRTE() to generate a valid + * representation of the join's output without consulting additional + * parser state. + * * Within a Query loaded from a stored rule, it is possible for non-merged * joinaliasvars items to be null pointers, which are placeholders for * (necessarily unreferenced) columns dropped since the rule was made. @@ -1163,14 +1200,54 @@ typedef struct RangeTblEntry bool lateral; /* subquery, function, or values is LATERAL? */ bool inh; /* inheritance requested? */ bool inFromCl; /* present in FROM clause? */ + List *securityQuals; /* security barrier quals to apply, if any */ +} RangeTblEntry; + +/* + * RTEPermissionInfo + * Per-relation information for permission checking. Added to the Query + * node by the parser when adding the corresponding RTE to the query + * range table and subsequently editorialized on by the rewriter if + * needed after rule expansion. + * + * Only the relations directly mentioned in the query are checked for + * access permissions by the core executor, so only their RTEPermissionInfos + * are present in the Query. However, extensions may want to check inheritance + * children too, depending on the value of rte->inh, so it's copied in 'inh' + * for their perusal. + * + * requiredPerms and checkAsUser specify run-time access permissions checks + * to be performed at query startup. The user must have *all* of the + * permissions that are OR'd together in requiredPerms (never 0!). If + * checkAsUser is not zero, then do the permissions checks using the access + * rights of that user, not the current effective user ID. (This allows rules + * to act as setuid gateways.) + * + * For SELECT/INSERT/UPDATE permissions, if the user doesn't have table-wide + * permissions then it is sufficient to have the permissions on all columns + * identified in selectedCols (for SELECT) and/or insertedCols and/or + * updatedCols (INSERT with ON CONFLICT DO UPDATE may have all 3). + * selectedCols, insertedCols and updatedCols are bitmapsets, which cannot have + * negative integer members, so we subtract FirstLowInvalidHeapAttributeNumber + * from column numbers before storing them in these fields. A whole-row Var + * reference is represented by setting the bit for InvalidAttrNumber. + * + * updatedCols is also used in some other places, for example, to determine + * which triggers to fire and in FDWs to know which changed columns they need + * to ship off. + */ +typedef struct RTEPermissionInfo +{ + NodeTag type; + + Oid relid; /* relation OID */ + bool inh; /* separately check inheritance children? */ AclMode requiredPerms; /* bitmask of required access permissions */ Oid checkAsUser; /* if valid, check access as this role */ Bitmapset *selectedCols; /* columns needing SELECT permission */ Bitmapset *insertedCols; /* columns needing INSERT permission */ Bitmapset *updatedCols; /* columns needing UPDATE permission */ - Bitmapset *extraUpdatedCols; /* generated columns being updated */ - List *securityQuals; /* security barrier quals to apply, if any */ -} RangeTblEntry; +} RTEPermissionInfo; /* * RangeTblFunction - @@ -1187,20 +1264,29 @@ typedef struct RangeTblEntry * time. We do however remember how many columns we thought the type had * (including dropped columns!), so that we can successfully ignore any * columns added after the query was parsed. + * + * The query jumbling only needs to track the function expression. */ typedef struct RangeTblFunction { NodeTag type; Node *funcexpr; /* expression tree for func call */ - int funccolcount; /* number of columns it contributes to RTE */ + /* number of columns it contributes to RTE */ + int funccolcount pg_node_attr(query_jumble_ignore); /* These fields record the contents of a column definition list, if any: */ - List *funccolnames; /* column names (list of String) */ - List *funccoltypes; /* OID list of column type OIDs */ - List *funccoltypmods; /* integer list of column typmods */ - List *funccolcollations; /* OID list of column collation OIDs */ + /* column names (list of String) */ + List *funccolnames pg_node_attr(query_jumble_ignore); + /* OID list of column type OIDs */ + List *funccoltypes pg_node_attr(query_jumble_ignore); + /* integer list of column typmods */ + List *funccoltypmods pg_node_attr(query_jumble_ignore); + /* OID list of column collation OIDs */ + List *funccolcollations pg_node_attr(query_jumble_ignore); + /* This is set during planning for use by the executor: */ - Bitmapset *funcparams; /* PARAM_EXEC Param IDs affecting this func */ + /* PARAM_EXEC Param IDs affecting this func */ + Bitmapset *funcparams pg_node_attr(query_jumble_ignore); } RangeTblFunction; /* @@ -1307,7 +1393,8 @@ typedef struct SortGroupClause Oid eqop; /* the equality operator ('=' op) */ Oid sortop; /* the ordering operator ('<' op), or 0 */ bool nulls_first; /* do NULLs come before normal values? */ - bool hashable; /* can eqop be implemented by hashing? */ + /* can eqop be implemented by hashing? */ + bool hashable pg_node_attr(query_jumble_ignore); } SortGroupClause; /* @@ -1372,7 +1459,7 @@ typedef enum GroupingSetKind typedef struct GroupingSet { NodeTag type; - GroupingSetKind kind; + GroupingSetKind kind pg_node_attr(query_jumble_ignore); List *content; int location; } GroupingSet; @@ -1393,25 +1480,38 @@ typedef struct GroupingSet * When refname isn't null, the partitionClause is always copied from there; * the orderClause might or might not be copied (see copiedOrder); the framing * options are never copied, per spec. + * + * The information relevant for the query jumbling is the partition clause + * type and its bounds. */ typedef struct WindowClause { NodeTag type; - char *name; /* window name (NULL in an OVER clause) */ - char *refname; /* referenced window name, if any */ + /* window name (NULL in an OVER clause) */ + char *name pg_node_attr(query_jumble_ignore); + /* referenced window name, if any */ + char *refname pg_node_attr(query_jumble_ignore); List *partitionClause; /* PARTITION BY list */ - List *orderClause; /* ORDER BY list */ + /* ORDER BY list */ + List *orderClause; int frameOptions; /* frame_clause options, see WindowDef */ Node *startOffset; /* expression for starting bound, if any */ Node *endOffset; /* expression for ending bound, if any */ - List *runCondition; /* qual to help short-circuit execution */ - Oid startInRangeFunc; /* in_range function for startOffset */ - Oid endInRangeFunc; /* in_range function for endOffset */ - Oid inRangeColl; /* collation for in_range tests */ - bool inRangeAsc; /* use ASC sort order for in_range tests? */ - bool inRangeNullsFirst; /* nulls sort first for in_range tests? */ + /* qual to help short-circuit execution */ + List *runCondition pg_node_attr(query_jumble_ignore); + /* in_range function for startOffset */ + Oid startInRangeFunc pg_node_attr(query_jumble_ignore); + /* in_range function for endOffset */ + Oid endInRangeFunc pg_node_attr(query_jumble_ignore); + /* collation for in_range tests */ + Oid inRangeColl pg_node_attr(query_jumble_ignore); + /* use ASC sort order for in_range tests? */ + bool inRangeAsc pg_node_attr(query_jumble_ignore); + /* nulls sort first for in_range tests? */ + bool inRangeNullsFirst pg_node_attr(query_jumble_ignore); Index winref; /* ID referenced by window functions */ - bool copiedOrder; /* did we copy orderClause from refname? */ + /* did we copy orderClause from refname? */ + bool copiedOrder pg_node_attr(query_jumble_ignore); } WindowClause; /* @@ -1521,22 +1621,37 @@ typedef struct CTECycleClause typedef struct CommonTableExpr { NodeTag type; - char *ctename; /* query name (never qualified) */ - List *aliascolnames; /* optional list of column names */ + + /* + * Query name (never qualified). The string name is included in the query + * jumbling because RTE_CTE RTEs need it. + */ + char *ctename; + /* optional list of column names */ + List *aliascolnames pg_node_attr(query_jumble_ignore); CTEMaterialize ctematerialized; /* is this an optimization fence? */ /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */ Node *ctequery; /* the CTE's subquery */ - CTESearchClause *search_clause; - CTECycleClause *cycle_clause; + CTESearchClause *search_clause pg_node_attr(query_jumble_ignore); + CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ /* These fields are set during parse analysis: */ - bool cterecursive; /* is this CTE actually recursive? */ - int cterefcount; /* number of RTEs referencing this CTE - * (excluding internal self-references) */ - List *ctecolnames; /* list of output column names */ - List *ctecoltypes; /* OID list of output column type OIDs */ - List *ctecoltypmods; /* integer list of output column typmods */ - List *ctecolcollations; /* OID list of column collation OIDs */ + /* is this CTE actually recursive? */ + bool cterecursive pg_node_attr(query_jumble_ignore); + + /* + * Number of RTEs referencing this CTE (excluding internal + * self-references), irrelevant for query jumbling. + */ + int cterefcount pg_node_attr(query_jumble_ignore); + /* list of output column names */ + List *ctecolnames pg_node_attr(query_jumble_ignore); + /* OID list of output column type OIDs */ + List *ctecoltypes pg_node_attr(query_jumble_ignore); + /* integer list of output column typmods */ + List *ctecoltypmods pg_node_attr(query_jumble_ignore); + /* OID list of column collation OIDs */ + List *ctecolcollations pg_node_attr(query_jumble_ignore); } CommonTableExpr; /* Convenience macro to get the output tlist of a CTE's query */ @@ -1573,10 +1688,12 @@ typedef struct MergeAction NodeTag type; bool matched; /* true=MATCHED, false=NOT MATCHED */ CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */ - OverridingKind override; /* OVERRIDING clause */ + /* OVERRIDING clause */ + OverridingKind override pg_node_attr(query_jumble_ignore); Node *qual; /* transformed WHEN conditions */ List *targetList; /* the target list (of TargetEntry) */ - List *updateColnos; /* target attribute numbers of an UPDATE */ + /* target attribute numbers of an UPDATE */ + List *updateColnos pg_node_attr(query_jumble_ignore); } MergeAction; /* @@ -1595,6 +1712,113 @@ typedef struct TriggerTransition bool isTable; } TriggerTransition; +/* Nodes for SQL/JSON support */ + +/* + * JsonOutput - + * representation of JSON output clause (RETURNING type [FORMAT format]) + */ +typedef struct JsonOutput +{ + NodeTag type; + TypeName *typeName; /* RETURNING type name, if specified */ + JsonReturning *returning; /* RETURNING FORMAT clause and type Oids */ +} JsonOutput; + +/* + * JsonKeyValue - + * untransformed representation of JSON object key-value pair for + * JSON_OBJECT() and JSON_OBJECTAGG() + */ +typedef struct JsonKeyValue +{ + NodeTag type; + Expr *key; /* key expression */ + JsonValueExpr *value; /* JSON value expression */ +} JsonKeyValue; + +/* + * JsonObjectConstructor - + * untransformed representation of JSON_OBJECT() constructor + */ +typedef struct JsonObjectConstructor +{ + NodeTag type; + List *exprs; /* list of JsonKeyValue pairs */ + JsonOutput *output; /* RETURNING clause, if specified */ + bool absent_on_null; /* skip NULL values? */ + bool unique; /* check key uniqueness? */ + int location; /* token location, or -1 if unknown */ +} JsonObjectConstructor; + +/* + * JsonArrayConstructor - + * untransformed representation of JSON_ARRAY(element,...) constructor + */ +typedef struct JsonArrayConstructor +{ + NodeTag type; + List *exprs; /* list of JsonValueExpr elements */ + JsonOutput *output; /* RETURNING clause, if specified */ + bool absent_on_null; /* skip NULL elements? */ + int location; /* token location, or -1 if unknown */ +} JsonArrayConstructor; + +/* + * JsonArrayQueryConstructor - + * untransformed representation of JSON_ARRAY(subquery) constructor + */ +typedef struct JsonArrayQueryConstructor +{ + NodeTag type; + Node *query; /* subquery */ + JsonOutput *output; /* RETURNING clause, if specified */ + JsonFormat *format; /* FORMAT clause for subquery, if specified */ + bool absent_on_null; /* skip NULL elements? */ + int location; /* token location, or -1 if unknown */ +} JsonArrayQueryConstructor; + +/* + * JsonAggConstructor - + * common fields of untransformed representation of + * JSON_ARRAYAGG() and JSON_OBJECTAGG() + */ +typedef struct JsonAggConstructor +{ + NodeTag type; + JsonOutput *output; /* RETURNING clause, if any */ + Node *agg_filter; /* FILTER clause, if any */ + List *agg_order; /* ORDER BY clause, if any */ + struct WindowDef *over; /* OVER clause, if any */ + int location; /* token location, or -1 if unknown */ +} JsonAggConstructor; + +/* + * JsonObjectAgg - + * untransformed representation of JSON_OBJECTAGG() + */ +typedef struct JsonObjectAgg +{ + NodeTag type; + JsonAggConstructor *constructor; /* common fields */ + JsonKeyValue *arg; /* object key-value pair */ + bool absent_on_null; /* skip NULL values? */ + bool unique; /* check key uniqueness? */ +} JsonObjectAgg; + +/* + * JsonArrayAgg - + * untransformed representation of JSON_ARRAYAGG() + */ +typedef struct JsonArrayAgg +{ + NodeTag type; + JsonAggConstructor *constructor; /* common fields */ + JsonValueExpr *arg; /* array element expression */ + bool absent_on_null; /* skip NULL elements? */ +} JsonArrayAgg; + + /***************************************************************************** * Raw Grammar Output Statements *****************************************************************************/ @@ -1610,9 +1834,14 @@ typedef struct TriggerTransition * * stmt_location/stmt_len identify the portion of the source text string * containing this raw statement (useful for multi-statement strings). + * + * This is irrelevant for query jumbling, as this is not used in parsed + * queries. */ typedef struct RawStmt { + pg_node_attr(no_query_jumble) + NodeTag type; Node *stmt; /* raw parse tree */ int stmt_location; /* start location, or -1 if unknown */ @@ -1785,11 +2014,15 @@ typedef struct SetOperationStmt Node *rarg; /* right child */ /* Eventually add fields for CORRESPONDING spec here */ - /* Fields derived during parse analysis: */ - List *colTypes; /* OID list of output column type OIDs */ - List *colTypmods; /* integer list of output column typmods */ - List *colCollations; /* OID list of output column collation OIDs */ - List *groupClauses; /* a list of SortGroupClause's */ + /* Fields derived during parse analysis (irrelevant for query jumbling): */ + /* OID list of output column type OIDs */ + List *colTypes pg_node_attr(query_jumble_ignore); + /* integer list of output column typmods */ + List *colTypmods pg_node_attr(query_jumble_ignore); + /* OID list of output column collation OIDs */ + List *colCollations pg_node_attr(query_jumble_ignore); + /* a list of SortGroupClause's */ + List *groupClauses pg_node_attr(query_jumble_ignore); /* groupClauses is NIL if UNION ALL, but must be set otherwise */ } SetOperationStmt; @@ -1938,7 +2171,6 @@ typedef struct AlterTableStmt typedef enum AlterTableType { AT_AddColumn, /* add column */ - AT_AddColumnRecurse, /* internal to commands/tablecmds.c */ AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */ AT_ColumnDefault, /* alter column default */ AT_CookedColumnDefault, /* add a pre-cooked column default */ @@ -1952,19 +2184,15 @@ typedef enum AlterTableType AT_SetStorage, /* alter column set storage */ AT_SetCompression, /* alter column set compression */ AT_DropColumn, /* drop column */ - AT_DropColumnRecurse, /* internal to commands/tablecmds.c */ AT_AddIndex, /* add index */ AT_ReAddIndex, /* internal to commands/tablecmds.c */ AT_AddConstraint, /* add constraint */ - AT_AddConstraintRecurse, /* internal to commands/tablecmds.c */ AT_ReAddConstraint, /* internal to commands/tablecmds.c */ AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */ AT_AlterConstraint, /* alter constraint */ AT_ValidateConstraint, /* validate constraint */ - AT_ValidateConstraintRecurse, /* internal to commands/tablecmds.c */ AT_AddIndexConstraint, /* add constraint using existing index */ AT_DropConstraint, /* drop constraint */ - AT_DropConstraintRecurse, /* internal to commands/tablecmds.c */ AT_ReAddComment, /* internal to commands/tablecmds.c */ AT_AlterColumnType, /* alter column type */ AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */ @@ -2153,7 +2381,7 @@ typedef struct GrantRoleStmt List *granted_roles; /* list of roles to be granted/revoked */ List *grantee_roles; /* list of member roles to add/delete */ bool is_grant; /* true = GRANT, false = REVOKE */ - bool admin_opt; /* with admin option */ + List *opt; /* options e.g. WITH GRANT OPTION */ RoleSpec *grantor; /* set grantor to other than current role */ DropBehavior behavior; /* drop behavior (for REVOKE) */ } GrantRoleStmt; @@ -2321,6 +2549,8 @@ typedef enum ConstrType /* types of constraints */ typedef struct Constraint { + pg_node_attr(custom_read_write) + NodeTag type; ConstrType contype; /* see above */ @@ -2961,10 +3191,10 @@ typedef struct IndexStmt List *excludeOpNames; /* exclusion operator names, or NIL if none */ char *idxcomment; /* comment to apply to index, or NULL */ Oid indexOid; /* OID of an existing index, if any */ - Oid oldNode; /* relfilenode of existing storage, if any */ - SubTransactionId oldCreateSubid; /* rd_createSubid of oldNode */ - SubTransactionId oldFirstRelfilenodeSubid; /* rd_firstRelfilenodeSubid of - * oldNode */ + RelFileNumber oldNumber; /* relfilenumber of existing storage, if any */ + SubTransactionId oldCreateSubid; /* rd_createSubid of oldNumber */ + SubTransactionId oldFirstRelfilelocatorSubid; /* rd_firstRelfilelocatorSubid + * of oldNumber */ bool unique; /* is index unique? */ bool nulls_not_distinct; /* null treatment for UNIQUE constraints */ bool primary; /* is index a primary key? */ @@ -3080,6 +3310,8 @@ typedef struct DoStmt typedef struct InlineCodeBlock { + pg_node_attr(nodetag_only) /* this is not a member of parse trees */ + NodeTag type; char *source_text; /* source text of anonymous code block */ Oid langOid; /* OID of selected language */ @@ -3094,18 +3326,24 @@ typedef struct InlineCodeBlock * list contains copies of the expressions for all output arguments, in the * order of the procedure's declared arguments. (outargs is never evaluated, * but is useful to the caller as a reference for what to assign to.) + * The transformed call state is not relevant in the query jumbling, only the + * function call is. * ---------------------- */ typedef struct CallStmt { NodeTag type; FuncCall *funccall; /* from the parser */ - FuncExpr *funcexpr; /* transformed call, with only input args */ - List *outargs; /* transformed output-argument expressions */ + /* transformed call, with only input args */ + FuncExpr *funcexpr pg_node_attr(query_jumble_ignore); + /* transformed output-argument expressions */ + List *outargs pg_node_attr(query_jumble_ignore); } CallStmt; typedef struct CallContext { + pg_node_attr(nodetag_only) /* this is not a member of parse trees */ + NodeTag type; bool atomic; } CallContext; diff --git a/src/postgres/include/nodes/pathnodes.h b/src/postgres/include/nodes/pathnodes.h index 540de8a4..94aebadd 100644 --- a/src/postgres/include/nodes/pathnodes.h +++ b/src/postgres/include/nodes/pathnodes.h @@ -3,8 +3,10 @@ * pathnodes.h * Definitions for planner's internal data structures, especially Paths. * + * We don't support copying RelOptInfo, IndexOptInfo, or Path nodes. + * There are some subsidiary structs that are useful to copy, though. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/pathnodes.h @@ -85,51 +87,79 @@ typedef enum UpperRelationKind * PlannerGlobal holds state for an entire planner invocation; this state * is shared across all levels of sub-Queries that exist in the command being * planned. + * + * Not all fields are printed. (In some cases, there is no print support for + * the field type; in others, doing so would lead to infinite recursion.) *---------- */ typedef struct PlannerGlobal { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - ParamListInfo boundParams; /* Param values provided to planner() */ + /* Param values provided to planner() */ + ParamListInfo boundParams pg_node_attr(read_write_ignore); - List *subplans; /* Plans for SubPlan nodes */ + /* Plans for SubPlan nodes */ + List *subplans; - List *subroots; /* PlannerInfos for SubPlan nodes */ + /* PlannerInfos for SubPlan nodes */ + List *subroots pg_node_attr(read_write_ignore); - Bitmapset *rewindPlanIDs; /* indices of subplans that require REWIND */ + /* indices of subplans that require REWIND */ + Bitmapset *rewindPlanIDs; - List *finalrtable; /* "flat" rangetable for executor */ + /* "flat" rangetable for executor */ + List *finalrtable; - List *finalrowmarks; /* "flat" list of PlanRowMarks */ + /* "flat" list of RTEPermissionInfos */ + List *finalrteperminfos; - List *resultRelations; /* "flat" list of integer RT indexes */ + /* "flat" list of PlanRowMarks */ + List *finalrowmarks; - List *appendRelations; /* "flat" list of AppendRelInfos */ + /* "flat" list of integer RT indexes */ + List *resultRelations; - List *relationOids; /* OIDs of relations the plan depends on */ + /* "flat" list of AppendRelInfos */ + List *appendRelations; - List *invalItems; /* other dependencies, as PlanInvalItems */ + /* OIDs of relations the plan depends on */ + List *relationOids; - List *paramExecTypes; /* type OIDs for PARAM_EXEC Params */ + /* other dependencies, as PlanInvalItems */ + List *invalItems; - Index lastPHId; /* highest PlaceHolderVar ID assigned */ + /* type OIDs for PARAM_EXEC Params */ + List *paramExecTypes; - Index lastRowMarkId; /* highest PlanRowMark ID assigned */ + /* highest PlaceHolderVar ID assigned */ + Index lastPHId; - int lastPlanNodeId; /* highest plan node ID assigned */ + /* highest PlanRowMark ID assigned */ + Index lastRowMarkId; - bool transientPlan; /* redo plan when TransactionXmin changes? */ + /* highest plan node ID assigned */ + int lastPlanNodeId; - bool dependsOnRole; /* is plan specific to current role? */ + /* redo plan when TransactionXmin changes? */ + bool transientPlan; - bool parallelModeOK; /* parallel mode potentially OK? */ + /* is plan specific to current role? */ + bool dependsOnRole; - bool parallelModeNeeded; /* parallel mode actually required? */ + /* parallel mode potentially OK? */ + bool parallelModeOK; - char maxParallelHazard; /* worst PROPARALLEL hazard level */ + /* parallel mode actually required? */ + bool parallelModeNeeded; - PartitionDirectory partition_directory; /* partition descriptors */ + /* worst PROPARALLEL hazard level */ + char maxParallelHazard; + + /* partition descriptors */ + PartitionDirectory partition_directory pg_node_attr(read_write_ignore); } PlannerGlobal; /* macro for fetching the Plan associated with a SubPlan node */ @@ -148,6 +178,10 @@ typedef struct PlannerGlobal * * For reasons explained in optimizer/optimizer.h, we define the typedef * either here or in that header, whichever is read first. + * + * Not all fields are printed. (In some cases, there is no print support for + * the field type; in others, doing so would lead to infinite recursion or + * bloat dump output more than seems useful.) *---------- */ #ifndef HAVE_PLANNERINFO_TYPEDEF @@ -157,15 +191,21 @@ typedef struct PlannerInfo PlannerInfo; struct PlannerInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - Query *parse; /* the Query being planned */ + /* the Query being planned */ + Query *parse; - PlannerGlobal *glob; /* global info for current planner run */ + /* global info for current planner run */ + PlannerGlobal *glob; - Index query_level; /* 1 at the outermost Query */ + /* 1 at the outermost Query */ + Index query_level; - PlannerInfo *parent_root; /* NULL at outermost Query */ + /* NULL at outermost Query */ + PlannerInfo *parent_root pg_node_attr(read_write_ignore); /* * plan_params contains the expressions that this query level needs to @@ -173,7 +213,8 @@ struct PlannerInfo * outer_params contains the paramIds of PARAM_EXEC Params that outer * query levels will make available to this query level. */ - List *plan_params; /* list of PlannerParamItems, see below */ + /* list of PlannerParamItems, see below */ + List *plan_params; Bitmapset *outer_params; /* @@ -183,39 +224,46 @@ struct PlannerInfo * does not correspond to a base relation, such as a join RTE or an * unreferenced view RTE; or if the RelOptInfo hasn't been made yet. */ - struct RelOptInfo **simple_rel_array; /* All 1-rel RelOptInfos */ - int simple_rel_array_size; /* allocated size of array */ + struct RelOptInfo **simple_rel_array pg_node_attr(array_size(simple_rel_array_size)); + /* allocated size of array */ + int simple_rel_array_size; /* * simple_rte_array is the same length as simple_rel_array and holds * pointers to the associated rangetable entries. Using this is a shade - * faster than using rt_fetch(), mostly due to fewer indirections. + * faster than using rt_fetch(), mostly due to fewer indirections. (Not + * printed because it'd be redundant with parse->rtable.) */ - RangeTblEntry **simple_rte_array; /* rangetable as an array */ + RangeTblEntry **simple_rte_array pg_node_attr(read_write_ignore); /* * append_rel_array is the same length as the above arrays, and holds * pointers to the corresponding AppendRelInfo entry indexed by * child_relid, or NULL if the rel is not an appendrel child. The array - * itself is not allocated if append_rel_list is empty. + * itself is not allocated if append_rel_list is empty. (Not printed + * because it'd be redundant with append_rel_list.) */ - struct AppendRelInfo **append_rel_array; + struct AppendRelInfo **append_rel_array pg_node_attr(read_write_ignore); /* - * all_baserels is a Relids set of all base relids (but not "other" - * relids) in the query; that is, the Relids identifier of the final join - * we need to form. This is computed in make_one_rel, just before we - * start making Paths. + * all_baserels is a Relids set of all base relids (but not joins or + * "other" rels) in the query. This is computed in deconstruct_jointree. */ Relids all_baserels; /* - * nullable_baserels is a Relids set of base relids that are nullable by - * some outer join in the jointree; these are rels that are potentially - * nullable below the WHERE clause, SELECT targetlist, etc. This is - * computed in deconstruct_jointree. + * outer_join_rels is a Relids set of all outer-join relids in the query. + * This is computed in deconstruct_jointree. + */ + Relids outer_join_rels; + + /* + * all_query_rels is a Relids set of all base relids and outer join relids + * (but not "other" relids) in the query. This is the Relids identifier + * of the final join we need to form. This is computed in + * deconstruct_jointree. */ - Relids nullable_baserels; + Relids all_query_rels; /* * join_rel_list is a list of all join-relation RelOptInfos we have @@ -226,8 +274,8 @@ struct PlannerInfo * even when using the hash table for lookups; this simplifies life for * GEQO. */ - List *join_rel_list; /* list of join-relation RelOptInfos */ - struct HTAB *join_rel_hash; /* optional hashtable for join relations */ + List *join_rel_list; + struct HTAB *join_rel_hash pg_node_attr(read_write_ignore); /* * When doing a dynamic-programming-style join search, join_rel_level[k] @@ -235,36 +283,61 @@ struct PlannerInfo * join_cur_level is the current level. New join-relation RelOptInfos are * automatically added to the join_rel_level[join_cur_level] list. * join_rel_level is NULL if not in use. + * + * Note: we've already printed all baserel and joinrel RelOptInfos above, + * so we don't dump join_rel_level or other lists of RelOptInfos. + */ + /* lists of join-relation RelOptInfos */ + List **join_rel_level pg_node_attr(read_write_ignore); + /* index of list being extended */ + int join_cur_level; + + /* init SubPlans for query */ + List *init_plans; + + /* + * per-CTE-item list of subplan IDs (or -1 if no subplan was made for that + * CTE) */ - List **join_rel_level; /* lists of join-relation RelOptInfos */ - int join_cur_level; /* index of list being extended */ + List *cte_plan_ids; - List *init_plans; /* init SubPlans for query */ + /* List of Lists of Params for MULTIEXPR subquery outputs */ + List *multiexpr_params; - List *cte_plan_ids; /* per-CTE-item list of subplan IDs (or -1 if - * no subplan was made for that CTE) */ + /* list of JoinDomains used in the query (higher ones first) */ + List *join_domains; - List *multiexpr_params; /* List of Lists of Params for MULTIEXPR - * subquery outputs */ + /* list of active EquivalenceClasses */ + List *eq_classes; - List *eq_classes; /* list of active EquivalenceClasses */ + /* set true once ECs are canonical */ + bool ec_merging_done; - bool ec_merging_done; /* set true once ECs are canonical */ + /* list of "canonical" PathKeys */ + List *canon_pathkeys; - List *canon_pathkeys; /* list of "canonical" PathKeys */ + /* + * list of OuterJoinClauseInfos for mergejoinable outer join clauses + * w/nonnullable var on left + */ + List *left_join_clauses; - List *left_join_clauses; /* list of RestrictInfos for mergejoinable - * outer join clauses w/nonnullable var on - * left */ + /* + * list of OuterJoinClauseInfos for mergejoinable outer join clauses + * w/nonnullable var on right + */ + List *right_join_clauses; - List *right_join_clauses; /* list of RestrictInfos for mergejoinable - * outer join clauses w/nonnullable var on - * right */ + /* + * list of OuterJoinClauseInfos for mergejoinable full join clauses + */ + List *full_join_clauses; - List *full_join_clauses; /* list of RestrictInfos for mergejoinable - * full join clauses */ + /* list of SpecialJoinInfos */ + List *join_info_list; - List *join_info_list; /* list of SpecialJoinInfos */ + /* counter for assigning RestrictInfo serial numbers */ + int last_rinfo_serial; /* * all_result_relids is empty for SELECT, otherwise it contains at least @@ -274,41 +347,99 @@ struct PlannerInfo * included. leaf_result_relids is similar except that only actual result * tables, not partitioned tables, are included in it. */ - Relids all_result_relids; /* set of all result relids */ - Relids leaf_result_relids; /* set of all leaf relids */ + /* set of all result relids */ + Relids all_result_relids; + /* set of all leaf relids */ + Relids leaf_result_relids; /* + * list of AppendRelInfos + * * Note: for AppendRelInfos describing partitions of a partitioned table, * we guarantee that partitions that come earlier in the partitioned * table's PartitionDesc will appear earlier in append_rel_list. */ - List *append_rel_list; /* list of AppendRelInfos */ + List *append_rel_list; - List *row_identity_vars; /* list of RowIdentityVarInfos */ + /* list of RowIdentityVarInfos */ + List *row_identity_vars; - List *rowMarks; /* list of PlanRowMarks */ + /* list of PlanRowMarks */ + List *rowMarks; - List *placeholder_list; /* list of PlaceHolderInfos */ + /* list of PlaceHolderInfos */ + List *placeholder_list; - List *fkey_list; /* list of ForeignKeyOptInfos */ + /* array of PlaceHolderInfos indexed by phid */ + struct PlaceHolderInfo **placeholder_array pg_node_attr(read_write_ignore, array_size(placeholder_array_size)); + /* allocated size of array */ + int placeholder_array_size pg_node_attr(read_write_ignore); - List *query_pathkeys; /* desired pathkeys for query_planner() */ + /* list of ForeignKeyOptInfos */ + List *fkey_list; + + /* desired pathkeys for query_planner() */ + List *query_pathkeys; + + /* groupClause pathkeys, if any */ + List *group_pathkeys; + + /* + * The number of elements in the group_pathkeys list which belong to the + * GROUP BY clause. Additional ones belong to ORDER BY / DISTINCT + * aggregates. + */ + int num_groupby_pathkeys; - List *group_pathkeys; /* groupClause pathkeys, if any */ - List *window_pathkeys; /* pathkeys of bottom window, if any */ - List *distinct_pathkeys; /* distinctClause pathkeys, if any */ - List *sort_pathkeys; /* sortClause pathkeys, if any */ + /* pathkeys of bottom window, if any */ + List *window_pathkeys; + /* distinctClause pathkeys, if any */ + List *distinct_pathkeys; + /* sortClause pathkeys, if any */ + List *sort_pathkeys; - List *part_schemes; /* Canonicalised partition schemes used in the - * query. */ + /* Canonicalised partition schemes used in the query. */ + List *part_schemes pg_node_attr(read_write_ignore); - List *initial_rels; /* RelOptInfos we are now trying to join */ + /* RelOptInfos we are now trying to join */ + List *initial_rels pg_node_attr(read_write_ignore); - /* Use fetch_upper_rel() to get any particular upper rel */ - List *upper_rels[UPPERREL_FINAL + 1]; /* upper-rel RelOptInfos */ + /* + * Upper-rel RelOptInfos. Use fetch_upper_rel() to get any particular + * upper rel. + */ + List *upper_rels[UPPERREL_FINAL + 1] pg_node_attr(read_write_ignore); /* Result tlists chosen by grouping_planner for upper-stage processing */ - struct PathTarget *upper_targets[UPPERREL_FINAL + 1]; + struct PathTarget *upper_targets[UPPERREL_FINAL + 1] pg_node_attr(read_write_ignore); + + /* + * The fully-processed groupClause is kept here. It differs from + * parse->groupClause in that we remove any items that we can prove + * redundant, so that only the columns named here actually need to be + * compared to determine grouping. Note that it's possible for *all* the + * items to be proven redundant, implying that there is only one group + * containing all the query's rows. Hence, if you want to check whether + * GROUP BY was specified, test for nonempty parse->groupClause, not for + * nonempty processed_groupClause. + * + * Currently, when grouping sets are specified we do not attempt to + * optimize the groupClause, so that processed_groupClause will be + * identical to parse->groupClause. + */ + List *processed_groupClause; + + /* + * The fully-processed distinctClause is kept here. It differs from + * parse->distinctClause in that we remove any items that we can prove + * redundant, so that only the columns named here actually need to be + * compared to determine uniqueness. Note that it's possible for *all* + * the items to be proven redundant, implying that there should be only + * one output row. Hence, if you want to check whether DISTINCT was + * specified, test for nonempty parse->distinctClause, not for nonempty + * processed_distinctClause. + */ + List *processed_distinctClause; /* * The fully-processed targetlist is kept here. It differs from @@ -329,52 +460,87 @@ struct PlannerInfo */ List *update_colnos; - /* Fields filled during create_plan() for use in setrefs.c */ - AttrNumber *grouping_map; /* for GroupingFunc fixup */ - List *minmax_aggs; /* List of MinMaxAggInfos */ - - MemoryContext planner_cxt; /* context holding PlannerInfo */ + /* + * Fields filled during create_plan() for use in setrefs.c + */ + /* for GroupingFunc fixup (can't print: array length not known here) */ + AttrNumber *grouping_map pg_node_attr(read_write_ignore); + /* List of MinMaxAggInfos */ + List *minmax_aggs; - Cardinality total_table_pages; /* # of pages in all non-dummy tables of - * query */ + /* context holding PlannerInfo */ + MemoryContext planner_cxt pg_node_attr(read_write_ignore); - Selectivity tuple_fraction; /* tuple_fraction passed to query_planner */ - Cardinality limit_tuples; /* limit_tuples passed to query_planner */ + /* # of pages in all non-dummy tables of query */ + Cardinality total_table_pages; - Index qual_security_level; /* minimum security_level for quals */ - /* Note: qual_security_level is zero if there are no securityQuals */ + /* tuple_fraction passed to query_planner */ + Selectivity tuple_fraction; + /* limit_tuples passed to query_planner */ + Cardinality limit_tuples; - bool hasJoinRTEs; /* true if any RTEs are RTE_JOIN kind */ - bool hasLateralRTEs; /* true if any RTEs are marked LATERAL */ - bool hasHavingQual; /* true if havingQual was non-null */ - bool hasPseudoConstantQuals; /* true if any RestrictInfo has - * pseudoconstant = true */ - bool hasAlternativeSubPlans; /* true if we've made any of those */ - bool hasRecursion; /* true if planning a recursive WITH item */ + /* + * Minimum security_level for quals. Note: qual_security_level is zero if + * there are no securityQuals. + */ + Index qual_security_level; + + /* true if any RTEs are RTE_JOIN kind */ + bool hasJoinRTEs; + /* true if any RTEs are marked LATERAL */ + bool hasLateralRTEs; + /* true if havingQual was non-null */ + bool hasHavingQual; + /* true if any RestrictInfo has pseudoconstant = true */ + bool hasPseudoConstantQuals; + /* true if we've made any of those */ + bool hasAlternativeSubPlans; + /* true once we're no longer allowed to add PlaceHolderInfos */ + bool placeholdersFrozen; + /* true if planning a recursive WITH item */ + bool hasRecursion; /* * Information about aggregates. Filled by preprocess_aggrefs(). */ - List *agginfos; /* AggInfo structs */ - List *aggtransinfos; /* AggTransInfo structs */ - int numOrderedAggs; /* number w/ DISTINCT/ORDER BY/WITHIN GROUP */ - bool hasNonPartialAggs; /* does any agg not support partial mode? */ - bool hasNonSerialAggs; /* is any partial agg non-serializable? */ + /* AggInfo structs */ + List *agginfos; + /* AggTransInfo structs */ + List *aggtransinfos; + /* number of aggs with DISTINCT/ORDER BY/WITHIN GROUP */ + int numOrderedAggs; + /* does any agg not support partial mode? */ + bool hasNonPartialAggs; + /* is any partial agg non-serializable? */ + bool hasNonSerialAggs; - /* These fields are used only when hasRecursion is true: */ - int wt_param_id; /* PARAM_EXEC ID for the work table */ - struct Path *non_recursive_path; /* a path for non-recursive term */ + /* + * These fields are used only when hasRecursion is true: + */ + /* PARAM_EXEC ID for the work table */ + int wt_param_id; + /* a path for non-recursive term */ + struct Path *non_recursive_path; - /* These fields are workspace for createplan.c */ - Relids curOuterRels; /* outer rels above current node */ - List *curOuterParams; /* not-yet-assigned NestLoopParams */ + /* + * These fields are workspace for createplan.c + */ + /* outer rels above current node */ + Relids curOuterRels; + /* not-yet-assigned NestLoopParams */ + List *curOuterParams; - /* These fields are workspace for setrefs.c */ - bool *isAltSubplan; /* array corresponding to glob->subplans */ - bool *isUsedSubplan; /* array corresponding to glob->subplans */ + /* + * These fields are workspace for setrefs.c. Each is an array + * corresponding to glob->subplans. (We could probably teach + * gen_node_support.pl how to determine the array length, but it doesn't + * seem worth the trouble, so just mark them read_write_ignore.) + */ + bool *isAltSubplan pg_node_attr(read_write_ignore); + bool *isUsedSubplan pg_node_attr(read_write_ignore); /* optional private data for join_search_hook, e.g., GEQO */ - void *join_search_private; + void *join_search_private pg_node_attr(read_write_ignore); /* Does this query modify any partition key columns? */ bool partColsUpdated; @@ -430,9 +596,10 @@ typedef struct PartitionSchemeData *PartitionScheme; * or the output of a sub-SELECT or function that appears in the range table. * In either case it is uniquely identified by an RT index. A "joinrel" * is the joining of two or more base rels. A joinrel is identified by - * the set of RT indexes for its component baserels. We create RelOptInfo - * nodes for each baserel and joinrel, and store them in the PlannerInfo's - * simple_rel_array and join_rel_list respectively. + * the set of RT indexes for its component baserels, along with RT indexes + * for any outer joins it has computed. We create RelOptInfo nodes for each + * baserel and joinrel, and store them in the PlannerInfo's simple_rel_array + * and join_rel_list respectively. * * Note that there is only one joinrel for any given set of component * baserels, no matter what order we assemble them in; so an unordered @@ -465,14 +632,13 @@ typedef struct PartitionSchemeData *PartitionScheme; * Many of the fields in these RelOptInfos are meaningless, but their Path * fields always hold Paths showing ways to do that processing step. * - * Lastly, there is a RelOptKind for "dead" relations, which are base rels - * that we have proven we don't need to join after all. - * * Parts of this data structure are specific to various scan and join * mechanisms. It didn't seem worth creating new node types for them. * - * relids - Set of base-relation identifiers; it is a base relation - * if there is just one, a join relation if more than one + * relids - Set of relation identifiers (RT indexes). This is a base + * relation if there is just one, a join relation if more; + * in the join case, RT indexes of any outer joins formed + * at or below this join are included along with baserels * rows - estimated number of tuples in the relation after restriction * clauses have been applied (ie, output rows of a plan for it) * consider_startup - true if there is any value in keeping plain paths for @@ -514,12 +680,13 @@ typedef struct PartitionSchemeData *PartitionScheme; * the attribute is needed as part of final targetlist * attr_widths - cache space for per-attribute width estimates; * zero means not computed yet + * nulling_relids - relids of outer joins that can null this rel * lateral_vars - lateral cross-references of rel, if any (list of * Vars and PlaceHolderVars) * lateral_referencers - relids of rels that reference this one laterally * (includes both direct and indirect lateral references) * indexlist - list of IndexOptInfo nodes for relation's indexes - * (always NIL if it's not a table) + * (always NIL if it's not a table or partitioned table) * pages - number of disk pages in relation (zero if not a table) * tuples - number of tuples in relation (not considering restrictions) * allvisfrac - fraction of disk pages that are marked all-visible @@ -631,6 +798,9 @@ typedef struct PartitionSchemeData *PartitionScheme; * Furthermore, FULL JOINs add extra nullable_partexprs expressions * corresponding to COALESCE expressions of the left and right join columns, * to simplify matching join clauses to those lists. + * + * Not all fields are printed. (In some cases, there is no print support for + * the field type.) *---------- */ @@ -644,8 +814,7 @@ typedef enum RelOptKind RELOPT_OTHER_MEMBER_REL, RELOPT_OTHER_JOINREL, RELOPT_UPPER_REL, - RELOPT_OTHER_UPPER_REL, - RELOPT_DEADREL + RELOPT_OTHER_UPPER_REL } RelOptKind; /* @@ -674,25 +843,43 @@ typedef enum RelOptKind typedef struct RelOptInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; RelOptKind reloptkind; - /* all relations included in this RelOptInfo */ - Relids relids; /* set of base relids (rangetable indexes) */ + /* + * all relations included in this RelOptInfo; set of base + OJ relids + * (rangetable indexes) + */ + Relids relids; - /* size estimates generated by planner */ - Cardinality rows; /* estimated number of result tuples */ + /* + * size estimates generated by planner + */ + /* estimated number of result tuples */ + Cardinality rows; - /* per-relation planner control flags */ - bool consider_startup; /* keep cheap-startup-cost paths? */ - bool consider_param_startup; /* ditto, for parameterized paths? */ - bool consider_parallel; /* consider parallel paths? */ + /* + * per-relation planner control flags + */ + /* keep cheap-startup-cost paths? */ + bool consider_startup; + /* ditto, for parameterized paths? */ + bool consider_param_startup; + /* consider parallel paths? */ + bool consider_parallel; - /* default result targetlist for Paths scanning this relation */ - struct PathTarget *reltarget; /* list of Vars/Exprs, cost, width */ + /* + * default result targetlist for Paths scanning this relation; list of + * Vars/Exprs, cost, width + */ + struct PathTarget *reltarget; - /* materialization information */ + /* + * materialization information + */ List *pathlist; /* Path structures */ List *ppilist; /* ParamPathInfos used in pathlist */ List *partial_pathlist; /* partial Paths */ @@ -701,79 +888,146 @@ typedef struct RelOptInfo struct Path *cheapest_unique_path; List *cheapest_parameterized_paths; - /* parameterization information needed for both base rels and join rels */ - /* (see also lateral_vars and lateral_referencers) */ - Relids direct_lateral_relids; /* rels directly laterally referenced */ - Relids lateral_relids; /* minimum parameterization of rel */ + /* + * parameterization information needed for both base rels and join rels + * (see also lateral_vars and lateral_referencers) + */ + /* rels directly laterally referenced */ + Relids direct_lateral_relids; + /* minimum parameterization of rel */ + Relids lateral_relids; - /* information about a base rel (not set for join rels!) */ + /* + * information about a base rel (not set for join rels!) + */ Index relid; - Oid reltablespace; /* containing tablespace */ - RTEKind rtekind; /* RELATION, SUBQUERY, FUNCTION, etc */ - AttrNumber min_attr; /* smallest attrno of rel (often <0) */ - AttrNumber max_attr; /* largest attrno of rel */ - Relids *attr_needed; /* array indexed [min_attr .. max_attr] */ - int32 *attr_widths; /* array indexed [min_attr .. max_attr] */ - List *lateral_vars; /* LATERAL Vars and PHVs referenced by rel */ - Relids lateral_referencers; /* rels that reference me laterally */ - List *indexlist; /* list of IndexOptInfo */ - List *statlist; /* list of StatisticExtInfo */ - BlockNumber pages; /* size estimates derived from pg_class */ + /* containing tablespace */ + Oid reltablespace; + /* RELATION, SUBQUERY, FUNCTION, etc */ + RTEKind rtekind; + /* smallest attrno of rel (often <0) */ + AttrNumber min_attr; + /* largest attrno of rel */ + AttrNumber max_attr; + /* array indexed [min_attr .. max_attr] */ + Relids *attr_needed pg_node_attr(read_write_ignore); + /* array indexed [min_attr .. max_attr] */ + int32 *attr_widths pg_node_attr(read_write_ignore); + /* relids of outer joins that can null this baserel */ + Relids nulling_relids; + /* LATERAL Vars and PHVs referenced by rel */ + List *lateral_vars; + /* rels that reference this baserel laterally */ + Relids lateral_referencers; + /* list of IndexOptInfo */ + List *indexlist; + /* list of StatisticExtInfo */ + List *statlist; + /* size estimates derived from pg_class */ + BlockNumber pages; Cardinality tuples; double allvisfrac; - Bitmapset *eclass_indexes; /* Indexes in PlannerInfo's eq_classes list of - * ECs that mention this rel */ + /* indexes in PlannerInfo's eq_classes list of ECs that mention this rel */ + Bitmapset *eclass_indexes; PlannerInfo *subroot; /* if subquery */ List *subplan_params; /* if subquery */ - int rel_parallel_workers; /* wanted number of parallel workers */ - uint32 amflags; /* Bitmask of optional features supported by - * the table AM */ - - /* Information about foreign tables and foreign joins */ - Oid serverid; /* identifies server for the table or join */ - Oid userid; /* identifies user to check access as */ - bool useridiscurrent; /* join is only valid for current user */ + /* wanted number of parallel workers */ + int rel_parallel_workers; + /* Bitmask of optional features supported by the table AM */ + uint32 amflags; + + /* + * Information about foreign tables and foreign joins + */ + /* identifies server for the table or join */ + Oid serverid; + /* identifies user to check access as; 0 means to check as current user */ + Oid userid; + /* join is only valid for current user */ + bool useridiscurrent; /* use "struct FdwRoutine" to avoid including fdwapi.h here */ - struct FdwRoutine *fdwroutine; - void *fdw_private; - - /* cache space for remembering if we have proven this relation unique */ - List *unique_for_rels; /* known unique for these other relid - * set(s) */ - List *non_unique_for_rels; /* known not unique for these set(s) */ - - /* used by various scans and joins: */ - List *baserestrictinfo; /* RestrictInfo structures (if base rel) */ - QualCost baserestrictcost; /* cost of evaluating the above */ - Index baserestrict_min_security; /* min security_level found in - * baserestrictinfo */ - List *joininfo; /* RestrictInfo structures for join clauses - * involving this rel */ - bool has_eclass_joins; /* T means joininfo is incomplete */ - - /* used by partitionwise joins: */ - bool consider_partitionwise_join; /* consider partitionwise join - * paths? (if partitioned rel) */ - Relids top_parent_relids; /* Relids of topmost parents (if "other" - * rel) */ - - /* used for partitioned relations: */ - PartitionScheme part_scheme; /* Partitioning scheme */ - int nparts; /* Number of partitions; -1 if not yet set; in - * case of a join relation 0 means it's - * considered unpartitioned */ - struct PartitionBoundInfoData *boundinfo; /* Partition bounds */ - bool partbounds_merged; /* True if partition bounds were created - * by partition_bounds_merge() */ - List *partition_qual; /* Partition constraint, if not the root */ - struct RelOptInfo **part_rels; /* Array of RelOptInfos of partitions, - * stored in the same order as bounds */ - Bitmapset *live_parts; /* Bitmap with members acting as indexes into - * the part_rels[] array to indicate which - * partitions survived partition pruning. */ - Relids all_partrels; /* Relids set of all partition relids */ - List **partexprs; /* Non-nullable partition key expressions */ - List **nullable_partexprs; /* Nullable partition key expressions */ + struct FdwRoutine *fdwroutine pg_node_attr(read_write_ignore); + void *fdw_private pg_node_attr(read_write_ignore); + + /* + * cache space for remembering if we have proven this relation unique + */ + /* known unique for these other relid set(s) */ + List *unique_for_rels; + /* known not unique for these set(s) */ + List *non_unique_for_rels; + + /* + * used by various scans and joins: + */ + /* RestrictInfo structures (if base rel) */ + List *baserestrictinfo; + /* cost of evaluating the above */ + QualCost baserestrictcost; + /* min security_level found in baserestrictinfo */ + Index baserestrict_min_security; + /* RestrictInfo structures for join clauses involving this rel */ + List *joininfo; + /* T means joininfo is incomplete */ + bool has_eclass_joins; + + /* + * used by partitionwise joins: + */ + /* consider partitionwise join paths? (if partitioned rel) */ + bool consider_partitionwise_join; + + /* + * inheritance links, if this is an otherrel (otherwise NULL): + */ + /* Immediate parent relation (dumping it would be too verbose) */ + struct RelOptInfo *parent pg_node_attr(read_write_ignore); + /* Topmost parent relation (dumping it would be too verbose) */ + struct RelOptInfo *top_parent pg_node_attr(read_write_ignore); + /* Relids of topmost parent (redundant, but handy) */ + Relids top_parent_relids; + + /* + * used for partitioned relations: + */ + /* Partitioning scheme */ + PartitionScheme part_scheme pg_node_attr(read_write_ignore); + + /* + * Number of partitions; -1 if not yet set; in case of a join relation 0 + * means it's considered unpartitioned + */ + int nparts; + /* Partition bounds */ + struct PartitionBoundInfoData *boundinfo pg_node_attr(read_write_ignore); + /* True if partition bounds were created by partition_bounds_merge() */ + bool partbounds_merged; + /* Partition constraint, if not the root */ + List *partition_qual; + + /* + * Array of RelOptInfos of partitions, stored in the same order as bounds + * (don't print, too bulky and duplicative) + */ + struct RelOptInfo **part_rels pg_node_attr(read_write_ignore); + + /* + * Bitmap with members acting as indexes into the part_rels[] array to + * indicate which partitions survived partition pruning. + */ + Bitmapset *live_parts; + /* Relids set of all partition relids */ + Relids all_partrels; + + /* + * These arrays are of length partkey->partnatts, which we don't have at + * hand, so don't try to print + */ + + /* Non-nullable partition key expressions */ + List **partexprs pg_node_attr(read_write_ignore); + /* Nullable partition key expressions */ + List **nullable_partexprs pg_node_attr(read_write_ignore); } RelOptInfo; /* @@ -834,60 +1088,104 @@ typedef struct IndexOptInfo IndexOptInfo; struct IndexOptInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - Oid indexoid; /* OID of the index relation */ - Oid reltablespace; /* tablespace of index (not table) */ - RelOptInfo *rel; /* back-link to index's table */ - - /* index-size statistics (from pg_class and elsewhere) */ - BlockNumber pages; /* number of disk pages in index */ - Cardinality tuples; /* number of index tuples in index */ - int tree_height; /* index tree height, or -1 if unknown */ - - /* index descriptor information */ - int ncolumns; /* number of columns in index */ - int nkeycolumns; /* number of key columns in index */ - int *indexkeys; /* column numbers of index's attributes both - * key and included columns, or 0 */ - Oid *indexcollations; /* OIDs of collations of index columns */ - Oid *opfamily; /* OIDs of operator families for columns */ - Oid *opcintype; /* OIDs of opclass declared input data types */ - Oid *sortopfamily; /* OIDs of btree opfamilies, if orderable */ - bool *reverse_sort; /* is sort order descending? */ - bool *nulls_first; /* do NULLs come first in the sort order? */ - bytea **opclassoptions; /* opclass-specific options for columns */ - bool *canreturn; /* which index cols can be returned in an - * index-only scan? */ - Oid relam; /* OID of the access method (in pg_am) */ - - List *indexprs; /* expressions for non-simple index columns */ - List *indpred; /* predicate if a partial index, else NIL */ - - List *indextlist; /* targetlist representing index columns */ - - List *indrestrictinfo; /* parent relation's baserestrictinfo - * list, less any conditions implied by - * the index's predicate (unless it's a - * target rel, see comments in - * check_index_predicates()) */ - - bool predOK; /* true if index predicate matches query */ - bool unique; /* true if a unique index */ - bool immediate; /* is uniqueness enforced immediately? */ - bool hypothetical; /* true if index doesn't really exist */ - - /* Remaining fields are copied from the index AM's API struct: */ - bool amcanorderbyop; /* does AM support order by operator result? */ - bool amoptionalkey; /* can query omit key for the first column? */ - bool amsearcharray; /* can AM handle ScalarArrayOpExpr quals? */ - bool amsearchnulls; /* can AM search for NULL/NOT NULL entries? */ - bool amhasgettuple; /* does AM have amgettuple interface? */ - bool amhasgetbitmap; /* does AM have amgetbitmap interface? */ - bool amcanparallel; /* does AM support parallel scan? */ - bool amcanmarkpos; /* does AM support mark/restore? */ + /* OID of the index relation */ + Oid indexoid; + /* tablespace of index (not table) */ + Oid reltablespace; + /* back-link to index's table; don't print, else infinite recursion */ + RelOptInfo *rel pg_node_attr(read_write_ignore); + + /* + * index-size statistics (from pg_class and elsewhere) + */ + /* number of disk pages in index */ + BlockNumber pages; + /* number of index tuples in index */ + Cardinality tuples; + /* index tree height, or -1 if unknown */ + int tree_height; + + /* + * index descriptor information + */ + /* number of columns in index */ + int ncolumns; + /* number of key columns in index */ + int nkeycolumns; + + /* + * table column numbers of index's columns (both key and included + * columns), or 0 for expression columns + */ + int *indexkeys pg_node_attr(array_size(ncolumns)); + /* OIDs of collations of index columns */ + Oid *indexcollations pg_node_attr(array_size(nkeycolumns)); + /* OIDs of operator families for columns */ + Oid *opfamily pg_node_attr(array_size(nkeycolumns)); + /* OIDs of opclass declared input data types */ + Oid *opcintype pg_node_attr(array_size(nkeycolumns)); + /* OIDs of btree opfamilies, if orderable. NULL if partitioned index */ + Oid *sortopfamily pg_node_attr(array_size(nkeycolumns)); + /* is sort order descending? or NULL if partitioned index */ + bool *reverse_sort pg_node_attr(array_size(nkeycolumns)); + /* do NULLs come first in the sort order? or NULL if partitioned index */ + bool *nulls_first pg_node_attr(array_size(nkeycolumns)); + /* opclass-specific options for columns */ + bytea **opclassoptions pg_node_attr(read_write_ignore); + /* which index cols can be returned in an index-only scan? */ + bool *canreturn pg_node_attr(array_size(ncolumns)); + /* OID of the access method (in pg_am) */ + Oid relam; + + /* + * expressions for non-simple index columns; redundant to print since we + * print indextlist + */ + List *indexprs pg_node_attr(read_write_ignore); + /* predicate if a partial index, else NIL */ + List *indpred; + + /* targetlist representing index columns */ + List *indextlist; + + /* + * parent relation's baserestrictinfo list, less any conditions implied by + * the index's predicate (unless it's a target rel, see comments in + * check_index_predicates()) + */ + List *indrestrictinfo; + + /* true if index predicate matches query */ + bool predOK; + /* true if a unique index */ + bool unique; + /* is uniqueness enforced immediately? */ + bool immediate; + /* true if index doesn't really exist */ + bool hypothetical; + + /* + * Remaining fields are copied from the index AM's API struct + * (IndexAmRoutine). These fields are not set for partitioned indexes. + */ + bool amcanorderbyop; + bool amoptionalkey; + bool amsearcharray; + bool amsearchnulls; + /* does AM have amgettuple interface? */ + bool amhasgettuple; + /* does AM have amgetbitmap interface? */ + bool amhasgetbitmap; + bool amcanparallel; + /* does AM have ammarkpos interface? */ + bool amcanmarkpos; + /* AM's cost estimator */ /* Rather than include amapi.h here, we declare amcostestimate like this */ - void (*amcostestimate) (); /* AM's cost estimator */ + void (*amcostestimate) () pg_node_attr(read_write_ignore); }; /* @@ -900,21 +1198,39 @@ struct IndexOptInfo */ typedef struct ForeignKeyOptInfo { + pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble) + NodeTag type; - /* Basic data about the foreign key (fetched from catalogs): */ - Index con_relid; /* RT index of the referencing table */ - Index ref_relid; /* RT index of the referenced table */ - int nkeys; /* number of columns in the foreign key */ - AttrNumber conkey[INDEX_MAX_KEYS]; /* cols in referencing table */ - AttrNumber confkey[INDEX_MAX_KEYS]; /* cols in referenced table */ - Oid conpfeqop[INDEX_MAX_KEYS]; /* PK = FK operator OIDs */ - - /* Derived info about whether FK's equality conditions match the query: */ - int nmatched_ec; /* # of FK cols matched by ECs */ - int nconst_ec; /* # of these ECs that are ec_has_const */ - int nmatched_rcols; /* # of FK cols matched by non-EC rinfos */ - int nmatched_ri; /* total # of non-EC rinfos matched to FK */ + /* + * Basic data about the foreign key (fetched from catalogs): + */ + + /* RT index of the referencing table */ + Index con_relid; + /* RT index of the referenced table */ + Index ref_relid; + /* number of columns in the foreign key */ + int nkeys; + /* cols in referencing table */ + AttrNumber conkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); + /* cols in referenced table */ + AttrNumber confkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); + /* PK = FK operator OIDs */ + Oid conpfeqop[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); + + /* + * Derived info about whether FK's equality conditions match the query: + */ + + /* # of FK cols matched by ECs */ + int nmatched_ec; + /* # of these ECs that are ec_has_const */ + int nconst_ec; + /* # of FK cols matched by non-EC rinfos */ + int nmatched_rcols; + /* total # of non-EC rinfos matched to FK */ + int nmatched_ri; /* Pointer to eclass matching each column's condition, if there is one */ struct EquivalenceClass *eclass[INDEX_MAX_KEYS]; /* Pointer to eclass member for the referencing Var, if there is one */ @@ -932,21 +1248,69 @@ typedef struct ForeignKeyOptInfo */ typedef struct StatisticExtInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - Oid statOid; /* OID of the statistics row */ - bool inherit; /* includes child relations */ - RelOptInfo *rel; /* back-link to statistic's table */ - char kind; /* statistics kind of this entry */ - Bitmapset *keys; /* attnums of the columns covered */ - List *exprs; /* expressions */ + /* OID of the statistics row */ + Oid statOid; + + /* includes child relations */ + bool inherit; + + /* back-link to statistic's table; don't print, else infinite recursion */ + RelOptInfo *rel pg_node_attr(read_write_ignore); + + /* statistics kind of this entry */ + char kind; + + /* attnums of the columns covered */ + Bitmapset *keys; + + /* expressions */ + List *exprs; } StatisticExtInfo; +/* + * JoinDomains + * + * A "join domain" defines the scope of applicability of deductions made via + * the EquivalenceClass mechanism. Roughly speaking, a join domain is a set + * of base+OJ relations that are inner-joined together. More precisely, it is + * the set of relations at which equalities deduced from an EquivalenceClass + * can be enforced or should be expected to hold. The topmost JoinDomain + * covers the whole query (so its jd_relids should equal all_query_rels). + * An outer join creates a new JoinDomain that includes all base+OJ relids + * within its nullable side, but (by convention) not the OJ's own relid. + * A FULL join creates two new JoinDomains, one for each side. + * + * Notice that a rel that is below outer join(s) will thus appear to belong + * to multiple join domains. However, any of its Vars that appear in + * EquivalenceClasses belonging to higher join domains will have nullingrel + * bits preventing them from being evaluated at the rel's scan level, so that + * we will not be able to derive enforceable-at-the-rel-scan-level clauses + * from such ECs. We define the join domain relid sets this way so that + * domains can be said to be "higher" or "lower" when one domain relid set + * includes another. + * + * The JoinDomains for a query are computed in deconstruct_jointree. + * We do not copy JoinDomain structs once made, so they can be compared + * for equality by simple pointer equality. + */ +typedef struct JoinDomain +{ + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + + NodeTag type; + + Relids jd_relids; /* all relids contained within the domain */ +} JoinDomain; + /* * EquivalenceClasses * - * Whenever we can determine that a mergejoinable equality clause A = B is - * not delayed by any outer join, we create an EquivalenceClass containing + * Whenever we identify a mergejoinable equality clause A = B that is + * not an outer-join clause, we create an EquivalenceClass containing * the expressions A and B to record this knowledge. If we later find another * equivalence B = C, we add C to the existing EquivalenceClass; this may * require merging two existing EquivalenceClasses. At the end of the qual @@ -960,6 +1324,18 @@ typedef struct StatisticExtInfo * that all or none of the input datatypes are collatable, so that a single * collation value is sufficient.) * + * Strictly speaking, deductions from an EquivalenceClass hold only within + * a "join domain", that is a set of relations that are innerjoined together + * (see JoinDomain above). For the most part we don't need to account for + * this explicitly, because equality clauses from different join domains + * will contain Vars that are not equal() because they have different + * nullingrel sets, and thus we will never falsely merge ECs from different + * join domains. But Var-free (pseudoconstant) expressions lack that safety + * feature. We handle that by marking "const" EC members with the JoinDomain + * of the clause they came from; two nominally-equal const members will be + * considered different if they came from different JoinDomains. This ensures + * no false EquivalenceClass merges will occur. + * * We also use EquivalenceClasses as the base structure for PathKeys, letting * us represent knowledge about different sort orderings being equivalent. * Since every PathKey must reference an EquivalenceClass, we will end up @@ -974,16 +1350,19 @@ typedef struct StatisticExtInfo * entry: consider SELECT random() AS a, random() AS b ... ORDER BY b,a. * So we record the SortGroupRef of the originating sort clause. * - * We allow equality clauses appearing below the nullable side of an outer join - * to form EquivalenceClasses, but these have a slightly different meaning: - * the included values might be all NULL rather than all the same non-null - * values. See src/backend/optimizer/README for more on that point. - * * NB: if ec_merged isn't NULL, this class has been merged into another, and * should be ignored in favor of using the pointed-to class. + * + * NB: EquivalenceClasses are never copied after creation. Therefore, + * copyObject() copies pointers to them as pointers, and equal() compares + * pointers to EquivalenceClasses via pointer equality. This is implemented + * by putting copy_as_scalar and equal_as_scalar attributes on fields that + * are pointers to EquivalenceClasses. The same goes for EquivalenceMembers. */ typedef struct EquivalenceClass { + pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble) + NodeTag type; List *ec_opfamilies; /* btree operator family OIDs */ @@ -995,7 +1374,6 @@ typedef struct EquivalenceClass * for child members (see below) */ bool ec_has_const; /* any pseudoconstants in ec_members? */ bool ec_has_volatile; /* the (sole) member is a volatile expr */ - bool ec_below_outer_join; /* equivalence applies below an OJ */ bool ec_broken; /* failed to generate needed clauses? */ Index ec_sortref; /* originating sortclause label, or 0 */ Index ec_min_security; /* minimum security_level in ec_sources */ @@ -1004,11 +1382,11 @@ typedef struct EquivalenceClass } EquivalenceClass; /* - * If an EC contains a const and isn't below-outer-join, any PathKey depending - * on it must be redundant, since there's only one possible value of the key. + * If an EC contains a constant, any PathKey depending on it must be + * redundant, since there's only one possible value of the key. */ #define EC_MUST_BE_REDUNDANT(eclass) \ - ((eclass)->ec_has_const && !(eclass)->ec_below_outer_join) + ((eclass)->ec_has_const) /* * EquivalenceMember - one member expression of an EquivalenceClass @@ -1034,14 +1412,18 @@ typedef struct EquivalenceClass */ typedef struct EquivalenceMember { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; Expr *em_expr; /* the expression represented */ Relids em_relids; /* all relids appearing in em_expr */ - Relids em_nullable_relids; /* nullable by lower outer joins */ bool em_is_const; /* expression is pseudoconstant? */ bool em_is_child; /* derived version for a child relation? */ Oid em_datatype; /* the "nominal type" used by the opfamily */ + JoinDomain *em_jdomain; /* join domain containing the source clause */ + /* if em_is_child is true, this links to corresponding EM for top parent */ + struct EquivalenceMember *em_parent pg_node_attr(read_write_ignore); } EquivalenceMember; /* @@ -1063,9 +1445,12 @@ typedef struct EquivalenceMember */ typedef struct PathKey { + pg_node_attr(no_read, no_query_jumble) + NodeTag type; - EquivalenceClass *pk_eclass; /* the value that is ordered */ + /* the value that is ordered */ + EquivalenceClass *pk_eclass pg_node_attr(copy_as_scalar, equal_as_scalar); Oid pk_opfamily; /* btree opfamily defining the ordering */ int pk_strategy; /* sort direction (ASC or DESC) */ bool pk_nulls_first; /* do NULLs come before normal values? */ @@ -1108,13 +1493,24 @@ typedef enum VolatileFunctionStatus */ typedef struct PathTarget { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - List *exprs; /* list of expressions to be computed */ - Index *sortgrouprefs; /* corresponding sort/group refnos, or 0 */ - QualCost cost; /* cost of evaluating the expressions */ - int width; /* estimated avg width of result tuples */ - VolatileFunctionStatus has_volatile_expr; /* indicates if exprs contain - * any volatile functions. */ + + /* list of expressions to be computed */ + List *exprs; + + /* corresponding sort/group refnos, or 0 */ + Index *sortgrouprefs pg_node_attr(array_size(exprs)); + + /* cost of evaluating the expressions */ + QualCost cost; + + /* estimated avg width of result tuples */ + int width; + + /* indicates if exprs contain any volatile functions */ + VolatileFunctionStatus has_volatile_expr; } PathTarget; /* Convenience macro to get a sort/group refno from a PathTarget */ @@ -1134,15 +1530,24 @@ typedef struct PathTarget * Note: ppi_clauses is only used in ParamPathInfos for base relation paths; * in join cases it's NIL because the set of relevant clauses varies depending * on how the join is formed. The relevant clauses will appear in each - * parameterized join path's joinrestrictinfo list, instead. + * parameterized join path's joinrestrictinfo list, instead. ParamPathInfos + * for append relations don't bother with this, either. + * + * ppi_serials is the set of rinfo_serial numbers for quals that are enforced + * by this path. As with ppi_clauses, it's only maintained for baserels. + * (We could construct it on-the-fly from ppi_clauses, but it seems better + * to materialize a copy.) */ typedef struct ParamPathInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; Relids ppi_req_outer; /* rels supplying parameters used by path */ Cardinality ppi_rows; /* estimated number of result tuples */ List *ppi_clauses; /* join clauses available from outer rels */ + Bitmapset *ppi_serials; /* set of rinfo_serial for enforced quals */ } ParamPathInfo; @@ -1174,29 +1579,58 @@ typedef struct ParamPathInfo * * "pathkeys" is a List of PathKey nodes (see above), describing the sort * ordering of the path's output rows. + * + * We do not support copying Path trees, mainly because the circular linkages + * between RelOptInfo and Path nodes can't be handled easily in a simple + * depth-first traversal. We also don't have read support at the moment. */ typedef struct Path { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - NodeTag pathtype; /* tag identifying scan/join method */ + /* tag identifying scan/join method */ + NodeTag pathtype; + + /* + * the relation this path can build + * + * We do NOT print the parent, else we'd be in infinite recursion. We can + * print the parent's relids for identification purposes, though. + */ + RelOptInfo *parent pg_node_attr(write_only_relids); - RelOptInfo *parent; /* the relation this path can build */ - PathTarget *pathtarget; /* list of Vars/Exprs, cost, width */ + /* + * list of Vars/Exprs, cost, width + * + * We print the pathtarget only if it's not the default one for the rel. + */ + PathTarget *pathtarget pg_node_attr(write_only_nondefault_pathtarget); - ParamPathInfo *param_info; /* parameterization info, or NULL if none */ + /* + * parameterization info, or NULL if none + * + * We do not print the whole of param_info, since it's printed via + * RelOptInfo; it's sufficient and less cluttering to print just the + * required outer relids. + */ + ParamPathInfo *param_info pg_node_attr(write_only_req_outer); - bool parallel_aware; /* engage parallel-aware logic? */ - bool parallel_safe; /* OK to use as part of parallel plan? */ - int parallel_workers; /* desired # of workers; 0 = not parallel */ + /* engage parallel-aware logic? */ + bool parallel_aware; + /* OK to use as part of parallel plan? */ + bool parallel_safe; + /* desired # of workers; 0 = not parallel */ + int parallel_workers; /* estimated size/costs for path (see costsize.c for more info) */ Cardinality rows; /* estimated number of result tuples */ Cost startup_cost; /* cost expended before fetching any tuples */ Cost total_cost; /* total cost (assuming all tuples fetched) */ - List *pathkeys; /* sort ordering of path's output */ - /* pathkeys is a List of PathKey nodes; see above */ + /* sort ordering of path's output; a List of PathKey nodes; see above */ + List *pathkeys; } Path; /* Macro for extracting a path's parameterization relids; beware double eval */ @@ -1228,12 +1662,9 @@ typedef struct Path * on which index column each ORDER BY can be used with.) * * 'indexscandir' is one of: - * ForwardScanDirection: forward scan of an ordered index + * ForwardScanDirection: forward scan of an index * BackwardScanDirection: backward scan of an ordered index - * NoMovementScanDirection: scan of an unordered index, or don't care - * (The executor doesn't care whether it gets ForwardScanDirection or - * NoMovementScanDirection for an indexscan, but the planner wants to - * distinguish ordered from unordered indexes for building pathkeys.) + * Unordered indexes will always have an indexscandir of ForwardScanDirection. * * 'indextotalcost' and 'indexselectivity' are saved in the IndexPath so that * we need not recompute them when considering using the same index in a @@ -1289,6 +1720,8 @@ typedef struct IndexPath */ typedef struct IndexClause { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; struct RestrictInfo *rinfo; /* original restriction or join clause */ List *indexquals; /* indexqual(s) derived from it */ @@ -1403,15 +1836,18 @@ typedef struct ForeignPath } ForeignPath; /* - * CustomPath represents a table scan done by some out-of-core extension. + * CustomPath represents a table scan or a table join done by some out-of-core + * extension. * * We provide a set of hooks here - which the provider must take care to set * up correctly - to allow extensions to supply their own methods of scanning - * a relation. For example, a provider might provide GPU acceleration, a - * cache-based scan, or some other kind of logic we haven't dreamed up yet. + * a relation or joing relations. For example, a provider might provide GPU + * acceleration, a cache-based scan, or some other kind of logic we haven't + * dreamed up yet. * - * CustomPaths can be injected into the planning process for a relation by - * set_rel_pathlist_hook functions. + * CustomPaths can be injected into the planning process for a base or join + * relation by set_rel_pathlist_hook or set_join_pathlist_hook functions, + * respectively. * * Core code must avoid assuming that the CustomPath is only as large as * the structure declared here; providers are allowed to make it the first @@ -1513,8 +1949,8 @@ typedef struct MemoizePath { Path path; Path *subpath; /* outerpath to cache tuples from */ - List *hash_operators; /* hash operators for each key */ - List *param_exprs; /* cache keys */ + List *hash_operators; /* OIDs of hash equality ops for cache keys */ + List *param_exprs; /* expressions that are cache keys */ bool singlerow; /* true if the cache entry is to be marked as * complete after caching the first record. */ bool binary_mode; /* true when cache key should be compared bit @@ -1584,6 +2020,8 @@ typedef struct GatherMergePath typedef struct JoinPath { + pg_node_attr(abstract) + Path path; JoinType jointype; @@ -1786,6 +2224,8 @@ typedef struct AggPath typedef struct GroupingSetData { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; List *set; /* grouping set as list of sortgrouprefs */ Cardinality numGroups; /* est. number of result groups */ @@ -1793,6 +2233,8 @@ typedef struct GroupingSetData typedef struct RollupData { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; List *groupClause; /* applicable subset of parse->groupClause */ List *gsets; /* lists of integer indexes into groupClause */ @@ -1892,7 +2334,7 @@ typedef struct ModifyTablePath CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */ bool canSetTag; /* do we set the command tag/es_processed? */ Index nominalRelation; /* Parent RT index for use of EXPLAIN */ - Index rootRelation; /* Root RT index, if target is partitioned */ + Index rootRelation; /* Root RT index, if partitioned/inherited */ bool partColsUpdated; /* some part key in hierarchy updated? */ List *resultRelations; /* integer list of RT indexes */ List *updateColnosLists; /* per-target-table update_colnos lists */ @@ -1930,17 +2372,17 @@ typedef struct LimitPath * If a restriction clause references a single base relation, it will appear * in the baserestrictinfo list of the RelOptInfo for that base rel. * - * If a restriction clause references more than one base rel, it will + * If a restriction clause references more than one base+OJ relation, it will * appear in the joininfo list of every RelOptInfo that describes a strict - * subset of the base rels mentioned in the clause. The joininfo lists are + * subset of the relations mentioned in the clause. The joininfo lists are * used to drive join tree building by selecting plausible join candidates. * The clause cannot actually be applied until we have built a join rel - * containing all the base rels it references, however. + * containing all the relations it references, however. * - * When we construct a join rel that includes all the base rels referenced + * When we construct a join rel that includes all the relations referenced * in a multi-relation restriction clause, we place that clause into the * joinrestrictinfo lists of paths for the join rel, if neither left nor - * right sub-path includes all base rels referenced in the clause. The clause + * right sub-path includes all relations referenced in the clause. The clause * will be applied at that join level, and will not propagate any further up * the join tree. (Note: the "predicate migration" code was once intended to * push restriction clauses up and down the plan tree based on evaluation @@ -1961,12 +2403,14 @@ typedef struct LimitPath * or join to enforce that all members of each EquivalenceClass are in fact * equal in all rows emitted by the scan or join. * - * When dealing with outer joins we have to be very careful about pushing qual - * clauses up and down the tree. An outer join's own JOIN/ON conditions must - * be evaluated exactly at that join node, unless they are "degenerate" - * conditions that reference only Vars from the nullable side of the join. - * Quals appearing in WHERE or in a JOIN above the outer join cannot be pushed - * down below the outer join, if they reference any nullable Vars. + * The clause_relids field lists the base plus outer-join RT indexes that + * actually appear in the clause. required_relids lists the minimum set of + * relids needed to evaluate the clause; while this is often equal to + * clause_relids, it can be more. We will add relids to required_relids when + * we need to force an outer join ON clause to be evaluated exactly at the + * level of the outer join, which is true except when it is a "degenerate" + * condition that references only Vars from the nullable side of the join. + * * RestrictInfo nodes contain a flag to indicate whether a qual has been * pushed down to a lower level than its original syntactic placement in the * join tree would suggest. If an outer join prevents us from pushing a qual @@ -1989,10 +2433,14 @@ typedef struct LimitPath * conditions. Possibly we should rename it to reflect that meaning? But * see also the comments for RINFO_IS_PUSHED_DOWN, below.) * - * RestrictInfo nodes also contain an outerjoin_delayed flag, which is true - * if the clause's applicability must be delayed due to any outer joins - * appearing below it (ie, it has to be postponed to some join level higher - * than the set of relations it actually references). + * There is also an incompatible_relids field, which is a set of outer-join + * relids above which we cannot evaluate the clause (because they might null + * Vars it uses that should not be nulled yet). In principle this could be + * filled in any RestrictInfo as the set of OJ relids that appear above the + * clause and null Vars that it uses. In practice we only bother to populate + * it for "clone" clauses, as it's currently only needed to prevent multiple + * clones of the same clause from being accepted for evaluation at the same + * join level. * * There is also an outer_relids field, which is NULL except for outer join * clauses; for those, it is the set of relids on the outer side of the @@ -2000,15 +2448,6 @@ typedef struct LimitPath * in parameterized scans, since pushing it into the join's outer side would * lead to wrong answers.) * - * There is also a nullable_relids field, which is the set of rels the clause - * references that can be forced null by some outer join below the clause. - * - * outerjoin_delayed = true is subtly different from nullable_relids != NULL: - * a clause might reference some nullable rels and yet not be - * outerjoin_delayed because it also references all the other rels of the - * outer join(s). A clause that is not outerjoin_delayed can be enforced - * anywhere it is computable. - * * To handle security-barrier conditions efficiently, we mark RestrictInfo * nodes with a security_level field, in which higher values identify clauses * coming from less-trusted sources. The exact semantics are that a clause @@ -2051,89 +2490,174 @@ typedef struct LimitPath * or merge or hash join clause, so it's of no interest to large parts of * the planner. * + * When we generate multiple versions of a clause so as to have versions + * that will work after commuting some left joins per outer join identity 3, + * we mark the one with the fewest nullingrels bits with has_clone = true, + * and the rest with is_clone = true. This allows proper filtering of + * these redundant clauses, so that we apply only one version of them. + * * When join clauses are generated from EquivalenceClasses, there may be * several equally valid ways to enforce join equivalence, of which we need * apply only one. We mark clauses of this kind by setting parent_ec to * point to the generating EquivalenceClass. Multiple clauses with the same * parent_ec in the same join are redundant. + * + * Most fields are ignored for equality, since they may not be set yet, and + * should be derivable from the clause anyway. + * + * parent_ec, left_ec, right_ec are not printed, lest it lead to infinite + * recursion in plan tree dump. */ typedef struct RestrictInfo { + pg_node_attr(no_read, no_query_jumble) + NodeTag type; - Expr *clause; /* the represented clause of WHERE or JOIN */ + /* the represented clause of WHERE or JOIN */ + Expr *clause; - bool is_pushed_down; /* true if clause was pushed down in level */ + /* true if clause was pushed down in level */ + bool is_pushed_down; - bool outerjoin_delayed; /* true if delayed by lower outer join */ + /* see comment above */ + bool can_join pg_node_attr(equal_ignore); - bool can_join; /* see comment above */ + /* see comment above */ + bool pseudoconstant pg_node_attr(equal_ignore); - bool pseudoconstant; /* see comment above */ + /* see comment above */ + bool has_clone; + bool is_clone; - bool leakproof; /* true if known to contain no leaked Vars */ + /* true if known to contain no leaked Vars */ + bool leakproof pg_node_attr(equal_ignore); - VolatileFunctionStatus has_volatile; /* to indicate if clause contains - * any volatile functions. */ + /* indicates if clause contains any volatile functions */ + VolatileFunctionStatus has_volatile pg_node_attr(equal_ignore); - Index security_level; /* see comment above */ + /* see comment above */ + Index security_level; - /* The set of relids (varnos) actually referenced in the clause: */ - Relids clause_relids; + /* number of base rels in clause_relids */ + int num_base_rels pg_node_attr(equal_ignore); + + /* The relids (varnos+varnullingrels) actually referenced in the clause: */ + Relids clause_relids pg_node_attr(equal_ignore); /* The set of relids required to evaluate the clause: */ Relids required_relids; + /* Relids above which we cannot evaluate the clause (see comment above) */ + Relids incompatible_relids; + /* If an outer-join clause, the outer-side relations, else NULL: */ Relids outer_relids; - /* The relids used in the clause that are nullable by lower outer joins: */ - Relids nullable_relids; + /* + * Relids in the left/right side of the clause. These fields are set for + * any binary opclause. + */ + Relids left_relids pg_node_attr(equal_ignore); + Relids right_relids pg_node_attr(equal_ignore); + + /* + * Modified clause with RestrictInfos. This field is NULL unless clause + * is an OR clause. + */ + Expr *orclause pg_node_attr(equal_ignore); + + /*---------- + * Serial number of this RestrictInfo. This is unique within the current + * PlannerInfo context, with a few critical exceptions: + * 1. When we generate multiple clones of the same qual condition to + * cope with outer join identity 3, all the clones get the same serial + * number. This reflects that we only want to apply one of them in any + * given plan. + * 2. If we manufacture a commuted version of a qual to use as an index + * condition, it copies the original's rinfo_serial, since it is in + * practice the same condition. + * 3. RestrictInfos made for a child relation copy their parent's + * rinfo_serial. Likewise, when an EquivalenceClass makes a derived + * equality clause for a child relation, it copies the rinfo_serial of + * the matching equality clause for the parent. This allows detection + * of redundant pushed-down equality clauses. + *---------- + */ + int rinfo_serial; + + /* + * Generating EquivalenceClass. This field is NULL unless clause is + * potentially redundant. + */ + EquivalenceClass *parent_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore); + + /* + * cache space for cost and selectivity + */ - /* These fields are set for any binary opclause: */ - Relids left_relids; /* relids in left side of clause */ - Relids right_relids; /* relids in right side of clause */ + /* eval cost of clause; -1 if not yet set */ + QualCost eval_cost pg_node_attr(equal_ignore); - /* This field is NULL unless clause is an OR clause: */ - Expr *orclause; /* modified clause with RestrictInfos */ + /* selectivity for "normal" (JOIN_INNER) semantics; -1 if not yet set */ + Selectivity norm_selec pg_node_attr(equal_ignore); + /* selectivity for outer join semantics; -1 if not yet set */ + Selectivity outer_selec pg_node_attr(equal_ignore); - /* This field is NULL unless clause is potentially redundant: */ - EquivalenceClass *parent_ec; /* generating EquivalenceClass */ + /* + * opfamilies containing clause operator; valid if clause is + * mergejoinable, else NIL + */ + List *mergeopfamilies pg_node_attr(equal_ignore); - /* cache space for cost and selectivity */ - QualCost eval_cost; /* eval cost of clause; -1 if not yet set */ - Selectivity norm_selec; /* selectivity for "normal" (JOIN_INNER) - * semantics; -1 if not yet set; >1 means a - * redundant clause */ - Selectivity outer_selec; /* selectivity for outer join semantics; -1 if - * not yet set */ + /* + * cache space for mergeclause processing; NULL if not yet set + */ - /* valid if clause is mergejoinable, else NIL */ - List *mergeopfamilies; /* opfamilies containing clause operator */ + /* EquivalenceClass containing lefthand */ + EquivalenceClass *left_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore); + /* EquivalenceClass containing righthand */ + EquivalenceClass *right_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore); + /* EquivalenceMember for lefthand */ + EquivalenceMember *left_em pg_node_attr(copy_as_scalar, equal_ignore); + /* EquivalenceMember for righthand */ + EquivalenceMember *right_em pg_node_attr(copy_as_scalar, equal_ignore); - /* cache space for mergeclause processing; NULL if not yet set */ - EquivalenceClass *left_ec; /* EquivalenceClass containing lefthand */ - EquivalenceClass *right_ec; /* EquivalenceClass containing righthand */ - EquivalenceMember *left_em; /* EquivalenceMember for lefthand */ - EquivalenceMember *right_em; /* EquivalenceMember for righthand */ - List *scansel_cache; /* list of MergeScanSelCache structs */ + /* + * List of MergeScanSelCache structs. Those aren't Nodes, so hard to + * copy; instead replace with NIL. That has the effect that copying will + * just reset the cache. Likewise, can't compare or print them. + */ + List *scansel_cache pg_node_attr(copy_as(NIL), equal_ignore, read_write_ignore); - /* transient workspace for use while considering a specific join path */ - bool outer_is_left; /* T = outer var on left, F = on right */ + /* + * transient workspace for use while considering a specific join path; T = + * outer var on left, F = on right + */ + bool outer_is_left pg_node_attr(equal_ignore); - /* valid if clause is hashjoinable, else InvalidOid: */ - Oid hashjoinoperator; /* copy of clause operator */ + /* + * copy of clause operator; valid if clause is hashjoinable, else + * InvalidOid + */ + Oid hashjoinoperator pg_node_attr(equal_ignore); - /* cache space for hashclause processing; -1 if not yet set */ - Selectivity left_bucketsize; /* avg bucketsize of left side */ - Selectivity right_bucketsize; /* avg bucketsize of right side */ - Selectivity left_mcvfreq; /* left side's most common val's freq */ - Selectivity right_mcvfreq; /* right side's most common val's freq */ + /* + * cache space for hashclause processing; -1 if not yet set + */ + /* avg bucketsize of left side */ + Selectivity left_bucketsize pg_node_attr(equal_ignore); + /* avg bucketsize of right side */ + Selectivity right_bucketsize pg_node_attr(equal_ignore); + /* left side's most common val's freq */ + Selectivity left_mcvfreq pg_node_attr(equal_ignore); + /* right side's most common val's freq */ + Selectivity right_mcvfreq pg_node_attr(equal_ignore); /* hash equality operators used for memoize nodes, else InvalidOid */ - Oid left_hasheqoperator; - Oid right_hasheqoperator; + Oid left_hasheqoperator pg_node_attr(equal_ignore); + Oid right_hasheqoperator pg_node_attr(equal_ignore); } RestrictInfo; /* @@ -2176,22 +2700,53 @@ typedef struct MergeScanSelCache * of a plan tree. This is used during planning to represent the contained * expression. At the end of the planning process it is replaced by either * the contained expression or a Var referring to a lower-level evaluation of - * the contained expression. Typically the evaluation occurs below an outer + * the contained expression. Generally the evaluation occurs below an outer * join, and Var references above the outer join might thereby yield NULL * instead of the expression value. * + * phrels and phlevelsup correspond to the varno/varlevelsup fields of a + * plain Var, except that phrels has to be a relid set since the evaluation + * level of a PlaceHolderVar might be a join rather than a base relation. + * Likewise, phnullingrels corresponds to varnullingrels. + * * Although the planner treats this as an expression node type, it is not * recognized by the parser or executor, so we declare it here rather than * in primnodes.h. + * + * We intentionally do not compare phexpr. Two PlaceHolderVars with the + * same ID and levelsup should be considered equal even if the contained + * expressions have managed to mutate to different states. This will + * happen during final plan construction when there are nested PHVs, since + * the inner PHV will get replaced by a Param in some copies of the outer + * PHV. Another way in which it can happen is that initplan sublinks + * could get replaced by differently-numbered Params when sublink folding + * is done. (The end result of such a situation would be some + * unreferenced initplans, which is annoying but not really a problem.) + * On the same reasoning, there is no need to examine phrels. But we do + * need to compare phnullingrels, as that represents effects that are + * external to the original value of the PHV. */ typedef struct PlaceHolderVar { + pg_node_attr(no_query_jumble) + Expr xpr; - Expr *phexpr; /* the represented expression */ - Relids phrels; /* base relids syntactically within expr src */ - Index phid; /* ID for PHV (unique within planner run) */ - Index phlevelsup; /* > 0 if PHV belongs to outer query */ + + /* the represented expression */ + Expr *phexpr pg_node_attr(equal_ignore); + + /* base+OJ relids syntactically within expr src */ + Relids phrels pg_node_attr(equal_ignore); + + /* RT indexes of outer joins that can null PHV's value */ + Relids phnullingrels; + + /* ID for PHV (unique within planner run) */ + Index phid; + + /* > 0 if PHV belongs to outer query */ + Index phlevelsup; } PlaceHolderVar; /* @@ -2210,25 +2765,53 @@ typedef struct PlaceHolderVar * We make SpecialJoinInfos for FULL JOINs even though there is no flexibility * of planning for them, because this simplifies make_join_rel()'s API. * - * min_lefthand and min_righthand are the sets of base relids that must be - * available on each side when performing the special join. lhs_strict is - * true if the special join's condition cannot succeed when the LHS variables - * are all NULL (this means that an outer join can commute with upper-level - * outer joins even if it appears in their RHS). We don't bother to set - * lhs_strict for FULL JOINs, however. - * + * min_lefthand and min_righthand are the sets of base+OJ relids that must be + * available on each side when performing the special join. * It is not valid for either min_lefthand or min_righthand to be empty sets; * if they were, this would break the logic that enforces join order. * - * syn_lefthand and syn_righthand are the sets of base relids that are + * syn_lefthand and syn_righthand are the sets of base+OJ relids that are * syntactically below this special join. (These are needed to help compute * min_lefthand and min_righthand for higher joins.) * - * delay_upper_joins is set true if we detect a pushed-down clause that has - * to be evaluated after this join is formed (because it references the RHS). - * Any outer joins that have such a clause and this join in their RHS cannot - * commute with this join, because that would leave noplace to check the - * pushed-down clause. (We don't track this for FULL JOINs, either.) + * jointype is never JOIN_RIGHT; a RIGHT JOIN is handled by switching + * the inputs to make it a LEFT JOIN. It's never JOIN_RIGHT_ANTI either. + * So the allowed values of jointype in a join_info_list member are only + * LEFT, FULL, SEMI, or ANTI. + * + * ojrelid is the RT index of the join RTE representing this outer join, + * if there is one. It is zero when jointype is INNER or SEMI, and can be + * zero for jointype ANTI (if the join was transformed from a SEMI join). + * One use for this field is that when constructing the output targetlist of a + * join relation that implements this OJ, we add ojrelid to the varnullingrels + * and phnullingrels fields of nullable (RHS) output columns, so that the + * output Vars and PlaceHolderVars correctly reflect the nulling that has + * potentially happened to them. + * + * commute_above_l is filled with the relids of syntactically-higher outer + * joins that have been found to commute with this one per outer join identity + * 3 (see optimizer/README), when this join is in the LHS of the upper join + * (so, this is the lower join in the first form of the identity). + * + * commute_above_r is filled with the relids of syntactically-higher outer + * joins that have been found to commute with this one per outer join identity + * 3, when this join is in the RHS of the upper join (so, this is the lower + * join in the second form of the identity). + * + * commute_below_l is filled with the relids of syntactically-lower outer + * joins that have been found to commute with this one per outer join identity + * 3 and are in the LHS of this join (so, this is the upper join in the first + * form of the identity). + * + * commute_below_r is filled with the relids of syntactically-lower outer + * joins that have been found to commute with this one per outer join identity + * 3 and are in the RHS of this join (so, this is the upper join in the second + * form of the identity). + * + * lhs_strict is true if the special join's condition cannot succeed when the + * LHS variables are all NULL (this means that an outer join can commute with + * upper-level outer joins even if it appears in their RHS). We don't bother + * to set lhs_strict for FULL JOINs, however. * * For a semijoin, we also extract the join operators and their RHS arguments * and set semi_operators, semi_rhs_exprs, semi_can_btree, and semi_can_hash. @@ -2238,18 +2821,14 @@ typedef struct PlaceHolderVar * join planning; but it's helpful to have it available during planning of * parameterized table scans, so we store it in the SpecialJoinInfo structs.) * - * jointype is never JOIN_RIGHT; a RIGHT JOIN is handled by switching - * the inputs to make it a LEFT JOIN. So the allowed values of jointype - * in a join_info_list member are only LEFT, FULL, SEMI, or ANTI. - * * For purposes of join selectivity estimation, we create transient * SpecialJoinInfo structures for regular inner joins; so it is possible * to have jointype == JOIN_INNER in such a structure, even though this is * not allowed within join_info_list. We also create transient * SpecialJoinInfos with jointype == JOIN_INNER for outer joins, since for * cost estimation purposes it is sometimes useful to know the join size under - * plain innerjoin semantics. Note that lhs_strict, delay_upper_joins, and - * of course the semi_xxx fields are not set meaningfully within such structs. + * plain innerjoin semantics. Note that lhs_strict and the semi_xxx fields + * are not set meaningfully within such structs. */ #ifndef HAVE_SPECIALJOININFO_TYPEDEF typedef struct SpecialJoinInfo SpecialJoinInfo; @@ -2258,14 +2837,20 @@ typedef struct SpecialJoinInfo SpecialJoinInfo; struct SpecialJoinInfo { + pg_node_attr(no_read, no_query_jumble) + NodeTag type; - Relids min_lefthand; /* base relids in minimum LHS for join */ - Relids min_righthand; /* base relids in minimum RHS for join */ - Relids syn_lefthand; /* base relids syntactically within LHS */ - Relids syn_righthand; /* base relids syntactically within RHS */ + Relids min_lefthand; /* base+OJ relids in minimum LHS for join */ + Relids min_righthand; /* base+OJ relids in minimum RHS for join */ + Relids syn_lefthand; /* base+OJ relids syntactically within LHS */ + Relids syn_righthand; /* base+OJ relids syntactically within RHS */ JoinType jointype; /* always INNER, LEFT, FULL, SEMI, or ANTI */ + Index ojrelid; /* outer join's RT index; 0 if none */ + Relids commute_above_l; /* commuting OJs above this one, if LHS */ + Relids commute_above_r; /* commuting OJs above this one, if RHS */ + Relids commute_below_l; /* commuting OJs in this one's LHS */ + Relids commute_below_r; /* commuting OJs in this one's RHS */ bool lhs_strict; /* joinclause is strict for some LHS rel */ - bool delay_upper_joins; /* can't commute with upper RHS */ /* Remaining fields are set only for JOIN_SEMI jointype: */ bool semi_can_btree; /* true if semi_operators are all btree */ bool semi_can_hash; /* true if semi_operators are all hash */ @@ -2273,6 +2858,21 @@ struct SpecialJoinInfo List *semi_rhs_exprs; /* righthand-side expressions of these ops */ }; +/* + * Transient outer-join clause info. + * + * We set aside every outer join ON clause that looks mergejoinable, + * and process it specially at the end of qual distribution. + */ +typedef struct OuterJoinClauseInfo +{ + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + + NodeTag type; + RestrictInfo *rinfo; /* a mergejoinable outer-join clause */ + SpecialJoinInfo *sjinfo; /* the outer join's SpecialJoinInfo */ +} OuterJoinClauseInfo; + /* * Append-relation info. * @@ -2305,6 +2905,8 @@ struct SpecialJoinInfo typedef struct AppendRelInfo { + pg_node_attr(no_query_jumble) + NodeTag type; /* @@ -2350,7 +2952,7 @@ typedef struct AppendRelInfo * child column is dropped or doesn't exist in the parent. */ int num_child_cols; /* length of array */ - AttrNumber *parent_colnos; /* array of parent attnos, or zeroes */ + AttrNumber *parent_colnos pg_node_attr(array_size(num_child_cols)); /* * We store the parent table's OID here for inheritance, or InvalidOid for @@ -2380,6 +2982,8 @@ typedef struct AppendRelInfo */ typedef struct RowIdentityVarInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; Var *rowidvar; /* Var to be evaluated (but varno=ROWID_VAR) */ @@ -2416,14 +3020,30 @@ typedef struct RowIdentityVarInfo typedef struct PlaceHolderInfo { + pg_node_attr(no_read, no_query_jumble) + NodeTag type; - Index phid; /* ID for PH (unique within planner run) */ - PlaceHolderVar *ph_var; /* copy of PlaceHolderVar tree */ - Relids ph_eval_at; /* lowest level we can evaluate value at */ - Relids ph_lateral; /* relids of contained lateral refs, if any */ - Relids ph_needed; /* highest level the value is needed at */ - int32 ph_width; /* estimated attribute width */ + /* ID for PH (unique within planner run) */ + Index phid; + + /* + * copy of PlaceHolderVar tree (should be redundant for comparison, could + * be ignored) + */ + PlaceHolderVar *ph_var; + + /* lowest level we can evaluate value at */ + Relids ph_eval_at; + + /* relids of contained lateral refs, if any */ + Relids ph_lateral; + + /* highest level the value is needed at */ + Relids ph_needed; + + /* estimated attribute width */ + int32 ph_width; } PlaceHolderInfo; /* @@ -2433,15 +3053,33 @@ typedef struct PlaceHolderInfo */ typedef struct MinMaxAggInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; - Oid aggfnoid; /* pg_proc Oid of the aggregate */ - Oid aggsortop; /* Oid of its sort operator */ - Expr *target; /* expression we are aggregating on */ - PlannerInfo *subroot; /* modified "root" for planning the subquery */ - Path *path; /* access path for subquery */ - Cost pathcost; /* estimated cost to fetch first row */ - Param *param; /* param for subplan's output */ + /* pg_proc Oid of the aggregate */ + Oid aggfnoid; + + /* Oid of its sort operator */ + Oid aggsortop; + + /* expression we are aggregating on */ + Expr *target; + + /* + * modified "root" for planning the subquery; not printed, too large, not + * interesting enough + */ + PlannerInfo *subroot pg_node_attr(read_write_ignore); + + /* access path for subquery */ + Path *path; + + /* estimated cost to fetch first row */ + Cost pathcost; + + /* param for subplan's output */ + Param *param; } MinMaxAggInfo; /* @@ -2493,6 +3131,8 @@ typedef struct MinMaxAggInfo */ typedef struct PlannerParamItem { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + NodeTag type; Node *item; /* the Var, PlaceHolderVar, or Aggref */ @@ -2671,14 +3311,19 @@ typedef struct JoinCostWorkspace */ typedef struct AggInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + + NodeTag type; + /* - * Link to an Aggref expr this state value is for. + * List of Aggref exprs that this state value is for. * - * There can be multiple identical Aggref's sharing the same per-agg. This - * points to the first one of them. + * There will always be at least one, but there can be multiple identical + * Aggref's sharing the same per-agg. */ - Aggref *representative_aggref; + List *aggrefs; + /* Transition state number for this aggregate */ int transno; /* @@ -2687,9 +3332,8 @@ typedef struct AggInfo */ bool shareable; - /* Oid of the final function or InvalidOid */ + /* Oid of the final function, or InvalidOid if none */ Oid finalfn_oid; - } AggInfo; /* @@ -2701,34 +3345,40 @@ typedef struct AggInfo */ typedef struct AggTransInfo { + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + + NodeTag type; + + /* Inputs for this transition state */ List *args; Expr *aggfilter; /* Oid of the state transition function */ Oid transfn_oid; - /* Oid of the serialization function or InvalidOid */ + /* Oid of the serialization function, or InvalidOid if none */ Oid serialfn_oid; - /* Oid of the deserialization function or InvalidOid */ + /* Oid of the deserialization function, or InvalidOid if none */ Oid deserialfn_oid; - /* Oid of the combine function or InvalidOid */ + /* Oid of the combine function, or InvalidOid if none */ Oid combinefn_oid; /* Oid of state value's datatype */ Oid aggtranstype; + + /* Additional data about transtype */ int32 aggtranstypmod; int transtypeLen; bool transtypeByVal; + + /* Space-consumption estimate */ int32 aggtransspace; - /* - * initial value from pg_aggregate entry - */ - Datum initValue; + /* Initial value from pg_aggregate entry */ + Datum initValue pg_node_attr(read_write_ignore); bool initValueIsNull; - } AggTransInfo; #endif /* PATHNODES_H */ diff --git a/src/postgres/include/nodes/pg_list.h b/src/postgres/include/nodes/pg_list.h index 5a43290a..529a382d 100644 --- a/src/postgres/include/nodes/pg_list.h +++ b/src/postgres/include/nodes/pg_list.h @@ -15,19 +15,21 @@ * Non-empty lists have a header, which will not be relocated as long as the * list remains non-empty, and an expansible data array. * - * We support three types of lists: + * We support four types of lists: * * T_List: lists of pointers * (in practice usually pointers to Nodes, but not always; * declared as "void *" to minimize casting annoyances) * T_IntList: lists of integers * T_OidList: lists of Oids + * T_XidList: lists of TransactionIds + * (the XidList infrastructure is less complete than the other cases) * - * (At the moment, ints and Oids are the same size, but they may not - * always be so; try to be careful to maintain the distinction.) + * (At the moment, ints, Oids, and XIDs are the same size, but they may not + * always be so; be careful to use the appropriate list type for your data.) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/pg_list.h @@ -45,11 +47,12 @@ typedef union ListCell void *ptr_value; int int_value; Oid oid_value; + TransactionId xid_value; } ListCell; typedef struct List { - NodeTag type; /* T_List, T_IntList, or T_OidList */ + NodeTag type; /* T_List, T_IntList, T_OidList, or T_XidList */ int length; /* number of elements currently present */ int max_length; /* allocated length of elements[] */ ListCell *elements; /* re-allocatable array of cells */ @@ -169,6 +172,7 @@ list_length(const List *l) #define lfirst(lc) ((lc)->ptr_value) #define lfirst_int(lc) ((lc)->int_value) #define lfirst_oid(lc) ((lc)->oid_value) +#define lfirst_xid(lc) ((lc)->xid_value) #define lfirst_node(type,lc) castNode(type, lfirst(lc)) #define linitial(l) lfirst(list_nth_cell(l, 0)) @@ -194,6 +198,7 @@ list_length(const List *l) #define llast(l) lfirst(list_last_cell(l)) #define llast_int(l) lfirst_int(list_last_cell(l)) #define llast_oid(l) lfirst_oid(list_last_cell(l)) +#define llast_xid(l) lfirst_xid(list_last_cell(l)) #define llast_node(type,l) castNode(type, llast(l)) /* @@ -202,6 +207,7 @@ list_length(const List *l) #define list_make_ptr_cell(v) ((ListCell) {.ptr_value = (v)}) #define list_make_int_cell(v) ((ListCell) {.int_value = (v)}) #define list_make_oid_cell(v) ((ListCell) {.oid_value = (v)}) +#define list_make_xid_cell(v) ((ListCell) {.xid_value = (v)}) #define list_make1(x1) \ list_make1_impl(T_List, list_make_ptr_cell(x1)) @@ -248,6 +254,21 @@ list_length(const List *l) list_make_oid_cell(x3), list_make_oid_cell(x4), \ list_make_oid_cell(x5)) +#define list_make1_xid(x1) \ + list_make1_impl(T_XidList, list_make_xid_cell(x1)) +#define list_make2_xid(x1,x2) \ + list_make2_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2)) +#define list_make3_xid(x1,x2,x3) \ + list_make3_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2), \ + list_make_xid_cell(x3)) +#define list_make4_xid(x1,x2,x3,x4) \ + list_make4_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2), \ + list_make_xid_cell(x3), list_make_xid_cell(x4)) +#define list_make5_xid(x1,x2,x3,x4,x5) \ + list_make5_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2), \ + list_make_xid_cell(x3), list_make_xid_cell(x4), \ + list_make_xid_cell(x5)) + /* * Locate the n'th cell (counting from 0) of the list. * It is an assertion failure if there is no such cell. @@ -539,6 +560,7 @@ extern List *list_make5_impl(NodeTag t, ListCell datum1, ListCell datum2, extern pg_nodiscard List *lappend(List *list, void *datum); extern pg_nodiscard List *lappend_int(List *list, int datum); extern pg_nodiscard List *lappend_oid(List *list, Oid datum); +extern pg_nodiscard List *lappend_xid(List *list, TransactionId datum); extern pg_nodiscard List *list_insert_nth(List *list, int pos, void *datum); extern pg_nodiscard List *list_insert_nth_int(List *list, int pos, int datum); @@ -557,6 +579,7 @@ extern bool list_member(const List *list, const void *datum); extern bool list_member_ptr(const List *list, const void *datum); extern bool list_member_int(const List *list, int datum); extern bool list_member_oid(const List *list, Oid datum); +extern bool list_member_xid(const List *list, TransactionId datum); extern pg_nodiscard List *list_delete(List *list, void *datum); extern pg_nodiscard List *list_delete_ptr(List *list, void *datum); @@ -598,9 +621,9 @@ extern void list_deduplicate_oid(List *list); extern void list_free(List *list); extern void list_free_deep(List *list); -extern pg_nodiscard List *list_copy(const List *list); +extern pg_nodiscard List *list_copy(const List *oldlist); extern pg_nodiscard List *list_copy_head(const List *oldlist, int len); -extern pg_nodiscard List *list_copy_tail(const List *list, int nskip); +extern pg_nodiscard List *list_copy_tail(const List *oldlist, int nskip); extern pg_nodiscard List *list_copy_deep(const List *oldlist); typedef int (*list_sort_comparator) (const ListCell *a, const ListCell *b); diff --git a/src/postgres/include/nodes/plannodes.h b/src/postgres/include/nodes/plannodes.h index 493a2a9e..d64fe6a3 100644 --- a/src/postgres/include/nodes/plannodes.h +++ b/src/postgres/include/nodes/plannodes.h @@ -4,7 +4,7 @@ * definitions for query plan nodes * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/plannodes.h @@ -16,6 +16,7 @@ #include "access/sdir.h" #include "access/stratnum.h" +#include "common/relpath.h" #include "lib/stringinfo.h" #include "nodes/bitmapset.h" #include "nodes/lockoptions.h" @@ -38,10 +39,15 @@ * nodes; in such cases, commandType == CMD_UTILITY, the statement itself * is in the utilityStmt field, and the rest of the struct is mostly dummy. * (We do use canSetTag, stmt_location, stmt_len, and possibly queryId.) + * + * PlannedStmt, as well as all varieties of Plan, do not support equal(), + * not because it's not sensible but because we currently have no need. * ---------------- */ typedef struct PlannedStmt { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; CmdType commandType; /* select|insert|update|delete|merge|utility */ @@ -66,6 +72,9 @@ typedef struct PlannedStmt List *rtable; /* list of RangeTblEntry nodes */ + List *permInfos; /* list of RTEPermissionInfo nodes for rtable + * entries needing one */ + /* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */ List *resultRelations; /* integer list of RT indexes, or NIL */ @@ -110,6 +119,8 @@ typedef struct PlannedStmt */ typedef struct Plan { + pg_node_attr(abstract, no_equal, no_query_jumble) + NodeTag type; /* @@ -205,11 +216,12 @@ typedef struct ProjectSet * Apply rows produced by outer plan to result table(s), * by inserting, updating, or deleting. * - * If the originally named target table is a partitioned table, both - * nominalRelation and rootRelation contain the RT index of the partition - * root, which is not otherwise mentioned in the plan. Otherwise rootRelation - * is zero. However, nominalRelation will always be set, as it's the rel that - * EXPLAIN should claim is the INSERT/UPDATE/DELETE/MERGE target. + * If the originally named target table is a partitioned table or inheritance + * tree, both nominalRelation and rootRelation contain the RT index of the + * partition root or appendrel RTE, which is not otherwise mentioned in the + * plan. Otherwise rootRelation is zero. However, nominalRelation will + * always be set, as it's the rel that EXPLAIN should claim is the + * INSERT/UPDATE/DELETE/MERGE target. * * Note that rowMarks and epqParam are presumed to be valid for all the * table(s); they can't contain any info that varies across tables. @@ -221,7 +233,7 @@ typedef struct ModifyTable CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */ bool canSetTag; /* do we set the command tag/es_processed? */ Index nominalRelation; /* Parent RT index for use of EXPLAIN */ - Index rootRelation; /* Root RT index, if target is partitioned */ + Index rootRelation; /* Root RT index, if partitioned/inherited */ bool partColsUpdated; /* some part key in hierarchy updated? */ List *resultRelations; /* integer list of RT indexes */ List *updateColnosLists; /* per-target-table update_colnos lists */ @@ -274,14 +286,29 @@ typedef struct Append typedef struct MergeAppend { Plan plan; - Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */ + + /* RTIs of appendrel(s) formed by this node */ + Bitmapset *apprelids; + List *mergeplans; + /* these fields are just like the sort-key info in struct Sort: */ - int numCols; /* number of sort-key columns */ - AttrNumber *sortColIdx; /* their indexes in the target list */ - Oid *sortOperators; /* OIDs of operators to sort them by */ - Oid *collations; /* OIDs of collations */ - bool *nullsFirst; /* NULLS FIRST/LAST directions */ + + /* number of sort-key columns */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *sortColIdx pg_node_attr(array_size(numCols)); + + /* OIDs of operators to sort them by */ + Oid *sortOperators pg_node_attr(array_size(numCols)); + + /* OIDs of collations */ + Oid *collations pg_node_attr(array_size(numCols)); + + /* NULLS FIRST/LAST directions */ + bool *nullsFirst pg_node_attr(array_size(numCols)); + /* Info for run-time subplan pruning; NULL if we're not doing that */ struct PartitionPruneInfo *part_prune_info; } MergeAppend; @@ -297,14 +324,24 @@ typedef struct MergeAppend typedef struct RecursiveUnion { Plan plan; - int wtParam; /* ID of Param representing work table */ + + /* ID of Param representing work table */ + int wtParam; + /* Remaining fields are zero/null in UNION ALL case */ - int numCols; /* number of columns to check for - * duplicate-ness */ - AttrNumber *dupColIdx; /* their indexes in the target list */ - Oid *dupOperators; /* equality operators to compare with */ - Oid *dupCollations; - long numGroups; /* estimated number of groups in input */ + + /* number of columns to check for duplicate-ness */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *dupColIdx pg_node_attr(array_size(numCols)); + + /* equality operators to compare with */ + Oid *dupOperators pg_node_attr(array_size(numCols)); + Oid *dupCollations pg_node_attr(array_size(numCols)); + + /* estimated number of groups in input */ + long numGroups; } RecursiveUnion; /* ---------------- @@ -339,10 +376,14 @@ typedef struct BitmapOr /* * ========== * Scan nodes + * + * Scan is an abstract type that all relation scan plan types inherit from. * ========== */ typedef struct Scan { + pg_node_attr(abstract) + Plan plan; Index scanrelid; /* relid is index into the range table */ } Scan; @@ -652,6 +693,7 @@ typedef struct WorkTableScan * When the plan node represents a foreign join, scan.scanrelid is zero and * fs_relids must be consulted to identify the join relation. (fs_relids * is valid for simple scans as well, but will always match scan.scanrelid.) + * fs_relids includes outer joins; fs_base_relids does not. * * If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan * node to perform the UPDATE or DELETE operation directly in the remote @@ -666,12 +708,15 @@ typedef struct ForeignScan Scan scan; CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */ Index resultRelation; /* direct modification target's RT index */ + Oid checkAsUser; /* user to perform the scan as; 0 means to + * check as current user */ Oid fs_server; /* OID of foreign server */ List *fdw_exprs; /* expressions that FDW may evaluate */ List *fdw_private; /* private data for FDW */ List *fdw_scan_tlist; /* optional tlist describing scan tuple */ List *fdw_recheck_quals; /* original quals not in scan.plan.qual */ - Bitmapset *fs_relids; /* RTIs generated by this scan */ + Bitmapset *fs_relids; /* base+OJ RTIs generated by this scan */ + Bitmapset *fs_base_relids; /* base RTIs generated by this scan */ bool fsSystemCol; /* true if any "system column" is needed */ } ForeignScan; @@ -700,6 +745,12 @@ typedef struct CustomScan List *custom_private; /* private data for custom code */ List *custom_scan_tlist; /* optional tlist describing scan tuple */ Bitmapset *custom_relids; /* RTIs generated by this scan */ + + /* + * NOTE: The method field of CustomScan is required to be a pointer to a + * static table of callback functions. So we don't copy the table itself, + * just reference the original one. + */ const struct CustomScanMethods *methods; } CustomScan; @@ -733,6 +784,8 @@ typedef struct CustomScan */ typedef struct Join { + pg_node_attr(abstract) + Plan plan; JoinType jointype; bool inner_unique; @@ -758,6 +811,8 @@ typedef struct NestLoop typedef struct NestLoopParam { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; int paramno; /* number of the PARAM_EXEC Param to set */ Var *paramval; /* outer-relation Var to assign to Param */ @@ -777,13 +832,26 @@ typedef struct NestLoopParam typedef struct MergeJoin { Join join; - bool skip_mark_restore; /* Can we skip mark/restore calls? */ - List *mergeclauses; /* mergeclauses as expression trees */ + + /* Can we skip mark/restore calls? */ + bool skip_mark_restore; + + /* mergeclauses as expression trees */ + List *mergeclauses; + /* these are arrays, but have the same length as the mergeclauses list: */ - Oid *mergeFamilies; /* per-clause OIDs of btree opfamilies */ - Oid *mergeCollations; /* per-clause OIDs of collations */ - int *mergeStrategies; /* per-clause ordering (ASC or DESC) */ - bool *mergeNullsFirst; /* per-clause nulls ordering */ + + /* per-clause OIDs of btree opfamilies */ + Oid *mergeFamilies pg_node_attr(array_size(mergeclauses)); + + /* per-clause OIDs of collations */ + Oid *mergeCollations pg_node_attr(array_size(mergeclauses)); + + /* per-clause ordering (ASC or DESC) */ + int *mergeStrategies pg_node_attr(array_size(mergeclauses)); + + /* per-clause nulls ordering */ + bool *mergeNullsFirst pg_node_attr(array_size(mergeclauses)); } MergeJoin; /* ---------------- @@ -821,21 +889,38 @@ typedef struct Memoize { Plan plan; - int numKeys; /* size of the two arrays below */ - - Oid *hashOperators; /* hash operators for each key */ - Oid *collations; /* collations for each key */ - List *param_exprs; /* cache keys in the form of exprs containing - * parameters */ - bool singlerow; /* true if the cache entry should be marked as - * complete after we store the first tuple in - * it. */ - bool binary_mode; /* true when cache key should be compared bit - * by bit, false when using hash equality ops */ - uint32 est_entries; /* The maximum number of entries that the - * planner expects will fit in the cache, or 0 - * if unknown */ - Bitmapset *keyparamids; /* paramids from param_exprs */ + /* size of the two arrays below */ + int numKeys; + + /* hash operators for each key */ + Oid *hashOperators pg_node_attr(array_size(numKeys)); + + /* collations for each key */ + Oid *collations pg_node_attr(array_size(numKeys)); + + /* cache keys in the form of exprs containing parameters */ + List *param_exprs; + + /* + * true if the cache entry should be marked as complete after we store the + * first tuple in it. + */ + bool singlerow; + + /* + * true when cache key should be compared bit by bit, false when using + * hash equality ops + */ + bool binary_mode; + + /* + * The maximum number of entries that the planner expects will fit in the + * cache, or 0 if unknown + */ + uint32 est_entries; + + /* paramids from param_exprs */ + Bitmapset *keyparamids; } Memoize; /* ---------------- @@ -845,11 +930,21 @@ typedef struct Memoize typedef struct Sort { Plan plan; - int numCols; /* number of sort-key columns */ - AttrNumber *sortColIdx; /* their indexes in the target list */ - Oid *sortOperators; /* OIDs of operators to sort them by */ - Oid *collations; /* OIDs of collations */ - bool *nullsFirst; /* NULLS FIRST/LAST directions */ + + /* number of sort-key columns */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *sortColIdx pg_node_attr(array_size(numCols)); + + /* OIDs of operators to sort them by */ + Oid *sortOperators pg_node_attr(array_size(numCols)); + + /* OIDs of collations */ + Oid *collations pg_node_attr(array_size(numCols)); + + /* NULLS FIRST/LAST directions */ + bool *nullsFirst pg_node_attr(array_size(numCols)); } Sort; /* ---------------- @@ -871,10 +966,16 @@ typedef struct IncrementalSort typedef struct Group { Plan plan; - int numCols; /* number of grouping columns */ - AttrNumber *grpColIdx; /* their indexes in the target list */ - Oid *grpOperators; /* equality operators to compare with */ - Oid *grpCollations; + + /* number of grouping columns */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *grpColIdx pg_node_attr(array_size(numCols)); + + /* equality operators to compare with */ + Oid *grpOperators pg_node_attr(array_size(numCols)); + Oid *grpCollations pg_node_attr(array_size(numCols)); } Group; /* --------------- @@ -894,18 +995,39 @@ typedef struct Group typedef struct Agg { Plan plan; - AggStrategy aggstrategy; /* basic strategy, see nodes.h */ - AggSplit aggsplit; /* agg-splitting mode, see nodes.h */ - int numCols; /* number of grouping columns */ - AttrNumber *grpColIdx; /* their indexes in the target list */ - Oid *grpOperators; /* equality operators to compare with */ - Oid *grpCollations; - long numGroups; /* estimated number of groups in input */ - uint64 transitionSpace; /* for pass-by-ref transition data */ - Bitmapset *aggParams; /* IDs of Params used in Aggref inputs */ + + /* basic strategy, see nodes.h */ + AggStrategy aggstrategy; + + /* agg-splitting mode, see nodes.h */ + AggSplit aggsplit; + + /* number of grouping columns */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *grpColIdx pg_node_attr(array_size(numCols)); + + /* equality operators to compare with */ + Oid *grpOperators pg_node_attr(array_size(numCols)); + Oid *grpCollations pg_node_attr(array_size(numCols)); + + /* estimated number of groups in input */ + long numGroups; + + /* for pass-by-ref transition data */ + uint64 transitionSpace; + + /* IDs of Params used in Aggref inputs */ + Bitmapset *aggParams; + /* Note: planner provides numGroups & aggParams only in HASHED/MIXED case */ - List *groupingSets; /* grouping sets to use */ - List *chain; /* chained Agg/Sort nodes */ + + /* grouping sets to use */ + List *groupingSets; + + /* chained Agg/Sort nodes */ + List *chain; } Agg; /* ---------------- @@ -915,28 +1037,71 @@ typedef struct Agg typedef struct WindowAgg { Plan plan; - Index winref; /* ID referenced by window functions */ - int partNumCols; /* number of columns in partition clause */ - AttrNumber *partColIdx; /* their indexes in the target list */ - Oid *partOperators; /* equality operators for partition columns */ - Oid *partCollations; /* collations for partition columns */ - int ordNumCols; /* number of columns in ordering clause */ - AttrNumber *ordColIdx; /* their indexes in the target list */ - Oid *ordOperators; /* equality operators for ordering columns */ - Oid *ordCollations; /* collations for ordering columns */ - int frameOptions; /* frame_clause options, see WindowDef */ - Node *startOffset; /* expression for starting bound, if any */ - Node *endOffset; /* expression for ending bound, if any */ - List *runCondition; /* qual to help short-circuit execution */ - List *runConditionOrig; /* runCondition for display in EXPLAIN */ + + /* ID referenced by window functions */ + Index winref; + + /* number of columns in partition clause */ + int partNumCols; + + /* their indexes in the target list */ + AttrNumber *partColIdx pg_node_attr(array_size(partNumCols)); + + /* equality operators for partition columns */ + Oid *partOperators pg_node_attr(array_size(partNumCols)); + + /* collations for partition columns */ + Oid *partCollations pg_node_attr(array_size(partNumCols)); + + /* number of columns in ordering clause */ + int ordNumCols; + + /* their indexes in the target list */ + AttrNumber *ordColIdx pg_node_attr(array_size(ordNumCols)); + + /* equality operators for ordering columns */ + Oid *ordOperators pg_node_attr(array_size(ordNumCols)); + + /* collations for ordering columns */ + Oid *ordCollations pg_node_attr(array_size(ordNumCols)); + + /* frame_clause options, see WindowDef */ + int frameOptions; + + /* expression for starting bound, if any */ + Node *startOffset; + + /* expression for ending bound, if any */ + Node *endOffset; + + /* qual to help short-circuit execution */ + List *runCondition; + + /* runCondition for display in EXPLAIN */ + List *runConditionOrig; + /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */ - Oid startInRangeFunc; /* in_range function for startOffset */ - Oid endInRangeFunc; /* in_range function for endOffset */ - Oid inRangeColl; /* collation for in_range tests */ - bool inRangeAsc; /* use ASC sort order for in_range tests? */ - bool inRangeNullsFirst; /* nulls sort first for in_range tests? */ - bool topWindow; /* false for all apart from the WindowAgg - * that's closest to the root of the plan */ + + /* in_range function for startOffset */ + Oid startInRangeFunc; + + /* in_range function for endOffset */ + Oid endInRangeFunc; + + /* collation for in_range tests */ + Oid inRangeColl; + + /* use ASC sort order for in_range tests? */ + bool inRangeAsc; + + /* nulls sort first for in_range tests? */ + bool inRangeNullsFirst; + + /* + * false for all apart from the WindowAgg that's closest to the root of + * the plan + */ + bool topWindow; } WindowAgg; /* ---------------- @@ -946,10 +1111,18 @@ typedef struct WindowAgg typedef struct Unique { Plan plan; - int numCols; /* number of columns to check for uniqueness */ - AttrNumber *uniqColIdx; /* their indexes in the target list */ - Oid *uniqOperators; /* equality operators to compare with */ - Oid *uniqCollations; /* collations for equality comparisons */ + + /* number of columns to check for uniqueness */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *uniqColIdx pg_node_attr(array_size(numCols)); + + /* equality operators to compare with */ + Oid *uniqOperators pg_node_attr(array_size(numCols)); + + /* collations for equality comparisons */ + Oid *uniqCollations pg_node_attr(array_size(numCols)); } Unique; /* ------------ @@ -981,16 +1154,35 @@ typedef struct Gather typedef struct GatherMerge { Plan plan; - int num_workers; /* planned number of worker processes */ - int rescan_param; /* ID of Param that signals a rescan, or -1 */ + + /* planned number of worker processes */ + int num_workers; + + /* ID of Param that signals a rescan, or -1 */ + int rescan_param; + /* remaining fields are just like the sort-key info in struct Sort */ - int numCols; /* number of sort-key columns */ - AttrNumber *sortColIdx; /* their indexes in the target list */ - Oid *sortOperators; /* OIDs of operators to sort them by */ - Oid *collations; /* OIDs of collations */ - bool *nullsFirst; /* NULLS FIRST/LAST directions */ - Bitmapset *initParam; /* param id's of initplans which are referred - * at gather merge or one of it's child node */ + + /* number of sort-key columns */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *sortColIdx pg_node_attr(array_size(numCols)); + + /* OIDs of operators to sort them by */ + Oid *sortOperators pg_node_attr(array_size(numCols)); + + /* OIDs of collations */ + Oid *collations pg_node_attr(array_size(numCols)); + + /* NULLS FIRST/LAST directions */ + bool *nullsFirst pg_node_attr(array_size(numCols)); + + /* + * param id's of initplans which are referred at gather merge or one of + * it's child node + */ + Bitmapset *initParam; } GatherMerge; /* ---------------- @@ -1024,16 +1216,31 @@ typedef struct Hash typedef struct SetOp { Plan plan; - SetOpCmd cmd; /* what to do, see nodes.h */ - SetOpStrategy strategy; /* how to do it, see nodes.h */ - int numCols; /* number of columns to check for - * duplicate-ness */ - AttrNumber *dupColIdx; /* their indexes in the target list */ - Oid *dupOperators; /* equality operators to compare with */ - Oid *dupCollations; - AttrNumber flagColIdx; /* where is the flag column, if any */ - int firstFlag; /* flag value for first input relation */ - long numGroups; /* estimated number of groups in input */ + + /* what to do, see nodes.h */ + SetOpCmd cmd; + + /* how to do it, see nodes.h */ + SetOpStrategy strategy; + + /* number of columns to check for duplicate-ness */ + int numCols; + + /* their indexes in the target list */ + AttrNumber *dupColIdx pg_node_attr(array_size(numCols)); + + /* equality operators to compare with */ + Oid *dupOperators pg_node_attr(array_size(numCols)); + Oid *dupCollations pg_node_attr(array_size(numCols)); + + /* where is the flag column, if any */ + AttrNumber flagColIdx; + + /* flag value for first input relation */ + int firstFlag; + + /* estimated number of groups in input */ + long numGroups; } SetOp; /* ---------------- @@ -1062,13 +1269,27 @@ typedef struct LockRows typedef struct Limit { Plan plan; - Node *limitOffset; /* OFFSET parameter, or NULL if none */ - Node *limitCount; /* COUNT parameter, or NULL if none */ - LimitOption limitOption; /* limit type */ - int uniqNumCols; /* number of columns to check for similarity */ - AttrNumber *uniqColIdx; /* their indexes in the target list */ - Oid *uniqOperators; /* equality operators to compare with */ - Oid *uniqCollations; /* collations for equality comparisons */ + + /* OFFSET parameter, or NULL if none */ + Node *limitOffset; + + /* COUNT parameter, or NULL if none */ + Node *limitCount; + + /* limit type */ + LimitOption limitOption; + + /* number of columns to check for similarity */ + int uniqNumCols; + + /* their indexes in the target list */ + AttrNumber *uniqColIdx pg_node_attr(array_size(uniqNumCols)); + + /* equality operators to compare with */ + Oid *uniqOperators pg_node_attr(array_size(uniqNumCols)); + + /* collations for equality comparisons */ + Oid *uniqCollations pg_node_attr(array_size(uniqNumCols)); } Limit; @@ -1089,7 +1310,7 @@ typedef struct Limit * doing a separate remote query to lock each selected row is usually pretty * unappealing, so early locking remains a credible design choice for FDWs. * - * When doing UPDATE, DELETE, or SELECT FOR UPDATE/SHARE, we have to uniquely + * When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we have to uniquely * identify all the source rows, not only those from the target relations, so * that we can perform EvalPlanQual rechecking at need. For plain tables we * can just fetch the TID, much as for a target relation; this case is @@ -1118,7 +1339,7 @@ typedef enum RowMarkType * PlanRowMark - * plan-time representation of FOR [KEY] UPDATE/SHARE clauses * - * When doing UPDATE, DELETE, or SELECT FOR UPDATE/SHARE, we create a separate + * When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we create a separate * PlanRowMark node for each non-target relation in the query. Relations that * are not specified as FOR UPDATE/SHARE are marked ROW_MARK_REFERENCE (if * regular tables or supported foreign tables) or ROW_MARK_COPY (if not). @@ -1154,6 +1375,8 @@ typedef enum RowMarkType */ typedef struct PlanRowMark { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; Index rti; /* range table index of markable relation */ Index prti; /* range table index of parent relation */ @@ -1198,6 +1421,8 @@ typedef struct PlanRowMark */ typedef struct PartitionPruneInfo { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; List *prune_infos; Bitmapset *other_subplans; @@ -1222,14 +1447,27 @@ typedef struct PartitionPruneInfo */ typedef struct PartitionedRelPruneInfo { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; - Index rtindex; /* RT index of partition rel for this level */ - Bitmapset *present_parts; /* Indexes of all partitions which subplans or - * subparts are present for */ - int nparts; /* Length of the following arrays: */ - int *subplan_map; /* subplan index by partition index, or -1 */ - int *subpart_map; /* subpart index by partition index, or -1 */ - Oid *relid_map; /* relation OID by partition index, or 0 */ + + /* RT index of partition rel for this level */ + Index rtindex; + + /* Indexes of all partitions which subplans or subparts are present for */ + Bitmapset *present_parts; + + /* Length of the following arrays: */ + int nparts; + + /* subplan index by partition index, or -1 */ + int *subplan_map pg_node_attr(array_size(nparts)); + + /* subpart index by partition index, or -1 */ + int *subpart_map pg_node_attr(array_size(nparts)); + + /* relation OID by partition index, or 0 */ + Oid *relid_map pg_node_attr(array_size(nparts)); /* * initial_pruning_steps shows how to prune during executor startup (i.e., @@ -1239,8 +1477,9 @@ typedef struct PartitionedRelPruneInfo */ List *initial_pruning_steps; /* List of PartitionPruneStep */ List *exec_pruning_steps; /* List of PartitionPruneStep */ - Bitmapset *execparamids; /* All PARAM_EXEC Param IDs in - * exec_pruning_steps */ + + /* All PARAM_EXEC Param IDs in exec_pruning_steps */ + Bitmapset *execparamids; } PartitionedRelPruneInfo; /* @@ -1251,6 +1490,8 @@ typedef struct PartitionedRelPruneInfo */ typedef struct PartitionPruneStep { + pg_node_attr(abstract, no_equal, no_query_jumble) + NodeTag type; int step_id; } PartitionPruneStep; @@ -1324,6 +1565,8 @@ typedef struct PartitionPruneStepCombine */ typedef struct PlanInvalItem { + pg_node_attr(no_equal, no_query_jumble) + NodeTag type; int cacheId; /* a syscache ID, see utils/syscache.h */ uint32 hashValue; /* hash value of object's cache lookup key */ diff --git a/src/postgres/include/nodes/primnodes.h b/src/postgres/include/nodes/primnodes.h index 3d48dbb4..e1aadc39 100644 --- a/src/postgres/include/nodes/primnodes.h +++ b/src/postgres/include/nodes/primnodes.h @@ -7,7 +7,7 @@ * and join trees. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/primnodes.h @@ -63,14 +63,27 @@ typedef enum OnCommitAction typedef struct RangeVar { NodeTag type; - char *catalogname; /* the catalog (database) name, or NULL */ - char *schemaname; /* the schema name, or NULL */ - char *relname; /* the relation/sequence name */ - bool inh; /* expand rel by inheritance? recursively act - * on children? */ - char relpersistence; /* see RELPERSISTENCE_* in pg_class.h */ - Alias *alias; /* table alias & optional column aliases */ - int location; /* token location, or -1 if unknown */ + + /* the catalog (database) name, or NULL */ + char *catalogname; + + /* the schema name, or NULL */ + char *schemaname; + + /* the relation/sequence name */ + char *relname; + + /* expand rel by inheritance? recursively act on children? */ + bool inh; + + /* see RELPERSISTENCE_* in pg_class.h */ + char relpersistence; + + /* table alias & optional column aliases */ + Alias *alias; + + /* token location, or -1 if unknown */ + int location; } RangeVar; /* @@ -82,19 +95,32 @@ typedef struct RangeVar typedef struct TableFunc { NodeTag type; - List *ns_uris; /* list of namespace URI expressions */ - List *ns_names; /* list of namespace names or NULL */ - Node *docexpr; /* input document expression */ - Node *rowexpr; /* row filter expression */ - List *colnames; /* column names (list of String) */ - List *coltypes; /* OID list of column type OIDs */ - List *coltypmods; /* integer list of column typmods */ - List *colcollations; /* OID list of column collation OIDs */ - List *colexprs; /* list of column filter expressions */ - List *coldefexprs; /* list of column default expressions */ - Bitmapset *notnulls; /* nullability flag for each output column */ - int ordinalitycol; /* counts from 0; -1 if none specified */ - int location; /* token location, or -1 if unknown */ + /* list of namespace URI expressions */ + List *ns_uris pg_node_attr(query_jumble_ignore); + /* list of namespace names or NULL */ + List *ns_names pg_node_attr(query_jumble_ignore); + /* input document expression */ + Node *docexpr; + /* row filter expression */ + Node *rowexpr; + /* column names (list of String) */ + List *colnames pg_node_attr(query_jumble_ignore); + /* OID list of column type OIDs */ + List *coltypes pg_node_attr(query_jumble_ignore); + /* integer list of column typmods */ + List *coltypmods pg_node_attr(query_jumble_ignore); + /* OID list of column collation OIDs */ + List *colcollations pg_node_attr(query_jumble_ignore); + /* list of column filter expressions */ + List *colexprs; + /* list of column default expressions */ + List *coldefexprs pg_node_attr(query_jumble_ignore); + /* nullability flag for each output column */ + Bitmapset *notnulls pg_node_attr(query_jumble_ignore); + /* counts from 0; -1 if none specified */ + int ordinalitycol pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } TableFunc; /* @@ -102,8 +128,10 @@ typedef struct TableFunc * CREATE MATERIALIZED VIEW * * For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten - * SELECT Query for the view; otherwise it's NULL. (Although it's actually - * Query*, we declare it as Node* to avoid a forward reference.) + * SELECT Query for the view; otherwise it's NULL. This is irrelevant in + * the query jumbling as CreateTableAsStmt already includes a reference to + * its own Query, so ignore it. (Although it's actually Query*, we declare + * it as Node* to avoid a forward reference.) */ typedef struct IntoClause { @@ -115,7 +143,8 @@ typedef struct IntoClause List *options; /* options from WITH clause */ OnCommitAction onCommit; /* what do we do at COMMIT? */ char *tableSpaceName; /* table space to use, or NULL */ - Node *viewQuery; /* materialized view's SELECT query */ + /* materialized view's SELECT query */ + Node *viewQuery pg_node_attr(query_jumble_ignore); bool skipData; /* true for WITH NO DATA */ } IntoClause; @@ -135,6 +164,8 @@ typedef struct IntoClause */ typedef struct Expr { + pg_node_attr(abstract) + NodeTag type; } Expr; @@ -162,6 +193,14 @@ typedef struct Expr * row identity information during UPDATE/DELETE/MERGE. This value should * never be seen outside the planner. * + * varnullingrels is the set of RT indexes of outer joins that can force + * the Var's value to null (at the point where it appears in the query). + * See optimizer/README for discussion of that. + * + * varlevelsup is greater than zero in Vars that represent outer references. + * Note that it affects the meaning of all of varno, varnullingrels, and + * varnosyn, all of which refer to the range table of that query level. + * * In the parser, varnosyn and varattnosyn are either identical to * varno/varattno, or they specify the column's position in an aliased JOIN * RTE that hides the semantic referent RTE's refname. This is a syntactic @@ -186,19 +225,50 @@ typedef struct Expr typedef struct Var { Expr xpr; - int varno; /* index of this var's relation in the range - * table, or INNER_VAR/OUTER_VAR/etc */ - AttrNumber varattno; /* attribute number of this var, or zero for - * all attrs ("whole-row Var") */ - Oid vartype; /* pg_type OID for the type of this var */ - int32 vartypmod; /* pg_attribute typmod value */ - Oid varcollid; /* OID of collation, or InvalidOid if none */ - Index varlevelsup; /* for subquery variables referencing outer - * relations; 0 in a normal var, >0 means N - * levels up */ - Index varnosyn; /* syntactic relation index (0 if unknown) */ - AttrNumber varattnosyn; /* syntactic attribute number */ - int location; /* token location, or -1 if unknown */ + + /* + * index of this var's relation in the range table, or + * INNER_VAR/OUTER_VAR/etc + */ + int varno; + + /* + * attribute number of this var, or zero for all attrs ("whole-row Var") + */ + AttrNumber varattno; + + /* pg_type OID for the type of this var */ + Oid vartype pg_node_attr(query_jumble_ignore); + /* pg_attribute typmod value */ + int32 vartypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid varcollid pg_node_attr(query_jumble_ignore); + + /* + * RT indexes of outer joins that can replace the Var's value with null. + * We can omit varnullingrels in the query jumble, because it's fully + * determined by varno/varlevelsup plus the Var's query location. + */ + Bitmapset *varnullingrels pg_node_attr(query_jumble_ignore); + + /* + * for subquery variables referencing outer relations; 0 in a normal var, + * >0 means N levels up + */ + Index varlevelsup; + + /* + * varnosyn/varattnosyn are ignored for equality, because Vars with + * different syntactic identifiers are semantically the same as long as + * their varno/varattno match. + */ + /* syntactic relation index (0 if unknown) */ + Index varnosyn pg_node_attr(equal_ignore, query_jumble_ignore); + /* syntactic attribute number */ + AttrNumber varattnosyn pg_node_attr(equal_ignore, query_jumble_ignore); + + /* token location, or -1 if unknown */ + int location; } Var; /* @@ -208,22 +278,39 @@ typedef struct Var * must be in non-extended form (4-byte header, no compression or external * references). This ensures that the Const node is self-contained and makes * it more likely that equal() will see logically identical values as equal. + * + * Only the constant type OID is relevant for the query jumbling. */ typedef struct Const { + pg_node_attr(custom_copy_equal, custom_read_write) + Expr xpr; - Oid consttype; /* pg_type OID of the constant's datatype */ - int32 consttypmod; /* typmod value, if any */ - Oid constcollid; /* OID of collation, or InvalidOid if none */ - int constlen; /* typlen of the constant's datatype */ - Datum constvalue; /* the constant's value */ - bool constisnull; /* whether the constant is null (if true, - * constvalue is undefined) */ - bool constbyval; /* whether this datatype is passed by value. - * If true, then all the information is stored - * in the Datum. If false, then the Datum - * contains a pointer to the information. */ - int location; /* token location, or -1 if unknown */ + /* pg_type OID of the constant's datatype */ + Oid consttype; + /* typmod value, if any */ + int32 consttypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid constcollid pg_node_attr(query_jumble_ignore); + /* typlen of the constant's datatype */ + int constlen pg_node_attr(query_jumble_ignore); + /* the constant's value */ + Datum constvalue pg_node_attr(query_jumble_ignore); + /* whether the constant is null (if true, constvalue is undefined) */ + bool constisnull pg_node_attr(query_jumble_ignore); + + /* + * Whether this datatype is passed by value. If true, then all the + * information is stored in the Datum. If false, then the Datum contains + * a pointer to the information. + */ + bool constbyval pg_node_attr(query_jumble_ignore); + + /* + * token location, or -1 if unknown. All constants are tracked as + * locations in query jumbling, to be marked as parameters. + */ + int location pg_node_attr(query_jumble_location); } Const; /* @@ -267,9 +354,12 @@ typedef struct Param ParamKind paramkind; /* kind of parameter. See above */ int paramid; /* numeric ID for parameter */ Oid paramtype; /* pg_type OID of parameter's datatype */ - int32 paramtypmod; /* typmod value, if known */ - Oid paramcollid; /* OID of collation, or InvalidOid if none */ - int location; /* token location, or -1 if unknown */ + /* typmod value, if known */ + int32 paramtypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid paramcollid pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } Param; /* @@ -304,6 +394,10 @@ typedef struct Param * replaced with a single argument representing the partial-aggregate * transition values. * + * aggpresorted is set by the query planner for ORDER BY and DISTINCT + * aggregates where the chosen plan provides presorted input for this + * aggregate during execution. + * * aggsplit indicates the expected partial-aggregation mode for the Aggref's * parent plan node. It's always set to AGGSPLIT_SIMPLE in the parser, but * the planner might change it to something else. We use this mainly as @@ -316,30 +410,79 @@ typedef struct Param * and can share the result. Aggregates with same 'transno' but different * 'aggno' can share the same transition state, only the final function needs * to be called separately. + * + * Information related to collations, transition types and internal states + * are irrelevant for the query jumbling. */ typedef struct Aggref { Expr xpr; - Oid aggfnoid; /* pg_proc Oid of the aggregate */ - Oid aggtype; /* type Oid of result of the aggregate */ - Oid aggcollid; /* OID of collation of result */ - Oid inputcollid; /* OID of collation that function should use */ - Oid aggtranstype; /* type Oid of aggregate's transition value */ - List *aggargtypes; /* type Oids of direct and aggregated args */ - List *aggdirectargs; /* direct arguments, if an ordered-set agg */ - List *args; /* aggregated arguments and sort expressions */ - List *aggorder; /* ORDER BY (list of SortGroupClause) */ - List *aggdistinct; /* DISTINCT (list of SortGroupClause) */ - Expr *aggfilter; /* FILTER expression, if any */ - bool aggstar; /* true if argument list was really '*' */ - bool aggvariadic; /* true if variadic arguments have been - * combined into an array last argument */ - char aggkind; /* aggregate kind (see pg_aggregate.h) */ - Index agglevelsup; /* > 0 if agg belongs to outer query */ - AggSplit aggsplit; /* expected agg-splitting mode of parent Agg */ - int aggno; /* unique ID within the Agg node */ - int aggtransno; /* unique ID of transition state in the Agg */ - int location; /* token location, or -1 if unknown */ + + /* pg_proc Oid of the aggregate */ + Oid aggfnoid; + + /* type Oid of result of the aggregate */ + Oid aggtype pg_node_attr(query_jumble_ignore); + + /* OID of collation of result */ + Oid aggcollid pg_node_attr(query_jumble_ignore); + + /* OID of collation that function should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + + /* + * type Oid of aggregate's transition value; ignored for equal since it + * might not be set yet + */ + Oid aggtranstype pg_node_attr(equal_ignore, query_jumble_ignore); + + /* type Oids of direct and aggregated args */ + List *aggargtypes pg_node_attr(query_jumble_ignore); + + /* direct arguments, if an ordered-set agg */ + List *aggdirectargs; + + /* aggregated arguments and sort expressions */ + List *args; + + /* ORDER BY (list of SortGroupClause) */ + List *aggorder; + + /* DISTINCT (list of SortGroupClause) */ + List *aggdistinct; + + /* FILTER expression, if any */ + Expr *aggfilter; + + /* true if argument list was really '*' */ + bool aggstar pg_node_attr(query_jumble_ignore); + + /* + * true if variadic arguments have been combined into an array last + * argument + */ + bool aggvariadic pg_node_attr(query_jumble_ignore); + + /* aggregate kind (see pg_aggregate.h) */ + char aggkind pg_node_attr(query_jumble_ignore); + + /* aggregate input already sorted */ + bool aggpresorted pg_node_attr(equal_ignore, query_jumble_ignore); + + /* > 0 if agg belongs to outer query */ + Index agglevelsup pg_node_attr(query_jumble_ignore); + + /* expected agg-splitting mode of parent Agg */ + AggSplit aggsplit pg_node_attr(query_jumble_ignore); + + /* unique ID within the Agg node */ + int aggno pg_node_attr(query_jumble_ignore); + + /* unique ID of transition state in the Agg */ + int aggtransno pg_node_attr(query_jumble_ignore); + + /* token location, or -1 if unknown */ + int location; } Aggref; /* @@ -365,34 +508,59 @@ typedef struct Aggref * * In raw parse output we have only the args list; parse analysis fills in the * refs list, and the planner fills in the cols list. + * + * All the fields used as information for an internal state are irrelevant + * for the query jumbling. */ typedef struct GroupingFunc { Expr xpr; - List *args; /* arguments, not evaluated but kept for - * benefit of EXPLAIN etc. */ - List *refs; /* ressortgrouprefs of arguments */ - List *cols; /* actual column positions set by planner */ - Index agglevelsup; /* same as Aggref.agglevelsup */ - int location; /* token location */ + + /* arguments, not evaluated but kept for benefit of EXPLAIN etc. */ + List *args pg_node_attr(query_jumble_ignore); + + /* ressortgrouprefs of arguments */ + List *refs pg_node_attr(equal_ignore); + + /* actual column positions set by planner */ + List *cols pg_node_attr(equal_ignore, query_jumble_ignore); + + /* same as Aggref.agglevelsup */ + Index agglevelsup; + + /* token location */ + int location; } GroupingFunc; /* * WindowFunc + * + * Collation information is irrelevant for the query jumbling, as is the + * internal state information of the node like "winstar" and "winagg". */ typedef struct WindowFunc { Expr xpr; - Oid winfnoid; /* pg_proc Oid of the function */ - Oid wintype; /* type Oid of result of the window function */ - Oid wincollid; /* OID of collation of result */ - Oid inputcollid; /* OID of collation that function should use */ - List *args; /* arguments to the window function */ - Expr *aggfilter; /* FILTER expression, if any */ - Index winref; /* index of associated WindowClause */ - bool winstar; /* true if argument list was really '*' */ - bool winagg; /* is function a simple aggregate? */ - int location; /* token location, or -1 if unknown */ + /* pg_proc Oid of the function */ + Oid winfnoid; + /* type Oid of result of the window function */ + Oid wintype pg_node_attr(query_jumble_ignore); + /* OID of collation of result */ + Oid wincollid pg_node_attr(query_jumble_ignore); + /* OID of collation that function should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + /* arguments to the window function */ + List *args; + /* FILTER expression, if any */ + Expr *aggfilter; + /* index of associated WindowClause */ + Index winref; + /* true if argument list was really '*' */ + bool winstar pg_node_attr(query_jumble_ignore); + /* is function a simple aggregate? */ + bool winagg pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } WindowFunc; /* @@ -429,6 +597,8 @@ typedef struct WindowFunc * subscripting logic. Likewise, reftypmod and refcollid will match the * container's properties in a store, but could be different in a fetch. * + * Any internal state data is ignored for the query jumbling. + * * Note: for the cases where a container is returned, if refexpr yields a R/W * expanded container, then the implementation is allowed to modify that * object in-place and return the same object. @@ -436,20 +606,28 @@ typedef struct WindowFunc typedef struct SubscriptingRef { Expr xpr; - Oid refcontainertype; /* type of the container proper */ - Oid refelemtype; /* the container type's pg_type.typelem */ - Oid refrestype; /* type of the SubscriptingRef's result */ - int32 reftypmod; /* typmod of the result */ - Oid refcollid; /* collation of result, or InvalidOid if none */ - List *refupperindexpr; /* expressions that evaluate to upper - * container indexes */ - List *reflowerindexpr; /* expressions that evaluate to lower - * container indexes, or NIL for single - * container element */ - Expr *refexpr; /* the expression that evaluates to a - * container value */ - Expr *refassgnexpr; /* expression for the source value, or NULL if - * fetch */ + /* type of the container proper */ + Oid refcontainertype pg_node_attr(query_jumble_ignore); + /* the container type's pg_type.typelem */ + Oid refelemtype pg_node_attr(query_jumble_ignore); + /* type of the SubscriptingRef's result */ + Oid refrestype pg_node_attr(query_jumble_ignore); + /* typmod of the result */ + int32 reftypmod pg_node_attr(query_jumble_ignore); + /* collation of result, or InvalidOid if none */ + Oid refcollid pg_node_attr(query_jumble_ignore); + /* expressions that evaluate to upper container indexes */ + List *refupperindexpr; + + /* + * expressions that evaluate to lower container indexes, or NIL for single + * container element. + */ + List *reflowerindexpr; + /* the expression that evaluates to a container value */ + Expr *refexpr; + /* expression for the source value, or NULL if fetch */ + Expr *refassgnexpr; } SubscriptingRef; /* @@ -488,20 +666,35 @@ typedef enum CoercionForm /* * FuncExpr - expression node for a function call + * + * Collation information is irrelevant for the query jumbling, only the + * arguments and the function OID matter. */ typedef struct FuncExpr { Expr xpr; - Oid funcid; /* PG_PROC OID of the function */ - Oid funcresulttype; /* PG_TYPE OID of result value */ - bool funcretset; /* true if function returns set */ - bool funcvariadic; /* true if variadic arguments have been - * combined into an array last argument */ - CoercionForm funcformat; /* how to display this function call */ - Oid funccollid; /* OID of collation of result */ - Oid inputcollid; /* OID of collation that function should use */ - List *args; /* arguments to the function */ - int location; /* token location, or -1 if unknown */ + /* PG_PROC OID of the function */ + Oid funcid; + /* PG_TYPE OID of result value */ + Oid funcresulttype pg_node_attr(query_jumble_ignore); + /* true if function returns set */ + bool funcretset pg_node_attr(query_jumble_ignore); + + /* + * true if variadic arguments have been combined into an array last + * argument + */ + bool funcvariadic pg_node_attr(query_jumble_ignore); + /* how to display this function call */ + CoercionForm funcformat pg_node_attr(query_jumble_ignore); + /* OID of collation of result */ + Oid funccollid pg_node_attr(query_jumble_ignore); + /* OID of collation that function should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + /* arguments to the function */ + List *args; + /* token location, or -1 if unknown */ + int location; } FuncExpr; /* @@ -521,10 +714,14 @@ typedef struct FuncExpr typedef struct NamedArgExpr { Expr xpr; - Expr *arg; /* the argument expression */ - char *name; /* the name */ - int argnumber; /* argument's number in positional notation */ - int location; /* argument name location, or -1 if unknown */ + /* the argument expression */ + Expr *arg; + /* the name */ + char *name pg_node_attr(query_jumble_ignore); + /* argument's number in positional notation */ + int argnumber; + /* argument name location, or -1 if unknown */ + int location; } NamedArgExpr; /* @@ -535,18 +732,38 @@ typedef struct NamedArgExpr * Note that opfuncid is not necessarily filled in immediately on creation * of the node. The planner makes sure it is valid before passing the node * tree to the executor, but during parsing/planning opfuncid can be 0. + * Therefore, equal() will accept a zero value as being equal to other values. + * + * Internal state information and collation data is irrelevant for the query + * jumbling. */ typedef struct OpExpr { Expr xpr; - Oid opno; /* PG_OPERATOR OID of the operator */ - Oid opfuncid; /* PG_PROC OID of underlying function */ - Oid opresulttype; /* PG_TYPE OID of result value */ - bool opretset; /* true if operator returns set */ - Oid opcollid; /* OID of collation of result */ - Oid inputcollid; /* OID of collation that operator should use */ - List *args; /* arguments to the operator (1 or 2) */ - int location; /* token location, or -1 if unknown */ + + /* PG_OPERATOR OID of the operator */ + Oid opno; + + /* PG_PROC OID of underlying function */ + Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore); + + /* PG_TYPE OID of result value */ + Oid opresulttype pg_node_attr(query_jumble_ignore); + + /* true if operator returns set */ + bool opretset pg_node_attr(query_jumble_ignore); + + /* OID of collation of result */ + Oid opcollid pg_node_attr(query_jumble_ignore); + + /* OID of collation that operator should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + + /* arguments to the operator (1 or 2) */ + List *args; + + /* token location, or -1 if unknown */ + int location; } OpExpr; /* @@ -592,19 +809,41 @@ typedef OpExpr NullIfExpr; * corresponding function and won't be used during execution. For * non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See * convert_saop_to_hashed_saop(). + * + * Similar to OpExpr, opfuncid, hashfuncid, and negfuncid are not necessarily + * filled in right away, so will be ignored for equality if they are not set + * yet. + * + * OID entries of the internal function types are irrelevant for the query + * jumbling, but the operator OID and the arguments are. */ typedef struct ScalarArrayOpExpr { Expr xpr; - Oid opno; /* PG_OPERATOR OID of the operator */ - Oid opfuncid; /* PG_PROC OID of comparison function */ - Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */ - Oid negfuncid; /* PG_PROC OID of negator of opfuncid function - * or InvalidOid. See above */ - bool useOr; /* true for ANY, false for ALL */ - Oid inputcollid; /* OID of collation that operator should use */ - List *args; /* the scalar and array operands */ - int location; /* token location, or -1 if unknown */ + + /* PG_OPERATOR OID of the operator */ + Oid opno; + + /* PG_PROC OID of comparison function */ + Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore); + + /* PG_PROC OID of hash func or InvalidOid */ + Oid hashfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore); + + /* PG_PROC OID of negator of opfuncid function or InvalidOid. See above */ + Oid negfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore); + + /* true for ANY, false for ALL */ + bool useOr; + + /* OID of collation that operator should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + + /* the scalar and array operands */ + List *args; + + /* token location, or -1 if unknown */ + int location; } ScalarArrayOpExpr; /* @@ -621,6 +860,8 @@ typedef enum BoolExprType typedef struct BoolExpr { + pg_node_attr(custom_read_write) + Expr xpr; BoolExprType boolop; List *args; /* arguments to this expression */ @@ -697,8 +938,10 @@ typedef struct SubLink SubLinkType subLinkType; /* see above */ int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */ Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */ - List *operName; /* originally specified operator name */ - Node *subselect; /* subselect as Query* or raw parsetree */ + /* originally specified operator name */ + List *operName pg_node_attr(query_jumble_ignore); + /* subselect as Query* or raw parsetree */ + Node *subselect; int location; /* token location, or -1 if unknown */ } SubLink; @@ -732,9 +975,9 @@ typedef struct SubLink * The values are assigned to the global PARAM_EXEC params indexed by parParam * (the parParam and args lists must have the same ordering). setParam is a * list of the PARAM_EXEC params that are computed by the sub-select, if it - * is an initplan; they are listed in order by sub-select output column - * position. (parParam and setParam are integer Lists, not Bitmapsets, - * because their ordering is significant.) + * is an initplan or MULTIEXPR plan; they are listed in order by sub-select + * output column position. (parParam and setParam are integer Lists, not + * Bitmapsets, because their ordering is significant.) * * Also, the planner computes startup and per-call costs for use of the * SubPlan. Note that these include the cost of the subquery proper, @@ -742,6 +985,8 @@ typedef struct SubLink */ typedef struct SubPlan { + pg_node_attr(no_query_jumble) + Expr xpr; /* Fields copied from original SubLink: */ SubLinkType subLinkType; /* see above */ @@ -767,8 +1012,8 @@ typedef struct SubPlan /* Note: parallel_safe does not consider contents of testexpr or args */ /* Information for passing params into and out of the subselect: */ /* setParam and parParam are lists of integers (param IDs) */ - List *setParam; /* initplan subqueries have to set these - * Params for parent plan */ + List *setParam; /* initplan and MULTIEXPR subqueries have to + * set these Params for parent plan */ List *parParam; /* indices of input Params from parent plan */ List *args; /* exprs to pass as parParam values */ /* Estimated execution costs: */ @@ -789,6 +1034,8 @@ typedef struct SubPlan */ typedef struct AlternativeSubPlan { + pg_node_attr(no_query_jumble) + Expr xpr; List *subplans; /* SubPlan(s) with equivalent results */ } AlternativeSubPlan; @@ -807,10 +1054,12 @@ typedef struct FieldSelect Expr xpr; Expr *arg; /* input expression */ AttrNumber fieldnum; /* attribute number of field to extract */ - Oid resulttype; /* type of the field (result type of this - * node) */ - int32 resulttypmod; /* output typmod (usually -1) */ - Oid resultcollid; /* OID of collation of the field */ + /* type of the field (result type of this node) */ + Oid resulttype pg_node_attr(query_jumble_ignore); + /* output typmod (usually -1) */ + int32 resulttypmod pg_node_attr(query_jumble_ignore); + /* OID of collation of the field */ + Oid resultcollid pg_node_attr(query_jumble_ignore); } FieldSelect; /* ---------------- @@ -836,8 +1085,10 @@ typedef struct FieldStore Expr xpr; Expr *arg; /* input tuple value */ List *newvals; /* new value(s) for field(s) */ - List *fieldnums; /* integer list of field attnums */ - Oid resulttype; /* type of result (same as type of arg) */ + /* integer list of field attnums */ + List *fieldnums pg_node_attr(query_jumble_ignore); + /* type of result (same as type of arg) */ + Oid resulttype pg_node_attr(query_jumble_ignore); /* Like RowExpr, we deliberately omit a typmod and collation here */ } FieldStore; @@ -859,9 +1110,12 @@ typedef struct RelabelType Expr xpr; Expr *arg; /* input expression */ Oid resulttype; /* output type of coercion expression */ - int32 resulttypmod; /* output typmod (usually -1) */ - Oid resultcollid; /* OID of collation, or InvalidOid if none */ - CoercionForm relabelformat; /* how to display this node */ + /* output typmod (usually -1) */ + int32 resulttypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid resultcollid pg_node_attr(query_jumble_ignore); + /* how to display this node */ + CoercionForm relabelformat pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } RelabelType; @@ -880,8 +1134,10 @@ typedef struct CoerceViaIO Expr *arg; /* input expression */ Oid resulttype; /* output type of coercion */ /* output typmod is not stored, but is presumed -1 */ - Oid resultcollid; /* OID of collation, or InvalidOid if none */ - CoercionForm coerceformat; /* how to display this node */ + /* OID of collation, or InvalidOid if none */ + Oid resultcollid pg_node_attr(query_jumble_ignore); + /* how to display this node */ + CoercionForm coerceformat pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } CoerceViaIO; @@ -904,9 +1160,12 @@ typedef struct ArrayCoerceExpr Expr *arg; /* input expression (yields an array) */ Expr *elemexpr; /* expression representing per-element work */ Oid resulttype; /* output type of coercion (an array type) */ - int32 resulttypmod; /* output typmod (also element typmod) */ - Oid resultcollid; /* OID of collation, or InvalidOid if none */ - CoercionForm coerceformat; /* how to display this node */ + /* output typmod (also element typmod) */ + int32 resulttypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid resultcollid pg_node_attr(query_jumble_ignore); + /* how to display this node */ + CoercionForm coerceformat pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } ArrayCoerceExpr; @@ -929,7 +1188,8 @@ typedef struct ConvertRowtypeExpr Expr *arg; /* input expression */ Oid resulttype; /* output type (always a composite type) */ /* Like RowExpr, we deliberately omit a typmod and collation here */ - CoercionForm convertformat; /* how to display this node */ + /* how to display this node */ + CoercionForm convertformat pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } ConvertRowtypeExpr; @@ -973,8 +1233,10 @@ typedef struct CollateExpr typedef struct CaseExpr { Expr xpr; - Oid casetype; /* type of expression result */ - Oid casecollid; /* OID of collation, or InvalidOid if none */ + /* type of expression result */ + Oid casetype pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid casecollid pg_node_attr(query_jumble_ignore); Expr *arg; /* implicit equality comparison argument */ List *args; /* the arguments (list of WHEN clauses) */ Expr *defresult; /* the default result (ELSE clause) */ @@ -1002,6 +1264,8 @@ typedef struct CaseWhen * see build_coercion_expression(). * * Nested FieldStore/SubscriptingRef assignment expressions in INSERT/UPDATE; * see transformAssignmentIndirection(). + * * Placeholder for intermediate results in some SQL/JSON expression nodes, + * such as JsonConstructorExpr. * * The uses in CaseExpr and ArrayCoerceExpr are safe only to the extent that * there is not any other CaseExpr or ArrayCoerceExpr between the value source @@ -1016,8 +1280,10 @@ typedef struct CaseTestExpr { Expr xpr; Oid typeId; /* type for substituted value */ - int32 typeMod; /* typemod for substituted value */ - Oid collation; /* collation for the substituted value */ + /* typemod for substituted value */ + int32 typeMod pg_node_attr(query_jumble_ignore); + /* collation for the substituted value */ + Oid collation pg_node_attr(query_jumble_ignore); } CaseTestExpr; /* @@ -1031,12 +1297,18 @@ typedef struct CaseTestExpr typedef struct ArrayExpr { Expr xpr; - Oid array_typeid; /* type of expression result */ - Oid array_collid; /* OID of collation, or InvalidOid if none */ - Oid element_typeid; /* common type of array elements */ - List *elements; /* the array elements or sub-arrays */ - bool multidims; /* true if elements are sub-arrays */ - int location; /* token location, or -1 if unknown */ + /* type of expression result */ + Oid array_typeid pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid array_collid pg_node_attr(query_jumble_ignore); + /* common type of array elements */ + Oid element_typeid pg_node_attr(query_jumble_ignore); + /* the array elements or sub-arrays */ + List *elements; + /* true if elements are sub-arrays */ + bool multidims pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } ArrayExpr; /* @@ -1064,7 +1336,9 @@ typedef struct RowExpr { Expr xpr; List *args; /* the fields */ - Oid row_typeid; /* RECORDOID or a composite type's ID */ + + /* RECORDOID or a composite type's ID */ + Oid row_typeid pg_node_attr(query_jumble_ignore); /* * row_typeid cannot be a domain over composite, only plain composite. To @@ -1078,8 +1352,13 @@ typedef struct RowExpr * We don't need to store a collation either. The result type is * necessarily composite, and composite types never have a collation. */ - CoercionForm row_format; /* how to display this node */ - List *colnames; /* list of String, or NIL */ + + /* how to display this node */ + CoercionForm row_format pg_node_attr(query_jumble_ignore); + + /* list of String, or NIL */ + List *colnames pg_node_attr(query_jumble_ignore); + int location; /* token location, or -1 if unknown */ } RowExpr; @@ -1111,12 +1390,19 @@ typedef enum RowCompareType typedef struct RowCompareExpr { Expr xpr; - RowCompareType rctype; /* LT LE GE or GT, never EQ or NE */ - List *opnos; /* OID list of pairwise comparison ops */ - List *opfamilies; /* OID list of containing operator families */ - List *inputcollids; /* OID list of collations for comparisons */ - List *largs; /* the left-hand input arguments */ - List *rargs; /* the right-hand input arguments */ + + /* LT LE GE or GT, never EQ or NE */ + RowCompareType rctype; + /* OID list of pairwise comparison ops */ + List *opnos pg_node_attr(query_jumble_ignore); + /* OID list of containing operator families */ + List *opfamilies pg_node_attr(query_jumble_ignore); + /* OID list of collations for comparisons */ + List *inputcollids pg_node_attr(query_jumble_ignore); + /* the left-hand input arguments */ + List *largs; + /* the right-hand input arguments */ + List *rargs; } RowCompareExpr; /* @@ -1125,10 +1411,14 @@ typedef struct RowCompareExpr typedef struct CoalesceExpr { Expr xpr; - Oid coalescetype; /* type of expression result */ - Oid coalescecollid; /* OID of collation, or InvalidOid if none */ - List *args; /* the arguments */ - int location; /* token location, or -1 if unknown */ + /* type of expression result */ + Oid coalescetype pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid coalescecollid pg_node_attr(query_jumble_ignore); + /* the arguments */ + List *args; + /* token location, or -1 if unknown */ + int location; } CoalesceExpr; /* @@ -1143,12 +1433,18 @@ typedef enum MinMaxOp typedef struct MinMaxExpr { Expr xpr; - Oid minmaxtype; /* common type of arguments and result */ - Oid minmaxcollid; /* OID of collation of result */ - Oid inputcollid; /* OID of collation that function should use */ - MinMaxOp op; /* function to execute */ - List *args; /* the arguments */ - int location; /* token location, or -1 if unknown */ + /* common type of arguments and result */ + Oid minmaxtype pg_node_attr(query_jumble_ignore); + /* OID of collation of result */ + Oid minmaxcollid pg_node_attr(query_jumble_ignore); + /* OID of collation that function should use */ + Oid inputcollid pg_node_attr(query_jumble_ignore); + /* function to execute */ + MinMaxOp op; + /* the arguments */ + List *args; + /* token location, or -1 if unknown */ + int location; } MinMaxExpr; /* @@ -1185,7 +1481,12 @@ typedef struct SQLValueFunction { Expr xpr; SQLValueFunctionOp op; /* which function this is */ - Oid type; /* result type/typmod */ + + /* + * Result type/typmod. Type is fully determined by "op", so no need to + * include this Oid in the query jumbling. + */ + Oid type pg_node_attr(query_jumble_ignore); int32 typmod; int location; /* token location, or -1 if unknown */ } SQLValueFunction; @@ -1209,7 +1510,7 @@ typedef enum XmlExprOp IS_XMLPARSE, /* XMLPARSE(text, is_doc, preserve_ws) */ IS_XMLPI, /* XMLPI(name [, args]) */ IS_XMLROOT, /* XMLROOT(xml, version, standalone) */ - IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval) */ + IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval, indent) */ IS_DOCUMENT /* xmlval IS DOCUMENT */ } XmlExprOp; @@ -1222,17 +1523,142 @@ typedef enum XmlOptionType typedef struct XmlExpr { Expr xpr; - XmlExprOp op; /* xml function ID */ - char *name; /* name in xml(NAME foo ...) syntaxes */ - List *named_args; /* non-XML expressions for xml_attributes */ - List *arg_names; /* parallel list of String values */ - List *args; /* list of expressions */ - XmlOptionType xmloption; /* DOCUMENT or CONTENT */ - Oid type; /* target type/typmod for XMLSERIALIZE */ - int32 typmod; - int location; /* token location, or -1 if unknown */ + /* xml function ID */ + XmlExprOp op; + /* name in xml(NAME foo ...) syntaxes */ + char *name pg_node_attr(query_jumble_ignore); + /* non-XML expressions for xml_attributes */ + List *named_args; + /* parallel list of String values */ + List *arg_names pg_node_attr(query_jumble_ignore); + /* list of expressions */ + List *args; + /* DOCUMENT or CONTENT */ + XmlOptionType xmloption pg_node_attr(query_jumble_ignore); + /* INDENT option for XMLSERIALIZE */ + bool indent; + /* target type/typmod for XMLSERIALIZE */ + Oid type pg_node_attr(query_jumble_ignore); + int32 typmod pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } XmlExpr; +/* + * JsonEncoding - + * representation of JSON ENCODING clause + */ +typedef enum JsonEncoding +{ + JS_ENC_DEFAULT, /* unspecified */ + JS_ENC_UTF8, + JS_ENC_UTF16, + JS_ENC_UTF32, +} JsonEncoding; + +/* + * JsonFormatType - + * enumeration of JSON formats used in JSON FORMAT clause + */ +typedef enum JsonFormatType +{ + JS_FORMAT_DEFAULT, /* unspecified */ + JS_FORMAT_JSON, /* FORMAT JSON [ENCODING ...] */ + JS_FORMAT_JSONB /* implicit internal format for RETURNING + * jsonb */ +} JsonFormatType; + +/* + * JsonFormat - + * representation of JSON FORMAT clause + */ +typedef struct JsonFormat +{ + NodeTag type; + JsonFormatType format_type; /* format type */ + JsonEncoding encoding; /* JSON encoding */ + int location; /* token location, or -1 if unknown */ +} JsonFormat; + +/* + * JsonReturning - + * transformed representation of JSON RETURNING clause + */ +typedef struct JsonReturning +{ + NodeTag type; + JsonFormat *format; /* output JSON format */ + Oid typid; /* target type Oid */ + int32 typmod; /* target type modifier */ +} JsonReturning; + +/* + * JsonValueExpr - + * representation of JSON value expression (expr [FORMAT JsonFormat]) + * + * The actual value is obtained by evaluating formatted_expr. raw_expr is + * only there for displaying the original user-written expression and is not + * evaluated by ExecInterpExpr() and eval_const_exprs_mutator(). + */ +typedef struct JsonValueExpr +{ + NodeTag type; + Expr *raw_expr; /* raw expression */ + Expr *formatted_expr; /* formatted expression */ + JsonFormat *format; /* FORMAT clause, if specified */ +} JsonValueExpr; + +typedef enum JsonConstructorType +{ + JSCTOR_JSON_OBJECT = 1, + JSCTOR_JSON_ARRAY = 2, + JSCTOR_JSON_OBJECTAGG = 3, + JSCTOR_JSON_ARRAYAGG = 4 +} JsonConstructorType; + +/* + * JsonConstructorExpr - + * wrapper over FuncExpr/Aggref/WindowFunc for SQL/JSON constructors + */ +typedef struct JsonConstructorExpr +{ + Expr xpr; + JsonConstructorType type; /* constructor type */ + List *args; + Expr *func; /* underlying json[b]_xxx() function call */ + Expr *coercion; /* coercion to RETURNING type */ + JsonReturning *returning; /* RETURNING clause */ + bool absent_on_null; /* ABSENT ON NULL? */ + bool unique; /* WITH UNIQUE KEYS? (JSON_OBJECT[AGG] only) */ + int location; +} JsonConstructorExpr; + +/* + * JsonValueType - + * representation of JSON item type in IS JSON predicate + */ +typedef enum JsonValueType +{ + JS_TYPE_ANY, /* IS JSON [VALUE] */ + JS_TYPE_OBJECT, /* IS JSON OBJECT */ + JS_TYPE_ARRAY, /* IS JSON ARRAY */ + JS_TYPE_SCALAR /* IS JSON SCALAR */ +} JsonValueType; + +/* + * JsonIsPredicate - + * representation of IS JSON predicate + */ +typedef struct JsonIsPredicate +{ + NodeTag type; + Node *expr; /* subject expression */ + JsonFormat *format; /* FORMAT clause, if specified */ + JsonValueType item_type; /* JSON item type */ + bool unique_keys; /* check key uniqueness? */ + int location; /* token location, or -1 if unknown */ +} JsonIsPredicate; + /* ---------------- * NullTest * @@ -1262,7 +1688,8 @@ typedef struct NullTest Expr xpr; Expr *arg; /* input expression */ NullTestType nulltesttype; /* IS NULL, IS NOT NULL */ - bool argisrow; /* T to perform field-by-field null checks */ + /* T to perform field-by-field null checks */ + bool argisrow pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } NullTest; @@ -1302,9 +1729,12 @@ typedef struct CoerceToDomain Expr xpr; Expr *arg; /* input expression */ Oid resulttype; /* domain type ID (result type) */ - int32 resulttypmod; /* output typmod (currently always -1) */ - Oid resultcollid; /* OID of collation, or InvalidOid if none */ - CoercionForm coercionformat; /* how to display this node */ + /* output typmod (currently always -1) */ + int32 resulttypmod pg_node_attr(query_jumble_ignore); + /* OID of collation, or InvalidOid if none */ + Oid resultcollid pg_node_attr(query_jumble_ignore); + /* how to display this node */ + CoercionForm coercionformat pg_node_attr(query_jumble_ignore); int location; /* token location, or -1 if unknown */ } CoerceToDomain; @@ -1320,10 +1750,14 @@ typedef struct CoerceToDomain typedef struct CoerceToDomainValue { Expr xpr; - Oid typeId; /* type for substituted value */ - int32 typeMod; /* typemod for substituted value */ - Oid collation; /* collation for the substituted value */ - int location; /* token location, or -1 if unknown */ + /* type for substituted value */ + Oid typeId; + /* typemod for substituted value */ + int32 typeMod pg_node_attr(query_jumble_ignore); + /* collation for the substituted value */ + Oid collation pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } CoerceToDomainValue; /* @@ -1336,10 +1770,14 @@ typedef struct CoerceToDomainValue typedef struct SetToDefault { Expr xpr; - Oid typeId; /* type for substituted value */ - int32 typeMod; /* typemod for substituted value */ - Oid collation; /* collation for the substituted value */ - int location; /* token location, or -1 if unknown */ + /* type for substituted value */ + Oid typeId; + /* typemod for substituted value */ + int32 typeMod pg_node_attr(query_jumble_ignore); + /* collation for the substituted value */ + Oid collation pg_node_attr(query_jumble_ignore); + /* token location, or -1 if unknown */ + int location; } SetToDefault; /* @@ -1450,15 +1888,20 @@ typedef struct InferenceElem typedef struct TargetEntry { Expr xpr; - Expr *expr; /* expression to evaluate */ - AttrNumber resno; /* attribute number (see notes above) */ - char *resname; /* name of the column (could be NULL) */ - Index ressortgroupref; /* nonzero if referenced by a sort/group - * clause */ - Oid resorigtbl; /* OID of column's source table */ - AttrNumber resorigcol; /* column's number in source table */ - bool resjunk; /* set to true to eliminate the attribute from - * final target list */ + /* expression to evaluate */ + Expr *expr; + /* attribute number (see notes above) */ + AttrNumber resno; + /* name of the column (could be NULL) */ + char *resname pg_node_attr(query_jumble_ignore); + /* nonzero if referenced by a sort/group clause */ + Index ressortgroupref; + /* OID of column's source table */ + Oid resorigtbl pg_node_attr(query_jumble_ignore); + /* column's number in source table */ + AttrNumber resorigcol pg_node_attr(query_jumble_ignore); + /* set to true to eliminate the attribute from final target list */ + bool resjunk pg_node_attr(query_jumble_ignore); } TargetEntry; @@ -1540,11 +1983,16 @@ typedef struct JoinExpr bool isNatural; /* Natural join? Will need to shape table */ Node *larg; /* left subtree */ Node *rarg; /* right subtree */ - List *usingClause; /* USING clause, if any (list of String) */ - Alias *join_using_alias; /* alias attached to USING clause, if any */ - Node *quals; /* qualifiers on join, if any */ - Alias *alias; /* user-written alias clause, if any */ - int rtindex; /* RT index assigned for join, or 0 */ + /* USING clause, if any (list of String) */ + List *usingClause pg_node_attr(query_jumble_ignore); + /* alias attached to USING clause, if any */ + Alias *join_using_alias pg_node_attr(query_jumble_ignore); + /* qualifiers on join, if any */ + Node *quals; + /* user-written alias clause, if any */ + Alias *alias pg_node_attr(query_jumble_ignore); + /* RT index assigned for join, or 0 */ + int rtindex; } JoinExpr; /*---------- diff --git a/src/postgres/include/nodes/print.h b/src/postgres/include/nodes/print.h index be5e2287..3c0473fd 100644 --- a/src/postgres/include/nodes/print.h +++ b/src/postgres/include/nodes/print.h @@ -4,7 +4,7 @@ * definitions for nodes/print.c * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/nodes/print.h diff --git a/src/postgres/include/utils/queryjumble.h b/src/postgres/include/nodes/queryjumble.h similarity index 87% rename from src/postgres/include/utils/queryjumble.h rename to src/postgres/include/nodes/queryjumble.h index 3c2d9bea..7649e095 100644 --- a/src/postgres/include/utils/queryjumble.h +++ b/src/postgres/include/nodes/queryjumble.h @@ -3,21 +3,19 @@ * queryjumble.h * Query normalization and fingerprinting. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * src/include/utils/queryjumble.h + * src/include/nodes/queryjumble.h * *------------------------------------------------------------------------- */ -#ifndef QUERYJUBLE_H -#define QUERYJUBLE_H +#ifndef QUERYJUMBLE_H +#define QUERYJUMBLE_H #include "nodes/parsenodes.h" -#define JUMBLE_SIZE 1024 /* query serialization buffer size */ - /* * Struct for tracking locations/lengths of constants during normalization */ @@ -66,7 +64,7 @@ extern PGDLLIMPORT int compute_query_id; extern const char *CleanQuerytext(const char *query, int *location, int *len); -extern JumbleState *JumbleQuery(Query *query, const char *querytext); +extern JumbleState *JumbleQuery(Query *query); extern void EnableQueryId(void); extern PGDLLIMPORT bool query_id_enabled; diff --git a/src/postgres/include/nodes/replnodes.h b/src/postgres/include/nodes/replnodes.h new file mode 100644 index 00000000..4321ba8f --- /dev/null +++ b/src/postgres/include/nodes/replnodes.h @@ -0,0 +1,111 @@ +/*------------------------------------------------------------------------- + * + * replnodes.h + * definitions for replication grammar parse nodes + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/nodes/replnodes.h + * + *------------------------------------------------------------------------- + */ +#ifndef REPLNODES_H +#define REPLNODES_H + +#include "access/xlogdefs.h" +#include "nodes/pg_list.h" + +typedef enum ReplicationKind +{ + REPLICATION_KIND_PHYSICAL, + REPLICATION_KIND_LOGICAL +} ReplicationKind; + + +/* ---------------------- + * IDENTIFY_SYSTEM command + * ---------------------- + */ +typedef struct IdentifySystemCmd +{ + NodeTag type; +} IdentifySystemCmd; + + +/* ---------------------- + * BASE_BACKUP command + * ---------------------- + */ +typedef struct BaseBackupCmd +{ + NodeTag type; + List *options; +} BaseBackupCmd; + + +/* ---------------------- + * CREATE_REPLICATION_SLOT command + * ---------------------- + */ +typedef struct CreateReplicationSlotCmd +{ + NodeTag type; + char *slotname; + ReplicationKind kind; + char *plugin; + bool temporary; + List *options; +} CreateReplicationSlotCmd; + + +/* ---------------------- + * DROP_REPLICATION_SLOT command + * ---------------------- + */ +typedef struct DropReplicationSlotCmd +{ + NodeTag type; + char *slotname; + bool wait; +} DropReplicationSlotCmd; + + +/* ---------------------- + * START_REPLICATION command + * ---------------------- + */ +typedef struct StartReplicationCmd +{ + NodeTag type; + ReplicationKind kind; + char *slotname; + TimeLineID timeline; + XLogRecPtr startpoint; + List *options; +} StartReplicationCmd; + + +/* ---------------------- + * READ_REPLICATION_SLOT command + * ---------------------- + */ +typedef struct ReadReplicationSlotCmd +{ + NodeTag type; + char *slotname; +} ReadReplicationSlotCmd; + + +/* ---------------------- + * TIMELINE_HISTORY command + * ---------------------- + */ +typedef struct TimeLineHistoryCmd +{ + NodeTag type; + TimeLineID timeline; +} TimeLineHistoryCmd; + +#endif /* REPLNODES_H */ diff --git a/src/postgres/include/nodes/supportnodes.h b/src/postgres/include/nodes/supportnodes.h new file mode 100644 index 00000000..4cfa661d --- /dev/null +++ b/src/postgres/include/nodes/supportnodes.h @@ -0,0 +1,346 @@ +/*------------------------------------------------------------------------- + * + * supportnodes.h + * Definitions for planner support functions. + * + * This file defines the API for "planner support functions", which + * are SQL functions (normally written in C) that can be attached to + * another "target" function to give the system additional knowledge + * about the target function. All the current capabilities have to do + * with planning queries that use the target function, though it is + * possible that future extensions will add functionality to be invoked + * by the parser or executor. + * + * A support function must have the SQL signature + * supportfn(internal) returns internal + * The argument is a pointer to one of the Node types defined in this file. + * The result is usually also a Node pointer, though its type depends on + * which capability is being invoked. In all cases, a NULL pointer result + * (that's PG_RETURN_POINTER(NULL), not PG_RETURN_NULL()) indicates that + * the support function cannot do anything useful for the given request. + * Support functions must return a NULL pointer, not fail, if they do not + * recognize the request node type or cannot handle the given case; this + * allows for future extensions of the set of request cases. + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/nodes/supportnodes.h + * + *------------------------------------------------------------------------- + */ +#ifndef SUPPORTNODES_H +#define SUPPORTNODES_H + +#include "nodes/plannodes.h" + +struct PlannerInfo; /* avoid including pathnodes.h here */ +struct IndexOptInfo; +struct SpecialJoinInfo; +struct WindowClause; + +/* + * The Simplify request allows the support function to perform plan-time + * simplification of a call to its target function. For example, a varchar + * length coercion that does not decrease the allowed length of its argument + * could be replaced by a RelabelType node, or "x + 0" could be replaced by + * "x". This is invoked during the planner's constant-folding pass, so the + * function's arguments can be presumed already simplified. + * + * The planner's PlannerInfo "root" is typically not needed, but can be + * consulted if it's necessary to obtain info about Vars present in + * the given node tree. Beware that root could be NULL in some usages. + * + * "fcall" will be a FuncExpr invoking the support function's target + * function. (This is true even if the original parsetree node was an + * operator call; a FuncExpr is synthesized for this purpose.) + * + * The result should be a semantically-equivalent transformed node tree, + * or NULL if no simplification could be performed. Do *not* return or + * modify *fcall, as it isn't really a separately allocated Node. But + * it's okay to use fcall->args, or parts of it, in the result tree. + */ +typedef struct SupportRequestSimplify +{ + NodeTag type; + + struct PlannerInfo *root; /* Planner's infrastructure */ + FuncExpr *fcall; /* Function call to be simplified */ +} SupportRequestSimplify; + +/* + * The Selectivity request allows the support function to provide a + * selectivity estimate for a function appearing at top level of a WHERE + * clause (so it applies only to functions returning boolean). + * + * The input arguments are the same as are supplied to operator restriction + * and join estimators, except that we unify those two APIs into just one + * request type. See clause_selectivity() for the details. + * + * If an estimate can be made, store it into the "selectivity" field and + * return the address of the SupportRequestSelectivity node; the estimate + * must be between 0 and 1 inclusive. Return NULL if no estimate can be + * made (in which case the planner will fall back to a default estimate, + * traditionally 1/3). + * + * If the target function is being used as the implementation of an operator, + * the support function will not be used for this purpose; the operator's + * restriction or join estimator is consulted instead. + */ +typedef struct SupportRequestSelectivity +{ + NodeTag type; + + /* Input fields: */ + struct PlannerInfo *root; /* Planner's infrastructure */ + Oid funcid; /* function we are inquiring about */ + List *args; /* pre-simplified arguments to function */ + Oid inputcollid; /* function's input collation */ + bool is_join; /* is this a join or restriction case? */ + int varRelid; /* if restriction, RTI of target relation */ + JoinType jointype; /* if join, outer join type */ + struct SpecialJoinInfo *sjinfo; /* if outer join, info about join */ + + /* Output fields: */ + Selectivity selectivity; /* returned selectivity estimate */ +} SupportRequestSelectivity; + +/* + * The Cost request allows the support function to provide an execution + * cost estimate for its target function. The cost estimate can include + * both a one-time (query startup) component and a per-execution component. + * The estimate should *not* include the costs of evaluating the target + * function's arguments, only the target function itself. + * + * The "node" argument is normally the parse node that is invoking the + * target function. This is a FuncExpr in the simplest case, but it could + * also be an OpExpr, DistinctExpr, NullIfExpr, or WindowFunc, or possibly + * other cases in future. NULL is passed if the function cannot presume + * its arguments to be equivalent to what the calling node presents as + * arguments; that happens for, e.g., aggregate support functions and + * per-column comparison operators used by RowExprs. + * + * If an estimate can be made, store it into the cost fields and return the + * address of the SupportRequestCost node. Return NULL if no estimate can be + * made, in which case the planner will rely on the target function's procost + * field. (Note: while procost is automatically scaled by cpu_operator_cost, + * this is not the case for the outputs of the Cost request; the support + * function must scale its results appropriately on its own.) + */ +typedef struct SupportRequestCost +{ + NodeTag type; + + /* Input fields: */ + struct PlannerInfo *root; /* Planner's infrastructure (could be NULL) */ + Oid funcid; /* function we are inquiring about */ + Node *node; /* parse node invoking function, or NULL */ + + /* Output fields: */ + Cost startup; /* one-time cost */ + Cost per_tuple; /* per-evaluation cost */ +} SupportRequestCost; + +/* + * The Rows request allows the support function to provide an output rowcount + * estimate for its target function (so it applies only to set-returning + * functions). + * + * The "node" argument is the parse node that is invoking the target function; + * currently this will always be a FuncExpr or OpExpr. + * + * If an estimate can be made, store it into the rows field and return the + * address of the SupportRequestRows node. Return NULL if no estimate can be + * made, in which case the planner will rely on the target function's prorows + * field. + */ +typedef struct SupportRequestRows +{ + NodeTag type; + + /* Input fields: */ + struct PlannerInfo *root; /* Planner's infrastructure (could be NULL) */ + Oid funcid; /* function we are inquiring about */ + Node *node; /* parse node invoking function */ + + /* Output fields: */ + double rows; /* number of rows expected to be returned */ +} SupportRequestRows; + +/* + * The IndexCondition request allows the support function to generate + * a directly-indexable condition based on a target function call that is + * not itself indexable. The target function call must appear at the top + * level of WHERE or JOIN/ON, so this applies only to functions returning + * boolean. + * + * The "node" argument is the parse node that is invoking the target function; + * currently this will always be a FuncExpr or OpExpr. The call is made + * only if at least one function argument matches an index column's variable + * or expression. "indexarg" identifies the matching argument (it's the + * argument's zero-based index in the node's args list). + * + * If the transformation is possible, return a List of directly-indexable + * condition expressions, else return NULL. (A List is used because it's + * sometimes useful to generate more than one indexable condition, such as + * when a LIKE with constant prefix gives rise to both >= and < conditions.) + * + * "Directly indexable" means that the condition must be directly executable + * by the index machinery. Typically this means that it is a binary OpExpr + * with the index column value on the left, a pseudo-constant on the right, + * and an operator that is in the index column's operator family. Other + * possibilities include RowCompareExpr, ScalarArrayOpExpr, and NullTest, + * depending on the index type; but those seem less likely to be useful for + * derived index conditions. "Pseudo-constant" means that the right-hand + * expression must not contain any volatile functions, nor any Vars of the + * table the index is for; use is_pseudo_constant_for_index() to check this. + * (Note: if the passed "node" is an OpExpr, the core planner already verified + * that the non-indexkey operand is pseudo-constant; but when the "node" + * is a FuncExpr, it does not check, since it doesn't know which of the + * function's arguments you might need to use in an index comparison value.) + * + * In many cases, an index condition can be generated but it is weaker than + * the function condition itself; for example, a LIKE with a constant prefix + * can produce an index range check based on the prefix, but we still need + * to execute the LIKE operator to verify the rest of the pattern. We say + * that such an index condition is "lossy". When returning an index condition, + * you should set the "lossy" request field to true if the condition is lossy, + * or false if it is an exact equivalent of the function's result. The core + * code will initialize that field to true, which is the common case. + * + * It is important to verify that the index operator family is the correct + * one for the condition you want to generate. Core support functions tend + * to use the known OID of a built-in opfamily for this, but extensions need + * to work harder, since their OIDs aren't fixed. A possibly workable + * answer for an index on an extension datatype is to verify the index AM's + * OID instead, and then assume that there's only one relevant opclass for + * your datatype so the opfamily must be the right one. Generating OpExpr + * nodes may also require knowing extension datatype OIDs (often you can + * find these out by applying exprType() to a function argument) and + * operator OIDs (which you can look up using get_opfamily_member). + */ +typedef struct SupportRequestIndexCondition +{ + NodeTag type; + + /* Input fields: */ + struct PlannerInfo *root; /* Planner's infrastructure */ + Oid funcid; /* function we are inquiring about */ + Node *node; /* parse node invoking function */ + int indexarg; /* index of function arg matching indexcol */ + struct IndexOptInfo *index; /* planner's info about target index */ + int indexcol; /* index of target index column (0-based) */ + Oid opfamily; /* index column's operator family */ + Oid indexcollation; /* index column's collation */ + + /* Output fields: */ + bool lossy; /* set to false if index condition is an exact + * equivalent of the function call */ +} SupportRequestIndexCondition; + +/* ---------- + * To support more efficient query execution of any monotonically increasing + * and/or monotonically decreasing window functions, we support calling the + * window function's prosupport function passing along this struct whenever + * the planner sees an OpExpr qual directly reference a window function in a + * subquery. When the planner encounters this, we populate this struct and + * pass it along to the window function's prosupport function so that it can + * evaluate if the given WindowFunc is; + * + * a) monotonically increasing, or + * b) monotonically decreasing, or + * c) both monotonically increasing and decreasing, or + * d) none of the above. + * + * A function that is monotonically increasing can never return a value that + * is lower than a value returned in a "previous call". A monotonically + * decreasing function can never return a value higher than a value returned + * in a previous call. A function that is both must return the same value + * each time. + * + * We define "previous call" to mean a previous call to the same WindowFunc + * struct in the same window partition. + * + * row_number() is an example of a monotonically increasing function. The + * return value will be reset back to 1 in each new partition. An example of + * a monotonically increasing and decreasing function is COUNT(*) OVER (). + * Since there is no ORDER BY clause in this example, all rows in the + * partition are peers and all rows within the partition will be within the + * frame bound. Likewise for COUNT(*) OVER(ORDER BY a ROWS BETWEEN UNBOUNDED + * PRECEDING AND UNBOUNDED FOLLOWING). + * + * COUNT(*) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + * is an example of a monotonically decreasing function. + * + * Implementations must only concern themselves with the given WindowFunc + * being monotonic in a single partition. + * + * Inputs: + * 'window_func' is the pointer to the window function being called. + * + * 'window_clause' pointer to the WindowClause data. Support functions can + * use this to check frame bounds, etc. + * + * Outputs: + * 'monotonic' the resulting MonotonicFunction value for the given input + * window function and window clause. + * ---------- + */ +typedef struct SupportRequestWFuncMonotonic +{ + NodeTag type; + + /* Input fields: */ + WindowFunc *window_func; /* Pointer to the window function data */ + struct WindowClause *window_clause; /* Pointer to the window clause data */ + + /* Output fields: */ + MonotonicFunction monotonic; +} SupportRequestWFuncMonotonic; + +/* + * Some WindowFunc behavior might not be affected by certain variations in + * the WindowClause's frameOptions. For example, row_number() is coded in + * such a way that the frame options don't change the returned row number. + * nodeWindowAgg.c will have less work to do if the ROWS option is used + * instead of the RANGE option as no check needs to be done for peer rows. + * Since RANGE is included in the default frame options, window functions + * such as row_number() might want to change that to ROW. + * + * Here we allow a WindowFunc's support function to determine which, if + * anything, can be changed about the WindowClause which the WindowFunc + * belongs to. Currently only the frameOptions can be modified. However, + * we may want to allow more optimizations in the future. + * + * The support function is responsible for ensuring the optimized version of + * the frameOptions doesn't affect the result of the window function. The + * planner is responsible for only changing the frame options when all + * WindowFuncs using this particular WindowClause agree on what the optimized + * version of the frameOptions are. If a particular WindowFunc being used + * does not have a support function then the planner will not make any changes + * to the WindowClause's frameOptions. + * + * 'window_func' and 'window_clause' are set by the planner before calling the + * support function so that the support function has these fields available. + * These may be required in order to determine which optimizations are + * possible. + * + * 'frameOptions' is set by the planner to WindowClause.frameOptions. The + * support function must only adjust this if optimizations are possible for + * the given WindowFunc. + */ +typedef struct SupportRequestOptimizeWindowClause +{ + NodeTag type; + + /* Input fields: */ + WindowFunc *window_func; /* Pointer to the window function data */ + struct WindowClause *window_clause; /* Pointer to the window clause data */ + + /* Input/Output fields: */ + int frameOptions; /* New frameOptions, or left untouched if no + * optimizations are possible. */ +} SupportRequestOptimizeWindowClause; + +#endif /* SUPPORTNODES_H */ diff --git a/src/postgres/include/nodes/tidbitmap.h b/src/postgres/include/nodes/tidbitmap.h index 64ed8d16..b64e3643 100644 --- a/src/postgres/include/nodes/tidbitmap.h +++ b/src/postgres/include/nodes/tidbitmap.h @@ -13,7 +13,7 @@ * fact that a particular page needs to be visited. * * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * src/include/nodes/tidbitmap.h * diff --git a/src/postgres/include/nodes/value.h b/src/postgres/include/nodes/value.h index eaf93705..b24c4c1a 100644 --- a/src/postgres/include/nodes/value.h +++ b/src/postgres/include/nodes/value.h @@ -4,7 +4,7 @@ * interface for value nodes * * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * src/include/nodes/value.h * @@ -27,6 +27,8 @@ typedef struct Integer { + pg_node_attr(special_read_write) + NodeTag type; int ival; } Integer; @@ -44,24 +46,32 @@ typedef struct Integer */ typedef struct Float { + pg_node_attr(special_read_write) + NodeTag type; char *fval; } Float; typedef struct Boolean { + pg_node_attr(special_read_write) + NodeTag type; bool boolval; } Boolean; typedef struct String { + pg_node_attr(special_read_write) + NodeTag type; char *sval; } String; typedef struct BitString { + pg_node_attr(special_read_write) + NodeTag type; char *bsval; } BitString; @@ -73,7 +83,7 @@ typedef struct BitString extern Integer *makeInteger(int i); extern Float *makeFloat(char *numericStr); -extern Boolean *makeBoolean(bool var); +extern Boolean *makeBoolean(bool val); extern String *makeString(char *str); extern BitString *makeBitString(char *str); diff --git a/src/postgres/include/optimizer/cost.h b/src/postgres/include/optimizer/cost.h index bc12071a..6cf49705 100644 --- a/src/postgres/include/optimizer/cost.h +++ b/src/postgres/include/optimizer/cost.h @@ -4,7 +4,7 @@ * prototypes for costsize.c and clausesel.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/cost.h @@ -68,6 +68,7 @@ extern PGDLLIMPORT bool enable_partitionwise_aggregate; extern PGDLLIMPORT bool enable_parallel_append; extern PGDLLIMPORT bool enable_parallel_hash; extern PGDLLIMPORT bool enable_partition_pruning; +extern PGDLLIMPORT bool enable_presorted_aggregate; extern PGDLLIMPORT bool enable_async_append; extern PGDLLIMPORT int constraint_exclusion; @@ -91,7 +92,8 @@ extern void cost_tidrangescan(Path *path, PlannerInfo *root, RelOptInfo *baserel, List *tidrangequals, ParamPathInfo *param_info); extern void cost_subqueryscan(SubqueryScanPath *path, PlannerInfo *root, - RelOptInfo *baserel, ParamPathInfo *param_info); + RelOptInfo *baserel, ParamPathInfo *param_info, + bool trivial_pathtarget); extern void cost_functionscan(Path *path, PlannerInfo *root, RelOptInfo *baserel, ParamPathInfo *param_info); extern void cost_valuesscan(Path *path, PlannerInfo *root, @@ -114,7 +116,7 @@ extern void cost_incremental_sort(Path *path, Cost input_startup_cost, Cost input_total_cost, double input_tuples, int width, Cost comparison_cost, int sort_mem, double limit_tuples); -extern void cost_append(AppendPath *path); +extern void cost_append(AppendPath *apath); extern void cost_merge_append(Path *path, PlannerInfo *root, List *pathkeys, int n_streams, Cost input_startup_cost, Cost input_total_cost, @@ -166,7 +168,7 @@ extern void final_cost_hashjoin(PlannerInfo *root, HashPath *path, JoinCostWorkspace *workspace, JoinPathExtraData *extra); extern void cost_gather(GatherPath *path, PlannerInfo *root, - RelOptInfo *baserel, ParamPathInfo *param_info, double *rows); + RelOptInfo *rel, ParamPathInfo *param_info, double *rows); extern void cost_gather_merge(GatherMergePath *path, PlannerInfo *root, RelOptInfo *rel, ParamPathInfo *param_info, Cost input_startup_cost, Cost input_total_cost, diff --git a/src/postgres/include/optimizer/geqo.h b/src/postgres/include/optimizer/geqo.h index d3993233..c7981973 100644 --- a/src/postgres/include/optimizer/geqo.h +++ b/src/postgres/include/optimizer/geqo.h @@ -3,7 +3,7 @@ * geqo.h * prototypes for various files in optimizer/geqo * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/geqo.h diff --git a/src/postgres/include/optimizer/geqo_gene.h b/src/postgres/include/optimizer/geqo_gene.h index 414f54d1..40256a4c 100644 --- a/src/postgres/include/optimizer/geqo_gene.h +++ b/src/postgres/include/optimizer/geqo_gene.h @@ -3,7 +3,7 @@ * geqo_gene.h * genome representation in optimizer/geqo * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/geqo_gene.h diff --git a/src/postgres/include/optimizer/optimizer.h b/src/postgres/include/optimizer/optimizer.h index 409005ba..514746c5 100644 --- a/src/postgres/include/optimizer/optimizer.h +++ b/src/postgres/include/optimizer/optimizer.h @@ -12,7 +12,7 @@ * example. For the most part, however, code outside the core planner * should not need to include any optimizer/ header except this one. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/optimizer.h @@ -99,16 +99,16 @@ extern bool is_pseudo_constant_for_index(PlannerInfo *root, Node *expr, /* in plan/planner.c: */ -/* possible values for force_parallel_mode */ +/* possible values for debug_parallel_query */ typedef enum { - FORCE_PARALLEL_OFF, - FORCE_PARALLEL_ON, - FORCE_PARALLEL_REGRESS -} ForceParallelMode; + DEBUG_PARALLEL_OFF, + DEBUG_PARALLEL_ON, + DEBUG_PARALLEL_REGRESS +} DebugParallelMode; /* GUC parameters */ -extern PGDLLIMPORT int force_parallel_mode; +extern PGDLLIMPORT int debug_parallel_query; extern PGDLLIMPORT bool parallel_leader_participation; extern struct PlannedStmt *planner(Query *parse, const char *query_string, @@ -197,6 +197,6 @@ extern bool contain_var_clause(Node *node); extern bool contain_vars_of_level(Node *node, int levelsup); extern int locate_var_of_level(Node *node, int levelsup); extern List *pull_var_clause(Node *node, int flags); -extern Node *flatten_join_alias_vars(Query *query, Node *node); +extern Node *flatten_join_alias_vars(PlannerInfo *root, Query *query, Node *node); #endif /* OPTIMIZER_H */ diff --git a/src/postgres/include/optimizer/paths.h b/src/postgres/include/optimizer/paths.h index e313eb21..50bc3b50 100644 --- a/src/postgres/include/optimizer/paths.h +++ b/src/postgres/include/optimizer/paths.h @@ -4,7 +4,7 @@ * prototypes for various files in optimizer/path * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/paths.h @@ -104,6 +104,9 @@ extern void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel, extern void join_search_one_level(PlannerInfo *root, int level); extern RelOptInfo *make_join_rel(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2); +extern Relids add_outer_joins_to_relids(PlannerInfo *root, Relids input_relids, + SpecialJoinInfo *sjinfo, + List **pushed_down_joins); extern bool have_join_order_restriction(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2); extern bool have_dangerous_phv(PlannerInfo *root, @@ -122,13 +125,12 @@ typedef bool (*ec_matches_callback_type) (PlannerInfo *root, extern bool process_equivalence(PlannerInfo *root, RestrictInfo **p_restrictinfo, - bool below_outer_join); + JoinDomain *jdomain); extern Expr *canonicalize_ec_expression(Expr *expr, Oid req_type, Oid req_collation); extern void reconsider_outer_join_clauses(PlannerInfo *root); extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root, Expr *expr, - Relids nullable_relids, List *opfamilies, Oid opcintype, Oid collation, @@ -150,7 +152,8 @@ extern void generate_base_implied_equalities(PlannerInfo *root); extern List *generate_join_implied_equalities(PlannerInfo *root, Relids join_relids, Relids outer_relids, - RelOptInfo *inner_rel); + RelOptInfo *inner_rel, + SpecialJoinInfo *sjinfo); extern List *generate_join_implied_equalities_for_ecs(PlannerInfo *root, List *eclasses, Relids join_relids, @@ -169,8 +172,8 @@ extern void add_child_rel_equivalences(PlannerInfo *root, extern void add_child_join_rel_equivalences(PlannerInfo *root, int nappinfos, AppendRelInfo **appinfos, - RelOptInfo *parent_rel, - RelOptInfo *child_rel); + RelOptInfo *parent_joinrel, + RelOptInfo *child_joinrel); extern List *generate_implied_equalities_for_column(PlannerInfo *root, RelOptInfo *rel, ec_matches_callback_type callback, @@ -216,7 +219,7 @@ extern List *build_index_pathkeys(PlannerInfo *root, IndexOptInfo *index, extern List *build_partition_pathkeys(PlannerInfo *root, RelOptInfo *partrel, ScanDirection scandir, bool *partialkeys); extern List *build_expression_pathkey(PlannerInfo *root, Expr *expr, - Relids nullable_relids, Oid opno, + Oid opno, Relids rel, bool create_it); extern List *convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, List *subquery_pathkeys, @@ -228,6 +231,11 @@ extern List *build_join_pathkeys(PlannerInfo *root, extern List *make_pathkeys_for_sortclauses(PlannerInfo *root, List *sortclauses, List *tlist); +extern List *make_pathkeys_for_sortclauses_extended(PlannerInfo *root, + List **sortclauses, + List *tlist, + bool remove_redundant, + bool *sortable); extern void initialize_mergeclause_eclasses(PlannerInfo *root, RestrictInfo *restrictinfo); extern void update_mergeclause_eclasses(PlannerInfo *root, @@ -248,6 +256,7 @@ extern List *truncate_useless_pathkeys(PlannerInfo *root, RelOptInfo *rel, List *pathkeys); extern bool has_useful_pathkeys(PlannerInfo *root, RelOptInfo *rel); +extern List *append_pathkeys(List *target, List *source); extern PathKey *make_canonical_pathkey(PlannerInfo *root, EquivalenceClass *eclass, Oid opfamily, int strategy, bool nulls_first); diff --git a/src/postgres/include/optimizer/planmain.h b/src/postgres/include/optimizer/planmain.h index c4f61c1a..5fc90073 100644 --- a/src/postgres/include/optimizer/planmain.h +++ b/src/postgres/include/optimizer/planmain.h @@ -4,7 +4,7 @@ * prototypes for various files in optimizer/plan * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/optimizer/planmain.h @@ -71,7 +71,7 @@ extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode); extern void add_other_rels_to_query(PlannerInfo *root); extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist); extern void add_vars_to_targetlist(PlannerInfo *root, List *vars, - Relids where_needed, bool create_new_ph); + Relids where_needed); extern void find_lateral_references(PlannerInfo *root); extern void create_lateral_join_info(PlannerInfo *root); extern List *deconstruct_jointree(PlannerInfo *root); @@ -83,9 +83,7 @@ extern RestrictInfo *process_implied_equality(PlannerInfo *root, Expr *item1, Expr *item2, Relids qualscope, - Relids nullable_relids, Index security_level, - bool below_outer_join, bool both_const); extern RestrictInfo *build_implied_join_equality(PlannerInfo *root, Oid opno, @@ -93,7 +91,6 @@ extern RestrictInfo *build_implied_join_equality(PlannerInfo *root, Expr *item1, Expr *item2, Relids qualscope, - Relids nullable_relids, Index security_level); extern void match_foreign_keys_to_quals(PlannerInfo *root); @@ -115,6 +112,6 @@ extern Plan *set_plan_references(PlannerInfo *root, Plan *plan); extern bool trivial_subqueryscan(SubqueryScan *plan); extern void record_plan_function_dependency(PlannerInfo *root, Oid funcid); extern void record_plan_type_dependency(PlannerInfo *root, Oid typid); -extern bool extract_query_dependencies_walker(Node *node, PlannerInfo *root); +extern bool extract_query_dependencies_walker(Node *node, PlannerInfo *context); #endif /* PLANMAIN_H */ diff --git a/src/postgres/include/parser/analyze.h b/src/postgres/include/parser/analyze.h index dc379547..c96483ae 100644 --- a/src/postgres/include/parser/analyze.h +++ b/src/postgres/include/parser/analyze.h @@ -4,7 +4,7 @@ * parse analysis for optimizable statements * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/analyze.h @@ -15,8 +15,8 @@ #define ANALYZE_H #include "nodes/params.h" +#include "nodes/queryjumble.h" #include "parser/parse_node.h" -#include "utils/queryjumble.h" /* Hook for plugins to get control at end of parse analysis */ typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, @@ -43,10 +43,11 @@ extern List *transformInsertRow(ParseState *pstate, List *exprlist, List *stmtcols, List *icolumns, List *attrnos, bool strip_indirection); extern List *transformUpdateTargetList(ParseState *pstate, - List *targetList); + List *origTlist); extern Query *transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree); extern Query *transformStmt(ParseState *pstate, Node *parseTree); +extern bool stmt_requires_parse_analysis(RawStmt *parseTree); extern bool analyze_requires_snapshot(RawStmt *parseTree); extern const char *LCS_asString(LockClauseStrength strength); diff --git a/src/postgres/include/parser/gram.h b/src/postgres/include/parser/gram.h deleted file mode 100644 index 70a82065..00000000 --- a/src/postgres/include/parser/gram.h +++ /dev/null @@ -1,1101 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.3. */ - -/* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - 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 2, 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* 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. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - IDENT = 258, - UIDENT = 259, - FCONST = 260, - SCONST = 261, - USCONST = 262, - BCONST = 263, - XCONST = 264, - Op = 265, - ICONST = 266, - PARAM = 267, - TYPECAST = 268, - DOT_DOT = 269, - COLON_EQUALS = 270, - EQUALS_GREATER = 271, - LESS_EQUALS = 272, - GREATER_EQUALS = 273, - NOT_EQUALS = 274, - SQL_COMMENT = 275, - C_COMMENT = 276, - ABORT_P = 277, - ABSOLUTE_P = 278, - ACCESS = 279, - ACTION = 280, - ADD_P = 281, - ADMIN = 282, - AFTER = 283, - AGGREGATE = 284, - ALL = 285, - ALSO = 286, - ALTER = 287, - ALWAYS = 288, - ANALYSE = 289, - ANALYZE = 290, - AND = 291, - ANY = 292, - ARRAY = 293, - AS = 294, - ASC = 295, - ASENSITIVE = 296, - ASSERTION = 297, - ASSIGNMENT = 298, - ASYMMETRIC = 299, - ATOMIC = 300, - AT = 301, - ATTACH = 302, - ATTRIBUTE = 303, - AUTHORIZATION = 304, - BACKWARD = 305, - BEFORE = 306, - BEGIN_P = 307, - BETWEEN = 308, - BIGINT = 309, - BINARY = 310, - BIT = 311, - BOOLEAN_P = 312, - BOTH = 313, - BREADTH = 314, - BY = 315, - CACHE = 316, - CALL = 317, - CALLED = 318, - CASCADE = 319, - CASCADED = 320, - CASE = 321, - CAST = 322, - CATALOG_P = 323, - CHAIN = 324, - CHAR_P = 325, - CHARACTER = 326, - CHARACTERISTICS = 327, - CHECK = 328, - CHECKPOINT = 329, - CLASS = 330, - CLOSE = 331, - CLUSTER = 332, - COALESCE = 333, - COLLATE = 334, - COLLATION = 335, - COLUMN = 336, - COLUMNS = 337, - COMMENT = 338, - COMMENTS = 339, - COMMIT = 340, - COMMITTED = 341, - COMPRESSION = 342, - CONCURRENTLY = 343, - CONFIGURATION = 344, - CONFLICT = 345, - CONNECTION = 346, - CONSTRAINT = 347, - CONSTRAINTS = 348, - CONTENT_P = 349, - CONTINUE_P = 350, - CONVERSION_P = 351, - COPY = 352, - COST = 353, - CREATE = 354, - CROSS = 355, - CSV = 356, - CUBE = 357, - CURRENT_P = 358, - CURRENT_CATALOG = 359, - CURRENT_DATE = 360, - CURRENT_ROLE = 361, - CURRENT_SCHEMA = 362, - CURRENT_TIME = 363, - CURRENT_TIMESTAMP = 364, - CURRENT_USER = 365, - CURSOR = 366, - CYCLE = 367, - DATA_P = 368, - DATABASE = 369, - DAY_P = 370, - DEALLOCATE = 371, - DEC = 372, - DECIMAL_P = 373, - DECLARE = 374, - DEFAULT = 375, - DEFAULTS = 376, - DEFERRABLE = 377, - DEFERRED = 378, - DEFINER = 379, - DELETE_P = 380, - DELIMITER = 381, - DELIMITERS = 382, - DEPENDS = 383, - DEPTH = 384, - DESC = 385, - DETACH = 386, - DICTIONARY = 387, - DISABLE_P = 388, - DISCARD = 389, - DISTINCT = 390, - DO = 391, - DOCUMENT_P = 392, - DOMAIN_P = 393, - DOUBLE_P = 394, - DROP = 395, - EACH = 396, - ELSE = 397, - ENABLE_P = 398, - ENCODING = 399, - ENCRYPTED = 400, - END_P = 401, - ENUM_P = 402, - ESCAPE = 403, - EVENT = 404, - EXCEPT = 405, - EXCLUDE = 406, - EXCLUDING = 407, - EXCLUSIVE = 408, - EXECUTE = 409, - EXISTS = 410, - EXPLAIN = 411, - EXPRESSION = 412, - EXTENSION = 413, - EXTERNAL = 414, - EXTRACT = 415, - FALSE_P = 416, - FAMILY = 417, - FETCH = 418, - FILTER = 419, - FINALIZE = 420, - FIRST_P = 421, - FLOAT_P = 422, - FOLLOWING = 423, - FOR = 424, - FORCE = 425, - FOREIGN = 426, - FORWARD = 427, - FREEZE = 428, - FROM = 429, - FULL = 430, - FUNCTION = 431, - FUNCTIONS = 432, - GENERATED = 433, - GLOBAL = 434, - GRANT = 435, - GRANTED = 436, - GREATEST = 437, - GROUP_P = 438, - GROUPING = 439, - GROUPS = 440, - HANDLER = 441, - HAVING = 442, - HEADER_P = 443, - HOLD = 444, - HOUR_P = 445, - IDENTITY_P = 446, - IF_P = 447, - ILIKE = 448, - IMMEDIATE = 449, - IMMUTABLE = 450, - IMPLICIT_P = 451, - IMPORT_P = 452, - IN_P = 453, - INCLUDE = 454, - INCLUDING = 455, - INCREMENT = 456, - INDEX = 457, - INDEXES = 458, - INHERIT = 459, - INHERITS = 460, - INITIALLY = 461, - INLINE_P = 462, - INNER_P = 463, - INOUT = 464, - INPUT_P = 465, - INSENSITIVE = 466, - INSERT = 467, - INSTEAD = 468, - INT_P = 469, - INTEGER = 470, - INTERSECT = 471, - INTERVAL = 472, - INTO = 473, - INVOKER = 474, - IS = 475, - ISNULL = 476, - ISOLATION = 477, - JOIN = 478, - KEY = 479, - LABEL = 480, - LANGUAGE = 481, - LARGE_P = 482, - LAST_P = 483, - LATERAL_P = 484, - LEADING = 485, - LEAKPROOF = 486, - LEAST = 487, - LEFT = 488, - LEVEL = 489, - LIKE = 490, - LIMIT = 491, - LISTEN = 492, - LOAD = 493, - LOCAL = 494, - LOCALTIME = 495, - LOCALTIMESTAMP = 496, - LOCATION = 497, - LOCK_P = 498, - LOCKED = 499, - LOGGED = 500, - MAPPING = 501, - MATCH = 502, - MATCHED = 503, - MATERIALIZED = 504, - MAXVALUE = 505, - MERGE = 506, - METHOD = 507, - MINUTE_P = 508, - MINVALUE = 509, - MODE = 510, - MONTH_P = 511, - MOVE = 512, - NAME_P = 513, - NAMES = 514, - NATIONAL = 515, - NATURAL = 516, - NCHAR = 517, - NEW = 518, - NEXT = 519, - NFC = 520, - NFD = 521, - NFKC = 522, - NFKD = 523, - NO = 524, - NONE = 525, - NORMALIZE = 526, - NORMALIZED = 527, - NOT = 528, - NOTHING = 529, - NOTIFY = 530, - NOTNULL = 531, - NOWAIT = 532, - NULL_P = 533, - NULLIF = 534, - NULLS_P = 535, - NUMERIC = 536, - OBJECT_P = 537, - OF = 538, - OFF = 539, - OFFSET = 540, - OIDS = 541, - OLD = 542, - ON = 543, - ONLY = 544, - OPERATOR = 545, - OPTION = 546, - OPTIONS = 547, - OR = 548, - ORDER = 549, - ORDINALITY = 550, - OTHERS = 551, - OUT_P = 552, - OUTER_P = 553, - OVER = 554, - OVERLAPS = 555, - OVERLAY = 556, - OVERRIDING = 557, - OWNED = 558, - OWNER = 559, - PARALLEL = 560, - PARAMETER = 561, - PARSER = 562, - PARTIAL = 563, - PARTITION = 564, - PASSING = 565, - PASSWORD = 566, - PLACING = 567, - PLANS = 568, - POLICY = 569, - POSITION = 570, - PRECEDING = 571, - PRECISION = 572, - PRESERVE = 573, - PREPARE = 574, - PREPARED = 575, - PRIMARY = 576, - PRIOR = 577, - PRIVILEGES = 578, - PROCEDURAL = 579, - PROCEDURE = 580, - PROCEDURES = 581, - PROGRAM = 582, - PUBLICATION = 583, - QUOTE = 584, - RANGE = 585, - READ = 586, - REAL = 587, - REASSIGN = 588, - RECHECK = 589, - RECURSIVE = 590, - REF_P = 591, - REFERENCES = 592, - REFERENCING = 593, - REFRESH = 594, - REINDEX = 595, - RELATIVE_P = 596, - RELEASE = 597, - RENAME = 598, - REPEATABLE = 599, - REPLACE = 600, - REPLICA = 601, - RESET = 602, - RESTART = 603, - RESTRICT = 604, - RETURN = 605, - RETURNING = 606, - RETURNS = 607, - REVOKE = 608, - RIGHT = 609, - ROLE = 610, - ROLLBACK = 611, - ROLLUP = 612, - ROUTINE = 613, - ROUTINES = 614, - ROW = 615, - ROWS = 616, - RULE = 617, - SAVEPOINT = 618, - SCHEMA = 619, - SCHEMAS = 620, - SCROLL = 621, - SEARCH = 622, - SECOND_P = 623, - SECURITY = 624, - SELECT = 625, - SEQUENCE = 626, - SEQUENCES = 627, - SERIALIZABLE = 628, - SERVER = 629, - SESSION = 630, - SESSION_USER = 631, - SET = 632, - SETS = 633, - SETOF = 634, - SHARE = 635, - SHOW = 636, - SIMILAR = 637, - SIMPLE = 638, - SKIP = 639, - SMALLINT = 640, - SNAPSHOT = 641, - SOME = 642, - SQL_P = 643, - STABLE = 644, - STANDALONE_P = 645, - START = 646, - STATEMENT = 647, - STATISTICS = 648, - STDIN = 649, - STDOUT = 650, - STORAGE = 651, - STORED = 652, - STRICT_P = 653, - STRIP_P = 654, - SUBSCRIPTION = 655, - SUBSTRING = 656, - SUPPORT = 657, - SYMMETRIC = 658, - SYSID = 659, - SYSTEM_P = 660, - TABLE = 661, - TABLES = 662, - TABLESAMPLE = 663, - TABLESPACE = 664, - TEMP = 665, - TEMPLATE = 666, - TEMPORARY = 667, - TEXT_P = 668, - THEN = 669, - TIES = 670, - TIME = 671, - TIMESTAMP = 672, - TO = 673, - TRAILING = 674, - TRANSACTION = 675, - TRANSFORM = 676, - TREAT = 677, - TRIGGER = 678, - TRIM = 679, - TRUE_P = 680, - TRUNCATE = 681, - TRUSTED = 682, - TYPE_P = 683, - TYPES_P = 684, - UESCAPE = 685, - UNBOUNDED = 686, - UNCOMMITTED = 687, - UNENCRYPTED = 688, - UNION = 689, - UNIQUE = 690, - UNKNOWN = 691, - UNLISTEN = 692, - UNLOGGED = 693, - UNTIL = 694, - UPDATE = 695, - USER = 696, - USING = 697, - VACUUM = 698, - VALID = 699, - VALIDATE = 700, - VALIDATOR = 701, - VALUE_P = 702, - VALUES = 703, - VARCHAR = 704, - VARIADIC = 705, - VARYING = 706, - VERBOSE = 707, - VERSION_P = 708, - VIEW = 709, - VIEWS = 710, - VOLATILE = 711, - WHEN = 712, - WHERE = 713, - WHITESPACE_P = 714, - WINDOW = 715, - WITH = 716, - WITHIN = 717, - WITHOUT = 718, - WORK = 719, - WRAPPER = 720, - WRITE = 721, - XML_P = 722, - XMLATTRIBUTES = 723, - XMLCONCAT = 724, - XMLELEMENT = 725, - XMLEXISTS = 726, - XMLFOREST = 727, - XMLNAMESPACES = 728, - XMLPARSE = 729, - XMLPI = 730, - XMLROOT = 731, - XMLSERIALIZE = 732, - XMLTABLE = 733, - YEAR_P = 734, - YES_P = 735, - ZONE = 736, - NOT_LA = 737, - NULLS_LA = 738, - WITH_LA = 739, - MODE_TYPE_NAME = 740, - MODE_PLPGSQL_EXPR = 741, - MODE_PLPGSQL_ASSIGN1 = 742, - MODE_PLPGSQL_ASSIGN2 = 743, - MODE_PLPGSQL_ASSIGN3 = 744, - UMINUS = 745 - }; -#endif -/* Tokens. */ -#define IDENT 258 -#define UIDENT 259 -#define FCONST 260 -#define SCONST 261 -#define USCONST 262 -#define BCONST 263 -#define XCONST 264 -#define Op 265 -#define ICONST 266 -#define PARAM 267 -#define TYPECAST 268 -#define DOT_DOT 269 -#define COLON_EQUALS 270 -#define EQUALS_GREATER 271 -#define LESS_EQUALS 272 -#define GREATER_EQUALS 273 -#define NOT_EQUALS 274 -#define SQL_COMMENT 275 -#define C_COMMENT 276 -#define ABORT_P 277 -#define ABSOLUTE_P 278 -#define ACCESS 279 -#define ACTION 280 -#define ADD_P 281 -#define ADMIN 282 -#define AFTER 283 -#define AGGREGATE 284 -#define ALL 285 -#define ALSO 286 -#define ALTER 287 -#define ALWAYS 288 -#define ANALYSE 289 -#define ANALYZE 290 -#define AND 291 -#define ANY 292 -#define ARRAY 293 -#define AS 294 -#define ASC 295 -#define ASENSITIVE 296 -#define ASSERTION 297 -#define ASSIGNMENT 298 -#define ASYMMETRIC 299 -#define ATOMIC 300 -#define AT 301 -#define ATTACH 302 -#define ATTRIBUTE 303 -#define AUTHORIZATION 304 -#define BACKWARD 305 -#define BEFORE 306 -#define BEGIN_P 307 -#define BETWEEN 308 -#define BIGINT 309 -#define BINARY 310 -#define BIT 311 -#define BOOLEAN_P 312 -#define BOTH 313 -#define BREADTH 314 -#define BY 315 -#define CACHE 316 -#define CALL 317 -#define CALLED 318 -#define CASCADE 319 -#define CASCADED 320 -#define CASE 321 -#define CAST 322 -#define CATALOG_P 323 -#define CHAIN 324 -#define CHAR_P 325 -#define CHARACTER 326 -#define CHARACTERISTICS 327 -#define CHECK 328 -#define CHECKPOINT 329 -#define CLASS 330 -#define CLOSE 331 -#define CLUSTER 332 -#define COALESCE 333 -#define COLLATE 334 -#define COLLATION 335 -#define COLUMN 336 -#define COLUMNS 337 -#define COMMENT 338 -#define COMMENTS 339 -#define COMMIT 340 -#define COMMITTED 341 -#define COMPRESSION 342 -#define CONCURRENTLY 343 -#define CONFIGURATION 344 -#define CONFLICT 345 -#define CONNECTION 346 -#define CONSTRAINT 347 -#define CONSTRAINTS 348 -#define CONTENT_P 349 -#define CONTINUE_P 350 -#define CONVERSION_P 351 -#define COPY 352 -#define COST 353 -#define CREATE 354 -#define CROSS 355 -#define CSV 356 -#define CUBE 357 -#define CURRENT_P 358 -#define CURRENT_CATALOG 359 -#define CURRENT_DATE 360 -#define CURRENT_ROLE 361 -#define CURRENT_SCHEMA 362 -#define CURRENT_TIME 363 -#define CURRENT_TIMESTAMP 364 -#define CURRENT_USER 365 -#define CURSOR 366 -#define CYCLE 367 -#define DATA_P 368 -#define DATABASE 369 -#define DAY_P 370 -#define DEALLOCATE 371 -#define DEC 372 -#define DECIMAL_P 373 -#define DECLARE 374 -#define DEFAULT 375 -#define DEFAULTS 376 -#define DEFERRABLE 377 -#define DEFERRED 378 -#define DEFINER 379 -#define DELETE_P 380 -#define DELIMITER 381 -#define DELIMITERS 382 -#define DEPENDS 383 -#define DEPTH 384 -#define DESC 385 -#define DETACH 386 -#define DICTIONARY 387 -#define DISABLE_P 388 -#define DISCARD 389 -#define DISTINCT 390 -#define DO 391 -#define DOCUMENT_P 392 -#define DOMAIN_P 393 -#define DOUBLE_P 394 -#define DROP 395 -#define EACH 396 -#define ELSE 397 -#define ENABLE_P 398 -#define ENCODING 399 -#define ENCRYPTED 400 -#define END_P 401 -#define ENUM_P 402 -#define ESCAPE 403 -#define EVENT 404 -#define EXCEPT 405 -#define EXCLUDE 406 -#define EXCLUDING 407 -#define EXCLUSIVE 408 -#define EXECUTE 409 -#define EXISTS 410 -#define EXPLAIN 411 -#define EXPRESSION 412 -#define EXTENSION 413 -#define EXTERNAL 414 -#define EXTRACT 415 -#define FALSE_P 416 -#define FAMILY 417 -#define FETCH 418 -#define FILTER 419 -#define FINALIZE 420 -#define FIRST_P 421 -#define FLOAT_P 422 -#define FOLLOWING 423 -#define FOR 424 -#define FORCE 425 -#define FOREIGN 426 -#define FORWARD 427 -#define FREEZE 428 -#define FROM 429 -#define FULL 430 -#define FUNCTION 431 -#define FUNCTIONS 432 -#define GENERATED 433 -#define GLOBAL 434 -#define GRANT 435 -#define GRANTED 436 -#define GREATEST 437 -#define GROUP_P 438 -#define GROUPING 439 -#define GROUPS 440 -#define HANDLER 441 -#define HAVING 442 -#define HEADER_P 443 -#define HOLD 444 -#define HOUR_P 445 -#define IDENTITY_P 446 -#define IF_P 447 -#define ILIKE 448 -#define IMMEDIATE 449 -#define IMMUTABLE 450 -#define IMPLICIT_P 451 -#define IMPORT_P 452 -#define IN_P 453 -#define INCLUDE 454 -#define INCLUDING 455 -#define INCREMENT 456 -#define INDEX 457 -#define INDEXES 458 -#define INHERIT 459 -#define INHERITS 460 -#define INITIALLY 461 -#define INLINE_P 462 -#define INNER_P 463 -#define INOUT 464 -#define INPUT_P 465 -#define INSENSITIVE 466 -#define INSERT 467 -#define INSTEAD 468 -#define INT_P 469 -#define INTEGER 470 -#define INTERSECT 471 -#define INTERVAL 472 -#define INTO 473 -#define INVOKER 474 -#define IS 475 -#define ISNULL 476 -#define ISOLATION 477 -#define JOIN 478 -#define KEY 479 -#define LABEL 480 -#define LANGUAGE 481 -#define LARGE_P 482 -#define LAST_P 483 -#define LATERAL_P 484 -#define LEADING 485 -#define LEAKPROOF 486 -#define LEAST 487 -#define LEFT 488 -#define LEVEL 489 -#define LIKE 490 -#define LIMIT 491 -#define LISTEN 492 -#define LOAD 493 -#define LOCAL 494 -#define LOCALTIME 495 -#define LOCALTIMESTAMP 496 -#define LOCATION 497 -#define LOCK_P 498 -#define LOCKED 499 -#define LOGGED 500 -#define MAPPING 501 -#define MATCH 502 -#define MATCHED 503 -#define MATERIALIZED 504 -#define MAXVALUE 505 -#define MERGE 506 -#define METHOD 507 -#define MINUTE_P 508 -#define MINVALUE 509 -#define MODE 510 -#define MONTH_P 511 -#define MOVE 512 -#define NAME_P 513 -#define NAMES 514 -#define NATIONAL 515 -#define NATURAL 516 -#define NCHAR 517 -#define NEW 518 -#define NEXT 519 -#define NFC 520 -#define NFD 521 -#define NFKC 522 -#define NFKD 523 -#define NO 524 -#define NONE 525 -#define NORMALIZE 526 -#define NORMALIZED 527 -#define NOT 528 -#define NOTHING 529 -#define NOTIFY 530 -#define NOTNULL 531 -#define NOWAIT 532 -#define NULL_P 533 -#define NULLIF 534 -#define NULLS_P 535 -#define NUMERIC 536 -#define OBJECT_P 537 -#define OF 538 -#define OFF 539 -#define OFFSET 540 -#define OIDS 541 -#define OLD 542 -#define ON 543 -#define ONLY 544 -#define OPERATOR 545 -#define OPTION 546 -#define OPTIONS 547 -#define OR 548 -#define ORDER 549 -#define ORDINALITY 550 -#define OTHERS 551 -#define OUT_P 552 -#define OUTER_P 553 -#define OVER 554 -#define OVERLAPS 555 -#define OVERLAY 556 -#define OVERRIDING 557 -#define OWNED 558 -#define OWNER 559 -#define PARALLEL 560 -#define PARAMETER 561 -#define PARSER 562 -#define PARTIAL 563 -#define PARTITION 564 -#define PASSING 565 -#define PASSWORD 566 -#define PLACING 567 -#define PLANS 568 -#define POLICY 569 -#define POSITION 570 -#define PRECEDING 571 -#define PRECISION 572 -#define PRESERVE 573 -#define PREPARE 574 -#define PREPARED 575 -#define PRIMARY 576 -#define PRIOR 577 -#define PRIVILEGES 578 -#define PROCEDURAL 579 -#define PROCEDURE 580 -#define PROCEDURES 581 -#define PROGRAM 582 -#define PUBLICATION 583 -#define QUOTE 584 -#define RANGE 585 -#define READ 586 -#define REAL 587 -#define REASSIGN 588 -#define RECHECK 589 -#define RECURSIVE 590 -#define REF_P 591 -#define REFERENCES 592 -#define REFERENCING 593 -#define REFRESH 594 -#define REINDEX 595 -#define RELATIVE_P 596 -#define RELEASE 597 -#define RENAME 598 -#define REPEATABLE 599 -#define REPLACE 600 -#define REPLICA 601 -#define RESET 602 -#define RESTART 603 -#define RESTRICT 604 -#define RETURN 605 -#define RETURNING 606 -#define RETURNS 607 -#define REVOKE 608 -#define RIGHT 609 -#define ROLE 610 -#define ROLLBACK 611 -#define ROLLUP 612 -#define ROUTINE 613 -#define ROUTINES 614 -#define ROW 615 -#define ROWS 616 -#define RULE 617 -#define SAVEPOINT 618 -#define SCHEMA 619 -#define SCHEMAS 620 -#define SCROLL 621 -#define SEARCH 622 -#define SECOND_P 623 -#define SECURITY 624 -#define SELECT 625 -#define SEQUENCE 626 -#define SEQUENCES 627 -#define SERIALIZABLE 628 -#define SERVER 629 -#define SESSION 630 -#define SESSION_USER 631 -#define SET 632 -#define SETS 633 -#define SETOF 634 -#define SHARE 635 -#define SHOW 636 -#define SIMILAR 637 -#define SIMPLE 638 -#define SKIP 639 -#define SMALLINT 640 -#define SNAPSHOT 641 -#define SOME 642 -#define SQL_P 643 -#define STABLE 644 -#define STANDALONE_P 645 -#define START 646 -#define STATEMENT 647 -#define STATISTICS 648 -#define STDIN 649 -#define STDOUT 650 -#define STORAGE 651 -#define STORED 652 -#define STRICT_P 653 -#define STRIP_P 654 -#define SUBSCRIPTION 655 -#define SUBSTRING 656 -#define SUPPORT 657 -#define SYMMETRIC 658 -#define SYSID 659 -#define SYSTEM_P 660 -#define TABLE 661 -#define TABLES 662 -#define TABLESAMPLE 663 -#define TABLESPACE 664 -#define TEMP 665 -#define TEMPLATE 666 -#define TEMPORARY 667 -#define TEXT_P 668 -#define THEN 669 -#define TIES 670 -#define TIME 671 -#define TIMESTAMP 672 -#define TO 673 -#define TRAILING 674 -#define TRANSACTION 675 -#define TRANSFORM 676 -#define TREAT 677 -#define TRIGGER 678 -#define TRIM 679 -#define TRUE_P 680 -#define TRUNCATE 681 -#define TRUSTED 682 -#define TYPE_P 683 -#define TYPES_P 684 -#define UESCAPE 685 -#define UNBOUNDED 686 -#define UNCOMMITTED 687 -#define UNENCRYPTED 688 -#define UNION 689 -#define UNIQUE 690 -#define UNKNOWN 691 -#define UNLISTEN 692 -#define UNLOGGED 693 -#define UNTIL 694 -#define UPDATE 695 -#define USER 696 -#define USING 697 -#define VACUUM 698 -#define VALID 699 -#define VALIDATE 700 -#define VALIDATOR 701 -#define VALUE_P 702 -#define VALUES 703 -#define VARCHAR 704 -#define VARIADIC 705 -#define VARYING 706 -#define VERBOSE 707 -#define VERSION_P 708 -#define VIEW 709 -#define VIEWS 710 -#define VOLATILE 711 -#define WHEN 712 -#define WHERE 713 -#define WHITESPACE_P 714 -#define WINDOW 715 -#define WITH 716 -#define WITHIN 717 -#define WITHOUT 718 -#define WORK 719 -#define WRAPPER 720 -#define WRITE 721 -#define XML_P 722 -#define XMLATTRIBUTES 723 -#define XMLCONCAT 724 -#define XMLELEMENT 725 -#define XMLEXISTS 726 -#define XMLFOREST 727 -#define XMLNAMESPACES 728 -#define XMLPARSE 729 -#define XMLPI 730 -#define XMLROOT 731 -#define XMLSERIALIZE 732 -#define XMLTABLE 733 -#define YEAR_P 734 -#define YES_P 735 -#define ZONE 736 -#define NOT_LA 737 -#define NULLS_LA 738 -#define WITH_LA 739 -#define MODE_TYPE_NAME 740 -#define MODE_PLPGSQL_EXPR 741 -#define MODE_PLPGSQL_ASSIGN1 742 -#define MODE_PLPGSQL_ASSIGN2 743 -#define MODE_PLPGSQL_ASSIGN3 744 -#define UMINUS 745 - - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 237 "gram.y" -{ - core_YYSTYPE core_yystype; - /* these fields must match core_YYSTYPE: */ - int ival; - char *str; - const char *keyword; - - char chr; - bool boolean; - JoinType jtype; - DropBehavior dbehavior; - OnCommitAction oncommit; - List *list; - Node *node; - ObjectType objtype; - TypeName *typnam; - FunctionParameter *fun_param; - FunctionParameterMode fun_param_mode; - ObjectWithArgs *objwithargs; - DefElem *defelt; - SortBy *sortby; - WindowDef *windef; - JoinExpr *jexpr; - IndexElem *ielem; - StatsElem *selem; - Alias *alias; - RangeVar *range; - IntoClause *into; - WithClause *with; - InferClause *infer; - OnConflictClause *onconflict; - A_Indices *aind; - ResTarget *target; - struct PrivTarget *privtarget; - AccessPriv *accesspriv; - struct ImportQual *importqual; - InsertStmt *istmt; - VariableSetStmt *vsetstmt; - PartitionElem *partelem; - PartitionSpec *partspec; - PartitionBoundSpec *partboundspec; - RoleSpec *rolespec; - PublicationObjSpec *publicationobjectspec; - struct SelectLimit *selectlimit; - SetQuantifier setquantifier; - struct GroupClause *groupclause; - MergeWhenClause *mergewhen; - struct KeyActions *keyactions; - struct KeyAction *keyaction; -} -/* Line 1529 of yacc.c. */ -#line 1080 "gram.h" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED -typedef struct YYLTYPE -{ - int first_line; - int first_column; - int last_line; - int last_column; -} YYLTYPE; -# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - - diff --git a/src/postgres/include/parser/kwlist.h b/src/postgres/include/parser/kwlist.h index 65ffa897..f5b2e61c 100644 --- a/src/postgres/include/parser/kwlist.h +++ b/src/postgres/include/parser/kwlist.h @@ -7,7 +7,7 @@ * 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-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -26,6 +26,7 @@ /* name, value, category, is-bare-label */ PG_KEYWORD("abort", ABORT_P, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("absent", ABSENT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("absolute", ABSOLUTE_P, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("access", ACCESS, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("action", ACTION, UNRESERVED_KEYWORD, BARE_LABEL) @@ -175,6 +176,7 @@ PG_KEYWORD("following", FOLLOWING, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("for", FOR, RESERVED_KEYWORD, AS_LABEL) PG_KEYWORD("force", FORCE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("foreign", FOREIGN, RESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("format", FORMAT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("forward", FORWARD, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("freeze", FREEZE, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL) PG_KEYWORD("from", FROM, RESERVED_KEYWORD, AS_LABEL) @@ -205,6 +207,7 @@ PG_KEYWORD("in", IN_P, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("include", INCLUDE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("including", INCLUDING, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("increment", INCREMENT, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("indent", INDENT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("index", INDEX, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("indexes", INDEXES, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("inherit", INHERIT, UNRESERVED_KEYWORD, BARE_LABEL) @@ -227,7 +230,13 @@ PG_KEYWORD("is", IS, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL) PG_KEYWORD("isnull", ISNULL, TYPE_FUNC_NAME_KEYWORD, AS_LABEL) PG_KEYWORD("isolation", ISOLATION, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("join", JOIN, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL) +PG_KEYWORD("json", JSON, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("json_array", JSON_ARRAY, COL_NAME_KEYWORD, BARE_LABEL) +PG_KEYWORD("json_arrayagg", JSON_ARRAYAGG, COL_NAME_KEYWORD, BARE_LABEL) +PG_KEYWORD("json_object", JSON_OBJECT, COL_NAME_KEYWORD, BARE_LABEL) +PG_KEYWORD("json_objectagg", JSON_OBJECTAGG, COL_NAME_KEYWORD, BARE_LABEL) PG_KEYWORD("key", KEY, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("keys", KEYS, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("label", LABEL, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("language", LANGUAGE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("large", LARGE_P, UNRESERVED_KEYWORD, BARE_LABEL) @@ -367,6 +376,7 @@ PG_KEYWORD("row", ROW, COL_NAME_KEYWORD, BARE_LABEL) PG_KEYWORD("rows", ROWS, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("rule", RULE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("savepoint", SAVEPOINT, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("scalar", SCALAR, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("schema", SCHEMA, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("schemas", SCHEMAS, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("scroll", SCROLL, UNRESERVED_KEYWORD, BARE_LABEL) @@ -409,6 +419,7 @@ PG_KEYWORD("support", SUPPORT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("symmetric", SYMMETRIC, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("sysid", SYSID, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("system", SYSTEM_P, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("system_user", SYSTEM_USER, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("table", TABLE, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("tables", TABLES, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("tablesample", TABLESAMPLE, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL) diff --git a/src/postgres/include/parser/parse_agg.h b/src/postgres/include/parser/parse_agg.h index c56822f6..e9afd99d 100644 --- a/src/postgres/include/parser/parse_agg.h +++ b/src/postgres/include/parser/parse_agg.h @@ -3,7 +3,7 @@ * parse_agg.h * handle aggregates and window functions in parser * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_agg.h @@ -19,7 +19,7 @@ extern void transformAggregateCall(ParseState *pstate, Aggref *agg, List *args, List *aggorder, bool agg_distinct); -extern Node *transformGroupingFunc(ParseState *pstate, GroupingFunc *g); +extern Node *transformGroupingFunc(ParseState *pstate, GroupingFunc *p); extern void transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc, WindowDef *windef); @@ -35,6 +35,8 @@ extern Oid resolve_aggregate_transtype(Oid aggfuncid, Oid *inputTypes, int numArguments); +extern bool agg_args_support_sendreceive(Aggref *aggref); + extern void build_aggregate_transfn_expr(Oid *agg_input_types, int agg_num_inputs, int agg_num_direct_inputs, diff --git a/src/postgres/include/parser/parse_coerce.h b/src/postgres/include/parser/parse_coerce.h index b105c7da..35ce4a35 100644 --- a/src/postgres/include/parser/parse_coerce.h +++ b/src/postgres/include/parser/parse_coerce.h @@ -4,7 +4,7 @@ * Routines for type coercion. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_coerce.h @@ -32,6 +32,8 @@ typedef enum CoercionPathType extern bool IsBinaryCoercible(Oid srctype, Oid targettype); +extern bool IsBinaryCoercibleWithCast(Oid srctype, Oid targettype, + Oid *castoid); extern bool IsPreferredType(TYPCATEGORY category, Oid type); extern TYPCATEGORY TypeCategory(Oid type); diff --git a/src/postgres/include/parser/parse_expr.h b/src/postgres/include/parser/parse_expr.h index c8e5c57b..7d38ca75 100644 --- a/src/postgres/include/parser/parse_expr.h +++ b/src/postgres/include/parser/parse_expr.h @@ -3,7 +3,7 @@ * parse_expr.h * handle expressions in parser * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_expr.h diff --git a/src/postgres/include/parser/parse_func.h b/src/postgres/include/parser/parse_func.h index 8711e392..e316f5da 100644 --- a/src/postgres/include/parser/parse_func.h +++ b/src/postgres/include/parser/parse_func.h @@ -4,7 +4,7 @@ * * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_func.h diff --git a/src/postgres/include/parser/parse_node.h b/src/postgres/include/parser/parse_node.h index cf9c7590..f589112d 100644 --- a/src/postgres/include/parser/parse_node.h +++ b/src/postgres/include/parser/parse_node.h @@ -4,7 +4,7 @@ * Internal definitions for parser * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_node.h @@ -111,10 +111,20 @@ typedef Node *(*CoerceParamHook) (ParseState *pstate, Param *param, * Note that neither relname nor refname of these entries are necessarily * unique; searching the rtable by name is a bad idea. * + * p_rteperminfos: list of RTEPermissionInfo containing an entry corresponding + * to each RTE_RELATION entry in p_rtable. + * * p_joinexprs: list of JoinExpr nodes associated with p_rtable entries. * This is one-for-one with p_rtable, but contains NULLs for non-join * RTEs, and may be shorter than p_rtable if the last RTE(s) aren't joins. * + * p_nullingrels: list of Bitmapsets associated with p_rtable entries, each + * containing the set of outer-join RTE indexes that can null that relation + * at the current point in the parse tree. This is one-for-one with p_rtable, + * but may be shorter than p_rtable, in which case the missing entries are + * implicitly empty (NULL). That rule allows us to save work when the query + * contains no outer joins. + * * p_joinlist: list of join items (RangeTblRef and JoinExpr nodes) that * will become the fromlist of the query's top-level FromExpr node. * @@ -181,7 +191,10 @@ struct ParseState ParseState *parentParseState; /* stack link */ const char *p_sourcetext; /* source text, or NULL if not available */ List *p_rtable; /* range table so far */ + List *p_rteperminfos; /* list of RTEPermissionInfo nodes for each + * RTE_RELATION entry in rtable */ List *p_joinexprs; /* JoinExprs for RTE_JOIN p_rtable entries */ + List *p_nullingrels; /* Bitmapsets showing nulling outer joins */ List *p_joinlist; /* join items so far (will become FromExpr * node's fromlist) */ List *p_namespace; /* currently-referenceable RTEs (List of @@ -234,7 +247,8 @@ struct ParseState * join's first N columns, the net effect is just that we expose only those * join columns via this nsitem.) * - * p_rte and p_rtindex link to the underlying rangetable entry. + * p_rte and p_rtindex link to the underlying rangetable entry, and + * p_perminfo to the entry in rteperminfos. * * The p_nscolumns array contains info showing how to construct Vars * referencing the names appearing in the p_names->colnames list. @@ -246,8 +260,11 @@ struct ParseState * visible for qualified references) but it does hide their columns * (unqualified references to the columns refer to the JOIN, not the member * tables, so we must not complain that such a reference is ambiguous). - * Various special RTEs such as NEW/OLD for rules may also appear with only - * one flag set. + * Conversely, a subquery without an alias does not hide the columns selected + * by the subquery, but it does hide the auto-generated relation name (so the + * subquery columns are visible for unqualified references only). Various + * special RTEs such as NEW/OLD for rules may also appear with only one flag + * set. * * While processing the FROM clause, namespace items may appear with * p_lateral_only set, meaning they are visible only to LATERAL @@ -268,6 +285,7 @@ struct ParseNamespaceItem Alias *p_names; /* Table and column names */ RangeTblEntry *p_rte; /* The relation's rangetable entry */ int p_rtindex; /* The relation's index in the rangetable */ + RTEPermissionInfo *p_perminfo; /* The relation's rteperminfos entry */ /* array of same length as p_names->colnames: */ ParseNamespaceColumn *p_nscolumns; /* per-column data */ bool p_rel_visible; /* Relation name is visible? */ diff --git a/src/postgres/include/parser/parse_oper.h b/src/postgres/include/parser/parse_oper.h index e15b6229..5768a1ce 100644 --- a/src/postgres/include/parser/parse_oper.h +++ b/src/postgres/include/parser/parse_oper.h @@ -4,7 +4,7 @@ * handle operator things for parser * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_oper.h @@ -29,8 +29,8 @@ extern Oid LookupOperWithArgs(ObjectWithArgs *oper, bool noError); /* Routines to find operators matching a name and given input types */ /* NB: the selected operator may require coercion of the input types! */ -extern Operator oper(ParseState *pstate, List *op, Oid arg1, Oid arg2, - bool noError, int location); +extern Operator oper(ParseState *pstate, List *opname, Oid ltypeId, + Oid rtypeId, bool noError, int location); extern Operator left_oper(ParseState *pstate, List *op, Oid arg, bool noError, int location); diff --git a/src/postgres/include/parser/parse_relation.h b/src/postgres/include/parser/parse_relation.h index de21c3c6..67d9b1e4 100644 --- a/src/postgres/include/parser/parse_relation.h +++ b/src/postgres/include/parser/parse_relation.h @@ -4,7 +4,7 @@ * prototypes for parse_relation.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_relation.h @@ -41,6 +41,7 @@ extern Node *scanNSItemForColumn(ParseState *pstate, ParseNamespaceItem *nsitem, int location); extern Node *colNameToVar(ParseState *pstate, const char *colname, bool localonly, int location); +extern void markNullableIfNeeded(ParseState *pstate, Var *var); extern void markVarForSelectPriv(ParseState *pstate, Var *var); extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation, int lockmode); @@ -88,7 +89,7 @@ extern ParseNamespaceItem *addRangeTableEntryForJoin(ParseState *pstate, List *aliasvars, List *leftcols, List *rightcols, - Alias *joinalias, + Alias *join_using_alias, Alias *alias, bool inFromCl); extern ParseNamespaceItem *addRangeTableEntryForCTE(ParseState *pstate, @@ -99,6 +100,10 @@ extern ParseNamespaceItem *addRangeTableEntryForCTE(ParseState *pstate, extern ParseNamespaceItem *addRangeTableEntryForENR(ParseState *pstate, RangeVar *rv, bool inFromCl); +extern RTEPermissionInfo *addRTEPermissionInfo(List **rteperminfos, + RangeTblEntry *rte); +extern RTEPermissionInfo *getRTEPermissionInfo(List *rteperminfos, + RangeTblEntry *rte); extern bool isLockedRefname(ParseState *pstate, const char *refname); extern void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, @@ -109,7 +114,7 @@ extern void errorMissingColumn(ParseState *pstate, extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, int location, bool include_dropped, List **colnames, List **colvars); -extern List *expandNSItemVars(ParseNamespaceItem *nsitem, +extern List *expandNSItemVars(ParseState *pstate, ParseNamespaceItem *nsitem, int sublevels_up, int location, List **colnames); extern List *expandNSItemAttrs(ParseState *pstate, ParseNamespaceItem *nsitem, diff --git a/src/postgres/include/parser/parse_type.h b/src/postgres/include/parser/parse_type.h index 4e5624d7..848c467a 100644 --- a/src/postgres/include/parser/parse_type.h +++ b/src/postgres/include/parser/parse_type.h @@ -3,7 +3,7 @@ * parse_type.h * handle type operations for parser * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parse_type.h @@ -51,8 +51,9 @@ extern Datum stringTypeDatum(Type tp, char *string, int32 atttypmod); extern Oid typeidTypeRelid(Oid type_id); extern Oid typeOrDomainTypeRelid(Oid type_id); -extern TypeName *typeStringToTypeName(const char *str); -extern void parseTypeString(const char *str, Oid *typeid_p, int32 *typmod_p, bool missing_ok); +extern TypeName *typeStringToTypeName(const char *str, Node *escontext); +extern bool parseTypeString(const char *str, Oid *typeid_p, int32 *typmod_p, + Node *escontext); /* true if typeid is composite, or domain over composite, but not RECORD */ #define ISCOMPLEX(typeid) (typeOrDomainTypeRelid(typeid) != InvalidOid) diff --git a/src/postgres/include/parser/parser.h b/src/postgres/include/parser/parser.h index e1dc5c5b..cd7588c7 100644 --- a/src/postgres/include/parser/parser.h +++ b/src/postgres/include/parser/parser.h @@ -5,7 +5,7 @@ * * This is the external API for the raw lexing/parsing functions. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parser.h diff --git a/src/postgres/include/parser/parsetree.h b/src/postgres/include/parser/parsetree.h index 3a1afffd..69a9a258 100644 --- a/src/postgres/include/parser/parsetree.h +++ b/src/postgres/include/parser/parsetree.h @@ -5,7 +5,7 @@ * parse trees. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/parsetree.h diff --git a/src/postgres/include/parser/scanner.h b/src/postgres/include/parser/scanner.h index 2acd7e05..e2a73201 100644 --- a/src/postgres/include/parser/scanner.h +++ b/src/postgres/include/parser/scanner.h @@ -8,7 +8,7 @@ * higher-level API provided by parser.h. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/scanner.h @@ -140,7 +140,7 @@ extern core_yyscan_t scanner_init(const char *str, const ScanKeywordList *keywordlist, const uint16 *keyword_tokens); extern void scanner_finish(core_yyscan_t yyscanner); -extern int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp, +extern int core_yylex(core_YYSTYPE *yylval_param, YYLTYPE *yylloc_param, core_yyscan_t yyscanner); extern int scanner_errposition(int location, core_yyscan_t yyscanner); extern void setup_scanner_errposition_callback(ScannerCallbackState *scbstate, diff --git a/src/postgres/include/parser/scansup.h b/src/postgres/include/parser/scansup.h index ff65224b..f2fa1977 100644 --- a/src/postgres/include/parser/scansup.h +++ b/src/postgres/include/parser/scansup.h @@ -3,7 +3,7 @@ * scansup.h * scanner support routines used by the core lexer * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/scansup.h diff --git a/src/postgres/include/partitioning/partdefs.h b/src/postgres/include/partitioning/partdefs.h index aed62eae..55bb49c8 100644 --- a/src/postgres/include/partitioning/partdefs.h +++ b/src/postgres/include/partitioning/partdefs.h @@ -3,7 +3,7 @@ * partdefs.h * Base definitions for partitioned table handling * - * Copyright (c) 2007-2022, PostgreSQL Global Development Group + * Copyright (c) 2007-2023, PostgreSQL Global Development Group * * src/include/partitioning/partdefs.h * diff --git a/src/postgres/include/pg_config.h b/src/postgres/include/pg_config.h index 59a2288e..d1dd7b72 100644 --- a/src/postgres/include/pg_config.h +++ b/src/postgres/include/pg_config.h @@ -32,7 +32,7 @@ #define BLCKSZ 8192 /* Saved arguments from configure */ -#define CONFIGURE_ARGS " '--without-readline' '--without-zlib'" +#define CONFIGURE_ARGS " '--without-readline' '--without-zlib' '--without-icu'" /* Define to the default TCP port number on which the server listens and to which clients will try to connect. This can be overridden at run-time, but @@ -44,7 +44,7 @@ #define DEF_PGPORT_STR "5432" /* Define to the file name extension of dynamically-loadable modules. */ -#define DLSUFFIX ".so" +#define DLSUFFIX ".dylib" /* Define to build with GSSAPI support. (--with-gssapi) */ /* #undef ENABLE_GSS */ @@ -56,13 +56,6 @@ (--enable-thread-safety) */ #define ENABLE_THREAD_SAFETY 1 -/* Define to 1 if gettimeofday() takes only 1 argument. */ -/* #undef GETTIMEOFDAY_1ARG */ - -#ifdef GETTIMEOFDAY_1ARG -# define gettimeofday(a,b) gettimeofday(a) -#endif - /* Define to 1 if you have the `append_history' function. */ /* #undef HAVE_APPEND_HISTORY */ @@ -84,9 +77,6 @@ /* Define to 1 if you have the `BIO_meth_new' function. */ /* #undef HAVE_BIO_METH_NEW */ -/* Define to 1 if you have the `clock_gettime' function. */ -#define HAVE_CLOCK_GETTIME 1 - /* Define to 1 if your compiler handles computed gotos. */ #define HAVE_COMPUTED_GOTO 1 @@ -142,18 +132,6 @@ don't. */ #define HAVE_DECL_PWRITEV 1 -/* Define to 1 if you have the declaration of `RTLD_GLOBAL', and to 0 if you - don't. */ -#define HAVE_DECL_RTLD_GLOBAL 1 - -/* Define to 1 if you have the declaration of `RTLD_NOW', and to 0 if you - don't. */ -#define HAVE_DECL_RTLD_NOW 1 - -/* Define to 1 if you have the declaration of `sigwait', and to 0 if you - don't. */ -#define HAVE_DECL_SIGWAIT 1 - /* Define to 1 if you have the declaration of `strlcat', and to 0 if you don't. */ #define HAVE_DECL_STRLCAT 1 @@ -166,17 +144,6 @@ don't. */ #define HAVE_DECL_STRNLEN 1 -/* Define to 1 if you have the declaration of `strtoll', and to 0 if you - don't. */ -#define HAVE_DECL_STRTOLL 1 - -/* Define to 1 if you have the declaration of `strtoull', and to 0 if you - don't. */ -#define HAVE_DECL_STRTOULL 1 - -/* Define to 1 if you have the `dlopen' function. */ -#define HAVE_DLOPEN 1 - /* Define to 1 if you have the header file. */ /* #undef HAVE_EDITLINE_HISTORY_H */ @@ -189,21 +156,9 @@ /* Define to 1 if you have the `explicit_bzero' function. */ /* #undef HAVE_EXPLICIT_BZERO */ -/* Define to 1 if you have the `fdatasync' function. */ -#define HAVE_FDATASYNC 1 - -/* Define to 1 if you have the `fls' function. */ -#define HAVE_FLS 1 - /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #define HAVE_FSEEKO 1 -/* Define to 1 if your compiler understands __func__. */ -#define HAVE_FUNCNAME__FUNC 1 - -/* Define to 1 if your compiler understands __FUNCTION__. */ -/* #undef HAVE_FUNCNAME__FUNCTION */ - /* Define to 1 if you have __atomic_compare_exchange_n(int *, int *, int). */ #define HAVE_GCC__ATOMIC_INT32_CAS 1 @@ -224,12 +179,6 @@ */ #define HAVE_GCC__SYNC_INT64_CAS 1 -/* Define to 1 if you have the `getaddrinfo' function. */ -#define HAVE_GETADDRINFO 1 - -/* Define to 1 if you have the `gethostbyname_r' function. */ -/* #undef HAVE_GETHOSTBYNAME_R */ - /* Define to 1 if you have the `getifaddrs' function. */ #define HAVE_GETIFADDRS 1 @@ -248,17 +197,11 @@ /* Define to 1 if you have the `getpeerucred' function. */ /* #undef HAVE_GETPEERUCRED */ -/* Define to 1 if you have the `getpwuid_r' function. */ -#define HAVE_GETPWUID_R 1 - -/* Define to 1 if you have the `getrlimit' function. */ -#define HAVE_GETRLIMIT 1 +/* Define to 1 if you have the header file. */ +/* #undef HAVE_GSSAPI_EXT_H */ -/* Define to 1 if you have the `getrusage' function. */ -#define HAVE_GETRUSAGE 1 - -/* Define to 1 if you have the `gettimeofday' function. */ -/* #undef HAVE_GETTIMEOFDAY */ +/* Define to 1 if you have the header file. */ +/* #undef HAVE_GSSAPI_GSSAPI_EXT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_H */ @@ -305,9 +248,6 @@ /* Define to 1 if you have the global variable 'int timezone'. */ #define HAVE_INT_TIMEZONE 1 -/* Define to 1 if you have support for IPv6. */ -#define HAVE_IPV6 1 - /* Define to 1 if __builtin_constant_p(x) implies "i"(x) acceptance. */ /* #undef HAVE_I_CONSTRAINT__BUILTIN_CONSTANT_P */ @@ -317,9 +257,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_LANGINFO_H 1 -/* Define to 1 if you have the header file. */ -/* #undef HAVE_LDAP_H */ - /* Define to 1 if you have the `ldap_initialize' function. */ /* #undef HAVE_LDAP_INITIALIZE */ @@ -362,9 +299,6 @@ /* Define to 1 if you have the `zstd' library (-lzstd). */ /* #undef HAVE_LIBZSTD */ -/* Define to 1 if you have the `link' function. */ -#define HAVE_LINK 1 - /* Define to 1 if the system has the type `locale_t'. */ #define HAVE_LOCALE_T 1 @@ -386,18 +320,9 @@ /* Define to 1 if you have the `memset_s' function. */ #define HAVE_MEMSET_S 1 -/* Define to 1 if the system has the type `MINIDUMP_TYPE'. */ -/* #undef HAVE_MINIDUMP_TYPE */ - /* Define to 1 if you have the `mkdtemp' function. */ #define HAVE_MKDTEMP 1 -/* Define to 1 if you have the header file. */ -#define HAVE_NETINET_TCP_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_NET_IF_H 1 - /* Define to 1 if you have the `OPENSSL_init_ssl' function. */ /* #undef HAVE_OPENSSL_INIT_SSL */ @@ -407,36 +332,15 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_PAM_PAM_APPL_H */ -/* Define to 1 if you have the `poll' function. */ -#define HAVE_POLL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_POLL_H 1 - -/* Define to 1 if you have a POSIX-conforming sigwait declaration. */ -#define HAVE_POSIX_DECL_SIGWAIT 1 - /* Define to 1 if you have the `posix_fadvise' function. */ /* #undef HAVE_POSIX_FADVISE */ /* Define to 1 if you have the `posix_fallocate' function. */ /* #undef HAVE_POSIX_FALLOCATE */ -/* Define to 1 if the assembler supports PPC's LWARX mutex hint bit. */ -/* #undef HAVE_PPC_LWARX_MUTEX_HINT */ - /* Define to 1 if you have the `ppoll' function. */ /* #undef HAVE_PPOLL */ -/* Define to 1 if you have the `pread' function. */ -#define HAVE_PREAD 1 - -/* Define to 1 if you have the `pstat' function. */ -/* #undef HAVE_PSTAT */ - -/* Define to 1 if the PS_STRINGS thing exists. */ -/* #undef HAVE_PS_STRINGS */ - /* Define if you have POSIX threads libraries and header files. */ #define HAVE_PTHREAD 1 @@ -449,9 +353,6 @@ /* Have PTHREAD_PRIO_INHERIT. */ #define HAVE_PTHREAD_PRIO_INHERIT 1 -/* Define to 1 if you have the `pwrite' function. */ -#define HAVE_PWRITE 1 - /* Define to 1 if you have the header file. */ /* #undef HAVE_READLINE_H */ @@ -461,12 +362,6 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_READLINE_READLINE_H */ -/* Define to 1 if you have the `readlink' function. */ -#define HAVE_READLINK 1 - -/* Define to 1 if you have the `readv' function. */ -#define HAVE_READV 1 - /* Define to 1 if you have the `rl_completion_matches' function. */ /* #undef HAVE_RL_COMPLETION_MATCHES */ @@ -494,27 +389,21 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_SECURITY_PAM_APPL_H */ -/* Define to 1 if you have the `setenv' function. */ -#define HAVE_SETENV 1 - /* Define to 1 if you have the `setproctitle' function. */ /* #undef HAVE_SETPROCTITLE */ /* Define to 1 if you have the `setproctitle_fast' function. */ /* #undef HAVE_SETPROCTITLE_FAST */ -/* Define to 1 if you have the `setsid' function. */ -#define HAVE_SETSID 1 - -/* Define to 1 if you have the `shm_open' function. */ -#define HAVE_SHM_OPEN 1 - /* Define to 1 if the system has the type `socklen_t'. */ #define HAVE_SOCKLEN_T 1 /* Define to 1 if you have spinlocks. */ #define HAVE_SPINLOCKS 1 +/* Define to 1 if you have the `SSL_CTX_set_cert_cb' function. */ +/* #undef HAVE_SSL_CTX_SET_CERT_CB */ + /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 @@ -548,57 +437,15 @@ /* Define to 1 if you have the `strsignal' function. */ #define HAVE_STRSIGNAL 1 -/* Define to 1 if you have the `strtof' function. */ -#define HAVE_STRTOF 1 - -/* Define to 1 if you have the `strtoll' function. */ -#define HAVE_STRTOLL 1 - -/* Define to 1 if you have the `strtoq' function. */ -/* #undef HAVE_STRTOQ */ - -/* Define to 1 if you have the `strtoull' function. */ -#define HAVE_STRTOULL 1 - -/* Define to 1 if you have the `strtouq' function. */ -/* #undef HAVE_STRTOUQ */ - -/* Define to 1 if the system has the type `struct addrinfo'. */ -#define HAVE_STRUCT_ADDRINFO 1 - -/* Define to 1 if the system has the type `struct cmsgcred'. */ -/* #undef HAVE_STRUCT_CMSGCRED */ - /* Define to 1 if the system has the type `struct option'. */ #define HAVE_STRUCT_OPTION 1 /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 -/* Define to 1 if the system has the type `struct sockaddr_storage'. */ -#define HAVE_STRUCT_SOCKADDR_STORAGE 1 - -/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ -#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 - -/* Define to 1 if `ss_len' is a member of `struct sockaddr_storage'. */ -#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1 - -/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */ -/* #undef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */ - -/* Define to 1 if `__ss_len' is a member of `struct sockaddr_storage'. */ -/* #undef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN */ - -/* Define to 1 if the system has the type `struct sockaddr_un'. */ -#define HAVE_STRUCT_SOCKADDR_UN 1 - /* Define to 1 if `tm_zone' is a member of `struct tm'. */ #define HAVE_STRUCT_TM_TM_ZONE 1 -/* Define to 1 if you have the `symlink' function. */ -#define HAVE_SYMLINK 1 - /* Define to 1 if you have the `syncfs' function. */ /* #undef HAVE_SYNCFS */ @@ -614,9 +461,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_SYS_EVENT_H 1 -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_IPC_H 1 - /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PERSONALITY_H */ @@ -626,45 +470,18 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PROCCTL_H */ -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_PSTAT_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_RESOURCE_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SELECT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SEM_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SHM_H 1 - /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SIGNALFD_H */ -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SOCKIO_H 1 - /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_TAS_H */ - /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UCRED_H 1 -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_UIO_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_UN_H 1 - /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 @@ -686,9 +503,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 -/* Define to 1 if you have the `unsetenv' function. */ -#define HAVE_UNSETENV 1 - /* Define to 1 if you have the `uselocale' function. */ #define HAVE_USELOCALE 1 @@ -707,17 +521,14 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_UUID_UUID_H */ +/* Define to 1 if your compiler knows the visibility("hidden") attribute. */ +#define HAVE_VISIBILITY_ATTRIBUTE 1 + /* Define to 1 if you have the `wcstombs_l' function. */ #define HAVE_WCSTOMBS_L 1 -/* Define to 1 if you have the header file. */ -#define HAVE_WCTYPE_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WINLDAP_H */ - -/* Define to 1 if you have the `writev' function. */ -#define HAVE_WRITEV 1 +/* Define to 1 if you have the `X509_get_signature_info' function. */ +/* #undef HAVE_X509_GET_SIGNATURE_INFO */ /* Define to 1 if you have the `X509_get_signature_nid' function. */ /* #undef HAVE_X509_GET_SIGNATURE_NID */ @@ -773,12 +584,6 @@ /* Define to 1 if your compiler understands _Static_assert. */ #define HAVE__STATIC_ASSERT 1 -/* Define to 1 if you have the `__strtoll' function. */ -/* #undef HAVE___STRTOLL */ - -/* Define to 1 if you have the `__strtoull' function. */ -/* #undef HAVE___STRTOULL */ - /* Define to the appropriate printf length modifier for 64-bit ints. */ #define INT64_MODIFIER "l" @@ -802,7 +607,7 @@ #define PACKAGE_NAME "PostgreSQL" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PostgreSQL 15.1" +#define PACKAGE_STRING "PostgreSQL 16.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "postgresql" @@ -811,7 +616,7 @@ #define PACKAGE_URL "https://www.postgresql.org/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "15.1" +#define PACKAGE_VERSION "16.1" /* Define to the name of a signed 128-bit integer type. */ #define PG_INT128_TYPE __int128 @@ -824,10 +629,10 @@ #define PG_KRB_SRVNAM "postgres" /* PostgreSQL major version as a string */ -#define PG_MAJORVERSION "15" +#define PG_MAJORVERSION "16" /* PostgreSQL major version number */ -#define PG_MAJORVERSION_NUM 15 +#define PG_MAJORVERSION_NUM 16 /* PostgreSQL minor version number */ #define PG_MINORVERSION_NUM 1 @@ -839,13 +644,13 @@ #define PG_USE_STDBOOL 1 /* PostgreSQL version as a string */ -#define PG_VERSION "15.1" +#define PG_VERSION "16.1" /* PostgreSQL version as a number */ -#define PG_VERSION_NUM 150001 +#define PG_VERSION_NUM 160001 /* A string containing the version number, platform, and C compiler */ -#define PG_VERSION_STR "PostgreSQL 15.1 on aarch64-apple-darwin21.6.0, compiled by Apple clang version 14.0.0 (clang-1400.0.29.102), 64-bit" +#define PG_VERSION_STR "PostgreSQL 16.1 on aarch64-apple-darwin21.6.0, compiled by Apple clang version 14.0.0 (clang-1400.0.29.102), 64-bit" /* Define to 1 to allow profiling output to be saved separately for each process. */ diff --git a/src/postgres/include/pg_config_manual.h b/src/postgres/include/pg_config_manual.h index 8d2e3e3a..a1a93ad7 100644 --- a/src/postgres/include/pg_config_manual.h +++ b/src/postgres/include/pg_config_manual.h @@ -6,7 +6,7 @@ * for developers. If you edit any of these, be sure to do a *full* * rebuild (and an initdb if noted). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/pg_config_manual.h @@ -114,17 +114,6 @@ */ #define MAXPGPATH 1024 -/* - * PG_SOMAXCONN: maximum accept-queue length limit passed to - * listen(2). You'd think we should use SOMAXCONN from - * , but on many systems that symbol is much smaller - * than the kernel's actual limit. In any case, this symbol need be - * twiddled only if you have a kernel that refuses large limit values, - * rather than silently reducing the value to what it can handle - * (which is what most if not all Unixen do). - */ -#define PG_SOMAXCONN 10000 - /* * You can try changing this if you have a machine with bytes of * another size, but no guarantee... @@ -152,13 +141,6 @@ #define EXEC_BACKEND #endif -/* - * Define this if your operating system supports link() - */ -#if !defined(WIN32) && !defined(__CYGWIN__) -#define HAVE_WORKING_LINK 1 -#endif - /* * USE_POSIX_FADVISE controls whether Postgres will attempt to use the * posix_fadvise() kernel call. Usually the automatic configure tests are @@ -234,32 +216,6 @@ */ #define DEFAULT_EVENT_SOURCE "PostgreSQL" -/* - * On PPC machines, decide whether to use the mutex hint bit in LWARX - * instructions. Setting the hint bit will slightly improve spinlock - * performance on POWER6 and later machines, but does nothing before that, - * and will result in illegal-instruction failures on some pre-POWER4 - * machines. By default we use the hint bit when building for 64-bit PPC, - * which should be safe in nearly all cases. You might want to override - * this if you are building 32-bit code for a known-recent PPC machine. - */ -#ifdef HAVE_PPC_LWARX_MUTEX_HINT /* must have assembler support in any case */ -#if defined(__ppc64__) || defined(__powerpc64__) -#define USE_PPC_LWARX_MUTEX_HINT -#endif -#endif - -/* - * On PPC machines, decide whether to use LWSYNC instructions in place of - * ISYNC and SYNC. This provides slightly better performance, but will - * result in illegal-instruction failures on some pre-POWER4 machines. - * By default we use LWSYNC when building for 64-bit PPC, which should be - * safe in nearly all cases. - */ -#if defined(__ppc64__) || defined(__powerpc64__) -#define USE_PPC_LWSYNC -#endif - /* * Assumed cache line size. This doesn't affect correctness, but can be used * for low-level optimizations. Currently, this is used to pad some data @@ -271,6 +227,12 @@ */ #define PG_CACHE_LINE_SIZE 128 +/* + * Assumed alignment requirement for direct I/O. 4K corresponds to common + * sector and memory page size. + */ +#define PG_IO_ALIGN_SIZE 4096 + /* *------------------------------------------------------------------------ * The following symbols are for enabling debugging code, not for @@ -355,7 +317,7 @@ /* * Recover memory used for relcache entries when invalidated. See - * RelationBuildDescr() in src/backend/utils/cache/relcache.c. + * RelationBuildDesc() in src/backend/utils/cache/relcache.c. * * This is active automatically for clobber-cache builds when clobbering is * active, but can be overridden here by explicitly defining diff --git a/src/postgres/include/pg_getopt.h b/src/postgres/include/pg_getopt.h index 9d91e602..252b4e19 100644 --- a/src/postgres/include/pg_getopt.h +++ b/src/postgres/include/pg_getopt.h @@ -11,7 +11,7 @@ * Portions Copyright (c) 1987, 1993, 1994 * The Regents of the University of California. All rights reserved. * - * Portions Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2003-2023, PostgreSQL Global Development Group * * src/include/pg_getopt.h */ diff --git a/src/postgres/include/pg_trace.h b/src/postgres/include/pg_trace.h index 8c63222c..c31bb4a7 100644 --- a/src/postgres/include/pg_trace.h +++ b/src/postgres/include/pg_trace.h @@ -3,7 +3,7 @@ * * Definitions for the PostgreSQL tracing framework * - * Copyright (c) 2006-2022, PostgreSQL Global Development Group + * Copyright (c) 2006-2023, PostgreSQL Global Development Group * * src/include/pg_trace.h * ---------- diff --git a/src/postgres/include/pgstat.h b/src/postgres/include/pgstat.h index 7f21a3d0..c99dd1cd 100644 --- a/src/postgres/include/pgstat.h +++ b/src/postgres/include/pgstat.h @@ -3,7 +3,7 @@ * * Definitions for the PostgreSQL cumulative statistics system. * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/pgstat.h * ---------- @@ -48,6 +48,7 @@ typedef enum PgStat_Kind PGSTAT_KIND_ARCHIVER, PGSTAT_KIND_BGWRITER, PGSTAT_KIND_CHECKPOINTER, + PGSTAT_KIND_IO, PGSTAT_KIND_SLRU, PGSTAT_KIND_WAL, } PgStat_Kind; @@ -105,20 +106,11 @@ typedef int64 PgStat_Counter; */ typedef struct PgStat_FunctionCounts { - PgStat_Counter f_numcalls; - instr_time f_total_time; - instr_time f_self_time; + PgStat_Counter numcalls; + instr_time total_time; + instr_time self_time; } PgStat_FunctionCounts; -/* ---------- - * PgStat_BackendFunctionEntry Non-flushed function stats. - * ---------- - */ -typedef struct PgStat_BackendFunctionEntry -{ - PgStat_FunctionCounts f_counts; -} PgStat_BackendFunctionEntry; - /* * Working state needed to accumulate per-function-call timing statistics. */ @@ -132,7 +124,7 @@ typedef struct PgStat_FunctionCallUsage /* Backend-wide total time as of function start */ instr_time save_total; /* system clock as of function start */ - instr_time f_start; + instr_time start; } PgStat_FunctionCallUsage; /* ---------- @@ -159,31 +151,32 @@ typedef struct PgStat_BackendSubEntry * the index AM, while tuples_fetched is the number of tuples successfully * fetched by heap_fetch under the control of simple indexscans for this index. * - * tuples_inserted/updated/deleted/hot_updated count attempted actions, - * regardless of whether the transaction committed. delta_live_tuples, + * tuples_inserted/updated/deleted/hot_updated/newpage_updated count attempted + * actions, regardless of whether the transaction committed. delta_live_tuples, * delta_dead_tuples, and changed_tuples are set depending on commit or abort. * Note that delta_live_tuples and delta_dead_tuples can be negative! * ---------- */ typedef struct PgStat_TableCounts { - PgStat_Counter t_numscans; + PgStat_Counter numscans; - PgStat_Counter t_tuples_returned; - PgStat_Counter t_tuples_fetched; + PgStat_Counter tuples_returned; + PgStat_Counter tuples_fetched; - PgStat_Counter t_tuples_inserted; - PgStat_Counter t_tuples_updated; - PgStat_Counter t_tuples_deleted; - PgStat_Counter t_tuples_hot_updated; - bool t_truncdropped; + PgStat_Counter tuples_inserted; + PgStat_Counter tuples_updated; + PgStat_Counter tuples_deleted; + PgStat_Counter tuples_hot_updated; + PgStat_Counter tuples_newpage_updated; + bool truncdropped; - PgStat_Counter t_delta_live_tuples; - PgStat_Counter t_delta_dead_tuples; - PgStat_Counter t_changed_tuples; + PgStat_Counter delta_live_tuples; + PgStat_Counter delta_dead_tuples; + PgStat_Counter changed_tuples; - PgStat_Counter t_blocks_fetched; - PgStat_Counter t_blocks_hit; + PgStat_Counter blocks_fetched; + PgStat_Counter blocks_hit; } PgStat_TableCounts; /* ---------- @@ -203,10 +196,10 @@ typedef struct PgStat_TableCounts */ typedef struct PgStat_TableStatus { - Oid t_id; /* table's OID */ - bool t_shared; /* is it a shared catalog? */ + Oid id; /* table's OID */ + bool shared; /* is it a shared catalog? */ struct PgStat_TableXactStatus *trans; /* lowest subxact's counts */ - PgStat_TableCounts t_counts; /* event counts to be sent */ + PgStat_TableCounts counts; /* event counts to be sent */ Relation relation; /* rel that is using this entry */ } PgStat_TableStatus; @@ -242,7 +235,7 @@ typedef struct PgStat_TableXactStatus * ------------------------------------------------------------ */ -#define PGSTAT_FILE_FORMAT_ID 0x01A5BCA7 +#define PGSTAT_FILE_FORMAT_ID 0x01A5BCAC typedef struct PgStat_ArchiverStats { @@ -276,56 +269,101 @@ typedef struct PgStat_CheckpointerStats PgStat_Counter buf_fsync_backend; } PgStat_CheckpointerStats; + +/* + * Types related to counting IO operations + */ +typedef enum IOObject +{ + IOOBJECT_RELATION, + IOOBJECT_TEMP_RELATION, +} IOObject; + +#define IOOBJECT_NUM_TYPES (IOOBJECT_TEMP_RELATION + 1) + +typedef enum IOContext +{ + IOCONTEXT_BULKREAD, + IOCONTEXT_BULKWRITE, + IOCONTEXT_NORMAL, + IOCONTEXT_VACUUM, +} IOContext; + +#define IOCONTEXT_NUM_TYPES (IOCONTEXT_VACUUM + 1) + +typedef enum IOOp +{ + IOOP_EVICT, + IOOP_EXTEND, + IOOP_FSYNC, + IOOP_HIT, + IOOP_READ, + IOOP_REUSE, + IOOP_WRITE, + IOOP_WRITEBACK, +} IOOp; + +#define IOOP_NUM_TYPES (IOOP_WRITEBACK + 1) + +typedef struct PgStat_BktypeIO +{ + PgStat_Counter counts[IOOBJECT_NUM_TYPES][IOCONTEXT_NUM_TYPES][IOOP_NUM_TYPES]; + PgStat_Counter times[IOOBJECT_NUM_TYPES][IOCONTEXT_NUM_TYPES][IOOP_NUM_TYPES]; +} PgStat_BktypeIO; + +typedef struct PgStat_IO +{ + TimestampTz stat_reset_timestamp; + PgStat_BktypeIO stats[BACKEND_NUM_TYPES]; +} PgStat_IO; + + typedef struct PgStat_StatDBEntry { - PgStat_Counter n_xact_commit; - PgStat_Counter n_xact_rollback; - PgStat_Counter n_blocks_fetched; - PgStat_Counter n_blocks_hit; - PgStat_Counter n_tuples_returned; - PgStat_Counter n_tuples_fetched; - PgStat_Counter n_tuples_inserted; - PgStat_Counter n_tuples_updated; - PgStat_Counter n_tuples_deleted; + PgStat_Counter xact_commit; + PgStat_Counter xact_rollback; + PgStat_Counter blocks_fetched; + PgStat_Counter blocks_hit; + PgStat_Counter tuples_returned; + PgStat_Counter tuples_fetched; + PgStat_Counter tuples_inserted; + PgStat_Counter tuples_updated; + PgStat_Counter tuples_deleted; TimestampTz last_autovac_time; - PgStat_Counter n_conflict_tablespace; - PgStat_Counter n_conflict_lock; - PgStat_Counter n_conflict_snapshot; - PgStat_Counter n_conflict_bufferpin; - PgStat_Counter n_conflict_startup_deadlock; - PgStat_Counter n_temp_files; - PgStat_Counter n_temp_bytes; - PgStat_Counter n_deadlocks; - PgStat_Counter n_checksum_failures; + PgStat_Counter conflict_tablespace; + PgStat_Counter conflict_lock; + PgStat_Counter conflict_snapshot; + PgStat_Counter conflict_logicalslot; + PgStat_Counter conflict_bufferpin; + PgStat_Counter conflict_startup_deadlock; + PgStat_Counter temp_files; + PgStat_Counter temp_bytes; + PgStat_Counter deadlocks; + PgStat_Counter checksum_failures; TimestampTz last_checksum_failure; - PgStat_Counter n_block_read_time; /* times in microseconds */ - PgStat_Counter n_block_write_time; - PgStat_Counter n_sessions; - PgStat_Counter total_session_time; - PgStat_Counter total_active_time; - PgStat_Counter total_idle_in_xact_time; - PgStat_Counter n_sessions_abandoned; - PgStat_Counter n_sessions_fatal; - PgStat_Counter n_sessions_killed; + PgStat_Counter blk_read_time; /* times in microseconds */ + PgStat_Counter blk_write_time; + PgStat_Counter sessions; + PgStat_Counter session_time; + PgStat_Counter active_time; + PgStat_Counter idle_in_transaction_time; + PgStat_Counter sessions_abandoned; + PgStat_Counter sessions_fatal; + PgStat_Counter sessions_killed; TimestampTz stat_reset_timestamp; } PgStat_StatDBEntry; typedef struct PgStat_StatFuncEntry { - PgStat_Counter f_numcalls; + PgStat_Counter numcalls; - PgStat_Counter f_total_time; /* times in microseconds */ - PgStat_Counter f_self_time; + PgStat_Counter total_time; /* times in microseconds */ + PgStat_Counter self_time; } PgStat_StatFuncEntry; typedef struct PgStat_StatReplSlotEntry { - /* - * In PG 15 this field is unused, but not removed, to avoid changing - * PGSTAT_FILE_FORMAT_ID. - */ - NameData slotname_unused; PgStat_Counter spill_txns; PgStat_Counter spill_count; PgStat_Counter spill_bytes; @@ -359,6 +397,7 @@ typedef struct PgStat_StatSubEntry typedef struct PgStat_StatTabEntry { PgStat_Counter numscans; + TimestampTz lastscan; PgStat_Counter tuples_returned; PgStat_Counter tuples_fetched; @@ -367,23 +406,24 @@ typedef struct PgStat_StatTabEntry PgStat_Counter tuples_updated; PgStat_Counter tuples_deleted; PgStat_Counter tuples_hot_updated; + PgStat_Counter tuples_newpage_updated; - PgStat_Counter n_live_tuples; - PgStat_Counter n_dead_tuples; - PgStat_Counter changes_since_analyze; - PgStat_Counter inserts_since_vacuum; + PgStat_Counter live_tuples; + PgStat_Counter dead_tuples; + PgStat_Counter mod_since_analyze; + PgStat_Counter ins_since_vacuum; PgStat_Counter blocks_fetched; PgStat_Counter blocks_hit; - TimestampTz vacuum_timestamp; /* user initiated vacuum */ + TimestampTz last_vacuum_time; /* user initiated vacuum */ PgStat_Counter vacuum_count; - TimestampTz autovac_vacuum_timestamp; /* autovacuum initiated */ - PgStat_Counter autovac_vacuum_count; - TimestampTz analyze_timestamp; /* user initiated */ + TimestampTz last_autovacuum_time; /* autovacuum initiated */ + PgStat_Counter autovacuum_count; + TimestampTz last_analyze_time; /* user initiated */ PgStat_Counter analyze_count; - TimestampTz autovac_analyze_timestamp; /* autovacuum initiated */ - PgStat_Counter autovac_analyze_count; + TimestampTz last_autoanalyze_time; /* autovacuum initiated */ + PgStat_Counter autoanalyze_count; } PgStat_StatTabEntry; typedef struct PgStat_WalStats @@ -399,6 +439,21 @@ typedef struct PgStat_WalStats TimestampTz stat_reset_timestamp; } PgStat_WalStats; +/* + * This struct stores wal-related durations as instr_time, which makes it + * cheaper and easier to accumulate them, by not requiring type + * conversions. During stats flush instr_time will be converted into + * microseconds. + */ +typedef struct PgStat_PendingWalStats +{ + PgStat_Counter wal_buffers_full; + PgStat_Counter wal_write; + PgStat_Counter wal_sync; + instr_time wal_write_time; + instr_time wal_sync_time; +} PgStat_PendingWalStats; + /* * Functions in pgstat.c @@ -421,7 +476,7 @@ extern long pgstat_report_stat(bool force); extern void pgstat_force_next_flush(void); extern void pgstat_reset_counters(void); -extern void pgstat_reset(PgStat_Kind kind, Oid dboid, Oid objectid); +extern void pgstat_reset(PgStat_Kind kind, Oid dboid, Oid objoid); extern void pgstat_reset_of_kind(PgStat_Kind kind); /* stats accessors */ @@ -457,6 +512,29 @@ extern void pgstat_report_checkpointer(void); extern PgStat_CheckpointerStats *pgstat_fetch_stat_checkpointer(void); +/* + * Functions in pgstat_io.c + */ + +extern bool pgstat_bktype_io_stats_valid(PgStat_BktypeIO *backend_io, + BackendType bktype); +extern void pgstat_count_io_op(IOObject io_object, IOContext io_context, IOOp io_op); +extern void pgstat_count_io_op_n(IOObject io_object, IOContext io_context, IOOp io_op, uint32 cnt); +extern instr_time pgstat_prepare_io_time(void); +extern void pgstat_count_io_op_time(IOObject io_object, IOContext io_context, + IOOp io_op, instr_time start_time, uint32 cnt); + +extern PgStat_IO *pgstat_fetch_stat_io(void); +extern const char *pgstat_get_io_context_name(IOContext io_context); +extern const char *pgstat_get_io_object_name(IOObject io_object); + +extern bool pgstat_tracks_io_bktype(BackendType bktype); +extern bool pgstat_tracks_io_object(BackendType bktype, + IOObject io_object, IOContext io_context); +extern bool pgstat_tracks_io_op(BackendType bktype, IOObject io_object, + IOContext io_context, IOOp io_op); + + /* * Functions in pgstat_database.c */ @@ -478,7 +556,8 @@ extern void pgstat_report_connect(Oid dboid); #define pgstat_count_conn_txn_idle_time(n) \ (pgStatTransactionIdleTime += (n)) -extern PgStat_StatDBEntry *pgstat_fetch_stat_dbentry(Oid dbid); +extern PgStat_StatDBEntry *pgstat_fetch_stat_dbentry(Oid dboid); + /* * Functions in pgstat_function.c @@ -493,8 +572,8 @@ extern void pgstat_init_function_usage(struct FunctionCallInfoBaseData *fcinfo, extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize); -extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid); -extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id); +extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid func_id); +extern PgStat_FunctionCounts *find_funcstat_entry(Oid func_id); /* @@ -503,7 +582,7 @@ extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id); extern void pgstat_create_relation(Relation rel); extern void pgstat_drop_relation(Relation rel); -extern void pgstat_copy_relation_stats(Relation dstrel, Relation srcrel); +extern void pgstat_copy_relation_stats(Relation dst, Relation src); extern void pgstat_init_relation(Relation rel); extern void pgstat_assoc_relation(Relation rel); @@ -529,41 +608,41 @@ extern void pgstat_report_analyze(Relation rel, #define pgstat_count_heap_scan(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_numscans++; \ + (rel)->pgstat_info->counts.numscans++; \ } while (0) #define pgstat_count_heap_getnext(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_tuples_returned++; \ + (rel)->pgstat_info->counts.tuples_returned++; \ } while (0) #define pgstat_count_heap_fetch(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_tuples_fetched++; \ + (rel)->pgstat_info->counts.tuples_fetched++; \ } while (0) #define pgstat_count_index_scan(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_numscans++; \ + (rel)->pgstat_info->counts.numscans++; \ } while (0) #define pgstat_count_index_tuples(rel, n) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_tuples_returned += (n); \ + (rel)->pgstat_info->counts.tuples_returned += (n); \ } while (0) #define pgstat_count_buffer_read(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_blocks_fetched++; \ + (rel)->pgstat_info->counts.blocks_fetched++; \ } while (0) #define pgstat_count_buffer_hit(rel) \ do { \ if (pgstat_should_count_relation(rel)) \ - (rel)->pgstat_info->t_counts.t_blocks_hit++; \ + (rel)->pgstat_info->counts.blocks_hit++; \ } while (0) extern void pgstat_count_heap_insert(Relation rel, PgStat_Counter n); -extern void pgstat_count_heap_update(Relation rel, bool hot); +extern void pgstat_count_heap_update(Relation rel, bool hot, bool newpage); extern void pgstat_count_heap_delete(Relation rel); extern void pgstat_count_truncate(Relation rel); extern void pgstat_update_heap_dead_tuples(Relation rel, int delta); @@ -575,7 +654,7 @@ extern void pgstat_twophase_postabort(TransactionId xid, uint16 info, extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry(Oid relid); extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry_ext(bool shared, - Oid relid); + Oid reloid); extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id); @@ -693,7 +772,7 @@ extern PGDLLIMPORT __thread SessionEndType pgStatSessionEndCause; */ /* updated directly by backends and background processes */ -extern PGDLLIMPORT PgStat_WalStats PendingWalStats; +extern PGDLLIMPORT PgStat_PendingWalStats PendingWalStats; #endif /* PGSTAT_H */ diff --git a/src/postgres/include/pgtime.h b/src/postgres/include/pgtime.h index 1c44be8b..9d4b2efe 100644 --- a/src/postgres/include/pgtime.h +++ b/src/postgres/include/pgtime.h @@ -3,7 +3,7 @@ * pgtime.h * PostgreSQL internal timezone library * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/include/pgtime.h @@ -75,8 +75,8 @@ extern bool pg_tz_acceptable(pg_tz *tz); /* these functions are in strftime.c */ -extern size_t pg_strftime(char *s, size_t max, const char *format, - const struct pg_tm *tm); +extern size_t pg_strftime(char *s, size_t maxsize, const char *format, + const struct pg_tm *t); /* these functions and variables are in pgtz.c */ diff --git a/src/postgres/include/pl_gram.h b/src/postgres/include/pl_gram.h index 63d2f09d..4448e806 100644 --- a/src/postgres/include/pl_gram.h +++ b/src/postgres/include/pl_gram.h @@ -138,36 +138,37 @@ K_PG_EXCEPTION_CONTEXT = 354, K_PG_EXCEPTION_DETAIL = 355, K_PG_EXCEPTION_HINT = 356, - K_PRINT_STRICT_PARAMS = 357, - K_PRIOR = 358, - K_QUERY = 359, - K_RAISE = 360, - K_RELATIVE = 361, - K_RETURN = 362, - K_RETURNED_SQLSTATE = 363, - K_REVERSE = 364, - K_ROLLBACK = 365, - K_ROW_COUNT = 366, - K_ROWTYPE = 367, - K_SCHEMA = 368, - K_SCHEMA_NAME = 369, - K_SCROLL = 370, - K_SLICE = 371, - K_SQLSTATE = 372, - K_STACKED = 373, - K_STRICT = 374, - K_TABLE = 375, - K_TABLE_NAME = 376, - K_THEN = 377, - K_TO = 378, - K_TYPE = 379, - K_USE_COLUMN = 380, - K_USE_VARIABLE = 381, - K_USING = 382, - K_VARIABLE_CONFLICT = 383, - K_WARNING = 384, - K_WHEN = 385, - K_WHILE = 386 + K_PG_ROUTINE_OID = 357, + K_PRINT_STRICT_PARAMS = 358, + K_PRIOR = 359, + K_QUERY = 360, + K_RAISE = 361, + K_RELATIVE = 362, + K_RETURN = 363, + K_RETURNED_SQLSTATE = 364, + K_REVERSE = 365, + K_ROLLBACK = 366, + K_ROW_COUNT = 367, + K_ROWTYPE = 368, + K_SCHEMA = 369, + K_SCHEMA_NAME = 370, + K_SCROLL = 371, + K_SLICE = 372, + K_SQLSTATE = 373, + K_STACKED = 374, + K_STRICT = 375, + K_TABLE = 376, + K_TABLE_NAME = 377, + K_THEN = 378, + K_TO = 379, + K_TYPE = 380, + K_USE_COLUMN = 381, + K_USE_VARIABLE = 382, + K_USING = 383, + K_VARIABLE_CONFLICT = 384, + K_WARNING = 385, + K_WHEN = 386, + K_WHILE = 387 }; #endif /* Tokens. */ @@ -270,43 +271,44 @@ #define K_PG_EXCEPTION_CONTEXT 354 #define K_PG_EXCEPTION_DETAIL 355 #define K_PG_EXCEPTION_HINT 356 -#define K_PRINT_STRICT_PARAMS 357 -#define K_PRIOR 358 -#define K_QUERY 359 -#define K_RAISE 360 -#define K_RELATIVE 361 -#define K_RETURN 362 -#define K_RETURNED_SQLSTATE 363 -#define K_REVERSE 364 -#define K_ROLLBACK 365 -#define K_ROW_COUNT 366 -#define K_ROWTYPE 367 -#define K_SCHEMA 368 -#define K_SCHEMA_NAME 369 -#define K_SCROLL 370 -#define K_SLICE 371 -#define K_SQLSTATE 372 -#define K_STACKED 373 -#define K_STRICT 374 -#define K_TABLE 375 -#define K_TABLE_NAME 376 -#define K_THEN 377 -#define K_TO 378 -#define K_TYPE 379 -#define K_USE_COLUMN 380 -#define K_USE_VARIABLE 381 -#define K_USING 382 -#define K_VARIABLE_CONFLICT 383 -#define K_WARNING 384 -#define K_WHEN 385 -#define K_WHILE 386 +#define K_PG_ROUTINE_OID 357 +#define K_PRINT_STRICT_PARAMS 358 +#define K_PRIOR 359 +#define K_QUERY 360 +#define K_RAISE 361 +#define K_RELATIVE 362 +#define K_RETURN 363 +#define K_RETURNED_SQLSTATE 364 +#define K_REVERSE 365 +#define K_ROLLBACK 366 +#define K_ROW_COUNT 367 +#define K_ROWTYPE 368 +#define K_SCHEMA 369 +#define K_SCHEMA_NAME 370 +#define K_SCROLL 371 +#define K_SLICE 372 +#define K_SQLSTATE 373 +#define K_STACKED 374 +#define K_STRICT 375 +#define K_TABLE 376 +#define K_TABLE_NAME 377 +#define K_THEN 378 +#define K_TO 379 +#define K_TYPE 380 +#define K_USE_COLUMN 381 +#define K_USE_VARIABLE 382 +#define K_USING 383 +#define K_VARIABLE_CONFLICT 384 +#define K_WARNING 385 +#define K_WHEN 386 +#define K_WHILE 387 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 120 "pl_gram.y" +#line 117 "pl_gram.y" { core_YYSTYPE core_yystype; /* these fields must match core_YYSTYPE: */ @@ -358,7 +360,7 @@ typedef union YYSTYPE PLpgSQL_case_when *casewhen; } /* Line 1529 of yacc.c. */ -#line 362 "pl_gram.h" +#line 364 "pl_gram.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/src/postgres/include/pl_reserved_kwlist.h b/src/postgres/include/pl_reserved_kwlist.h index 9043fbdd..c116abbb 100644 --- a/src/postgres/include/pl_reserved_kwlist.h +++ b/src/postgres/include/pl_reserved_kwlist.h @@ -7,7 +7,7 @@ * 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-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/pl/plpgsql/src/pl_reserved_kwlist.h diff --git a/src/postgres/include/pl_reserved_kwlist_d.h b/src/postgres/include/pl_reserved_kwlist_d.h index 32689ebd..2dd64d39 100644 --- a/src/postgres/include/pl_reserved_kwlist_d.h +++ b/src/postgres/include/pl_reserved_kwlist_d.h @@ -3,7 +3,7 @@ * pl_reserved_kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/include/pl_unreserved_kwlist.h b/src/postgres/include/pl_unreserved_kwlist.h index ee2be1b2..3e258a6b 100644 --- a/src/postgres/include/pl_unreserved_kwlist.h +++ b/src/postgres/include/pl_unreserved_kwlist.h @@ -7,7 +7,7 @@ * 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-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/pl/plpgsql/src/pl_unreserved_kwlist.h @@ -85,6 +85,7 @@ PG_KEYWORD("pg_datatype_name", K_PG_DATATYPE_NAME) PG_KEYWORD("pg_exception_context", K_PG_EXCEPTION_CONTEXT) PG_KEYWORD("pg_exception_detail", K_PG_EXCEPTION_DETAIL) PG_KEYWORD("pg_exception_hint", K_PG_EXCEPTION_HINT) +PG_KEYWORD("pg_routine_oid", K_PG_ROUTINE_OID) PG_KEYWORD("print_strict_params", K_PRINT_STRICT_PARAMS) PG_KEYWORD("prior", K_PRIOR) PG_KEYWORD("query", K_QUERY) diff --git a/src/postgres/include/pl_unreserved_kwlist_d.h b/src/postgres/include/pl_unreserved_kwlist_d.h index 3ae9467f..c54eb2d5 100644 --- a/src/postgres/include/pl_unreserved_kwlist_d.h +++ b/src/postgres/include/pl_unreserved_kwlist_d.h @@ -3,7 +3,7 @@ * pl_unreserved_kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -80,6 +80,7 @@ static const char UnreservedPLKeywords_kw_string[] = "pg_exception_context\0" "pg_exception_detail\0" "pg_exception_hint\0" + "pg_routine_oid\0" "print_strict_params\0" "prior\0" "query\0" @@ -165,63 +166,64 @@ static const uint16 UnreservedPLKeywords_kw_offsets[] = { 420, 440, 458, - 478, - 484, - 490, - 496, + 473, + 493, + 499, 505, - 512, - 530, - 538, - 547, - 557, - 565, + 511, + 520, + 527, + 545, + 553, + 562, 572, - 584, - 591, - 597, + 580, + 587, + 599, 606, - 614, - 620, - 631, - 636, - 647, - 660, - 678, + 612, + 621, + 629, + 635, + 646, + 651, + 662, + 675, + 693, }; -#define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 82 +#define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 83 static int UnreservedPLKeywords_hash_func(const void *key, size_t keylen) { - static const int16 h[165] = { - 58, 0, 26, 32767, 0, 0, 9, 32767, - 0, 32767, 37, 74, 32767, -7, 32767, 39, - 58, -5, 32767, 31, 32767, 32767, 75, -23, - 32767, 0, 32767, 32767, 32767, -14, 32767, 81, - 32767, 32767, 32767, -36, -9, 32767, 32767, 32767, - 40, 32767, 54, 10, 11, 43, 32767, 0, - 52, 105, -22, 15, 32767, -33, 49, -65, - 48, 32767, 32767, 32767, 25, 49, -47, 37, - 21, 32767, 32767, -15, 70, 32767, 32767, 64, - -10, 126, 32767, 51, 0, 36, 32767, -55, - -22, 32767, 32767, 32767, 32767, 32767, -26, -35, - 32767, 61, 32767, 32767, 32767, -23, 98, 48, - 23, 19, 32767, 7, 35, 5, -18, 71, - 28, 5, 32767, 32767, 32767, 74, 32767, 82, - 32767, 0, 32767, 32767, 66, 0, 0, 50, - 32767, 32767, 5, 2, 0, 32767, 55, 32767, - 32767, 45, 79, 32767, 32767, 73, 22, 0, - 103, 32767, -20, 72, 32767, 0, 29, 32767, - 0, 32767, 32767, 0, 50, 28, 32767, -40, - 32767, 32767, 34, 56, 32767, 32767, 32767, 17, - -36, 32767, 67, 32767, 0 + static const int16 h[167] = { + 0, -26, 32767, 0, 74, -36, 32767, 32767, + 93, 0, 35, 14, 34, -65, -42, 78, + -22, 8, 10, 0, 5, 32767, 10, 26, + 32767, 4, 32767, 32767, -81, -9, -25, 32767, + -17, 11, 0, -43, 11, 8, 45, 0, + 32767, 32767, 32767, 12, 0, 32767, 32, 32767, + 0, 32767, -18, 64, 32767, -2, 31, 32767, + 50, 80, -75, 32767, 32767, 32767, 0, 32767, + 32767, 0, 54, 82, 32767, 32767, 69, 60, + 43, 32767, 0, 95, 21, 1, 27, 0, + 120, 32767, -46, 32767, -57, 32767, 32767, 55, + 70, 32767, 28, 32767, 0, -14, -38, 32767, + 57, 0, 32767, 19, 98, 0, 32767, 68, + 32767, 32767, 32767, 32767, -26, 13, 27, 35, + 37, 32767, 49, -44, 65, -35, 0, 32767, + 32767, 32767, 30, 0, 0, 32767, 26, 42, + 7, 32767, 72, -43, 32767, 0, 32767, 89, + 36, 48, 32767, 32, 38, 3, 32767, 49, + 32767, 0, 51, 0, 32767, 73, 32767, 32767, + 79, 32767, 30, 32767, 0, 0, 50, 32767, + 0, 32767, 32767, 32767, 0, 32767, 32767 }; const unsigned char *k = (const unsigned char *) key; uint32 a = 0; - uint32 b = 0; + uint32 b = 1; while (keylen--) { @@ -230,7 +232,7 @@ UnreservedPLKeywords_hash_func(const void *key, size_t keylen) a = a * 257 + c; b = b * 8191 + c; } - return h[a % 165] + h[b % 165]; + return h[a % 167] + h[b % 167]; } static const ScanKeywordList UnreservedPLKeywords = { diff --git a/src/postgres/include/plpgsql.h b/src/postgres/include/plpgsql.h index e29e6cf4..6723e3d4 100644 --- a/src/postgres/include/plpgsql.h +++ b/src/postgres/include/plpgsql.h @@ -3,7 +3,7 @@ * plpgsql.h - Definitions for the PL/pgSQL * procedural language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -147,6 +147,7 @@ enum typedef enum PLpgSQL_getdiag_kind { PLPGSQL_GETDIAG_ROW_COUNT, + PLPGSQL_GETDIAG_ROUTINE_OID, PLPGSQL_GETDIAG_CONTEXT, PLPGSQL_GETDIAG_ERROR_CONTEXT, PLPGSQL_GETDIAG_ERROR_DETAIL, @@ -1075,7 +1076,6 @@ typedef struct PLpgSQL_execstate /* lookup table to use for executing type casts */ HTAB *cast_hash; - MemoryContext cast_hash_context; /* memory context for statement-lifespan temporary values */ MemoryContext stmt_mcontext; /* current stmt context, or NULL if none */ @@ -1231,11 +1231,11 @@ extern PLpgSQL_plugin **plpgsql_plugin_ptr; /* * Functions in pl_comp.c */ -extern PLpgSQL_function *plpgsql_compile(FunctionCallInfo fcinfo, - bool forValidator); +extern PGDLLEXPORT PLpgSQL_function *plpgsql_compile(FunctionCallInfo fcinfo, + bool forValidator); extern PLpgSQL_function *plpgsql_compile_inline(char *proc_source); -extern void plpgsql_parser_setup(struct ParseState *pstate, - PLpgSQL_expr *expr); +extern PGDLLEXPORT void plpgsql_parser_setup(struct ParseState *pstate, + PLpgSQL_expr *expr); extern bool plpgsql_parse_word(char *word1, const char *yytxt, bool lookup, PLwdatum *wdatum, PLword *word); extern bool plpgsql_parse_dblword(char *word1, char *word2, @@ -1246,9 +1246,9 @@ extern PLpgSQL_type *plpgsql_parse_wordtype(char *ident); extern PLpgSQL_type *plpgsql_parse_cwordtype(List *idents); extern PLpgSQL_type *plpgsql_parse_wordrowtype(char *ident); extern PLpgSQL_type *plpgsql_parse_cwordrowtype(List *idents); -extern PLpgSQL_type *plpgsql_build_datatype(Oid typeOid, int32 typmod, - Oid collation, - TypeName *origtypname); +extern PGDLLEXPORT PLpgSQL_type *plpgsql_build_datatype(Oid typeOid, int32 typmod, + Oid collation, + TypeName *origtypname); extern PLpgSQL_variable *plpgsql_build_variable(const char *refname, int lineno, PLpgSQL_type *dtype, bool add2namespace); @@ -1257,8 +1257,8 @@ extern PLpgSQL_rec *plpgsql_build_record(const char *refname, int lineno, bool add2namespace); extern PLpgSQL_recfield *plpgsql_build_recfield(PLpgSQL_rec *rec, const char *fldname); -extern int plpgsql_recognize_err_condition(const char *condname, - bool allow_sqlstate); +extern PGDLLEXPORT int plpgsql_recognize_err_condition(const char *condname, + bool allow_sqlstate); extern PLpgSQL_condition *plpgsql_parse_err_condition(char *condname); extern void plpgsql_start_datums(void); extern void plpgsql_finish_datums(PLpgSQL_function *function); @@ -1266,11 +1266,6 @@ extern void plpgsql_adddatum(PLpgSQL_datum *newdatum); extern int plpgsql_add_initdatums(int **varnos); extern void plpgsql_HashTableInit(void); -/* - * Functions in pl_handler.c - */ -extern void _PG_init(void); - /* * Functions in pl_exec.c */ @@ -1287,8 +1282,8 @@ extern void plpgsql_exec_event_trigger(PLpgSQL_function *func, extern void plpgsql_xact_cb(XactEvent event, void *arg); extern void plpgsql_subxact_cb(SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid, void *arg); -extern Oid plpgsql_exec_get_datum_type(PLpgSQL_execstate *estate, - PLpgSQL_datum *datum); +extern PGDLLEXPORT Oid plpgsql_exec_get_datum_type(PLpgSQL_execstate *estate, + PLpgSQL_datum *datum); extern void plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, PLpgSQL_datum *datum, Oid *typeId, int32 *typMod, @@ -1303,9 +1298,9 @@ extern void plpgsql_ns_push(const char *label, extern void plpgsql_ns_pop(void); extern PLpgSQL_nsitem *plpgsql_ns_top(void); extern void plpgsql_ns_additem(PLpgSQL_nsitem_type itemtype, int itemno, const char *name); -extern PLpgSQL_nsitem *plpgsql_ns_lookup(PLpgSQL_nsitem *ns_cur, bool localmode, - const char *name1, const char *name2, - const char *name3, int *names_used); +extern PGDLLEXPORT PLpgSQL_nsitem *plpgsql_ns_lookup(PLpgSQL_nsitem *ns_cur, bool localmode, + const char *name1, const char *name2, + const char *name3, int *names_used); extern PLpgSQL_nsitem *plpgsql_ns_lookup_label(PLpgSQL_nsitem *ns_cur, const char *name); extern PLpgSQL_nsitem *plpgsql_ns_find_nearest_loop(PLpgSQL_nsitem *ns_cur); @@ -1313,7 +1308,7 @@ extern PLpgSQL_nsitem *plpgsql_ns_find_nearest_loop(PLpgSQL_nsitem *ns_cur); /* * Other functions in pl_funcs.c */ -extern const char *plpgsql_stmt_typename(PLpgSQL_stmt *stmt); +extern PGDLLEXPORT const char *plpgsql_stmt_typename(PLpgSQL_stmt *stmt); extern const char *plpgsql_getdiag_kindname(PLpgSQL_getdiag_kind kind); extern void plpgsql_free_function_memory(PLpgSQL_function *func); extern void plpgsql_dumptree(PLpgSQL_function *func); diff --git a/src/postgres/include/port.h b/src/postgres/include/port.h index 9f357612..a88d4034 100644 --- a/src/postgres/include/port.h +++ b/src/postgres/include/port.h @@ -3,7 +3,7 @@ * port.h * Header for src/port/ compatibility functions. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port.h @@ -46,14 +46,14 @@ extern bool pg_set_block(pgsocket sock); /* Portable path handling for Unix/Win32 (in path.c) */ -extern bool has_drive_prefix(const char *filename); +extern bool has_drive_prefix(const char *path); extern char *first_dir_separator(const char *filename); extern char *last_dir_separator(const char *filename); extern char *first_path_var_separator(const char *pathlist); extern void join_path_components(char *ret_path, const char *head, const char *tail); extern void canonicalize_path(char *path); -extern void make_native_path(char *path); +extern void make_native_path(char *filename); extern void cleanup_path(char *path); extern bool path_contains_parent_reference(const char *path); extern bool path_is_relative_and_below_cwd(const char *path); @@ -208,15 +208,24 @@ extern unsigned char pg_ascii_tolower(unsigned char ch); #undef printf #endif -extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args); +extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args) pg_attribute_printf(3, 0); extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4); -extern int pg_vsprintf(char *str, const char *fmt, va_list args); +extern int pg_vsprintf(char *str, const char *fmt, va_list args) pg_attribute_printf(2, 0); extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3); -extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args); +extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args) pg_attribute_printf(2, 0); extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3); -extern int pg_vprintf(const char *fmt, va_list args); +extern int pg_vprintf(const char *fmt, va_list args) pg_attribute_printf(1, 0); extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2); +#ifndef WIN32 +/* + * We add a pg_ prefix as a warning that the Windows implementations have the + * non-standard side-effect of changing the current file position. + */ +#define pg_pread pread +#define pg_pwrite pwrite +#endif + /* * We use __VA_ARGS__ for printf to prevent replacing references to * the "printf" format archetype in format() attribute declarations. @@ -288,7 +297,6 @@ extern int pgunlink(const char *path); #if defined(WIN32) && !defined(__CYGWIN__) extern int pgsymlink(const char *oldpath, const char *newpath); extern int pgreadlink(const char *path, char *buf, size_t size); -extern bool pgwin32_is_junction(const char *path); #define symlink(oldpath, newpath) pgsymlink(oldpath, newpath) #define readlink(path, buf, size) pgreadlink(path, buf, size) @@ -332,11 +340,6 @@ extern FILE *pgwin32_popen(const char *command, const char *type); #define popen(a,b) pgwin32_popen(a,b) #define pclose(a) _pclose(a) -/* New versions of MingW have gettimeofday, old mingw and msvc don't */ -#ifndef HAVE_GETTIMEOFDAY -/* Last parameter not used */ -extern int gettimeofday(struct timeval *tp, struct timezone *tzp); -#endif #else /* !WIN32 */ /* @@ -370,10 +373,6 @@ extern int gettimeofday(struct timeval *tp, struct timezone *tzp); #define pgoff_t off_t #endif -#ifndef HAVE_FLS -extern int fls(int mask); -#endif - #ifndef HAVE_GETPEEREID /* On Windows, Perl might have incompatible definitions of uid_t and gid_t. */ #ifndef PLPERL_HAVE_UID_GID @@ -401,16 +400,13 @@ extern int getpeereid(int sock, uid_t *uid, gid_t *gid); extern void explicit_bzero(void *buf, size_t len); #endif -#ifndef HAVE_STRTOF -extern float strtof(const char *nptr, char **endptr); -#endif - #ifdef HAVE_BUGGY_STRTOF extern float pg_strtof(const char *nptr, char **endptr); #define strtof(a,b) (pg_strtof((a),(b))) #endif -#ifndef HAVE_LINK +#ifdef WIN32 +/* src/port/win32link.c */ extern int link(const char *src, const char *dst); #endif @@ -424,25 +420,6 @@ extern char *mkdtemp(char *path); extern int inet_aton(const char *cp, struct in_addr *addr); #endif -/* - * Windows and older Unix don't have pread(2) and pwrite(2). We have - * replacement functions, but they have slightly different semantics so we'll - * use a name with a pg_ prefix to avoid confusion. - */ -#ifdef HAVE_PREAD -#define pg_pread pread -#else -extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset); -#endif - -#ifdef HAVE_PWRITE -#define pg_pwrite pwrite -#else -extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset); -#endif - -/* For pg_pwritev() and pg_preadv(), see port/pg_iovec.h. */ - #if !HAVE_DECL_STRLCAT extern size_t strlcat(char *dst, const char *src, size_t siz); #endif @@ -455,37 +432,6 @@ extern size_t strlcpy(char *dst, const char *src, size_t siz); extern size_t strnlen(const char *str, size_t maxlen); #endif -#ifndef HAVE_SETENV -extern int setenv(const char *name, const char *value, int overwrite); -#endif - -#ifndef HAVE_UNSETENV -extern int unsetenv(const char *name); -#endif - -#ifndef HAVE_DLOPEN -extern void *dlopen(const char *file, int mode); -extern void *dlsym(void *handle, const char *symbol); -extern int dlclose(void *handle); -extern char *dlerror(void); -#endif - -/* - * In some older systems, the RTLD_NOW flag isn't defined and the mode - * argument to dlopen must always be 1. - */ -#if !HAVE_DECL_RTLD_NOW -#define RTLD_NOW 1 -#endif - -/* - * The RTLD_GLOBAL flag is wanted if available, but it doesn't exist - * everywhere. If it doesn't exist, set it to 0 so it has no effect. - */ -#if !HAVE_DECL_RTLD_GLOBAL -#define RTLD_GLOBAL 0 -#endif - /* thread.c */ #ifndef WIN32 extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen); @@ -506,7 +452,7 @@ extern void qsort_arg(void *base, size_t nel, size_t elsize, extern void qsort_interruptible(void *base, size_t nel, size_t elsize, qsort_arg_comparator cmp, void *arg); -extern void *bsearch_arg(const void *key, const void *base, +extern void *bsearch_arg(const void *key, const void *base0, size_t nmemb, size_t size, int (*compar) (const void *, const void *, void *), void *arg); @@ -539,15 +485,36 @@ extern int pg_check_dir(const char *dir); extern int pg_mkdir_p(char *path, int omode); /* port/pqsignal.c */ -typedef void (*pqsigfunc) (int signo); +typedef void (*pqsigfunc) (SIGNAL_ARGS); extern pqsigfunc pqsignal(int signo, pqsigfunc func); /* port/quotes.c */ extern char *escape_single_quotes_ascii(const char *src); /* common/wait_error.c */ -extern char *wait_result_to_str(int exit_status); +extern char *wait_result_to_str(int exitstatus); extern bool wait_result_is_signal(int exit_status, int signum); extern bool wait_result_is_any_signal(int exit_status, bool include_command_not_found); +extern int wait_result_to_exit_code(int exit_status); + +/* + * Interfaces that we assume all Unix system have. We retain individual macros + * for better documentation. + * + * For symlink-related functions, there is often no need to test these macros, + * because we provided basic support on Windows that can work with absolute + * paths to directories. Code that wants to test for complete symlink support + * (including relative paths and non-directories) should be conditional on + * HAVE_READLINK or HAVE_SYMLINK. + */ +#ifndef WIN32 +#define HAVE_GETRLIMIT 1 +#define HAVE_POLL 1 +#define HAVE_POLL_H 1 +#define HAVE_READLINK 1 +#define HAVE_SETSID 1 +#define HAVE_SHM_OPEN 1 +#define HAVE_SYMLINK 1 +#endif #endif /* PG_PORT_H */ diff --git a/src/postgres/include/port/atomics.h b/src/postgres/include/port/atomics.h index 9550e04a..bbff945e 100644 --- a/src/postgres/include/port/atomics.h +++ b/src/postgres/include/port/atomics.h @@ -28,7 +28,7 @@ * For an introduction to using memory barriers within the PostgreSQL backend, * see src/backend/storage/lmgr/README.barrier * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port/atomics.h @@ -63,13 +63,10 @@ * compiler barrier. * */ -#if defined(__arm__) || defined(__arm) || \ - defined(__aarch64__) || defined(__aarch64) +#if defined(__arm__) || defined(__arm) || defined(__aarch64__) #include "port/atomics/arch-arm.h" #elif defined(__i386__) || defined(__i386) || defined(__x86_64__) #include "port/atomics/arch-x86.h" -#elif defined(__ia64__) || defined(__ia64) -#include "port/atomics/arch-ia64.h" #elif defined(__ppc__) || defined(__powerpc__) || defined(__ppc64__) || defined(__powerpc64__) #include "port/atomics/arch-ppc.h" #elif defined(__hppa) || defined(__hppa__) @@ -95,8 +92,6 @@ #include "port/atomics/generic-gcc.h" #elif defined(_MSC_VER) #include "port/atomics/generic-msvc.h" -#elif defined(__hpux) && defined(__ia64) && !defined(__GNUC__) -#include "port/atomics/generic-acc.h" #elif defined(__SUNPRO_C) && !defined(__GNUC__) #include "port/atomics/generic-sunpro.h" #else diff --git a/src/postgres/include/port/atomics/arch-arm.h b/src/postgres/include/port/atomics/arch-arm.h index 9fe8f1b9..c90bf580 100644 --- a/src/postgres/include/port/atomics/arch-arm.h +++ b/src/postgres/include/port/atomics/arch-arm.h @@ -3,7 +3,7 @@ * arch-arm.h * Atomic operations considerations specific to ARM * - * Portions Copyright (c) 2013-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2013-2023, PostgreSQL Global Development Group * * NOTES: * @@ -21,7 +21,7 @@ * 64 bit atomics on ARM32 are implemented using kernel fallbacks and thus * might be slow, so disable entirely. On ARM64 that problem doesn't exist. */ -#if !defined(__aarch64__) && !defined(__aarch64) +#if !defined(__aarch64__) #define PG_DISABLE_64_BIT_ATOMICS #else /* @@ -29,4 +29,4 @@ * general purpose register is atomic. */ #define PG_HAVE_8BYTE_SINGLE_COPY_ATOMICITY -#endif /* __aarch64__ || __aarch64 */ +#endif /* __aarch64__ */ diff --git a/src/postgres/include/port/atomics/arch-ppc.h b/src/postgres/include/port/atomics/arch-ppc.h index eb645136..d992d4c8 100644 --- a/src/postgres/include/port/atomics/arch-ppc.h +++ b/src/postgres/include/port/atomics/arch-ppc.h @@ -3,7 +3,7 @@ * arch-ppc.h * Atomic operations considerations specific to PowerPC * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES: @@ -90,12 +90,12 @@ pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, (int32) *expected >= PG_INT16_MIN) __asm__ __volatile__( " sync \n" - " lwarx %0,0,%5 \n" + " lwarx %0,0,%5,1 \n" " cmpwi %0,%3 \n" - " bne $+12 \n" /* branch to isync */ + " bne $+12 \n" /* branch to lwsync */ " stwcx. %4,0,%5 \n" " bne $-16 \n" /* branch to lwarx */ - " isync \n" + " lwsync \n" " mfcr %1 \n" : "=&r"(found), "=r"(condition_register), "+m"(ptr->value) : "i"(*expected), "r"(newval), "r"(&ptr->value) @@ -104,12 +104,12 @@ pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, #endif __asm__ __volatile__( " sync \n" - " lwarx %0,0,%5 \n" + " lwarx %0,0,%5,1 \n" " cmpw %0,%3 \n" - " bne $+12 \n" /* branch to isync */ + " bne $+12 \n" /* branch to lwsync */ " stwcx. %4,0,%5 \n" " bne $-16 \n" /* branch to lwarx */ - " isync \n" + " lwsync \n" " mfcr %1 \n" : "=&r"(found), "=r"(condition_register), "+m"(ptr->value) : "r"(*expected), "r"(newval), "r"(&ptr->value) @@ -138,11 +138,11 @@ pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_) add_ <= PG_INT16_MAX && add_ >= PG_INT16_MIN) __asm__ __volatile__( " sync \n" - " lwarx %1,0,%4 \n" + " lwarx %1,0,%4,1 \n" " addi %0,%1,%3 \n" " stwcx. %0,0,%4 \n" " bne $-12 \n" /* branch to lwarx */ - " isync \n" + " lwsync \n" : "=&r"(_t), "=&b"(res), "+m"(ptr->value) : "i"(add_), "r"(&ptr->value) : "memory", "cc"); @@ -150,11 +150,11 @@ pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_) #endif __asm__ __volatile__( " sync \n" - " lwarx %1,0,%4 \n" + " lwarx %1,0,%4,1 \n" " add %0,%1,%3 \n" " stwcx. %0,0,%4 \n" " bne $-12 \n" /* branch to lwarx */ - " isync \n" + " lwsync \n" : "=&r"(_t), "=&r"(res), "+m"(ptr->value) : "r"(add_), "r"(&ptr->value) : "memory", "cc"); @@ -180,12 +180,12 @@ pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, (int64) *expected >= PG_INT16_MIN) __asm__ __volatile__( " sync \n" - " ldarx %0,0,%5 \n" + " ldarx %0,0,%5,1 \n" " cmpdi %0,%3 \n" - " bne $+12 \n" /* branch to isync */ + " bne $+12 \n" /* branch to lwsync */ " stdcx. %4,0,%5 \n" " bne $-16 \n" /* branch to ldarx */ - " isync \n" + " lwsync \n" " mfcr %1 \n" : "=&r"(found), "=r"(condition_register), "+m"(ptr->value) : "i"(*expected), "r"(newval), "r"(&ptr->value) @@ -194,12 +194,12 @@ pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, #endif __asm__ __volatile__( " sync \n" - " ldarx %0,0,%5 \n" + " ldarx %0,0,%5,1 \n" " cmpd %0,%3 \n" - " bne $+12 \n" /* branch to isync */ + " bne $+12 \n" /* branch to lwsync */ " stdcx. %4,0,%5 \n" " bne $-16 \n" /* branch to ldarx */ - " isync \n" + " lwsync \n" " mfcr %1 \n" : "=&r"(found), "=r"(condition_register), "+m"(ptr->value) : "r"(*expected), "r"(newval), "r"(&ptr->value) @@ -224,11 +224,11 @@ pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_) add_ <= PG_INT16_MAX && add_ >= PG_INT16_MIN) __asm__ __volatile__( " sync \n" - " ldarx %1,0,%4 \n" + " ldarx %1,0,%4,1 \n" " addi %0,%1,%3 \n" " stdcx. %0,0,%4 \n" " bne $-12 \n" /* branch to ldarx */ - " isync \n" + " lwsync \n" : "=&r"(_t), "=&b"(res), "+m"(ptr->value) : "i"(add_), "r"(&ptr->value) : "memory", "cc"); @@ -236,11 +236,11 @@ pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_) #endif __asm__ __volatile__( " sync \n" - " ldarx %1,0,%4 \n" + " ldarx %1,0,%4,1 \n" " add %0,%1,%3 \n" " stdcx. %0,0,%4 \n" " bne $-12 \n" /* branch to ldarx */ - " isync \n" + " lwsync \n" : "=&r"(_t), "=&r"(res), "+m"(ptr->value) : "r"(add_), "r"(&ptr->value) : "memory", "cc"); diff --git a/src/postgres/include/port/atomics/arch-x86.h b/src/postgres/include/port/atomics/arch-x86.h index cef1ba72..bb84b9ba 100644 --- a/src/postgres/include/port/atomics/arch-x86.h +++ b/src/postgres/include/port/atomics/arch-x86.h @@ -7,7 +7,7 @@ * support for xadd and cmpxchg. Given that the 386 isn't supported anywhere * anymore that's not much of a restriction luckily. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES: @@ -140,7 +140,7 @@ pg_spin_delay_impl(void) static inline bool pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr) { - register char _res = 1; + char _res = 1; __asm__ __volatile__( " lock \n" diff --git a/src/postgres/include/port/atomics/fallback.h b/src/postgres/include/port/atomics/fallback.h index 1cdef5f2..a9e8e77c 100644 --- a/src/postgres/include/port/atomics/fallback.h +++ b/src/postgres/include/port/atomics/fallback.h @@ -4,7 +4,7 @@ * Fallback for platforms without spinlock and/or atomics support. Slower * than native atomics support, but not unusably slow. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port/atomics/fallback.h @@ -93,7 +93,7 @@ typedef struct pg_atomic_flag typedef struct pg_atomic_uint32 { /* Check pg_atomic_flag's definition above for an explanation */ -#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */ +#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC */ int sema[4]; #else int sema; @@ -111,7 +111,7 @@ typedef struct pg_atomic_uint32 typedef struct pg_atomic_uint64 { /* Check pg_atomic_flag's definition above for an explanation */ -#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */ +#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC */ int sema[4]; #else int sema; diff --git a/src/postgres/include/port/atomics/generic-gcc.h b/src/postgres/include/port/atomics/generic-gcc.h index 6c566aff..da04e9f0 100644 --- a/src/postgres/include/port/atomics/generic-gcc.h +++ b/src/postgres/include/port/atomics/generic-gcc.h @@ -3,7 +3,7 @@ * generic-gcc.h * Atomic operations, implemented using gcc (or compatible) intrinsics. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES: diff --git a/src/postgres/include/port/atomics/generic.h b/src/postgres/include/port/atomics/generic.h index a1f24562..cb5804ad 100644 --- a/src/postgres/include/port/atomics/generic.h +++ b/src/postgres/include/port/atomics/generic.h @@ -4,7 +4,7 @@ * Implement higher level operations based on some lower level atomic * operations. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port/atomics/generic.h diff --git a/src/postgres/include/port/pg_bitutils.h b/src/postgres/include/port/pg_bitutils.h index 04e58cd1..21a4fa03 100644 --- a/src/postgres/include/port/pg_bitutils.h +++ b/src/postgres/include/port/pg_bitutils.h @@ -4,7 +4,7 @@ * Miscellaneous functions for bit-wise operations. * * - * Copyright (c) 2019-2022, PostgreSQL Global Development Group + * Copyright (c) 2019-2023, PostgreSQL Global Development Group * * src/include/port/pg_bitutils.h * @@ -13,6 +13,21 @@ #ifndef PG_BITUTILS_H #define PG_BITUTILS_H +#ifdef _MSC_VER +#include +#define HAVE_BITSCAN_FORWARD +#define HAVE_BITSCAN_REVERSE + +#else +#if defined(HAVE__BUILTIN_CTZ) +#define HAVE_BITSCAN_FORWARD +#endif + +#if defined(HAVE__BUILTIN_CLZ) +#define HAVE_BITSCAN_REVERSE +#endif +#endif /* _MSC_VER */ + extern PGDLLIMPORT const uint8 pg_leftmost_one_pos[256]; extern PGDLLIMPORT const uint8 pg_rightmost_one_pos[256]; extern PGDLLIMPORT const uint8 pg_number_of_ones[256]; @@ -29,6 +44,13 @@ pg_leftmost_one_pos32(uint32 word) Assert(word != 0); return 31 - __builtin_clz(word); +#elif defined(_MSC_VER) + unsigned long result; + bool non_zero; + + non_zero = _BitScanReverse(&result, word); + Assert(non_zero); + return (int) result; #else int shift = 32 - 8; @@ -57,8 +79,16 @@ pg_leftmost_one_pos64(uint64 word) return 63 - __builtin_clzll(word); #else #error must have a working 64-bit integer datatype -#endif -#else /* !HAVE__BUILTIN_CLZ */ +#endif /* HAVE_LONG_INT_64 */ + +#elif defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_ARM64)) + unsigned long result; + bool non_zero; + + non_zero = _BitScanReverse64(&result, word); + Assert(non_zero); + return (int) result; +#else int shift = 64 - 8; Assert(word != 0); @@ -82,6 +112,13 @@ pg_rightmost_one_pos32(uint32 word) Assert(word != 0); return __builtin_ctz(word); +#elif defined(_MSC_VER) + unsigned long result; + bool non_zero; + + non_zero = _BitScanForward(&result, word); + Assert(non_zero); + return (int) result; #else int result = 0; @@ -113,8 +150,16 @@ pg_rightmost_one_pos64(uint64 word) return __builtin_ctzll(word); #else #error must have a working 64-bit integer datatype -#endif -#else /* !HAVE__BUILTIN_CTZ */ +#endif /* HAVE_LONG_INT_64 */ + +#elif defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_ARM64)) + unsigned long result; + bool non_zero; + + non_zero = _BitScanForward64(&result, word); + Assert(non_zero); + return (int) result; +#else int result = 0; Assert(word != 0); @@ -175,16 +220,6 @@ pg_nextpower2_64(uint64 num) return ((uint64) 1) << (pg_leftmost_one_pos64(num) + 1); } -/* - * pg_nextpower2_size_t - * Returns the next higher power of 2 above 'num', for a size_t input. - */ -#if SIZEOF_SIZE_T == 4 -#define pg_nextpower2_size_t(num) pg_nextpower2_32(num) -#else -#define pg_nextpower2_size_t(num) pg_nextpower2_64(num) -#endif - /* * pg_prevpower2_32 * Returns the next lower power of 2 below 'num', or 'num' if it's @@ -211,16 +246,6 @@ pg_prevpower2_64(uint64 num) return ((uint64) 1) << pg_leftmost_one_pos64(num); } -/* - * pg_prevpower2_size_t - * Returns the next lower power of 2 below 'num', for a size_t input. - */ -#if SIZEOF_SIZE_T == 4 -#define pg_prevpower2_size_t(num) pg_prevpower2_32(num) -#else -#define pg_prevpower2_size_t(num) pg_prevpower2_64(num) -#endif - /* * pg_ceil_log2_32 * Returns equivalent of ceil(log2(num)) @@ -299,4 +324,16 @@ pg_rotate_left32(uint32 word, int n) return (word << n) | (word >> (32 - n)); } +/* size_t variants of the above, as required */ + +#if SIZEOF_SIZE_T == 4 +#define pg_leftmost_one_pos_size_t pg_leftmost_one_pos32 +#define pg_nextpower2_size_t pg_nextpower2_32 +#define pg_prevpower2_size_t pg_prevpower2_32 +#else +#define pg_leftmost_one_pos_size_t pg_leftmost_one_pos64 +#define pg_nextpower2_size_t pg_nextpower2_64 +#define pg_prevpower2_size_t pg_prevpower2_64 +#endif + #endif /* PG_BITUTILS_H */ diff --git a/src/postgres/include/port/pg_bswap.h b/src/postgres/include/port/pg_bswap.h index 4033d2bf..80abd750 100644 --- a/src/postgres/include/port/pg_bswap.h +++ b/src/postgres/include/port/pg_bswap.h @@ -11,7 +11,7 @@ * return the same. Use caution when using these wrapper macros with signed * integers. * - * Copyright (c) 2015-2022, PostgreSQL Global Development Group + * Copyright (c) 2015-2023, PostgreSQL Global Development Group * * src/include/port/pg_bswap.h * diff --git a/src/postgres/include/port/pg_crc32c.h b/src/postgres/include/port/pg_crc32c.h index d7668651..7f877926 100644 --- a/src/postgres/include/port/pg_crc32c.h +++ b/src/postgres/include/port/pg_crc32c.h @@ -23,7 +23,7 @@ * EQ_CRC32C(c1, c2) * Check for equality of two CRCs. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port/pg_crc32c.h diff --git a/src/postgres/include/port/simd.h b/src/postgres/include/port/simd.h new file mode 100644 index 00000000..1fa6c3bc --- /dev/null +++ b/src/postgres/include/port/simd.h @@ -0,0 +1,375 @@ +/*------------------------------------------------------------------------- + * + * simd.h + * Support for platform-specific vector operations. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/port/simd.h + * + * NOTES + * - VectorN in this file refers to a register where the element operands + * are N bits wide. The vector width is platform-specific, so users that care + * about that will need to inspect "sizeof(VectorN)". + * + *------------------------------------------------------------------------- + */ +#ifndef SIMD_H +#define SIMD_H + +#if (defined(__x86_64__) || defined(_M_AMD64)) +/* + * SSE2 instructions are part of the spec for the 64-bit x86 ISA. We assume + * that compilers targeting this architecture understand SSE2 intrinsics. + * + * We use emmintrin.h rather than the comprehensive header immintrin.h in + * order to exclude extensions beyond SSE2. This is because MSVC, at least, + * will allow the use of intrinsics that haven't been enabled at compile + * time. + */ +#include +#define USE_SSE2 +typedef __m128i Vector8; +typedef __m128i Vector32; + +#elif defined(__aarch64__) && defined(__ARM_NEON) +/* + * We use the Neon instructions if the compiler provides access to them (as + * indicated by __ARM_NEON) and we are on aarch64. While Neon support is + * technically optional for aarch64, it appears that all available 64-bit + * hardware does have it. Neon exists in some 32-bit hardware too, but we + * could not realistically use it there without a run-time check, which seems + * not worth the trouble for now. + */ +#include +#define USE_NEON +typedef uint8x16_t Vector8; +typedef uint32x4_t Vector32; + +#else +/* + * If no SIMD instructions are available, we can in some cases emulate vector + * operations using bitwise operations on unsigned integers. Note that many + * of the functions in this file presently do not have non-SIMD + * implementations. In particular, none of the functions involving Vector32 + * are implemented without SIMD since it's likely not worthwhile to represent + * two 32-bit integers using a uint64. + */ +#define USE_NO_SIMD +typedef uint64 Vector8; +#endif + +/* load/store operations */ +static inline void vector8_load(Vector8 *v, const uint8 *s); +#ifndef USE_NO_SIMD +static inline void vector32_load(Vector32 *v, const uint32 *s); +#endif + +/* assignment operations */ +static inline Vector8 vector8_broadcast(const uint8 c); +#ifndef USE_NO_SIMD +static inline Vector32 vector32_broadcast(const uint32 c); +#endif + +/* element-wise comparisons to a scalar */ +static inline bool vector8_has(const Vector8 v, const uint8 c); +static inline bool vector8_has_zero(const Vector8 v); +static inline bool vector8_has_le(const Vector8 v, const uint8 c); +static inline bool vector8_is_highbit_set(const Vector8 v); +#ifndef USE_NO_SIMD +static inline bool vector32_is_highbit_set(const Vector32 v); +#endif + +/* arithmetic operations */ +static inline Vector8 vector8_or(const Vector8 v1, const Vector8 v2); +#ifndef USE_NO_SIMD +static inline Vector32 vector32_or(const Vector32 v1, const Vector32 v2); +static inline Vector8 vector8_ssub(const Vector8 v1, const Vector8 v2); +#endif + +/* + * comparisons between vectors + * + * Note: These return a vector rather than boolean, which is why we don't + * have non-SIMD implementations. + */ +#ifndef USE_NO_SIMD +static inline Vector8 vector8_eq(const Vector8 v1, const Vector8 v2); +static inline Vector32 vector32_eq(const Vector32 v1, const Vector32 v2); +#endif + +/* + * Load a chunk of memory into the given vector. + */ +static inline void +vector8_load(Vector8 *v, const uint8 *s) +{ +#if defined(USE_SSE2) + *v = _mm_loadu_si128((const __m128i *) s); +#elif defined(USE_NEON) + *v = vld1q_u8(s); +#else + memcpy(v, s, sizeof(Vector8)); +#endif +} + +#ifndef USE_NO_SIMD +static inline void +vector32_load(Vector32 *v, const uint32 *s) +{ +#ifdef USE_SSE2 + *v = _mm_loadu_si128((const __m128i *) s); +#elif defined(USE_NEON) + *v = vld1q_u32(s); +#endif +} +#endif /* ! USE_NO_SIMD */ + +/* + * Create a vector with all elements set to the same value. + */ +static inline Vector8 +vector8_broadcast(const uint8 c) +{ +#if defined(USE_SSE2) + return _mm_set1_epi8(c); +#elif defined(USE_NEON) + return vdupq_n_u8(c); +#else + return ~UINT64CONST(0) / 0xFF * c; +#endif +} + +#ifndef USE_NO_SIMD +static inline Vector32 +vector32_broadcast(const uint32 c) +{ +#ifdef USE_SSE2 + return _mm_set1_epi32(c); +#elif defined(USE_NEON) + return vdupq_n_u32(c); +#endif +} +#endif /* ! USE_NO_SIMD */ + +/* + * Return true if any elements in the vector are equal to the given scalar. + */ +static inline bool +vector8_has(const Vector8 v, const uint8 c) +{ + bool result; + + /* pre-compute the result for assert checking */ +#ifdef USE_ASSERT_CHECKING + bool assert_result = false; + + for (Size i = 0; i < sizeof(Vector8); i++) + { + if (((const uint8 *) &v)[i] == c) + { + assert_result = true; + break; + } + } +#endif /* USE_ASSERT_CHECKING */ + +#if defined(USE_NO_SIMD) + /* any bytes in v equal to c will evaluate to zero via XOR */ + result = vector8_has_zero(v ^ vector8_broadcast(c)); +#else + result = vector8_is_highbit_set(vector8_eq(v, vector8_broadcast(c))); +#endif + + Assert(assert_result == result); + return result; +} + +/* + * Convenience function equivalent to vector8_has(v, 0) + */ +static inline bool +vector8_has_zero(const Vector8 v) +{ +#if defined(USE_NO_SIMD) + /* + * We cannot call vector8_has() here, because that would lead to a + * circular definition. + */ + return vector8_has_le(v, 0); +#else + return vector8_has(v, 0); +#endif +} + +/* + * Return true if any elements in the vector are less than or equal to the + * given scalar. + */ +static inline bool +vector8_has_le(const Vector8 v, const uint8 c) +{ + bool result = false; + + /* pre-compute the result for assert checking */ +#ifdef USE_ASSERT_CHECKING + bool assert_result = false; + + for (Size i = 0; i < sizeof(Vector8); i++) + { + if (((const uint8 *) &v)[i] <= c) + { + assert_result = true; + break; + } + } +#endif /* USE_ASSERT_CHECKING */ + +#if defined(USE_NO_SIMD) + + /* + * To find bytes <= c, we can use bitwise operations to find bytes < c+1, + * but it only works if c+1 <= 128 and if the highest bit in v is not set. + * Adapted from + * https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord + */ + if ((int64) v >= 0 && c < 0x80) + result = (v - vector8_broadcast(c + 1)) & ~v & vector8_broadcast(0x80); + else + { + /* one byte at a time */ + for (Size i = 0; i < sizeof(Vector8); i++) + { + if (((const uint8 *) &v)[i] <= c) + { + result = true; + break; + } + } + } +#else + + /* + * Use saturating subtraction to find bytes <= c, which will present as + * NUL bytes. This approach is a workaround for the lack of unsigned + * comparison instructions on some architectures. + */ + result = vector8_has_zero(vector8_ssub(v, vector8_broadcast(c))); +#endif + + Assert(assert_result == result); + return result; +} + +/* + * Return true if the high bit of any element is set + */ +static inline bool +vector8_is_highbit_set(const Vector8 v) +{ +#ifdef USE_SSE2 + return _mm_movemask_epi8(v) != 0; +#elif defined(USE_NEON) + return vmaxvq_u8(v) > 0x7F; +#else + return v & vector8_broadcast(0x80); +#endif +} + +/* + * Exactly like vector8_is_highbit_set except for the input type, so it + * looks at each byte separately. + * + * XXX x86 uses the same underlying type for 8-bit, 16-bit, and 32-bit + * integer elements, but Arm does not, hence the need for a separate + * function. We could instead adopt the behavior of Arm's vmaxvq_u32(), i.e. + * check each 32-bit element, but that would require an additional mask + * operation on x86. + */ +#ifndef USE_NO_SIMD +static inline bool +vector32_is_highbit_set(const Vector32 v) +{ +#if defined(USE_NEON) + return vector8_is_highbit_set((Vector8) v); +#else + return vector8_is_highbit_set(v); +#endif +} +#endif /* ! USE_NO_SIMD */ + +/* + * Return the bitwise OR of the inputs + */ +static inline Vector8 +vector8_or(const Vector8 v1, const Vector8 v2) +{ +#ifdef USE_SSE2 + return _mm_or_si128(v1, v2); +#elif defined(USE_NEON) + return vorrq_u8(v1, v2); +#else + return v1 | v2; +#endif +} + +#ifndef USE_NO_SIMD +static inline Vector32 +vector32_or(const Vector32 v1, const Vector32 v2) +{ +#ifdef USE_SSE2 + return _mm_or_si128(v1, v2); +#elif defined(USE_NEON) + return vorrq_u32(v1, v2); +#endif +} +#endif /* ! USE_NO_SIMD */ + +/* + * Return the result of subtracting the respective elements of the input + * vectors using saturation (i.e., if the operation would yield a value less + * than zero, zero is returned instead). For more information on saturation + * arithmetic, see https://en.wikipedia.org/wiki/Saturation_arithmetic + */ +#ifndef USE_NO_SIMD +static inline Vector8 +vector8_ssub(const Vector8 v1, const Vector8 v2) +{ +#ifdef USE_SSE2 + return _mm_subs_epu8(v1, v2); +#elif defined(USE_NEON) + return vqsubq_u8(v1, v2); +#endif +} +#endif /* ! USE_NO_SIMD */ + +/* + * Return a vector with all bits set in each lane where the corresponding + * lanes in the inputs are equal. + */ +#ifndef USE_NO_SIMD +static inline Vector8 +vector8_eq(const Vector8 v1, const Vector8 v2) +{ +#ifdef USE_SSE2 + return _mm_cmpeq_epi8(v1, v2); +#elif defined(USE_NEON) + return vceqq_u8(v1, v2); +#endif +} +#endif /* ! USE_NO_SIMD */ + +#ifndef USE_NO_SIMD +static inline Vector32 +vector32_eq(const Vector32 v1, const Vector32 v2) +{ +#ifdef USE_SSE2 + return _mm_cmpeq_epi32(v1, v2); +#elif defined(USE_NEON) + return vceqq_u32(v1, v2); +#endif +} +#endif /* ! USE_NO_SIMD */ + +#endif /* SIMD_H */ diff --git a/src/postgres/include/portability/instr_time.h b/src/postgres/include/portability/instr_time.h index ca09a160..cc85138e 100644 --- a/src/postgres/include/portability/instr_time.h +++ b/src/postgres/include/portability/instr_time.h @@ -4,10 +4,9 @@ * portable high-precision interval timing * * This file provides an abstraction layer to hide portability issues in - * interval timing. On Unix we use clock_gettime() if available, else - * gettimeofday(). On Windows, gettimeofday() gives a low-precision result - * so we must use QueryPerformanceCounter() instead. These macros also give - * some breathing room to use other high-precision-timing APIs. + * interval timing. On Unix we use clock_gettime(), and on Windows we use + * QueryPerformanceCounter(). These macros also give some breathing room to + * use other high-precision-timing APIs. * * The basic data type is instr_time, which all callers should treat as an * opaque typedef. instr_time can store either an absolute time (of @@ -35,6 +34,8 @@ * * INSTR_TIME_GET_MICROSEC(t) convert t to uint64 (in microseconds) * + * INSTR_TIME_GET_NANOSEC(t) convert t to uint64 (in nanoseconds) + * * Note that INSTR_TIME_SUBTRACT and INSTR_TIME_ACCUM_DIFF convert * absolute times to intervals. The INSTR_TIME_GET_xxx operations are * only useful on intervals. @@ -46,7 +47,7 @@ * Beware of multiple evaluations of the macro arguments. * * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/portability/instr_time.h * @@ -55,9 +56,31 @@ #ifndef INSTR_TIME_H #define INSTR_TIME_H + +/* + * We store interval times as an int64 integer on all platforms, as int64 is + * cheap to add/subtract, the most common operation for instr_time. The + * acquisition of time and converting to specific units of time is platform + * specific. + * + * To avoid users of the API relying on the integer representation, we wrap + * the 64bit integer in a struct. + */ +typedef struct instr_time +{ + int64 ticks; /* in platforms specific unit */ +} instr_time; + + +/* helpers macros used in platform specific code below */ + +#define NS_PER_S INT64CONST(1000000000) +#define NS_PER_MS INT64CONST(1000000) +#define NS_PER_US INT64CONST(1000) + + #ifndef WIN32 -#ifdef HAVE_CLOCK_GETTIME /* Use clock_gettime() */ @@ -83,174 +106,92 @@ #define PG_INSTR_CLOCK CLOCK_REALTIME #endif -typedef struct timespec instr_time; - -#define INSTR_TIME_IS_ZERO(t) ((t).tv_nsec == 0 && (t).tv_sec == 0) - -#define INSTR_TIME_SET_ZERO(t) ((t).tv_sec = 0, (t).tv_nsec = 0) - -#define INSTR_TIME_SET_CURRENT(t) ((void) clock_gettime(PG_INSTR_CLOCK, &(t))) - -#define INSTR_TIME_ADD(x,y) \ - do { \ - (x).tv_sec += (y).tv_sec; \ - (x).tv_nsec += (y).tv_nsec; \ - /* Normalize */ \ - while ((x).tv_nsec >= 1000000000) \ - { \ - (x).tv_nsec -= 1000000000; \ - (x).tv_sec++; \ - } \ - } while (0) - -#define INSTR_TIME_SUBTRACT(x,y) \ - do { \ - (x).tv_sec -= (y).tv_sec; \ - (x).tv_nsec -= (y).tv_nsec; \ - /* Normalize */ \ - while ((x).tv_nsec < 0) \ - { \ - (x).tv_nsec += 1000000000; \ - (x).tv_sec--; \ - } \ - } while (0) - -#define INSTR_TIME_ACCUM_DIFF(x,y,z) \ - do { \ - (x).tv_sec += (y).tv_sec - (z).tv_sec; \ - (x).tv_nsec += (y).tv_nsec - (z).tv_nsec; \ - /* Normalize after each add to avoid overflow/underflow of tv_nsec */ \ - while ((x).tv_nsec < 0) \ - { \ - (x).tv_nsec += 1000000000; \ - (x).tv_sec--; \ - } \ - while ((x).tv_nsec >= 1000000000) \ - { \ - (x).tv_nsec -= 1000000000; \ - (x).tv_sec++; \ - } \ - } while (0) +/* helper for INSTR_TIME_SET_CURRENT */ +static inline instr_time +pg_clock_gettime_ns(void) +{ + instr_time now; + struct timespec tmp; -#define INSTR_TIME_GET_DOUBLE(t) \ - (((double) (t).tv_sec) + ((double) (t).tv_nsec) / 1000000000.0) + clock_gettime(PG_INSTR_CLOCK, &tmp); + now.ticks = tmp.tv_sec * NS_PER_S + tmp.tv_nsec; -#define INSTR_TIME_GET_MILLISEC(t) \ - (((double) (t).tv_sec * 1000.0) + ((double) (t).tv_nsec) / 1000000.0) + return now; +} -#define INSTR_TIME_GET_MICROSEC(t) \ - (((uint64) (t).tv_sec * (uint64) 1000000) + (uint64) ((t).tv_nsec / 1000)) +#define INSTR_TIME_SET_CURRENT(t) \ + ((t) = pg_clock_gettime_ns()) -#else /* !HAVE_CLOCK_GETTIME */ +#define INSTR_TIME_GET_NANOSEC(t) \ + ((int64) (t).ticks) -/* Use gettimeofday() */ -#include +#else /* WIN32 */ -typedef struct timeval instr_time; -#define INSTR_TIME_IS_ZERO(t) ((t).tv_usec == 0 && (t).tv_sec == 0) +/* Use QueryPerformanceCounter() */ -#define INSTR_TIME_SET_ZERO(t) ((t).tv_sec = 0, (t).tv_usec = 0) +/* helper for INSTR_TIME_SET_CURRENT */ +static inline instr_time +pg_query_performance_counter(void) +{ + instr_time now; + LARGE_INTEGER tmp; -#define INSTR_TIME_SET_CURRENT(t) gettimeofday(&(t), NULL) + QueryPerformanceCounter(&tmp); + now.ticks = tmp.QuadPart; -#define INSTR_TIME_ADD(x,y) \ - do { \ - (x).tv_sec += (y).tv_sec; \ - (x).tv_usec += (y).tv_usec; \ - /* Normalize */ \ - while ((x).tv_usec >= 1000000) \ - { \ - (x).tv_usec -= 1000000; \ - (x).tv_sec++; \ - } \ - } while (0) + return now; +} -#define INSTR_TIME_SUBTRACT(x,y) \ - do { \ - (x).tv_sec -= (y).tv_sec; \ - (x).tv_usec -= (y).tv_usec; \ - /* Normalize */ \ - while ((x).tv_usec < 0) \ - { \ - (x).tv_usec += 1000000; \ - (x).tv_sec--; \ - } \ - } while (0) +static inline double +GetTimerFrequency(void) +{ + LARGE_INTEGER f; -#define INSTR_TIME_ACCUM_DIFF(x,y,z) \ - do { \ - (x).tv_sec += (y).tv_sec - (z).tv_sec; \ - (x).tv_usec += (y).tv_usec - (z).tv_usec; \ - /* Normalize after each add to avoid overflow/underflow of tv_usec */ \ - while ((x).tv_usec < 0) \ - { \ - (x).tv_usec += 1000000; \ - (x).tv_sec--; \ - } \ - while ((x).tv_usec >= 1000000) \ - { \ - (x).tv_usec -= 1000000; \ - (x).tv_sec++; \ - } \ - } while (0) + QueryPerformanceFrequency(&f); + return (double) f.QuadPart; +} -#define INSTR_TIME_GET_DOUBLE(t) \ - (((double) (t).tv_sec) + ((double) (t).tv_usec) / 1000000.0) +#define INSTR_TIME_SET_CURRENT(t) \ + ((t) = pg_query_performance_counter()) -#define INSTR_TIME_GET_MILLISEC(t) \ - (((double) (t).tv_sec * 1000.0) + ((double) (t).tv_usec) / 1000.0) +#define INSTR_TIME_GET_NANOSEC(t) \ + ((int64) ((t).ticks * ((double) NS_PER_S / GetTimerFrequency()))) -#define INSTR_TIME_GET_MICROSEC(t) \ - (((uint64) (t).tv_sec * (uint64) 1000000) + (uint64) (t).tv_usec) +#endif /* WIN32 */ -#endif /* HAVE_CLOCK_GETTIME */ -#else /* WIN32 */ +/* + * Common macros + */ -/* Use QueryPerformanceCounter() */ +#define INSTR_TIME_IS_ZERO(t) ((t).ticks == 0) -typedef LARGE_INTEGER instr_time; -#define INSTR_TIME_IS_ZERO(t) ((t).QuadPart == 0) +#define INSTR_TIME_SET_ZERO(t) ((t).ticks = 0) -#define INSTR_TIME_SET_ZERO(t) ((t).QuadPart = 0) +#define INSTR_TIME_SET_CURRENT_LAZY(t) \ + (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false) -#define INSTR_TIME_SET_CURRENT(t) QueryPerformanceCounter(&(t)) #define INSTR_TIME_ADD(x,y) \ - ((x).QuadPart += (y).QuadPart) + ((x).ticks += (y).ticks) #define INSTR_TIME_SUBTRACT(x,y) \ - ((x).QuadPart -= (y).QuadPart) + ((x).ticks -= (y).ticks) #define INSTR_TIME_ACCUM_DIFF(x,y,z) \ - ((x).QuadPart += (y).QuadPart - (z).QuadPart) + ((x).ticks += (y).ticks - (z).ticks) + #define INSTR_TIME_GET_DOUBLE(t) \ - (((double) (t).QuadPart) / GetTimerFrequency()) + ((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_S) #define INSTR_TIME_GET_MILLISEC(t) \ - (((double) (t).QuadPart * 1000.0) / GetTimerFrequency()) + ((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_MS) #define INSTR_TIME_GET_MICROSEC(t) \ - ((uint64) (((double) (t).QuadPart * 1000000.0) / GetTimerFrequency())) - -static inline double -GetTimerFrequency(void) -{ - LARGE_INTEGER f; - - QueryPerformanceFrequency(&f); - return (double) f.QuadPart; -} - -#endif /* WIN32 */ - -/* same macro on all platforms */ - -#define INSTR_TIME_SET_CURRENT_LAZY(t) \ - (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false) + (INSTR_TIME_GET_NANOSEC(t) / NS_PER_US) #endif /* INSTR_TIME_H */ diff --git a/src/postgres/include/postgres.h b/src/postgres/include/postgres.h index 31358110..8a028ff7 100644 --- a/src/postgres/include/postgres.h +++ b/src/postgres/include/postgres.h @@ -7,7 +7,7 @@ * Client-side code should include postgres_fe.h instead. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1995, Regents of the University of California * * src/include/postgres.h @@ -23,8 +23,8 @@ * * section description * ------- ------------------------------------------------ - * 1) variable-length datatypes (TOAST support) - * 2) Datum type + support macros + * 1) Datum type + support functions + * 2) miscellaneous * * NOTES * @@ -35,8 +35,7 @@ * postgres_fe.h. We do that since those type definitions are needed by * frontend modules that want to deal with binary data transmission to or * from the backend. Type definitions in this file should be for - * representations that never escape the backend, such as Datum or - * TOASTed varlena objects. + * representations that never escape the backend, such as Datum. * *---------------------------------------------------------------- */ @@ -48,353 +47,7 @@ #include "utils/palloc.h" /* ---------------------------------------------------------------- - * Section 1: variable-length datatypes (TOAST support) - * ---------------------------------------------------------------- - */ - -/* - * struct varatt_external is a traditional "TOAST pointer", that is, the - * information needed to fetch a Datum stored out-of-line in a TOAST table. - * The data is compressed if and only if the external size stored in - * va_extinfo is less than va_rawsize - VARHDRSZ. - * - * This struct must not contain any padding, because we sometimes compare - * these pointers using memcmp. - * - * Note that this information is stored unaligned within actual tuples, so - * you need to memcpy from the tuple into a local struct variable before - * you can look at these fields! (The reason we use memcmp is to avoid - * having to do that just to detect equality of two TOAST pointers...) - */ -typedef struct varatt_external -{ - int32 va_rawsize; /* Original data size (includes header) */ - uint32 va_extinfo; /* External saved size (without header) and - * compression method */ - Oid va_valueid; /* Unique ID of value within TOAST table */ - Oid va_toastrelid; /* RelID of TOAST table containing it */ -} varatt_external; - -/* - * These macros define the "saved size" portion of va_extinfo. Its remaining - * two high-order bits identify the compression method. - */ -#define VARLENA_EXTSIZE_BITS 30 -#define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1) - -/* - * struct varatt_indirect is a "TOAST pointer" representing an out-of-line - * Datum that's stored in memory, not in an external toast relation. - * The creator of such a Datum is entirely responsible that the referenced - * storage survives for as long as referencing pointer Datums can exist. - * - * Note that just as for struct varatt_external, this struct is stored - * unaligned within any containing tuple. - */ -typedef struct varatt_indirect -{ - struct varlena *pointer; /* Pointer to in-memory varlena */ -} varatt_indirect; - -/* - * struct varatt_expanded is a "TOAST pointer" representing an out-of-line - * Datum that is stored in memory, in some type-specific, not necessarily - * physically contiguous format that is convenient for computation not - * storage. APIs for this, in particular the definition of struct - * ExpandedObjectHeader, are in src/include/utils/expandeddatum.h. - * - * Note that just as for struct varatt_external, this struct is stored - * unaligned within any containing tuple. - */ -typedef struct ExpandedObjectHeader ExpandedObjectHeader; - -typedef struct varatt_expanded -{ - ExpandedObjectHeader *eohptr; -} varatt_expanded; - -/* - * Type tag for the various sorts of "TOAST pointer" datums. The peculiar - * value for VARTAG_ONDISK comes from a requirement for on-disk compatibility - * with a previous notion that the tag field was the pointer datum's length. - */ -typedef enum vartag_external -{ - VARTAG_INDIRECT = 1, - VARTAG_EXPANDED_RO = 2, - VARTAG_EXPANDED_RW = 3, - VARTAG_ONDISK = 18 -} vartag_external; - -/* this test relies on the specific tag values above */ -#define VARTAG_IS_EXPANDED(tag) \ - (((tag) & ~1) == VARTAG_EXPANDED_RO) - -#define VARTAG_SIZE(tag) \ - ((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \ - VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \ - (tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \ - TrapMacro(true, "unrecognized TOAST vartag")) - -/* - * These structs describe the header of a varlena object that may have been - * TOASTed. Generally, don't reference these structs directly, but use the - * macros below. - * - * We use separate structs for the aligned and unaligned cases because the - * compiler might otherwise think it could generate code that assumes - * alignment while touching fields of a 1-byte-header varlena. - */ -typedef union -{ - struct /* Normal varlena (4-byte length) */ - { - uint32 va_header; - char va_data[FLEXIBLE_ARRAY_MEMBER]; - } va_4byte; - struct /* Compressed-in-line format */ - { - uint32 va_header; - uint32 va_tcinfo; /* Original data size (excludes header) and - * compression method; see va_extinfo */ - char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */ - } va_compressed; -} varattrib_4b; - -typedef struct -{ - uint8 va_header; - char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Data begins here */ -} varattrib_1b; - -/* TOAST pointers are a subset of varattrib_1b with an identifying tag byte */ -typedef struct -{ - uint8 va_header; /* Always 0x80 or 0x01 */ - uint8 va_tag; /* Type of datum */ - char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Type-specific data */ -} varattrib_1b_e; - -/* - * Bit layouts for varlena headers on big-endian machines: - * - * 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G) - * 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G) - * 10000000 1-byte length word, unaligned, TOAST pointer - * 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b) - * - * Bit layouts for varlena headers on little-endian machines: - * - * xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G) - * xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G) - * 00000001 1-byte length word, unaligned, TOAST pointer - * xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b) - * - * The "xxx" bits are the length field (which includes itself in all cases). - * In the big-endian case we mask to extract the length, in the little-endian - * case we shift. Note that in both cases the flag bits are in the physically - * first byte. Also, it is not possible for a 1-byte length word to be zero; - * this lets us disambiguate alignment padding bytes from the start of an - * unaligned datum. (We now *require* pad bytes to be filled with zero!) - * - * In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern - * the specific type and length of the pointer datum. - */ - -/* - * Endian-dependent macros. These are considered internal --- use the - * external macros below instead of using these directly. - * - * Note: IS_1B is true for external toast records but VARSIZE_1B will return 0 - * for such records. Hence you should usually check for IS_EXTERNAL before - * checking for IS_1B. - */ - -#ifdef WORDS_BIGENDIAN - -#define VARATT_IS_4B(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00) -#define VARATT_IS_4B_U(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00) -#define VARATT_IS_4B_C(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40) -#define VARATT_IS_1B(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80) -#define VARATT_IS_1B_E(PTR) \ - ((((varattrib_1b *) (PTR))->va_header) == 0x80) -#define VARATT_NOT_PAD_BYTE(PTR) \ - (*((uint8 *) (PTR)) != 0) - -/* VARSIZE_4B() should only be used on known-aligned data */ -#define VARSIZE_4B(PTR) \ - (((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF) -#define VARSIZE_1B(PTR) \ - (((varattrib_1b *) (PTR))->va_header & 0x7F) -#define VARTAG_1B_E(PTR) \ - (((varattrib_1b_e *) (PTR))->va_tag) - -#define SET_VARSIZE_4B(PTR,len) \ - (((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF) -#define SET_VARSIZE_4B_C(PTR,len) \ - (((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000) -#define SET_VARSIZE_1B(PTR,len) \ - (((varattrib_1b *) (PTR))->va_header = (len) | 0x80) -#define SET_VARTAG_1B_E(PTR,tag) \ - (((varattrib_1b_e *) (PTR))->va_header = 0x80, \ - ((varattrib_1b_e *) (PTR))->va_tag = (tag)) - -#else /* !WORDS_BIGENDIAN */ - -#define VARATT_IS_4B(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00) -#define VARATT_IS_4B_U(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00) -#define VARATT_IS_4B_C(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02) -#define VARATT_IS_1B(PTR) \ - ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01) -#define VARATT_IS_1B_E(PTR) \ - ((((varattrib_1b *) (PTR))->va_header) == 0x01) -#define VARATT_NOT_PAD_BYTE(PTR) \ - (*((uint8 *) (PTR)) != 0) - -/* VARSIZE_4B() should only be used on known-aligned data */ -#define VARSIZE_4B(PTR) \ - ((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF) -#define VARSIZE_1B(PTR) \ - ((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F) -#define VARTAG_1B_E(PTR) \ - (((varattrib_1b_e *) (PTR))->va_tag) - -#define SET_VARSIZE_4B(PTR,len) \ - (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2)) -#define SET_VARSIZE_4B_C(PTR,len) \ - (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02) -#define SET_VARSIZE_1B(PTR,len) \ - (((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01) -#define SET_VARTAG_1B_E(PTR,tag) \ - (((varattrib_1b_e *) (PTR))->va_header = 0x01, \ - ((varattrib_1b_e *) (PTR))->va_tag = (tag)) - -#endif /* WORDS_BIGENDIAN */ - -#define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data) -#define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data) -#define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data) -#define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data) - -/* - * Externally visible TOAST macros begin here. - */ - -#define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data) -#define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data) -#define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data) - -#define VARATT_SHORT_MAX 0x7F -#define VARATT_CAN_MAKE_SHORT(PTR) \ - (VARATT_IS_4B_U(PTR) && \ - (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX) -#define VARATT_CONVERTED_SHORT_SIZE(PTR) \ - (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) - -/* - * In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(), - * VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call - * PG_DETOAST_DATUM(), VARDATA() and VARSIZE(). Directly fetching an int16, - * int32 or wider field in the struct representing the datum layout requires - * aligned data. memcpy() is alignment-oblivious, as are most operations on - * datatypes, such as text, whose layout struct contains only char fields. - * - * Code assembling a new datum should call VARDATA() and SET_VARSIZE(). - * (Datums begin life untoasted.) - * - * Other macros here should usually be used only by tuple assembly/disassembly - * code and code that specifically wants to work with still-toasted Datums. - */ -#define VARDATA(PTR) VARDATA_4B(PTR) -#define VARSIZE(PTR) VARSIZE_4B(PTR) - -#define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR) -#define VARDATA_SHORT(PTR) VARDATA_1B(PTR) - -#define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR) -#define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR))) -#define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR) - -#define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR) -#define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR) -#define VARATT_IS_EXTERNAL_ONDISK(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK) -#define VARATT_IS_EXTERNAL_INDIRECT(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT) -#define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO) -#define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW) -#define VARATT_IS_EXTERNAL_EXPANDED(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR))) -#define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \ - (VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR))) -#define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR) -#define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR)) - -#define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len) -#define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len) -#define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len) - -#define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag) - -#define VARSIZE_ANY(PTR) \ - (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \ - (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \ - VARSIZE_4B(PTR))) - -/* Size of a varlena data, excluding header */ -#define VARSIZE_ANY_EXHDR(PTR) \ - (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \ - (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \ - VARSIZE_4B(PTR)-VARHDRSZ)) - -/* caution: this will not work on an external or compressed-in-line Datum */ -/* caution: this will return a possibly unaligned pointer */ -#define VARDATA_ANY(PTR) \ - (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR)) - -/* Decompressed size and compression method of a compressed-in-line Datum */ -#define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \ - (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK) -#define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \ - (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS) - -/* Same for external Datums; but note argument is a struct varatt_external */ -#define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \ - ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK) -#define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \ - ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS) - -#define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \ - do { \ - Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \ - (cm) == TOAST_LZ4_COMPRESSION_ID); \ - ((toast_pointer).va_extinfo = \ - (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \ - } while (0) - -/* - * Testing whether an externally-stored value is compressed now requires - * comparing size stored in va_extinfo (the actual length of the external data) - * to rawsize (the original uncompressed datum's size). The latter includes - * VARHDRSZ overhead, the former doesn't. We never use compression unless it - * actually saves space, so we expect either equality or less-than. - */ -#define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \ - (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \ - (toast_pointer).va_rawsize - VARHDRSZ) - - -/* ---------------------------------------------------------------- - * Section 2: Datum type + support macros + * Section 1: Datum type + support functions * ---------------------------------------------------------------- */ @@ -404,7 +57,7 @@ typedef struct * * sizeof(Datum) == sizeof(void *) == 4 or 8 * - * The macros below and the analogous macros for other types should be used to + * The functions below and the analogous functions for other types should be used to * convert between a Datum and the appropriate C type. */ @@ -433,8 +86,11 @@ typedef struct NullableDatum * * Note: any nonzero value will be considered true. */ - -#define DatumGetBool(X) ((bool) ((X) != 0)) +static inline bool +DatumGetBool(Datum X) +{ + return (X != 0); +} /* * BoolGetDatum @@ -442,162 +98,231 @@ typedef struct NullableDatum * * Note: any nonzero value will be considered true. */ - -#define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0)) +static inline Datum +BoolGetDatum(bool X) +{ + return (Datum) (X ? 1 : 0); +} /* * DatumGetChar * Returns character value of a datum. */ - -#define DatumGetChar(X) ((char) (X)) +static inline char +DatumGetChar(Datum X) +{ + return (char) X; +} /* * CharGetDatum * Returns datum representation for a character. */ - -#define CharGetDatum(X) ((Datum) (X)) +static inline Datum +CharGetDatum(char X) +{ + return (Datum) X; +} /* * Int8GetDatum * Returns datum representation for an 8-bit integer. */ - -#define Int8GetDatum(X) ((Datum) (X)) +static inline Datum +Int8GetDatum(int8 X) +{ + return (Datum) X; +} /* * DatumGetUInt8 * Returns 8-bit unsigned integer value of a datum. */ - -#define DatumGetUInt8(X) ((uint8) (X)) +static inline uint8 +DatumGetUInt8(Datum X) +{ + return (uint8) X; +} /* * UInt8GetDatum * Returns datum representation for an 8-bit unsigned integer. */ - -#define UInt8GetDatum(X) ((Datum) (X)) +static inline Datum +UInt8GetDatum(uint8 X) +{ + return (Datum) X; +} /* * DatumGetInt16 * Returns 16-bit integer value of a datum. */ - -#define DatumGetInt16(X) ((int16) (X)) +static inline int16 +DatumGetInt16(Datum X) +{ + return (int16) X; +} /* * Int16GetDatum * Returns datum representation for a 16-bit integer. */ - -#define Int16GetDatum(X) ((Datum) (X)) +static inline Datum +Int16GetDatum(int16 X) +{ + return (Datum) X; +} /* * DatumGetUInt16 * Returns 16-bit unsigned integer value of a datum. */ - -#define DatumGetUInt16(X) ((uint16) (X)) +static inline uint16 +DatumGetUInt16(Datum X) +{ + return (uint16) X; +} /* * UInt16GetDatum * Returns datum representation for a 16-bit unsigned integer. */ - -#define UInt16GetDatum(X) ((Datum) (X)) +static inline Datum +UInt16GetDatum(uint16 X) +{ + return (Datum) X; +} /* * DatumGetInt32 * Returns 32-bit integer value of a datum. */ - -#define DatumGetInt32(X) ((int32) (X)) +static inline int32 +DatumGetInt32(Datum X) +{ + return (int32) X; +} /* * Int32GetDatum * Returns datum representation for a 32-bit integer. */ - -#define Int32GetDatum(X) ((Datum) (X)) +static inline Datum +Int32GetDatum(int32 X) +{ + return (Datum) X; +} /* * DatumGetUInt32 * Returns 32-bit unsigned integer value of a datum. */ - -#define DatumGetUInt32(X) ((uint32) (X)) +static inline uint32 +DatumGetUInt32(Datum X) +{ + return (uint32) X; +} /* * UInt32GetDatum * Returns datum representation for a 32-bit unsigned integer. */ - -#define UInt32GetDatum(X) ((Datum) (X)) +static inline Datum +UInt32GetDatum(uint32 X) +{ + return (Datum) X; +} /* * DatumGetObjectId * Returns object identifier value of a datum. */ - -#define DatumGetObjectId(X) ((Oid) (X)) +static inline Oid +DatumGetObjectId(Datum X) +{ + return (Oid) X; +} /* * ObjectIdGetDatum * Returns datum representation for an object identifier. */ - -#define ObjectIdGetDatum(X) ((Datum) (X)) +static inline Datum +ObjectIdGetDatum(Oid X) +{ + return (Datum) X; +} /* * DatumGetTransactionId * Returns transaction identifier value of a datum. */ - -#define DatumGetTransactionId(X) ((TransactionId) (X)) +static inline TransactionId +DatumGetTransactionId(Datum X) +{ + return (TransactionId) X; +} /* * TransactionIdGetDatum * Returns datum representation for a transaction identifier. */ - -#define TransactionIdGetDatum(X) ((Datum) (X)) +static inline Datum +TransactionIdGetDatum(TransactionId X) +{ + return (Datum) X; +} /* * MultiXactIdGetDatum * Returns datum representation for a multixact identifier. */ - -#define MultiXactIdGetDatum(X) ((Datum) (X)) +static inline Datum +MultiXactIdGetDatum(MultiXactId X) +{ + return (Datum) X; +} /* * DatumGetCommandId * Returns command identifier value of a datum. */ - -#define DatumGetCommandId(X) ((CommandId) (X)) +static inline CommandId +DatumGetCommandId(Datum X) +{ + return (CommandId) X; +} /* * CommandIdGetDatum * Returns datum representation for a command identifier. */ - -#define CommandIdGetDatum(X) ((Datum) (X)) +static inline Datum +CommandIdGetDatum(CommandId X) +{ + return (Datum) X; +} /* * DatumGetPointer * Returns pointer value of a datum. */ - -#define DatumGetPointer(X) ((Pointer) (X)) +static inline Pointer +DatumGetPointer(Datum X) +{ + return (Pointer) X; +} /* * PointerGetDatum * Returns datum representation for a pointer. */ - -#define PointerGetDatum(X) ((Datum) (X)) +static inline Datum +PointerGetDatum(const void *X) +{ + return (Datum) X; +} /* * DatumGetCString @@ -606,8 +331,11 @@ typedef struct NullableDatum * Note: C string is not a full-fledged Postgres type at present, * but type input functions use this conversion for their inputs. */ - -#define DatumGetCString(X) ((char *) DatumGetPointer(X)) +static inline char * +DatumGetCString(Datum X) +{ + return (char *) DatumGetPointer(X); +} /* * CStringGetDatum @@ -618,15 +346,21 @@ typedef struct NullableDatum * Note: CString is pass-by-reference; caller must ensure the pointed-to * value has adequate lifetime. */ - -#define CStringGetDatum(X) PointerGetDatum(X) +static inline Datum +CStringGetDatum(const char *X) +{ + return PointerGetDatum(X); +} /* * DatumGetName * Returns name value of a datum. */ - -#define DatumGetName(X) ((Name) DatumGetPointer(X)) +static inline Name +DatumGetName(Datum X) +{ + return (Name) DatumGetPointer(X); +} /* * NameGetDatum @@ -635,21 +369,27 @@ typedef struct NullableDatum * Note: Name is pass-by-reference; caller must ensure the pointed-to * value has adequate lifetime. */ - -#define NameGetDatum(X) CStringGetDatum(NameStr(*(X))) +static inline Datum +NameGetDatum(const NameData *X) +{ + return CStringGetDatum(NameStr(*X)); +} /* * DatumGetInt64 * Returns 64-bit integer value of a datum. * - * Note: this macro hides whether int64 is pass by value or by reference. + * Note: this function hides whether int64 is pass by value or by reference. */ - +static inline int64 +DatumGetInt64(Datum X) +{ #ifdef USE_FLOAT8_BYVAL -#define DatumGetInt64(X) ((int64) (X)) + return (int64) X; #else -#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X))) + return *((int64 *) DatumGetPointer(X)); #endif +} /* * Int64GetDatum @@ -658,25 +398,32 @@ typedef struct NullableDatum * Note: if int64 is pass by reference, this function returns a reference * to palloc'd space. */ - #ifdef USE_FLOAT8_BYVAL -#define Int64GetDatum(X) ((Datum) (X)) +static inline Datum +Int64GetDatum(int64 X) +{ + return (Datum) X; +} #else extern Datum Int64GetDatum(int64 X); #endif + /* * DatumGetUInt64 * Returns 64-bit unsigned integer value of a datum. * - * Note: this macro hides whether int64 is pass by value or by reference. + * Note: this function hides whether int64 is pass by value or by reference. */ - +static inline uint64 +DatumGetUInt64(Datum X) +{ #ifdef USE_FLOAT8_BYVAL -#define DatumGetUInt64(X) ((uint64) (X)) + return (uint64) X; #else -#define DatumGetUInt64(X) (* ((uint64 *) DatumGetPointer(X))) + return *((uint64 *) DatumGetPointer(X)); #endif +} /* * UInt64GetDatum @@ -685,12 +432,15 @@ extern Datum Int64GetDatum(int64 X); * Note: if int64 is pass by reference, this function returns a reference * to palloc'd space. */ - +static inline Datum +UInt64GetDatum(uint64 X) +{ #ifdef USE_FLOAT8_BYVAL -#define UInt64GetDatum(X) ((Datum) (X)) + return (Datum) X; #else -#define UInt64GetDatum(X) Int64GetDatum((int64) (X)) + return Int64GetDatum((int64) X); #endif +} /* * Float <-> Datum conversions @@ -738,13 +488,12 @@ Float4GetDatum(float4 X) * DatumGetFloat8 * Returns 8-byte floating point value of a datum. * - * Note: this macro hides whether float8 is pass by value or by reference. + * Note: this function hides whether float8 is pass by value or by reference. */ - -#ifdef USE_FLOAT8_BYVAL static inline float8 DatumGetFloat8(Datum X) { +#ifdef USE_FLOAT8_BYVAL union { int64 value; @@ -753,10 +502,10 @@ DatumGetFloat8(Datum X) myunion.value = DatumGetInt64(X); return myunion.retval; -} #else -#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X))) + return *((float8 *) DatumGetPointer(X)); #endif +} /* * Float8GetDatum @@ -765,7 +514,6 @@ DatumGetFloat8(Datum X) * Note: if float8 is pass by reference, this function returns a reference * to palloc'd space. */ - #ifdef USE_FLOAT8_BYVAL static inline Datum Float8GetDatum(float8 X) @@ -793,16 +541,39 @@ extern Datum Float8GetDatum(float8 X); * sacrificing performance when they are. The argument must be a variable * that will exist and have the same value for as long as the Datum is needed. * In the pass-by-ref case, the address of the variable is taken to use as - * the Datum. In the pass-by-val case, these will be the same as the non-Fast - * macros. + * the Datum. In the pass-by-val case, these are the same as the non-Fast + * functions, except for asserting that the variable is of the correct type. */ #ifdef USE_FLOAT8_BYVAL -#define Int64GetDatumFast(X) Int64GetDatum(X) -#define Float8GetDatumFast(X) Float8GetDatum(X) +#define Int64GetDatumFast(X) \ + (AssertVariableIsOfTypeMacro(X, int64), Int64GetDatum(X)) +#define Float8GetDatumFast(X) \ + (AssertVariableIsOfTypeMacro(X, double), Float8GetDatum(X)) +#else +#define Int64GetDatumFast(X) \ + (AssertVariableIsOfTypeMacro(X, int64), PointerGetDatum(&(X))) +#define Float8GetDatumFast(X) \ + (AssertVariableIsOfTypeMacro(X, double), PointerGetDatum(&(X))) +#endif + + +/* ---------------------------------------------------------------- + * Section 2: miscellaneous + * ---------------------------------------------------------------- + */ + +/* + * NON_EXEC_STATIC: It's sometimes useful to define a variable or function + * that is normally static but extern when using EXEC_BACKEND (see + * pg_config_manual.h). There would then typically be some code in + * postmaster.c that uses those extern symbols to transfer state between + * processes or do whatever other things it needs to do in EXEC_BACKEND mode. + */ +#ifdef EXEC_BACKEND +#define NON_EXEC_STATIC #else -#define Int64GetDatumFast(X) PointerGetDatum(&(X)) -#define Float8GetDatumFast(X) PointerGetDatum(&(X)) +#define NON_EXEC_STATIC static #endif #endif /* POSTGRES_H */ diff --git a/src/postgres/include/postgres_ext.h b/src/postgres/include/postgres_ext.h index fdb61b7c..240ad4e9 100644 --- a/src/postgres/include/postgres_ext.h +++ b/src/postgres/include/postgres_ext.h @@ -46,7 +46,6 @@ typedef unsigned int Oid; /* Define a signed 64-bit integer type for use in client API declarations. */ typedef PG_INT64_TYPE pg_int64; - /* * Identifiers of error message fields. Kept here to keep common * between frontend and backend, and also to export them to libpq diff --git a/src/postgres/include/postmaster/autovacuum.h b/src/postgres/include/postmaster/autovacuum.h index 9d40fd6d..65afd1ea 100644 --- a/src/postgres/include/postmaster/autovacuum.h +++ b/src/postgres/include/postmaster/autovacuum.h @@ -4,7 +4,7 @@ * header file for integrated autovacuum daemon * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/postmaster/autovacuum.h @@ -63,9 +63,6 @@ extern int StartAutoVacWorker(void); /* called from postmaster when a worker could not be forked */ extern void AutoVacWorkerFailed(void); -/* autovacuum cost-delay balancer */ -extern void AutoVacuumUpdateDelay(void); - #ifdef EXEC_BACKEND extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn(); extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn(); diff --git a/src/postgres/include/postmaster/auxprocess.h b/src/postgres/include/postmaster/auxprocess.h index e3789fb8..5c2d6527 100644 --- a/src/postgres/include/postmaster/auxprocess.h +++ b/src/postgres/include/postmaster/auxprocess.h @@ -3,7 +3,7 @@ * include file for functions related to auxiliary processes. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/postgres/include/postmaster/bgworker.h b/src/postgres/include/postmaster/bgworker.h index 96975bdc..845d4498 100644 --- a/src/postgres/include/postmaster/bgworker.h +++ b/src/postgres/include/postmaster/bgworker.h @@ -31,7 +31,7 @@ * different) code. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -121,7 +121,7 @@ extern bool RegisterDynamicBackgroundWorker(BackgroundWorker *worker, /* Query the status of a bgworker */ extern BgwHandleStatus GetBackgroundWorkerPid(BackgroundWorkerHandle *handle, pid_t *pidp); -extern BgwHandleStatus WaitForBackgroundWorkerStartup(BackgroundWorkerHandle *handle, pid_t *pid); +extern BgwHandleStatus WaitForBackgroundWorkerStartup(BackgroundWorkerHandle *handle, pid_t *pidp); extern BgwHandleStatus WaitForBackgroundWorkerShutdown(BackgroundWorkerHandle *); extern const char *GetBackgroundWorkerTypeByPid(pid_t pid); diff --git a/src/postgres/include/postmaster/bgworker_internals.h b/src/postgres/include/postmaster/bgworker_internals.h index 38768354..4ad63fd9 100644 --- a/src/postgres/include/postmaster/bgworker_internals.h +++ b/src/postgres/include/postmaster/bgworker_internals.h @@ -2,7 +2,7 @@ * bgworker_internals.h * POSTGRES pluggable background workers internals * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/postgres/include/postmaster/bgwriter.h b/src/postgres/include/postmaster/bgwriter.h index 2511ef45..a6672287 100644 --- a/src/postgres/include/postmaster/bgwriter.h +++ b/src/postgres/include/postmaster/bgwriter.h @@ -6,7 +6,7 @@ * The bgwriter process used to handle checkpointing duties too. Now * there is a separate process, but we did not bother to split this header. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/postmaster/bgwriter.h * @@ -16,7 +16,7 @@ #define _BGWRITER_H #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "storage/smgr.h" #include "storage/sync.h" diff --git a/src/postgres/include/postmaster/fork_process.h b/src/postgres/include/postmaster/fork_process.h index 5fc8490e..12decc81 100644 --- a/src/postgres/include/postmaster/fork_process.h +++ b/src/postgres/include/postmaster/fork_process.h @@ -3,7 +3,7 @@ * fork_process.h * Exports from postmaster/fork_process.c. * - * Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/postmaster/fork_process.h * diff --git a/src/postgres/include/postmaster/interrupt.h b/src/postgres/include/postmaster/interrupt.h index 289e0457..218f5ea3 100644 --- a/src/postgres/include/postmaster/interrupt.h +++ b/src/postgres/include/postmaster/interrupt.h @@ -7,7 +7,7 @@ * have their own implementations, but we provide a few generic things * here to facilitate code reuse. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/postgres/include/postmaster/pgarch.h b/src/postgres/include/postmaster/pgarch.h index f366a159..3bd4fac7 100644 --- a/src/postgres/include/postmaster/pgarch.h +++ b/src/postgres/include/postmaster/pgarch.h @@ -3,7 +3,7 @@ * pgarch.h * Exports from postmaster/pgarch.c. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/postmaster/pgarch.h @@ -33,41 +33,4 @@ extern void PgArchiverMain(void) pg_attribute_noreturn(); extern void PgArchWakeup(void); extern void PgArchForceDirScan(void); -/* - * The value of the archive_library GUC. - */ -extern PGDLLIMPORT char *XLogArchiveLibrary; - -/* - * Archive module callbacks - * - * These callback functions should be defined by archive libraries and returned - * via _PG_archive_module_init(). ArchiveFileCB is the only required callback. - * For more information about the purpose of each callback, refer to the - * archive modules documentation. - */ -typedef bool (*ArchiveCheckConfiguredCB) (void); -typedef bool (*ArchiveFileCB) (const char *file, const char *path); -typedef void (*ArchiveShutdownCB) (void); - -typedef struct ArchiveModuleCallbacks -{ - ArchiveCheckConfiguredCB check_configured_cb; - ArchiveFileCB archive_file_cb; - ArchiveShutdownCB shutdown_cb; -} ArchiveModuleCallbacks; - -/* - * Type of the shared library symbol _PG_archive_module_init that is looked - * up when loading an archive library. - */ -typedef void (*ArchiveModuleInit) (ArchiveModuleCallbacks *cb); - -/* - * Since the logic for archiving via a shell command is in the core server - * and does not need to be loaded via a shared library, it has a special - * initialization function. - */ -extern void shell_archive_init(ArchiveModuleCallbacks *cb); - #endif /* _PGARCH_H */ diff --git a/src/postgres/include/postmaster/postmaster.h b/src/postgres/include/postmaster/postmaster.h index 27aef9c1..cdee1968 100644 --- a/src/postgres/include/postmaster/postmaster.h +++ b/src/postgres/include/postmaster/postmaster.h @@ -3,7 +3,7 @@ * postmaster.h * Exports from postmaster/postmaster.c. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/postmaster/postmaster.h @@ -15,7 +15,8 @@ /* GUC options */ extern PGDLLIMPORT bool EnableSSL; -extern PGDLLIMPORT int ReservedBackends; +extern PGDLLIMPORT int SuperuserReservedConnections; +extern PGDLLIMPORT int ReservedConnections; extern PGDLLIMPORT int PostPortNumber; extern PGDLLIMPORT int Unix_socket_permissions; extern PGDLLIMPORT char *Unix_socket_group; @@ -30,6 +31,8 @@ extern PGDLLIMPORT bool enable_bonjour; extern PGDLLIMPORT char *bonjour_name; extern PGDLLIMPORT bool restart_after_crash; extern PGDLLIMPORT bool remove_temp_files_after_crash; +extern PGDLLIMPORT bool send_abort_for_crash; +extern PGDLLIMPORT bool send_abort_for_kill; #ifdef WIN32 extern PGDLLIMPORT HANDLE PostmasterHandle; diff --git a/src/postgres/include/postmaster/startup.h b/src/postgres/include/postmaster/startup.h index d66ec1fc..6a2e4c45 100644 --- a/src/postgres/include/postmaster/startup.h +++ b/src/postgres/include/postmaster/startup.h @@ -3,7 +3,7 @@ * startup.h * Exports from postmaster/startup.c. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/postmaster/startup.h * @@ -32,6 +32,8 @@ extern void PostRestoreCommand(void); extern bool IsPromoteSignaled(void); extern void ResetPromoteSignaled(void); +extern void enable_startup_progress_timeout(void); +extern void disable_startup_progress_timeout(void); extern void begin_startup_progress_phase(void); extern void startup_progress_timeout_handler(void); extern bool has_startup_progress_timeout_expired(long *secs, int *usecs); diff --git a/src/postgres/include/postmaster/syslogger.h b/src/postgres/include/postmaster/syslogger.h index 6436724f..34da778f 100644 --- a/src/postgres/include/postmaster/syslogger.h +++ b/src/postgres/include/postmaster/syslogger.h @@ -3,7 +3,7 @@ * syslogger.h * Exports from postmaster/syslogger.c. * - * Copyright (c) 2004-2022, PostgreSQL Global Development Group + * Copyright (c) 2004-2023, PostgreSQL Global Development Group * * src/include/postmaster/syslogger.h * @@ -84,7 +84,7 @@ extern PGDLLIMPORT HANDLE syslogPipe[2]; extern int SysLogger_Start(void); -extern void write_syslogger_file(const char *buffer, int count, int dest); +extern void write_syslogger_file(const char *buffer, int count, int destination); #ifdef EXEC_BACKEND extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn(); diff --git a/src/postgres/include/postmaster/walwriter.h b/src/postgres/include/postmaster/walwriter.h index ddc94365..6eba7ad7 100644 --- a/src/postgres/include/postmaster/walwriter.h +++ b/src/postgres/include/postmaster/walwriter.h @@ -3,7 +3,7 @@ * walwriter.h * Exports from postmaster/walwriter.c. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/postmaster/walwriter.h * @@ -12,6 +12,8 @@ #ifndef _WALWRITER_H #define _WALWRITER_H +#define DEFAULT_WAL_WRITER_FLUSH_AFTER ((1024 * 1024) / XLOG_BLCKSZ) + /* GUC options */ extern PGDLLIMPORT int WalWriterDelay; extern PGDLLIMPORT int WalWriterFlushAfter; diff --git a/src/postgres/include/regex/regex.h b/src/postgres/include/regex/regex.h index 0455ae80..d0811372 100644 --- a/src/postgres/include/regex/regex.h +++ b/src/postgres/include/regex/regex.h @@ -156,7 +156,6 @@ typedef struct #define REG_BADOPT 18 /* invalid embedded option */ #define REG_ETOOBIG 19 /* regular expression is too complex */ #define REG_ECOLORS 20 /* too many colors */ -#define REG_CANCEL 21 /* operation cancelled */ /* two specials for debugging and testing */ #define REG_ATOI 101 /* convert error-code name to number */ #define REG_ITOA 102 /* convert error-code number to name */ @@ -171,11 +170,15 @@ typedef struct */ /* regcomp.c */ -extern int pg_regcomp(regex_t *, const pg_wchar *, size_t, int, Oid); -extern int pg_regexec(regex_t *, const pg_wchar *, size_t, size_t, rm_detail_t *, size_t, regmatch_t[], int); -extern int pg_regprefix(regex_t *, pg_wchar **, size_t *); -extern void pg_regfree(regex_t *); -extern size_t pg_regerror(int, const regex_t *, char *, size_t); +extern int pg_regcomp(regex_t *re, const pg_wchar *string, size_t len, + int flags, Oid collation); +extern int pg_regexec(regex_t *re, const pg_wchar *string, size_t len, + size_t search_start, rm_detail_t *details, + size_t nmatch, regmatch_t pmatch[], int flags); +extern int pg_regprefix(regex_t *re, pg_wchar **string, size_t *slength); +extern void pg_regfree(regex_t *re); +extern size_t pg_regerror(int errcode, const regex_t *preg, char *errbuf, + size_t errbuf_size); /* regexp.c */ extern regex_t *RE_compile_and_cache(text *text_re, int cflags, Oid collation); diff --git a/src/postgres/include/replication/logicallauncher.h b/src/postgres/include/replication/logicallauncher.h index f1e2821e..a07c9cb3 100644 --- a/src/postgres/include/replication/logicallauncher.h +++ b/src/postgres/include/replication/logicallauncher.h @@ -3,7 +3,7 @@ * logicallauncher.h * Exports for logical replication launcher. * - * Portions Copyright (c) 2016-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group * * src/include/replication/logicallauncher.h * @@ -14,6 +14,7 @@ extern PGDLLIMPORT int max_logical_replication_workers; extern PGDLLIMPORT int max_sync_workers_per_subscription; +extern PGDLLIMPORT int max_parallel_apply_workers_per_subscription; extern void ApplyLauncherRegister(void); extern void ApplyLauncherMain(Datum main_arg); @@ -21,9 +22,13 @@ extern void ApplyLauncherMain(Datum main_arg); extern Size ApplyLauncherShmemSize(void); extern void ApplyLauncherShmemInit(void); +extern void ApplyLauncherForgetWorkerStartTime(Oid subid); + extern void ApplyLauncherWakeupAtCommit(void); extern void AtEOXact_ApplyLauncher(bool isCommit); extern bool IsLogicalLauncher(void); +extern pid_t GetLeaderApplyWorkerPid(pid_t pid); + #endif /* LOGICALLAUNCHER_H */ diff --git a/src/postgres/include/replication/logicalproto.h b/src/postgres/include/replication/logicalproto.h index a771ab8f..c5be981e 100644 --- a/src/postgres/include/replication/logicalproto.h +++ b/src/postgres/include/replication/logicalproto.h @@ -3,7 +3,7 @@ * logicalproto.h * logical replication protocol * - * Copyright (c) 2015-2022, PostgreSQL Global Development Group + * Copyright (c) 2015-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/include/replication/logicalproto.h @@ -32,12 +32,17 @@ * * LOGICALREP_PROTO_TWOPHASE_VERSION_NUM is the minimum protocol version with * support for two-phase commit decoding (at prepare time). Introduced in PG15. + * + * LOGICALREP_PROTO_STREAM_PARALLEL_VERSION_NUM is the minimum protocol version + * where we support applying large streaming transactions in parallel. + * Introduced in PG16. */ #define LOGICALREP_PROTO_MIN_VERSION_NUM 1 #define LOGICALREP_PROTO_VERSION_NUM 1 #define LOGICALREP_PROTO_STREAM_VERSION_NUM 2 #define LOGICALREP_PROTO_TWOPHASE_VERSION_NUM 3 -#define LOGICALREP_PROTO_MAX_VERSION_NUM LOGICALREP_PROTO_TWOPHASE_VERSION_NUM +#define LOGICALREP_PROTO_STREAM_PARALLEL_VERSION_NUM 4 +#define LOGICALREP_PROTO_MAX_VERSION_NUM LOGICALREP_PROTO_STREAM_PARALLEL_VERSION_NUM /* * Logical message types @@ -175,6 +180,17 @@ typedef struct LogicalRepRollbackPreparedTxnData char gid[GIDSIZE]; } LogicalRepRollbackPreparedTxnData; +/* + * Transaction protocol information for stream abort. + */ +typedef struct LogicalRepStreamAbortData +{ + TransactionId xid; + TransactionId subxid; + XLogRecPtr abort_lsn; + TimestampTz abort_time; +} LogicalRepStreamAbortData; + extern void logicalrep_write_begin(StringInfo out, ReorderBufferTXN *txn); extern void logicalrep_read_begin(StringInfo in, LogicalRepBeginData *begin_data); @@ -219,8 +235,8 @@ extern LogicalRepRelId logicalrep_read_update(StringInfo in, bool *has_oldtuple, LogicalRepTupleData *oldtup, LogicalRepTupleData *newtup); extern void logicalrep_write_delete(StringInfo out, TransactionId xid, - Relation rel, TupleTableSlot *oldtuple, - bool binary); + Relation rel, TupleTableSlot *oldslot, + bool binary, Bitmapset *columns); extern LogicalRepRelId logicalrep_read_delete(StringInfo in, LogicalRepTupleData *oldtup); extern void logicalrep_write_truncate(StringInfo out, TransactionId xid, @@ -235,7 +251,7 @@ extern void logicalrep_write_rel(StringInfo out, TransactionId xid, extern LogicalRepRelation *logicalrep_read_rel(StringInfo in); extern void logicalrep_write_typ(StringInfo out, TransactionId xid, Oid typoid); -extern void logicalrep_read_typ(StringInfo out, LogicalRepTyp *ltyp); +extern void logicalrep_read_typ(StringInfo in, LogicalRepTyp *ltyp); extern void logicalrep_write_stream_start(StringInfo out, TransactionId xid, bool first_segment); extern TransactionId logicalrep_read_stream_start(StringInfo in, @@ -243,12 +259,16 @@ extern TransactionId logicalrep_read_stream_start(StringInfo in, extern void logicalrep_write_stream_stop(StringInfo out); extern void logicalrep_write_stream_commit(StringInfo out, ReorderBufferTXN *txn, XLogRecPtr commit_lsn); -extern TransactionId logicalrep_read_stream_commit(StringInfo out, +extern TransactionId logicalrep_read_stream_commit(StringInfo in, LogicalRepCommitData *commit_data); extern void logicalrep_write_stream_abort(StringInfo out, TransactionId xid, - TransactionId subxid); -extern void logicalrep_read_stream_abort(StringInfo in, TransactionId *xid, - TransactionId *subxid); -extern char *logicalrep_message_type(LogicalRepMsgType action); + TransactionId subxid, + XLogRecPtr abort_lsn, + TimestampTz abort_time, + bool write_abort_info); +extern void logicalrep_read_stream_abort(StringInfo in, + LogicalRepStreamAbortData *abort_data, + bool read_abort_info); +extern const char *logicalrep_message_type(LogicalRepMsgType action); #endif /* LOGICAL_PROTO_H */ diff --git a/src/postgres/include/replication/logicalworker.h b/src/postgres/include/replication/logicalworker.h index cd1b6e8a..39588da7 100644 --- a/src/postgres/include/replication/logicalworker.h +++ b/src/postgres/include/replication/logicalworker.h @@ -3,7 +3,7 @@ * logicalworker.h * Exports for logical replication workers. * - * Portions Copyright (c) 2016-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group * * src/include/replication/logicalworker.h * @@ -12,8 +12,21 @@ #ifndef LOGICALWORKER_H #define LOGICALWORKER_H +#include + +extern PGDLLIMPORT volatile sig_atomic_t ParallelApplyMessagePending; + extern void ApplyWorkerMain(Datum main_arg); +extern void ParallelApplyWorkerMain(Datum main_arg); extern bool IsLogicalWorker(void); +extern bool IsLogicalParallelApplyWorker(void); + +extern void HandleParallelApplyMessageInterrupt(void); +extern void HandleParallelApplyMessages(void); + +extern void LogicalRepWorkersWakeupAtCommit(Oid subid); + +extern void AtEOXact_LogicalRepWorkers(bool isCommit); #endif /* LOGICALWORKER_H */ diff --git a/src/postgres/include/replication/origin.h b/src/postgres/include/replication/origin.h index 2d1b5e5c..53135109 100644 --- a/src/postgres/include/replication/origin.h +++ b/src/postgres/include/replication/origin.h @@ -2,7 +2,7 @@ * origin.h * Exports from replication/logical/origin.c * - * Copyright (c) 2013-2022, PostgreSQL Global Development Group + * Copyright (c) 2013-2023, PostgreSQL Global Development Group * * src/include/replication/origin.h *------------------------------------------------------------------------- @@ -38,8 +38,8 @@ extern PGDLLIMPORT XLogRecPtr replorigin_session_origin_lsn; extern PGDLLIMPORT TimestampTz replorigin_session_origin_timestamp; /* API for querying & manipulating replication origins */ -extern RepOriginId replorigin_by_name(const char *name, bool missing_ok); -extern RepOriginId replorigin_create(const char *name); +extern RepOriginId replorigin_by_name(const char *roname, bool missing_ok); +extern RepOriginId replorigin_create(const char *roname); extern void replorigin_drop_by_name(const char *name, bool missing_ok, bool nowait); extern bool replorigin_by_oid(RepOriginId roident, bool missing_ok, char **roname); @@ -53,7 +53,7 @@ extern XLogRecPtr replorigin_get_progress(RepOriginId node, bool flush); extern void replorigin_session_advance(XLogRecPtr remote_commit, XLogRecPtr local_commit); -extern void replorigin_session_setup(RepOriginId node); +extern void replorigin_session_setup(RepOriginId node, int acquired_by); extern void replorigin_session_reset(void); extern XLogRecPtr replorigin_session_get_progress(bool flush); diff --git a/src/postgres/include/replication/reorderbuffer.h b/src/postgres/include/replication/reorderbuffer.h index 4a01f877..3cb03168 100644 --- a/src/postgres/include/replication/reorderbuffer.h +++ b/src/postgres/include/replication/reorderbuffer.h @@ -2,7 +2,7 @@ * reorderbuffer.h * PostgreSQL logical replay/reorder buffer management. * - * Copyright (c) 2012-2022, PostgreSQL Global Development Group + * Copyright (c) 2012-2023, PostgreSQL Global Development Group * * src/include/replication/reorderbuffer.h */ @@ -17,7 +17,16 @@ #include "utils/snapshot.h" #include "utils/timestamp.h" +/* GUC variables */ extern PGDLLIMPORT int logical_decoding_work_mem; +extern PGDLLIMPORT int debug_logical_replication_streaming; + +/* possible values for debug_logical_replication_streaming */ +typedef enum +{ + DEBUG_LOGICAL_REP_STREAMING_BUFFERED, + DEBUG_LOGICAL_REP_STREAMING_IMMEDIATE +} DebugLogicalRepStreamingMode; /* an individual tuple, stored in one chunk of memory */ typedef struct ReorderBufferTupleBuf @@ -99,7 +108,7 @@ typedef struct ReorderBufferChange struct { /* relation that has been changed */ - RelFileNode relnode; + RelFileLocator rlocator; /* no previously reassembled toast chunks are necessary anymore */ bool clear_toast_afterwards; @@ -145,7 +154,7 @@ typedef struct ReorderBufferChange */ struct { - RelFileNode node; + RelFileLocator locator; ItemPointerData tid; CommandId cmin; CommandId cmax; @@ -168,14 +177,15 @@ typedef struct ReorderBufferChange } ReorderBufferChange; /* ReorderBufferTXN txn_flags */ -#define RBTXN_HAS_CATALOG_CHANGES 0x0001 -#define RBTXN_IS_SUBXACT 0x0002 -#define RBTXN_IS_SERIALIZED 0x0004 -#define RBTXN_IS_SERIALIZED_CLEAR 0x0008 -#define RBTXN_IS_STREAMED 0x0010 -#define RBTXN_HAS_PARTIAL_CHANGE 0x0020 -#define RBTXN_PREPARE 0x0040 -#define RBTXN_SKIPPED_PREPARE 0x0080 +#define RBTXN_HAS_CATALOG_CHANGES 0x0001 +#define RBTXN_IS_SUBXACT 0x0002 +#define RBTXN_IS_SERIALIZED 0x0004 +#define RBTXN_IS_SERIALIZED_CLEAR 0x0008 +#define RBTXN_IS_STREAMED 0x0010 +#define RBTXN_HAS_PARTIAL_CHANGE 0x0020 +#define RBTXN_PREPARE 0x0040 +#define RBTXN_SKIPPED_PREPARE 0x0080 +#define RBTXN_HAS_STREAMABLE_CHANGE 0x0100 /* Does the transaction have catalog changes? */ #define rbtxn_has_catalog_changes(txn) \ @@ -207,6 +217,12 @@ typedef struct ReorderBufferChange ((txn)->txn_flags & RBTXN_HAS_PARTIAL_CHANGE) != 0 \ ) +/* Does this transaction contain streamable changes? */ +#define rbtxn_has_streamable_change(txn) \ +( \ + ((txn)->txn_flags & RBTXN_HAS_STREAMABLE_CHANGE) != 0 \ +) + /* * Has this transaction been streamed to downstream? * @@ -233,6 +249,24 @@ typedef struct ReorderBufferChange ((txn)->txn_flags & RBTXN_SKIPPED_PREPARE) != 0 \ ) +/* Is this a top-level transaction? */ +#define rbtxn_is_toptxn(txn) \ +( \ + (txn)->toptxn == NULL \ +) + +/* Is this a subtransaction? */ +#define rbtxn_is_subtxn(txn) \ +( \ + (txn)->toptxn != NULL \ +) + +/* Get the top-level transaction of this (sub)transaction. */ +#define rbtxn_get_toptxn(txn) \ +( \ + rbtxn_is_subtxn(txn) ? (txn)->toptxn : (txn) \ +) + typedef struct ReorderBufferTXN { /* See above */ @@ -262,7 +296,7 @@ typedef struct ReorderBufferTXN * aborted. This can be a * * plain commit record * * plain commit record, of a parent transaction - * * prepared tansaction + * * prepared transaction * * prepared transaction commit * * plain abort record * * prepared transaction abort @@ -301,6 +335,7 @@ typedef struct ReorderBufferTXN { TimestampTz commit_time; TimestampTz prepare_time; + TimestampTz abort_time; } xact_time; /* @@ -380,6 +415,11 @@ typedef struct ReorderBufferTXN */ dlist_node node; + /* + * A node in the list of catalog modifying transactions + */ + dlist_node catchange_node; + /* * Size of this transaction (changes currently in memory, in bytes). */ @@ -504,6 +544,12 @@ typedef void (*ReorderBufferStreamTruncateCB) ( Relation relations[], ReorderBufferChange *change); +/* update progress txn callback signature */ +typedef void (*ReorderBufferUpdateProgressTxnCB) ( + ReorderBuffer *rb, + ReorderBufferTXN *txn, + XLogRecPtr lsn); + struct ReorderBuffer { /* @@ -526,6 +572,11 @@ struct ReorderBuffer */ dlist_head txns_by_base_snapshot_lsn; + /* + * Transactions and subtransactions that have modified system catalogs. + */ + dclist_head catchange_txns; + /* * one-entry sized cache for by_txn. Very frequently the same txn gets * looked up over and over again. @@ -562,6 +613,12 @@ struct ReorderBuffer ReorderBufferStreamMessageCB stream_message; ReorderBufferStreamTruncateCB stream_truncate; + /* + * Callback to be called when updating progress during sending data of a + * transaction (and its subtransactions) to the output plugin. + */ + ReorderBufferUpdateProgressTxnCB update_progress_txn; + /* * Pointer that will be passed untouched to the callbacks. */ @@ -619,23 +676,27 @@ struct ReorderBuffer extern ReorderBuffer *ReorderBufferAllocate(void); -extern void ReorderBufferFree(ReorderBuffer *); +extern void ReorderBufferFree(ReorderBuffer *rb); -extern ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len); -extern void ReorderBufferReturnTupleBuf(ReorderBuffer *, ReorderBufferTupleBuf *tuple); -extern ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *); -extern void ReorderBufferReturnChange(ReorderBuffer *, ReorderBufferChange *, bool); +extern ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *rb, + Size tuple_len); +extern void ReorderBufferReturnTupleBuf(ReorderBuffer *rb, + ReorderBufferTupleBuf *tuple); +extern ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *rb); +extern void ReorderBufferReturnChange(ReorderBuffer *rb, + ReorderBufferChange *change, bool upd_mem); -extern Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids); -extern void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids); +extern Oid *ReorderBufferGetRelids(ReorderBuffer *rb, int nrelids); +extern void ReorderBufferReturnRelids(ReorderBuffer *rb, Oid *relids); -extern void ReorderBufferQueueChange(ReorderBuffer *, TransactionId, - XLogRecPtr lsn, ReorderBufferChange *, +extern void ReorderBufferQueueChange(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, ReorderBufferChange *change, bool toast_insert); -extern void ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn, +extern void ReorderBufferQueueMessage(ReorderBuffer *rb, TransactionId xid, + Snapshot snap, XLogRecPtr lsn, bool transactional, const char *prefix, Size message_size, const char *message); -extern void ReorderBufferCommit(ReorderBuffer *, TransactionId, +extern void ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn); extern void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, @@ -644,30 +705,36 @@ extern void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn, char *gid, bool is_commit); -extern void ReorderBufferAssignChild(ReorderBuffer *, TransactionId, TransactionId, XLogRecPtr commit_lsn); -extern void ReorderBufferCommitChild(ReorderBuffer *, TransactionId, TransactionId, - XLogRecPtr commit_lsn, XLogRecPtr end_lsn); -extern void ReorderBufferAbort(ReorderBuffer *, TransactionId, XLogRecPtr lsn); -extern void ReorderBufferAbortOld(ReorderBuffer *, TransactionId xid); -extern void ReorderBufferForget(ReorderBuffer *, TransactionId, XLogRecPtr lsn); -extern void ReorderBufferInvalidate(ReorderBuffer *, TransactionId, XLogRecPtr lsn); - -extern void ReorderBufferSetBaseSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap); -extern void ReorderBufferAddSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap); -extern void ReorderBufferAddNewCommandId(ReorderBuffer *, TransactionId, XLogRecPtr lsn, - CommandId cid); -extern void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn, - RelFileNode node, ItemPointerData pt, +extern void ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, + TransactionId subxid, XLogRecPtr lsn); +extern void ReorderBufferCommitChild(ReorderBuffer *rb, TransactionId xid, + TransactionId subxid, XLogRecPtr commit_lsn, + XLogRecPtr end_lsn); +extern void ReorderBufferAbort(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, + TimestampTz abort_time); +extern void ReorderBufferAbortOld(ReorderBuffer *rb, TransactionId oldestRunningXid); +extern void ReorderBufferForget(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn); +extern void ReorderBufferInvalidate(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn); + +extern void ReorderBufferSetBaseSnapshot(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, Snapshot snap); +extern void ReorderBufferAddSnapshot(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, Snapshot snap); +extern void ReorderBufferAddNewCommandId(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, CommandId cid); +extern void ReorderBufferAddNewTupleCids(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, RelFileLocator locator, + ItemPointerData tid, CommandId cmin, CommandId cmax, CommandId combocid); -extern void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn, +extern void ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, Size nmsgs, SharedInvalidationMessage *msgs); -extern void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations, +extern void ReorderBufferImmediateInvalidation(ReorderBuffer *rb, uint32 ninvalidations, SharedInvalidationMessage *invalidations); -extern void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn); +extern void ReorderBufferProcessXid(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn); -extern void ReorderBufferXidSetCatalogChanges(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn); -extern bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *, TransactionId xid); -extern bool ReorderBufferXidHasBaseSnapshot(ReorderBuffer *, TransactionId xid); +extern void ReorderBufferXidSetCatalogChanges(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn); +extern bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *rb, TransactionId xid); +extern bool ReorderBufferXidHasBaseSnapshot(ReorderBuffer *rb, TransactionId xid); extern bool ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xid, XLogRecPtr prepare_lsn, XLogRecPtr end_lsn, @@ -675,10 +742,11 @@ extern bool ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xi RepOriginId origin_id, XLogRecPtr origin_lsn); extern void ReorderBufferSkipPrepare(ReorderBuffer *rb, TransactionId xid); extern void ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, char *gid); -extern ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *); +extern ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *rb); extern TransactionId ReorderBufferGetOldestXmin(ReorderBuffer *rb); +extern TransactionId *ReorderBufferGetCatalogChangesXacts(ReorderBuffer *rb); -extern void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr); +extern void ReorderBufferSetRestartPoint(ReorderBuffer *rb, XLogRecPtr ptr); extern void StartupReorderBuffer(void); diff --git a/src/postgres/include/replication/slot.h b/src/postgres/include/replication/slot.h index deba2c4e..a8a89dc7 100644 --- a/src/postgres/include/replication/slot.h +++ b/src/postgres/include/replication/slot.h @@ -2,7 +2,7 @@ * slot.h * Replication slot management. * - * Copyright (c) 2012-2022, PostgreSQL Global Development Group + * Copyright (c) 2012-2023, PostgreSQL Global Development Group * *------------------------------------------------------------------------- */ @@ -37,6 +37,21 @@ typedef enum ReplicationSlotPersistency RS_TEMPORARY } ReplicationSlotPersistency; +/* + * Slots can be invalidated, e.g. due to max_slot_wal_keep_size. If so, the + * 'invalidated' field is set to a value other than _NONE. + */ +typedef enum ReplicationSlotInvalidationCause +{ + RS_INVAL_NONE, + /* required WAL has been removed */ + RS_INVAL_WAL_REMOVED, + /* required rows have been removed */ + RS_INVAL_HORIZON, + /* wal_level insufficient for slot */ + RS_INVAL_WAL_LEVEL, +} ReplicationSlotInvalidationCause; + /* * On-Disk data of a replication slot, preserved across restarts. */ @@ -72,8 +87,8 @@ typedef struct ReplicationSlotPersistentData /* oldest LSN that might be required by this replication slot */ XLogRecPtr restart_lsn; - /* restart_lsn is copied here when the slot is invalidated */ - XLogRecPtr invalidated_at; + /* RS_INVAL_NONE if valid, or the reason for having been invalidated */ + ReplicationSlotInvalidationCause invalidated; /* * Oldest LSN that the client has acked receipt for. This is used as the @@ -195,7 +210,8 @@ extern void ReplicationSlotsShmemInit(void); /* management of individual slots */ extern void ReplicationSlotCreate(const char *name, bool db_specific, - ReplicationSlotPersistency p, bool two_phase); + ReplicationSlotPersistency persistency, + bool two_phase); extern void ReplicationSlotPersist(void); extern void ReplicationSlotDrop(const char *name, bool nowait); @@ -214,11 +230,14 @@ extern void ReplicationSlotsComputeRequiredLSN(void); extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void); extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive); extern void ReplicationSlotsDropDBSlots(Oid dboid); -extern bool InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno); +extern bool InvalidateObsoleteReplicationSlots(ReplicationSlotInvalidationCause cause, + XLogSegNo oldestSegno, + Oid dboid, + TransactionId snapshotConflictHorizon); extern ReplicationSlot *SearchNamedReplicationSlot(const char *name, bool need_lock); extern int ReplicationSlotIndex(ReplicationSlot *slot); extern bool ReplicationSlotName(int index, Name name); -extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, int szslot); +extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, Size szslot); extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok); extern void StartupReplicationSlots(void); diff --git a/src/postgres/include/replication/syncrep.h b/src/postgres/include/replication/syncrep.h index 4d7c90b9..0aec4cb1 100644 --- a/src/postgres/include/replication/syncrep.h +++ b/src/postgres/include/replication/syncrep.h @@ -3,7 +3,7 @@ * syncrep.h * Exports from replication/syncrep.c. * - * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2010-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/include/replication/syncrep.h @@ -14,7 +14,6 @@ #define _SYNCREP_H #include "access/xlogdefs.h" -#include "utils/guc.h" #define SyncRepRequested() \ (max_wal_senders > 0 && synchronous_commit > SYNCHRONOUS_COMMIT_LOCAL_FLUSH) @@ -97,11 +96,6 @@ extern int SyncRepGetCandidateStandbys(SyncRepStandbyData **standbys); /* called by checkpointer */ extern void SyncRepUpdateSyncStandbysDefined(void); -/* GUC infrastructure */ -extern bool check_synchronous_standby_names(char **newval, void **extra, GucSource source); -extern void assign_synchronous_standby_names(const char *newval, void *extra); -extern void assign_synchronous_commit(int newval, void *extra); - /* * Internal functions for parsing synchronous_standby_names grammar, * in syncrep_gram.y and syncrep_scanner.l @@ -109,7 +103,7 @@ extern void assign_synchronous_commit(int newval, void *extra); extern int syncrep_yyparse(void); extern int syncrep_yylex(void); extern void syncrep_yyerror(const char *str); -extern void syncrep_scanner_init(const char *query_string); +extern void syncrep_scanner_init(const char *str); extern void syncrep_scanner_finish(void); #endif /* _SYNCREP_H */ diff --git a/src/postgres/include/replication/walreceiver.h b/src/postgres/include/replication/walreceiver.h index 81184aa9..281626fa 100644 --- a/src/postgres/include/replication/walreceiver.h +++ b/src/postgres/include/replication/walreceiver.h @@ -3,7 +3,7 @@ * walreceiver.h * Exports from replication/walreceiverfuncs.c. * - * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2010-2023, PostgreSQL Global Development Group * * src/include/replication/walreceiver.h * @@ -12,9 +12,11 @@ #ifndef _WALRECEIVER_H #define _WALRECEIVER_H +#include +#include + #include "access/xlog.h" #include "access/xlogdefs.h" -#include "getaddrinfo.h" /* for NI_MAXHOST */ #include "pgtime.h" #include "port/atomics.h" #include "replication/logicalproto.h" @@ -180,9 +182,11 @@ typedef struct uint32 proto_version; /* Logical protocol version */ List *publication_names; /* String list of publications */ bool binary; /* Ask publisher to use binary */ - bool streaming; /* Streaming of large transactions */ + char *streaming_str; /* Streaming of large transactions */ bool twophase; /* Streaming of two-phase transactions at * prepare time */ + char *origin; /* Only publish data originating from the + * specified origin */ } logical; } proto; } WalRcvStreamOptions; @@ -235,6 +239,7 @@ typedef struct WalRcvExecResult */ typedef WalReceiverConn *(*walrcv_connect_fn) (const char *conninfo, bool logical, + bool must_use_password, const char *appname, char **err); @@ -243,7 +248,8 @@ typedef WalReceiverConn *(*walrcv_connect_fn) (const char *conninfo, * * Parse and validate the connection string given as of 'conninfo'. */ -typedef void (*walrcv_check_conninfo_fn) (const char *conninfo); +typedef void (*walrcv_check_conninfo_fn) (const char *conninfo, + bool must_use_password); /* * walrcv_get_conninfo_fn @@ -401,10 +407,10 @@ typedef struct WalReceiverFunctionsType extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions; -#define walrcv_connect(conninfo, logical, appname, err) \ - WalReceiverFunctions->walrcv_connect(conninfo, logical, appname, err) -#define walrcv_check_conninfo(conninfo) \ - WalReceiverFunctions->walrcv_check_conninfo(conninfo) +#define walrcv_connect(conninfo, logical, must_use_password, appname, err) \ + WalReceiverFunctions->walrcv_connect(conninfo, logical, must_use_password, appname, err) +#define walrcv_check_conninfo(conninfo, must_use_password) \ + WalReceiverFunctions->walrcv_check_conninfo(conninfo, must_use_password) #define walrcv_get_conninfo(conn) \ WalReceiverFunctions->walrcv_get_conninfo(conn) #define walrcv_get_senderinfo(conn, sender_host, sender_port) \ @@ -453,6 +459,7 @@ walrcv_clear_result(WalRcvExecResult *walres) /* prototypes for functions in walreceiver.c */ extern void WalReceiverMain(void) pg_attribute_noreturn(); extern void ProcessWalRcvInterrupts(void); +extern void WalRcvForceReply(void); /* prototypes for functions in walreceiverfuncs.c */ extern Size WalRcvShmemSize(void); @@ -467,6 +474,5 @@ extern XLogRecPtr GetWalRcvFlushRecPtr(XLogRecPtr *latestChunkStart, TimeLineID extern XLogRecPtr GetWalRcvWriteRecPtr(void); extern int GetReplicationApplyDelay(void); extern int GetReplicationTransferLatency(void); -extern void WalRcvForceReply(void); #endif /* _WALRECEIVER_H */ diff --git a/src/postgres/include/replication/walsender.h b/src/postgres/include/replication/walsender.h index d99a21b0..9df7e50f 100644 --- a/src/postgres/include/replication/walsender.h +++ b/src/postgres/include/replication/walsender.h @@ -3,7 +3,7 @@ * walsender.h * Exports from replication/walsender.c. * - * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2010-2023, PostgreSQL Global Development Group * * src/include/replication/walsender.h * @@ -36,13 +36,13 @@ extern PGDLLIMPORT int wal_sender_timeout; extern PGDLLIMPORT bool log_replication_commands; extern void InitWalSender(void); -extern bool exec_replication_command(const char *query_string); +extern bool exec_replication_command(const char *cmd_string); extern void WalSndErrorCleanup(void); extern void WalSndResourceCleanup(bool isCommit); extern void WalSndSignals(void); extern Size WalSndShmemSize(void); extern void WalSndShmemInit(void); -extern void WalSndWakeup(void); +extern void WalSndWakeup(bool physical, bool logical); extern void WalSndInitStopping(void); extern void WalSndWaitStopping(void); extern void HandleWalSndInitStopping(void); @@ -60,15 +60,15 @@ extern void WalSndRqstFileReload(void); /* * wakeup walsenders if there is work to be done */ -#define WalSndWakeupProcessRequests() \ - do \ - { \ - if (wake_wal_senders) \ - { \ - wake_wal_senders = false; \ - if (max_wal_senders > 0) \ - WalSndWakeup(); \ - } \ - } while (0) +static inline void +WalSndWakeupProcessRequests(bool physical, bool logical) +{ + if (wake_wal_senders) + { + wake_wal_senders = false; + if (max_wal_senders > 0) + WalSndWakeup(physical, logical); + } +} #endif /* _WALSENDER_H */ diff --git a/src/postgres/include/rewrite/prs2lock.h b/src/postgres/include/rewrite/prs2lock.h index 6d984839..f94bdfd2 100644 --- a/src/postgres/include/rewrite/prs2lock.h +++ b/src/postgres/include/rewrite/prs2lock.h @@ -3,7 +3,7 @@ * prs2lock.h * data structures for POSTGRES Rule System II (rewrite rules only) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/rewrite/prs2lock.h diff --git a/src/postgres/include/rewrite/rewriteHandler.h b/src/postgres/include/rewrite/rewriteHandler.h index 90ecf109..b71e20b0 100644 --- a/src/postgres/include/rewrite/rewriteHandler.h +++ b/src/postgres/include/rewrite/rewriteHandler.h @@ -4,7 +4,7 @@ * External interface to query rewriter. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/rewrite/rewriteHandler.h @@ -24,9 +24,6 @@ extern void AcquireRewriteLocks(Query *parsetree, extern Node *build_column_default(Relation rel, int attrno); -extern void fill_extraUpdatedCols(RangeTblEntry *target_rte, - Relation target_relation); - extern Query *get_view_query(Relation view); extern const char *view_query_is_auto_updatable(Query *viewquery, bool check_cols); diff --git a/src/postgres/include/rewrite/rewriteManip.h b/src/postgres/include/rewrite/rewriteManip.h index 98b9b3a2..365061ff 100644 --- a/src/postgres/include/rewrite/rewriteManip.h +++ b/src/postgres/include/rewrite/rewriteManip.h @@ -4,7 +4,7 @@ * Querytree manipulation subroutines for query rewriter. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/rewrite/rewriteManip.h @@ -41,8 +41,10 @@ typedef enum ReplaceVarsNoMatchOption } ReplaceVarsNoMatchOption; +extern void CombineRangeTables(List **dst_rtable, List **dst_perminfos, + List *src_rtable, List *src_perminfos); extern void OffsetVarNodes(Node *node, int offset, int sublevels_up); -extern void ChangeVarNodes(Node *node, int old_varno, int new_varno, +extern void ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up); extern void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up, int min_sublevels_up); @@ -63,6 +65,13 @@ extern bool contain_windowfuncs(Node *node); extern int locate_windowfunc(Node *node); extern bool checkExprHasSubLink(Node *node); +extern Node *add_nulling_relids(Node *node, + const Bitmapset *target_relids, + const Bitmapset *added_relids); +extern Node *remove_nulling_relids(Node *node, + const Bitmapset *removable_relids, + const Bitmapset *except_relids); + extern Node *replace_rte_variables(Node *node, int target_varno, int sublevels_up, replace_rte_variables_callback callback, diff --git a/src/postgres/include/rewrite/rewriteSupport.h b/src/postgres/include/rewrite/rewriteSupport.h index 226ff66f..e5dc367e 100644 --- a/src/postgres/include/rewrite/rewriteSupport.h +++ b/src/postgres/include/rewrite/rewriteSupport.h @@ -4,7 +4,7 @@ * * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/rewrite/rewriteSupport.h diff --git a/src/postgres/include/storage/backendid.h b/src/postgres/include/storage/backendid.h index 93d5b508..1e90b602 100644 --- a/src/postgres/include/storage/backendid.h +++ b/src/postgres/include/storage/backendid.h @@ -4,7 +4,7 @@ * POSTGRES backend id communication definitions * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/backendid.h diff --git a/src/postgres/include/storage/block.h b/src/postgres/include/storage/block.h index d756e3fd..31a036df 100644 --- a/src/postgres/include/storage/block.h +++ b/src/postgres/include/storage/block.h @@ -4,7 +4,7 @@ * POSTGRES disk block definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/block.h @@ -59,7 +59,7 @@ typedef struct BlockIdData typedef BlockIdData *BlockId; /* block identifier */ /* ---------------- - * support macros + * support functions * ---------------- */ @@ -67,49 +67,42 @@ typedef BlockIdData *BlockId; /* block identifier */ * BlockNumberIsValid * True iff blockNumber is valid. */ -#define BlockNumberIsValid(blockNumber) \ - ((BlockNumber) (blockNumber) != InvalidBlockNumber) - -/* - * BlockIdIsValid - * True iff the block identifier is valid. - */ -#define BlockIdIsValid(blockId) \ - PointerIsValid(blockId) +static inline bool +BlockNumberIsValid(BlockNumber blockNumber) +{ + return blockNumber != InvalidBlockNumber; +} /* * BlockIdSet * Sets a block identifier to the specified value. */ -#define BlockIdSet(blockId, blockNumber) \ -( \ - (blockId)->bi_hi = (blockNumber) >> 16, \ - (blockId)->bi_lo = (blockNumber) & 0xffff \ -) - -/* - * BlockIdCopy - * Copy a block identifier. - */ -#define BlockIdCopy(toBlockId, fromBlockId) \ -( \ - (toBlockId)->bi_hi = (fromBlockId)->bi_hi, \ - (toBlockId)->bi_lo = (fromBlockId)->bi_lo \ -) +static inline void +BlockIdSet(BlockIdData *blockId, BlockNumber blockNumber) +{ + blockId->bi_hi = blockNumber >> 16; + blockId->bi_lo = blockNumber & 0xffff; +} /* * BlockIdEquals * Check for block number equality. */ -#define BlockIdEquals(blockId1, blockId2) \ - ((blockId1)->bi_hi == (blockId2)->bi_hi && \ - (blockId1)->bi_lo == (blockId2)->bi_lo) +static inline bool +BlockIdEquals(const BlockIdData *blockId1, const BlockIdData *blockId2) +{ + return (blockId1->bi_hi == blockId2->bi_hi && + blockId1->bi_lo == blockId2->bi_lo); +} /* * BlockIdGetBlockNumber * Retrieve the block number from a block identifier. */ -#define BlockIdGetBlockNumber(blockId) \ - ((((BlockNumber) (blockId)->bi_hi) << 16) | ((BlockNumber) (blockId)->bi_lo)) +static inline BlockNumber +BlockIdGetBlockNumber(const BlockIdData *blockId) +{ + return (((BlockNumber) blockId->bi_hi) << 16) | ((BlockNumber) blockId->bi_lo); +} #endif /* BLOCK_H */ diff --git a/src/postgres/include/storage/buf.h b/src/postgres/include/storage/buf.h index aec01ca0..6520d9ae 100644 --- a/src/postgres/include/storage/buf.h +++ b/src/postgres/include/storage/buf.h @@ -4,7 +4,7 @@ * Basic buffer manager data types. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/buf.h diff --git a/src/postgres/include/storage/bufmgr.h b/src/postgres/include/storage/bufmgr.h index 58391406..b379c76e 100644 --- a/src/postgres/include/storage/bufmgr.h +++ b/src/postgres/include/storage/bufmgr.h @@ -4,7 +4,7 @@ * POSTGRES buffer manager definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/bufmgr.h @@ -17,13 +17,18 @@ #include "storage/block.h" #include "storage/buf.h" #include "storage/bufpage.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "utils/relcache.h" #include "utils/snapmgr.h" typedef void *Block; -/* Possible arguments for GetAccessStrategy() */ +/* + * Possible arguments for GetAccessStrategy(). + * + * If adding a new BufferAccessStrategyType, also add a new IOContext so + * IO statistics using this strategy are tracked. + */ typedef enum BufferAccessStrategyType { BAS_NORMAL, /* Normal random access */ @@ -55,6 +60,53 @@ typedef struct PrefetchBufferResult bool initiated_io; /* If true, a miss resulting in async I/O */ } PrefetchBufferResult; +/* + * Flags influencing the behaviour of ExtendBufferedRel* + */ +typedef enum ExtendBufferedFlags +{ + /* + * Don't acquire extension lock. This is safe only if the relation isn't + * shared, an access exclusive lock is held or if this is the startup + * process. + */ + EB_SKIP_EXTENSION_LOCK = (1 << 0), + + /* Is this extension part of recovery? */ + EB_PERFORMING_RECOVERY = (1 << 1), + + /* + * Should the fork be created if it does not currently exist? This likely + * only ever makes sense for relation forks. + */ + EB_CREATE_FORK_IF_NEEDED = (1 << 2), + + /* Should the first (possibly only) return buffer be returned locked? */ + EB_LOCK_FIRST = (1 << 3), + + /* Should the smgr size cache be cleared? */ + EB_CLEAR_SIZE_CACHE = (1 << 4), + + /* internal flags follow */ + EB_LOCK_TARGET = (1 << 5), +} ExtendBufferedFlags; + +/* + * Some functions identify relations either by relation or smgr + + * relpersistence. Used via the BMR_REL()/BMR_SMGR() macros below. This + * allows us to use the same function for both recovery and normal operation. + */ +typedef struct BufferManagerRelation +{ + Relation rel; + struct SMgrRelationData *smgr; + char relpersistence; +} BufferManagerRelation; + +#define BMR_REL(p_rel) ((BufferManagerRelation){.rel = p_rel}) +#define BMR_SMGR(p_smgr, p_relpersistence) ((BufferManagerRelation){.smgr = p_smgr, .relpersistence = p_relpersistence}) + + /* forward declared, to avoid having to expose buf_internals.h here */ struct WritebackContext; @@ -69,6 +121,15 @@ extern PGDLLIMPORT bool zero_damaged_pages; extern PGDLLIMPORT int bgwriter_lru_maxpages; extern PGDLLIMPORT double bgwriter_lru_multiplier; extern PGDLLIMPORT bool track_io_timing; + +/* only applicable when prefetching is available */ +#ifdef USE_PREFETCH +#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 1 +#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 10 +#else +#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 0 +#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 0 +#endif extern PGDLLIMPORT int effective_io_concurrency; extern PGDLLIMPORT int maintenance_io_concurrency; @@ -97,76 +158,6 @@ extern PGDLLIMPORT int32 *LocalRefCount; #define BUFFER_LOCK_SHARE 1 #define BUFFER_LOCK_EXCLUSIVE 2 -/* - * These routines are beaten on quite heavily, hence the macroization. - */ - -/* - * BufferIsValid - * True iff the given buffer number is valid (either as a shared - * or local buffer). - * - * Note: For a long time this was defined the same as BufferIsPinned, - * that is it would say False if you didn't hold a pin on the buffer. - * I believe this was bogus and served only to mask logic errors. - * Code should always know whether it has a buffer reference, - * independently of the pin state. - * - * Note: For a further long time this was not quite the inverse of the - * BufferIsInvalid() macro, in that it also did sanity checks to verify - * that the buffer number was in range. Most likely, this macro was - * originally intended only to be used in assertions, but its use has - * since expanded quite a bit, and the overhead of making those checks - * even in non-assert-enabled builds can be significant. Thus, we've - * now demoted the range checks to assertions within the macro itself. - */ -#define BufferIsValid(bufnum) \ -( \ - AssertMacro((bufnum) <= NBuffers && (bufnum) >= -NLocBuffer), \ - (bufnum) != InvalidBuffer \ -) - -/* - * BufferGetBlock - * Returns a reference to a disk page image associated with a buffer. - * - * Note: - * Assumes buffer is valid. - */ -#define BufferGetBlock(buffer) \ -( \ - AssertMacro(BufferIsValid(buffer)), \ - BufferIsLocal(buffer) ? \ - LocalBufferBlockPointers[-(buffer) - 1] \ - : \ - (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \ -) - -/* - * BufferGetPageSize - * Returns the page size within a buffer. - * - * Notes: - * Assumes buffer is valid. - * - * The buffer can be a raw disk block and need not contain a valid - * (formatted) disk page. - */ -/* XXX should dig out of buffer descriptor */ -#define BufferGetPageSize(buffer) \ -( \ - AssertMacro(BufferIsValid(buffer)), \ - (Size)BLCKSZ \ -) - -/* - * BufferGetPage - * Returns the page associated with a buffer. - * - * When this is called as part of a scan, there may be a need for a nearby - * call to TestForOldSnapshot(). See the definition of that for details. - */ -#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer)) /* * prototypes for functions in bufmgr.c @@ -176,13 +167,13 @@ extern PrefetchBufferResult PrefetchSharedBuffer(struct SMgrRelationData *smgr_r BlockNumber blockNum); extern PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum); -extern bool ReadRecentBuffer(RelFileNode rnode, ForkNumber forkNum, +extern bool ReadRecentBuffer(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, Buffer recent_buffer); extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum); extern Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy); -extern Buffer ReadBufferWithoutRelcache(RelFileNode rnode, +extern Buffer ReadBufferWithoutRelcache(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy, bool permanent); @@ -190,10 +181,28 @@ extern void ReleaseBuffer(Buffer buffer); extern void UnlockReleaseBuffer(Buffer buffer); extern void MarkBufferDirty(Buffer buffer); extern void IncrBufferRefCount(Buffer buffer); +extern void CheckBufferIsPinnedOnce(Buffer buffer); extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum); -extern void InitBufferPool(void); +extern Buffer ExtendBufferedRel(BufferManagerRelation bmr, + ForkNumber forkNum, + BufferAccessStrategy strategy, + uint32 flags); +extern BlockNumber ExtendBufferedRelBy(BufferManagerRelation bmr, + ForkNumber fork, + BufferAccessStrategy strategy, + uint32 flags, + uint32 extend_by, + Buffer *buffers, + uint32 *extended_by); +extern Buffer ExtendBufferedRelTo(BufferManagerRelation bmr, + ForkNumber fork, + BufferAccessStrategy strategy, + uint32 flags, + BlockNumber extend_to, + ReadBufferMode mode); + extern void InitBufferPoolAccess(void); extern void AtEOXact_Buffers(bool isCommit); extern void PrintBufferLeakWarning(Buffer buffer); @@ -204,13 +213,15 @@ extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, extern void FlushOneBuffer(Buffer buffer); extern void FlushRelationBuffers(Relation rel); extern void FlushRelationsAllBuffers(struct SMgrRelationData **smgrs, int nrels); -extern void CreateAndCopyRelationData(RelFileNode src_rnode, - RelFileNode dst_rnode, +extern void CreateAndCopyRelationData(RelFileLocator src_rlocator, + RelFileLocator dst_rlocator, bool permanent); extern void FlushDatabaseBuffers(Oid dbid); -extern void DropRelFileNodeBuffers(struct SMgrRelationData *smgr_reln, ForkNumber *forkNum, - int nforks, BlockNumber *firstDelBlock); -extern void DropRelFileNodesAllBuffers(struct SMgrRelationData **smgr_reln, int nnodes); +extern void DropRelationBuffers(struct SMgrRelationData *smgr_reln, + ForkNumber *forkNum, + int nforks, BlockNumber *firstDelBlock); +extern void DropRelationsAllBuffers(struct SMgrRelationData **smgr_reln, + int nlocators); extern void DropDatabaseBuffers(Oid dbid); #define RelationGetNumberOfBlocks(reln) \ @@ -222,8 +233,7 @@ extern XLogRecPtr BufferGetLSNAtomic(Buffer buffer); #ifdef NOT_USED extern void PrintPinnedBufs(void); #endif -extern Size BufferShmemSize(void); -extern void BufferGetTag(Buffer buffer, RelFileNode *rnode, +extern void BufferGetTag(Buffer buffer, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum); extern void MarkBufferDirtyHint(Buffer buffer, bool buffer_std); @@ -236,17 +246,26 @@ extern bool ConditionalLockBufferForCleanup(Buffer buffer); extern bool IsBufferCleanupOK(Buffer buffer); extern bool HoldingBufferPinThatDelaysRecovery(void); -extern void AbortBufferIO(void); +extern void AbortBufferIO(Buffer buffer); -extern void BufmgrCommit(void); extern bool BgBufferSync(struct WritebackContext *wb_context); -extern void AtProcExit_LocalBuffers(void); - extern void TestForOldSnapshot_impl(Snapshot snapshot, Relation relation); +/* in buf_init.c */ +extern void InitBufferPool(void); +extern Size BufferShmemSize(void); + +/* in localbuf.c */ +extern void AtProcExit_LocalBuffers(void); + /* in freelist.c */ + extern BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype); +extern BufferAccessStrategy GetAccessStrategyWithSize(BufferAccessStrategyType btype, + int ring_size_kb); +extern int GetAccessStrategyBufferCount(BufferAccessStrategy strategy); + extern void FreeAccessStrategy(BufferAccessStrategy strategy); @@ -261,6 +280,83 @@ extern void FreeAccessStrategy(BufferAccessStrategy strategy); #ifndef FRONTEND +/* + * BufferIsValid + * True iff the given buffer number is valid (either as a shared + * or local buffer). + * + * Note: For a long time this was defined the same as BufferIsPinned, + * that is it would say False if you didn't hold a pin on the buffer. + * I believe this was bogus and served only to mask logic errors. + * Code should always know whether it has a buffer reference, + * independently of the pin state. + * + * Note: For a further long time this was not quite the inverse of the + * BufferIsInvalid() macro, in that it also did sanity checks to verify + * that the buffer number was in range. Most likely, this macro was + * originally intended only to be used in assertions, but its use has + * since expanded quite a bit, and the overhead of making those checks + * even in non-assert-enabled builds can be significant. Thus, we've + * now demoted the range checks to assertions within the macro itself. + */ +static inline bool +BufferIsValid(Buffer bufnum) +{ + Assert(bufnum <= NBuffers); + Assert(bufnum >= -NLocBuffer); + + return bufnum != InvalidBuffer; +} + +/* + * BufferGetBlock + * Returns a reference to a disk page image associated with a buffer. + * + * Note: + * Assumes buffer is valid. + */ +static inline Block +BufferGetBlock(Buffer buffer) +{ + Assert(BufferIsValid(buffer)); + + if (BufferIsLocal(buffer)) + return LocalBufferBlockPointers[-buffer - 1]; + else + return (Block) (BufferBlocks + ((Size) (buffer - 1)) * BLCKSZ); +} + +/* + * BufferGetPageSize + * Returns the page size within a buffer. + * + * Notes: + * Assumes buffer is valid. + * + * The buffer can be a raw disk block and need not contain a valid + * (formatted) disk page. + */ +/* XXX should dig out of buffer descriptor */ +static inline Size +BufferGetPageSize(Buffer buffer) +{ + AssertMacro(BufferIsValid(buffer)); + return (Size) BLCKSZ; +} + +/* + * BufferGetPage + * Returns the page associated with a buffer. + * + * When this is called as part of a scan, there may be a need for a nearby + * call to TestForOldSnapshot(). See the definition of that for details. + */ +static inline Page +BufferGetPage(Buffer buffer) +{ + return (Page) BufferGetBlock(buffer); +} + /* * Check whether the given snapshot is too old to have safely read the given * page from the given table. If so, throw a "snapshot too old" error. diff --git a/src/postgres/include/storage/bufpage.h b/src/postgres/include/storage/bufpage.h index e9f253f2..424ecba0 100644 --- a/src/postgres/include/storage/bufpage.h +++ b/src/postgres/include/storage/bufpage.h @@ -4,7 +4,7 @@ * Standard POSTGRES buffer page definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/bufpage.h @@ -97,8 +97,12 @@ typedef struct uint32 xrecoff; /* low bits */ } PageXLogRecPtr; -#define PageXLogRecPtrGet(val) \ - ((uint64) (val).xlogid << 32 | (val).xrecoff) +static inline XLogRecPtr +PageXLogRecPtrGet(PageXLogRecPtr val) +{ + return (uint64) val.xlogid << 32 | val.xrecoff; +} + #define PageXLogRecPtrSet(ptr, lsn) \ ((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn)) @@ -200,16 +204,10 @@ typedef PageHeaderData *PageHeader; #define PG_DATA_CHECKSUM_VERSION 1 /* ---------------------------------------------------------------- - * page support macros + * page support functions * ---------------------------------------------------------------- */ -/* - * PageIsValid - * True iff page is valid. - */ -#define PageIsValid(page) PointerIsValid(page) - /* * line pointer(s) do not count as part of header */ @@ -219,21 +217,31 @@ typedef PageHeaderData *PageHeader; * PageIsEmpty * returns true iff no itemid has been allocated on the page */ -#define PageIsEmpty(page) \ - (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData) +static inline bool +PageIsEmpty(Page page) +{ + return ((PageHeader) page)->pd_lower <= SizeOfPageHeaderData; +} /* * PageIsNew * returns true iff page has not been initialized (by PageInit) */ -#define PageIsNew(page) (((PageHeader) (page))->pd_upper == 0) +static inline bool +PageIsNew(Page page) +{ + return ((PageHeader) page)->pd_upper == 0; +} /* * PageGetItemId * Returns an item identifier of a page. */ -#define PageGetItemId(page, offsetNumber) \ - ((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1])) +static inline ItemId +PageGetItemId(Page page, OffsetNumber offsetNumber) +{ + return &((PageHeader) page)->pd_linp[offsetNumber - 1]; +} /* * PageGetContents @@ -243,20 +251,17 @@ typedef PageHeaderData *PageHeader; * Now it is. Beware of old code that might think the offset to the contents * is just SizeOfPageHeaderData rather than MAXALIGN(SizeOfPageHeaderData). */ -#define PageGetContents(page) \ - ((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) +static inline char * +PageGetContents(Page page) +{ + return (char *) page + MAXALIGN(SizeOfPageHeaderData); +} /* ---------------- - * macros to access page size info + * functions to access page size info * ---------------- */ -/* - * PageSizeIsValid - * True iff the page size is valid. - */ -#define PageSizeIsValid(pageSize) ((pageSize) == BLCKSZ) - /* * PageGetPageSize * Returns the page size of a page. @@ -265,15 +270,21 @@ typedef PageHeaderData *PageHeader; * BufferGetPageSize, which can be called on an unformatted page). * however, it can be called on a page that is not stored in a buffer. */ -#define PageGetPageSize(page) \ - ((Size) (((PageHeader) (page))->pd_pagesize_version & (uint16) 0xFF00)) +static inline Size +PageGetPageSize(Page page) +{ + return (Size) (((PageHeader) page)->pd_pagesize_version & (uint16) 0xFF00); +} /* * PageGetPageLayoutVersion * Returns the page layout version of a page. */ -#define PageGetPageLayoutVersion(page) \ - (((PageHeader) (page))->pd_pagesize_version & 0x00FF) +static inline uint8 +PageGetPageLayoutVersion(Page page) +{ + return (((PageHeader) page)->pd_pagesize_version & 0x00FF); +} /* * PageSetPageSizeAndVersion @@ -282,52 +293,52 @@ typedef PageHeaderData *PageHeader; * We could support setting these two values separately, but there's * no real need for it at the moment. */ -#define PageSetPageSizeAndVersion(page, size, version) \ -( \ - AssertMacro(((size) & 0xFF00) == (size)), \ - AssertMacro(((version) & 0x00FF) == (version)), \ - ((PageHeader) (page))->pd_pagesize_version = (size) | (version) \ -) +static inline void +PageSetPageSizeAndVersion(Page page, Size size, uint8 version) +{ + Assert((size & 0xFF00) == size); + Assert((version & 0x00FF) == version); + + ((PageHeader) page)->pd_pagesize_version = size | version; +} /* ---------------- - * page special data macros + * page special data functions * ---------------- */ /* * PageGetSpecialSize * Returns size of special space on a page. */ -#define PageGetSpecialSize(page) \ - ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) +static inline uint16 +PageGetSpecialSize(Page page) +{ + return (PageGetPageSize(page) - ((PageHeader) page)->pd_special); +} /* * Using assertions, validate that the page special pointer is OK. * * This is intended to catch use of the pointer before page initialization. - * It is implemented as a function due to the limitations of the MSVC - * compiler, which choked on doing all these tests within another macro. We - * return true so that AssertMacro() can be used while still getting the - * specifics from the macro failure within this function. */ -static inline bool +static inline void PageValidateSpecialPointer(Page page) { - Assert(PageIsValid(page)); - Assert(((PageHeader) (page))->pd_special <= BLCKSZ); - Assert(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData); - - return true; + Assert(page); + Assert(((PageHeader) page)->pd_special <= BLCKSZ); + Assert(((PageHeader) page)->pd_special >= SizeOfPageHeaderData); } /* * PageGetSpecialPointer * Returns pointer to special space on a page. */ -#define PageGetSpecialPointer(page) \ -( \ - AssertMacro(PageValidateSpecialPointer(page)), \ - (char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \ -) +static inline char * +PageGetSpecialPointer(Page page) +{ + PageValidateSpecialPointer(page); + return (char *) page + ((PageHeader) page)->pd_special; +} /* * PageGetItem @@ -337,12 +348,14 @@ PageValidateSpecialPointer(Page page) * This does not change the status of any of the resources passed. * The semantics may change in the future. */ -#define PageGetItem(page, itemId) \ -( \ - AssertMacro(PageIsValid(page)), \ - AssertMacro(ItemIdHasStorage(itemId)), \ - (Item)(((char *)(page)) + ItemIdGetOffset(itemId)) \ -) +static inline Item +PageGetItem(Page page, ItemId itemId) +{ + Assert(page); + Assert(ItemIdHasStorage(itemId)); + + return (Item) (((char *) page) + ItemIdGetOffset(itemId)); +} /* * PageGetMaxOffsetNumber @@ -351,44 +364,84 @@ PageValidateSpecialPointer(Page page) * of items on the page. * * NOTE: if the page is not initialized (pd_lower == 0), we must - * return zero to ensure sane behavior. Accept double evaluation - * of the argument so that we can ensure this. + * return zero to ensure sane behavior. */ -#define PageGetMaxOffsetNumber(page) \ - (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData ? 0 : \ - ((((PageHeader) (page))->pd_lower - SizeOfPageHeaderData) \ - / sizeof(ItemIdData))) +static inline OffsetNumber +PageGetMaxOffsetNumber(Page page) +{ + PageHeader pageheader = (PageHeader) page; + + if (pageheader->pd_lower <= SizeOfPageHeaderData) + return 0; + else + return (pageheader->pd_lower - SizeOfPageHeaderData) / sizeof(ItemIdData); +} /* - * Additional macros for access to page headers. (Beware multiple evaluation - * of the arguments!) + * Additional functions for access to page headers. */ -#define PageGetLSN(page) \ - PageXLogRecPtrGet(((PageHeader) (page))->pd_lsn) -#define PageSetLSN(page, lsn) \ - PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn) - -#define PageHasFreeLinePointers(page) \ - (((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES) -#define PageSetHasFreeLinePointers(page) \ - (((PageHeader) (page))->pd_flags |= PD_HAS_FREE_LINES) -#define PageClearHasFreeLinePointers(page) \ - (((PageHeader) (page))->pd_flags &= ~PD_HAS_FREE_LINES) - -#define PageIsFull(page) \ - (((PageHeader) (page))->pd_flags & PD_PAGE_FULL) -#define PageSetFull(page) \ - (((PageHeader) (page))->pd_flags |= PD_PAGE_FULL) -#define PageClearFull(page) \ - (((PageHeader) (page))->pd_flags &= ~PD_PAGE_FULL) - -#define PageIsAllVisible(page) \ - (((PageHeader) (page))->pd_flags & PD_ALL_VISIBLE) -#define PageSetAllVisible(page) \ - (((PageHeader) (page))->pd_flags |= PD_ALL_VISIBLE) -#define PageClearAllVisible(page) \ - (((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE) +static inline XLogRecPtr +PageGetLSN(Page page) +{ + return PageXLogRecPtrGet(((PageHeader) page)->pd_lsn); +} +static inline void +PageSetLSN(Page page, XLogRecPtr lsn) +{ + PageXLogRecPtrSet(((PageHeader) page)->pd_lsn, lsn); +} + +static inline bool +PageHasFreeLinePointers(Page page) +{ + return ((PageHeader) page)->pd_flags & PD_HAS_FREE_LINES; +} +static inline void +PageSetHasFreeLinePointers(Page page) +{ + ((PageHeader) page)->pd_flags |= PD_HAS_FREE_LINES; +} +static inline void +PageClearHasFreeLinePointers(Page page) +{ + ((PageHeader) page)->pd_flags &= ~PD_HAS_FREE_LINES; +} + +static inline bool +PageIsFull(Page page) +{ + return ((PageHeader) page)->pd_flags & PD_PAGE_FULL; +} +static inline void +PageSetFull(Page page) +{ + ((PageHeader) page)->pd_flags |= PD_PAGE_FULL; +} +static inline void +PageClearFull(Page page) +{ + ((PageHeader) page)->pd_flags &= ~PD_PAGE_FULL; +} +static inline bool +PageIsAllVisible(Page page) +{ + return ((PageHeader) page)->pd_flags & PD_ALL_VISIBLE; +} +static inline void +PageSetAllVisible(Page page) +{ + ((PageHeader) page)->pd_flags |= PD_ALL_VISIBLE; +} +static inline void +PageClearAllVisible(Page page) +{ + ((PageHeader) page)->pd_flags &= ~PD_ALL_VISIBLE; +} + +/* + * These two require "access/transam.h", so left as macros. + */ #define PageSetPrunable(page, xid) \ do { \ Assert(TransactionIdIsNormal(xid)); \ @@ -446,9 +499,9 @@ extern Size PageGetFreeSpace(Page page); extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups); extern Size PageGetExactFreeSpace(Page page); extern Size PageGetHeapFreeSpace(Page page); -extern void PageIndexTupleDelete(Page page, OffsetNumber offset); +extern void PageIndexTupleDelete(Page page, OffsetNumber offnum); extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems); -extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offset); +extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum); extern bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, Item newtup, Size newsize); extern char *PageSetChecksumCopy(Page page, BlockNumber blkno); diff --git a/src/postgres/include/storage/condition_variable.h b/src/postgres/include/storage/condition_variable.h index e89175eb..e218cb2c 100644 --- a/src/postgres/include/storage/condition_variable.h +++ b/src/postgres/include/storage/condition_variable.h @@ -12,7 +12,7 @@ * can be canceled prior to the fulfillment of the condition) and do not * use pointers internally (so that they are safe to use within DSMs). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/condition_variable.h @@ -56,7 +56,7 @@ extern void ConditionVariableInit(ConditionVariable *cv); extern void ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info); extern bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout, uint32 wait_event_info); -extern void ConditionVariableCancelSleep(void); +extern bool ConditionVariableCancelSleep(void); /* * Optionally, ConditionVariablePrepareToSleep can be called before entering diff --git a/src/postgres/include/storage/dsm.h b/src/postgres/include/storage/dsm.h index 4dd6af23..858bbf61 100644 --- a/src/postgres/include/storage/dsm.h +++ b/src/postgres/include/storage/dsm.h @@ -3,7 +3,7 @@ * dsm.h * manage dynamic shared memory segments * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/dsm.h @@ -19,9 +19,6 @@ typedef struct dsm_segment dsm_segment; #define DSM_CREATE_NULL_IF_MAXSEGMENTS 0x0001 -/* A sentinel value for an invalid DSM handle. */ -#define DSM_HANDLE_INVALID 0 - /* Startup and shutdown functions. */ struct PGShmemHeader; /* avoid including pg_shmem.h */ extern void dsm_cleanup_using_control_segment(dsm_handle old_control_handle); @@ -45,8 +42,8 @@ extern void dsm_detach(dsm_segment *seg); extern void dsm_pin_mapping(dsm_segment *seg); extern void dsm_unpin_mapping(dsm_segment *seg); extern void dsm_pin_segment(dsm_segment *seg); -extern void dsm_unpin_segment(dsm_handle h); -extern dsm_segment *dsm_find_mapping(dsm_handle h); +extern void dsm_unpin_segment(dsm_handle handle); +extern dsm_segment *dsm_find_mapping(dsm_handle handle); /* Informational functions. */ extern void *dsm_segment_address(dsm_segment *seg); diff --git a/src/postgres/include/storage/dsm_impl.h b/src/postgres/include/storage/dsm_impl.h index c51584dc..daf07bd1 100644 --- a/src/postgres/include/storage/dsm_impl.h +++ b/src/postgres/include/storage/dsm_impl.h @@ -3,7 +3,7 @@ * dsm_impl.h * low-level dynamic shared memory primitives * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/dsm_impl.h @@ -54,6 +54,9 @@ extern PGDLLIMPORT int min_dynamic_shared_memory; /* A "name" for a dynamic shared memory segment. */ typedef uint32 dsm_handle; +/* Sentinel value to use for invalid DSM handles. */ +#define DSM_HANDLE_INVALID ((dsm_handle) 0) + /* All the shared-memory operations we know about. */ typedef enum { diff --git a/src/postgres/include/storage/fd.h b/src/postgres/include/storage/fd.h index 69549b00..6791a406 100644 --- a/src/postgres/include/storage/fd.h +++ b/src/postgres/include/storage/fd.h @@ -4,7 +4,7 @@ * Virtual file descriptor definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/fd.h @@ -44,6 +44,7 @@ #define FD_H #include +#include typedef enum RecoveryInitSyncMethod { @@ -51,15 +52,19 @@ typedef enum RecoveryInitSyncMethod RECOVERY_INIT_SYNC_METHOD_SYNCFS } RecoveryInitSyncMethod; -struct iovec; /* avoid including port/pg_iovec.h here */ - typedef int File; +#define IO_DIRECT_DATA 0x01 +#define IO_DIRECT_WAL 0x02 +#define IO_DIRECT_WAL_INIT 0x04 + + /* GUC parameter */ extern PGDLLIMPORT int max_files_per_process; extern PGDLLIMPORT bool data_sync_retry; extern PGDLLIMPORT int recovery_init_sync_method; +extern PGDLLIMPORT int io_direct_flags; /* * This is private to fd.c, but exported for save/restore_backend_variables() @@ -84,9 +89,10 @@ extern PGDLLIMPORT int max_safe_fds; * to the appropriate Windows flag in src/port/open.c. We simulate it with * fcntl(F_NOCACHE) on macOS inside fd.c's open() wrapper. We use the name * PG_O_DIRECT rather than defining O_DIRECT in that case (probably not a good - * idea on a Unix). + * idea on a Unix). We can only use it if the compiler will correctly align + * PGIOAlignedBlock for us, though. */ -#if defined(O_DIRECT) +#if defined(O_DIRECT) && defined(pg_attribute_aligned) #define PG_O_DIRECT O_DIRECT #elif defined(F_NOCACHE) #define PG_O_DIRECT 0x80000000 @@ -104,10 +110,13 @@ extern File PathNameOpenFile(const char *fileName, int fileFlags); extern File PathNameOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode); extern File OpenTemporaryFile(bool interXact); extern void FileClose(File file); -extern int FilePrefetch(File file, off_t offset, int amount, uint32 wait_event_info); -extern int FileRead(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info); -extern int FileWrite(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info); +extern int FilePrefetch(File file, off_t offset, off_t amount, uint32 wait_event_info); +extern int FileRead(File file, void *buffer, size_t amount, off_t offset, uint32 wait_event_info); +extern int FileWrite(File file, const void *buffer, size_t amount, off_t offset, uint32 wait_event_info); extern int FileSync(File file, uint32 wait_event_info); +extern int FileZero(File file, off_t offset, off_t amount, uint32 wait_event_info); +extern int FileFallocate(File file, off_t offset, off_t amount, uint32 wait_event_info); + extern off_t FileSize(File file); extern int FileTruncate(File file, off_t offset, uint32 wait_event_info); extern void FileWriteback(File file, off_t offset, off_t nbytes, uint32 wait_event_info); @@ -117,11 +126,11 @@ extern int FileGetRawFlags(File file); extern mode_t FileGetRawMode(File file); /* Operations used for sharing named temporary files */ -extern File PathNameCreateTemporaryFile(const char *name, bool error_on_failure); +extern File PathNameCreateTemporaryFile(const char *path, bool error_on_failure); extern File PathNameOpenTemporaryFile(const char *path, int mode); -extern bool PathNameDeleteTemporaryFile(const char *name, bool error_on_failure); -extern void PathNameCreateTemporaryDir(const char *base, const char *name); -extern void PathNameDeleteTemporaryDir(const char *name); +extern bool PathNameDeleteTemporaryFile(const char *path, bool error_on_failure); +extern void PathNameCreateTemporaryDir(const char *basedir, const char *directory); +extern void PathNameDeleteTemporaryDir(const char *dirname); extern void TempTablespacePath(char *path, Oid tablespace); /* Operations that allow use of regular stdio --- USE WITH CAUTION */ @@ -177,17 +186,12 @@ extern int pg_fsync(int fd); extern int pg_fsync_no_writethrough(int fd); extern int pg_fsync_writethrough(int fd); extern int pg_fdatasync(int fd); -extern void pg_flush_data(int fd, off_t offset, off_t amount); -extern ssize_t pg_pwritev_with_retry(int fd, - const struct iovec *iov, - int iovcnt, - off_t offset); +extern void pg_flush_data(int fd, off_t offset, off_t nbytes); extern int pg_truncate(const char *path, off_t length); extern void fsync_fname(const char *fname, bool isdir); extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel); -extern int durable_rename(const char *oldfile, const char *newfile, int loglevel); -extern int durable_unlink(const char *fname, int loglevel); -extern int durable_rename_excl(const char *oldfile, const char *newfile, int loglevel); +extern int durable_rename(const char *oldfile, const char *newfile, int elevel); +extern int durable_unlink(const char *fname, int elevel); extern void SyncDataDirectory(void); extern int data_sync_elevel(int elevel); diff --git a/src/postgres/include/storage/fileset.h b/src/postgres/include/storage/fileset.h index ad378847..9aa6581d 100644 --- a/src/postgres/include/storage/fileset.h +++ b/src/postgres/include/storage/fileset.h @@ -3,7 +3,7 @@ * fileset.h * Management of named temporary files. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/fileset.h diff --git a/src/postgres/include/storage/ipc.h b/src/postgres/include/storage/ipc.h index 43843618..53714afd 100644 --- a/src/postgres/include/storage/ipc.h +++ b/src/postgres/include/storage/ipc.h @@ -8,7 +8,7 @@ * exit-time cleanup for either a postmaster or a backend. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/ipc.h diff --git a/src/postgres/include/storage/item.h b/src/postgres/include/storage/item.h index 6f3eaebc..56d59a70 100644 --- a/src/postgres/include/storage/item.h +++ b/src/postgres/include/storage/item.h @@ -4,7 +4,7 @@ * POSTGRES disk item definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/item.h diff --git a/src/postgres/include/storage/itemid.h b/src/postgres/include/storage/itemid.h index e33637ff..e5cfb8c3 100644 --- a/src/postgres/include/storage/itemid.h +++ b/src/postgres/include/storage/itemid.h @@ -4,7 +4,7 @@ * Standard POSTGRES buffer page item identifier/line pointer definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/itemid.h diff --git a/src/postgres/include/storage/itemptr.h b/src/postgres/include/storage/itemptr.h index 81947bc6..fafefa14 100644 --- a/src/postgres/include/storage/itemptr.h +++ b/src/postgres/include/storage/itemptr.h @@ -4,7 +4,7 @@ * POSTGRES disk item pointer definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/itemptr.h @@ -71,7 +71,7 @@ typedef ItemPointerData *ItemPointer; /* ---------------- - * support macros + * support functions * ---------------- */ @@ -79,77 +79,87 @@ typedef ItemPointerData *ItemPointer; * ItemPointerIsValid * True iff the disk item pointer is not NULL. */ -#define ItemPointerIsValid(pointer) \ - ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0))) +static inline bool +ItemPointerIsValid(const ItemPointerData *pointer) +{ + return PointerIsValid(pointer) && pointer->ip_posid != 0; +} /* * ItemPointerGetBlockNumberNoCheck * Returns the block number of a disk item pointer. */ -#define ItemPointerGetBlockNumberNoCheck(pointer) \ -( \ - BlockIdGetBlockNumber(&(pointer)->ip_blkid) \ -) +static inline BlockNumber +ItemPointerGetBlockNumberNoCheck(const ItemPointerData *pointer) +{ + return BlockIdGetBlockNumber(&pointer->ip_blkid); +} /* * ItemPointerGetBlockNumber * As above, but verifies that the item pointer looks valid. */ -#define ItemPointerGetBlockNumber(pointer) \ -( \ - AssertMacro(ItemPointerIsValid(pointer)), \ - ItemPointerGetBlockNumberNoCheck(pointer) \ -) +static inline BlockNumber +ItemPointerGetBlockNumber(const ItemPointerData *pointer) +{ + Assert(ItemPointerIsValid(pointer)); + return ItemPointerGetBlockNumberNoCheck(pointer); +} /* * ItemPointerGetOffsetNumberNoCheck * Returns the offset number of a disk item pointer. */ -#define ItemPointerGetOffsetNumberNoCheck(pointer) \ -( \ - (pointer)->ip_posid \ -) +static inline OffsetNumber +ItemPointerGetOffsetNumberNoCheck(const ItemPointerData *pointer) +{ + return pointer->ip_posid; +} /* * ItemPointerGetOffsetNumber * As above, but verifies that the item pointer looks valid. */ -#define ItemPointerGetOffsetNumber(pointer) \ -( \ - AssertMacro(ItemPointerIsValid(pointer)), \ - ItemPointerGetOffsetNumberNoCheck(pointer) \ -) +static inline OffsetNumber +ItemPointerGetOffsetNumber(const ItemPointerData *pointer) +{ + Assert(ItemPointerIsValid(pointer)); + return ItemPointerGetOffsetNumberNoCheck(pointer); +} /* * ItemPointerSet * Sets a disk item pointer to the specified block and offset. */ -#define ItemPointerSet(pointer, blockNumber, offNum) \ -( \ - AssertMacro(PointerIsValid(pointer)), \ - BlockIdSet(&((pointer)->ip_blkid), blockNumber), \ - (pointer)->ip_posid = offNum \ -) +static inline void +ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum) +{ + Assert(PointerIsValid(pointer)); + BlockIdSet(&pointer->ip_blkid, blockNumber); + pointer->ip_posid = offNum; +} /* * ItemPointerSetBlockNumber * Sets a disk item pointer to the specified block. */ -#define ItemPointerSetBlockNumber(pointer, blockNumber) \ -( \ - AssertMacro(PointerIsValid(pointer)), \ - BlockIdSet(&((pointer)->ip_blkid), blockNumber) \ -) +static inline void +ItemPointerSetBlockNumber(ItemPointerData *pointer, BlockNumber blockNumber) +{ + Assert(PointerIsValid(pointer)); + BlockIdSet(&pointer->ip_blkid, blockNumber); +} /* * ItemPointerSetOffsetNumber * Sets a disk item pointer to the specified offset. */ -#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \ -( \ - AssertMacro(PointerIsValid(pointer)), \ - (pointer)->ip_posid = (offsetNumber) \ -) +static inline void +ItemPointerSetOffsetNumber(ItemPointerData *pointer, OffsetNumber offsetNumber) +{ + Assert(PointerIsValid(pointer)); + pointer->ip_posid = offsetNumber; +} /* * ItemPointerCopy @@ -158,42 +168,49 @@ typedef ItemPointerData *ItemPointer; * Should there ever be padding in an ItemPointer this would need to be handled * differently as it's used as hash key. */ -#define ItemPointerCopy(fromPointer, toPointer) \ -( \ - AssertMacro(PointerIsValid(toPointer)), \ - AssertMacro(PointerIsValid(fromPointer)), \ - *(toPointer) = *(fromPointer) \ -) +static inline void +ItemPointerCopy(const ItemPointerData *fromPointer, ItemPointerData *toPointer) +{ + Assert(PointerIsValid(toPointer)); + Assert(PointerIsValid(fromPointer)); + *toPointer = *fromPointer; +} /* * ItemPointerSetInvalid * Sets a disk item pointer to be invalid. */ -#define ItemPointerSetInvalid(pointer) \ -( \ - AssertMacro(PointerIsValid(pointer)), \ - BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \ - (pointer)->ip_posid = InvalidOffsetNumber \ -) +static inline void +ItemPointerSetInvalid(ItemPointerData *pointer) +{ + Assert(PointerIsValid(pointer)); + BlockIdSet(&pointer->ip_blkid, InvalidBlockNumber); + pointer->ip_posid = InvalidOffsetNumber; +} /* * ItemPointerIndicatesMovedPartitions * True iff the block number indicates the tuple has moved to another * partition. */ -#define ItemPointerIndicatesMovedPartitions(pointer) \ -( \ - ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \ - ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \ -) +static inline bool +ItemPointerIndicatesMovedPartitions(const ItemPointerData *pointer) +{ + return + ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && + ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber; +} /* * ItemPointerSetMovedPartitions * Indicate that the item referenced by the itempointer has moved into a * different partition. */ -#define ItemPointerSetMovedPartitions(pointer) \ - ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber) +static inline void +ItemPointerSetMovedPartitions(ItemPointerData *pointer) +{ + ItemPointerSet(pointer, MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber); +} /* ---------------- * externs @@ -205,4 +222,24 @@ extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2); extern void ItemPointerInc(ItemPointer pointer); extern void ItemPointerDec(ItemPointer pointer); +/* ---------------- + * Datum conversion functions + * ---------------- + */ + +static inline ItemPointer +DatumGetItemPointer(Datum X) +{ + return (ItemPointer) DatumGetPointer(X); +} + +static inline Datum +ItemPointerGetDatum(const ItemPointerData *X) +{ + return PointerGetDatum(X); +} + +#define PG_GETARG_ITEMPOINTER(n) DatumGetItemPointer(PG_GETARG_DATUM(n)) +#define PG_RETURN_ITEMPOINTER(x) return ItemPointerGetDatum(x) + #endif /* ITEMPTR_H */ diff --git a/src/postgres/include/storage/large_object.h b/src/postgres/include/storage/large_object.h index b826a7dc..db521f23 100644 --- a/src/postgres/include/storage/large_object.h +++ b/src/postgres/include/storage/large_object.h @@ -5,7 +5,7 @@ * zillions of large objects (internal, external, jaquith, inversion). * Now we only support inversion. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/large_object.h diff --git a/src/postgres/include/storage/latch.h b/src/postgres/include/storage/latch.h index 68ab740f..99cc4787 100644 --- a/src/postgres/include/storage/latch.h +++ b/src/postgres/include/storage/latch.h @@ -90,7 +90,7 @@ * efficient than using WaitLatch or WaitLatchOrSocket. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/latch.h @@ -135,9 +135,16 @@ typedef struct Latch #define WL_SOCKET_CONNECTED WL_SOCKET_WRITEABLE #endif #define WL_SOCKET_CLOSED (1 << 7) +#ifdef WIN32 +#define WL_SOCKET_ACCEPT (1 << 8) +#else +/* avoid having to deal with case on platforms not requiring it */ +#define WL_SOCKET_ACCEPT WL_SOCKET_READABLE +#endif #define WL_SOCKET_MASK (WL_SOCKET_READABLE | \ WL_SOCKET_WRITEABLE | \ WL_SOCKET_CONNECTED | \ + WL_SOCKET_ACCEPT | \ WL_SOCKET_CLOSED) typedef struct WaitEvent @@ -168,6 +175,7 @@ extern void ShutdownLatchSupport(void); extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents); extern void FreeWaitEventSet(WaitEventSet *set); +extern void FreeWaitEventSetAfterFork(WaitEventSet *set); extern int AddWaitEventToSet(WaitEventSet *set, uint32 events, pgsocket fd, Latch *latch, void *user_data); extern void ModifyWaitEvent(WaitEventSet *set, int pos, uint32 events, Latch *latch); diff --git a/src/postgres/include/storage/lmgr.h b/src/postgres/include/storage/lmgr.h index be1d2c99..4ee91e3c 100644 --- a/src/postgres/include/storage/lmgr.h +++ b/src/postgres/include/storage/lmgr.h @@ -4,7 +4,7 @@ * POSTGRES lock manager definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/lmgr.h @@ -107,6 +107,11 @@ extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode); +extern void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, + LOCKMODE lockmode); +extern void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, + LOCKMODE lockmode); + /* Describe a locktag for error messages */ extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag); diff --git a/src/postgres/include/storage/lock.h b/src/postgres/include/storage/lock.h index e4e1495b..8575bea2 100644 --- a/src/postgres/include/storage/lock.h +++ b/src/postgres/include/storage/lock.h @@ -4,7 +4,7 @@ * POSTGRES low-level lock mechanism * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/lock.h @@ -18,6 +18,7 @@ #error "lock.h may not be included from frontend code" #endif +#include "lib/ilist.h" #include "storage/backendid.h" #include "storage/lockdefs.h" #include "storage/lwlock.h" @@ -27,12 +28,6 @@ /* struct PGPROC is declared in proc.h, but must forward-reference it */ typedef struct PGPROC PGPROC; -typedef struct PROC_QUEUE -{ - SHM_QUEUE links; /* head of list of PGPROC objects */ - int size; /* number of entries in list */ -} PROC_QUEUE; - /* GUC variables */ extern PGDLLIMPORT int max_locks_per_xact; @@ -149,10 +144,12 @@ typedef enum LockTagType LOCKTAG_SPECULATIVE_TOKEN, /* speculative insertion Xid and token */ LOCKTAG_OBJECT, /* non-relation database object */ LOCKTAG_USERLOCK, /* reserved for old contrib/userlock code */ - LOCKTAG_ADVISORY /* advisory user locks */ + LOCKTAG_ADVISORY, /* advisory user locks */ + LOCKTAG_APPLY_TRANSACTION /* transaction being applied on a logical + * replication subscriber */ } LockTagType; -#define LOCKTAG_LAST_TYPE LOCKTAG_ADVISORY +#define LOCKTAG_LAST_TYPE LOCKTAG_APPLY_TRANSACTION extern PGDLLIMPORT const char *const LockTagTypeNames[]; @@ -278,6 +275,17 @@ typedef struct LOCKTAG (locktag).locktag_type = LOCKTAG_ADVISORY, \ (locktag).locktag_lockmethodid = USER_LOCKMETHOD) +/* + * ID info for a remote transaction on a logical replication subscriber is: DB + * OID + SUBSCRIPTION OID + TRANSACTION ID + OBJID + */ +#define SET_LOCKTAG_APPLY_TRANSACTION(locktag,dboid,suboid,xid,objid) \ + ((locktag).locktag_field1 = (dboid), \ + (locktag).locktag_field2 = (suboid), \ + (locktag).locktag_field3 = (xid), \ + (locktag).locktag_field4 = (objid), \ + (locktag).locktag_type = LOCKTAG_APPLY_TRANSACTION, \ + (locktag).locktag_lockmethodid = DEFAULT_LOCKMETHOD) /* * Per-locked-object lock information: @@ -305,8 +313,8 @@ typedef struct LOCK /* data */ LOCKMASK grantMask; /* bitmask for lock types already granted */ LOCKMASK waitMask; /* bitmask for lock types awaited */ - SHM_QUEUE procLocks; /* list of PROCLOCK objects assoc. with lock */ - PROC_QUEUE waitProcs; /* list of PGPROC objects waiting on lock */ + dlist_head procLocks; /* list of PROCLOCK objects assoc. with lock */ + dclist_head waitProcs; /* list of PGPROC objects waiting on lock */ int requested[MAX_LOCKMODES]; /* counts of requested locks */ int nRequested; /* total of requested[] array */ int granted[MAX_LOCKMODES]; /* counts of granted locks */ @@ -367,8 +375,8 @@ typedef struct PROCLOCK PGPROC *groupLeader; /* proc's lock group leader, or proc itself */ LOCKMASK holdMask; /* bitmask for lock types currently held */ LOCKMASK releaseMask; /* bitmask for lock types to be released */ - SHM_QUEUE lockLink; /* list link in LOCK's list of proclocks */ - SHM_QUEUE procLink; /* list link in PGPROC's list of proclocks */ + dlist_node lockLink; /* list link in LOCK's list of proclocks */ + dlist_node procLink; /* list link in PGPROC's list of proclocks */ } PROCLOCK; #define PROCLOCK_LOCKMETHOD(proclock) \ diff --git a/src/postgres/include/storage/lockdefs.h b/src/postgres/include/storage/lockdefs.h index 350ddd4d..e25216e0 100644 --- a/src/postgres/include/storage/lockdefs.h +++ b/src/postgres/include/storage/lockdefs.h @@ -7,7 +7,7 @@ * contains definition that have to (indirectly) be available when included by * FRONTEND code. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/lockdefs.h @@ -36,8 +36,8 @@ typedef int LOCKMODE; #define AccessShareLock 1 /* SELECT */ #define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */ #define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */ -#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE INDEX - * CONCURRENTLY */ +#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL), ANALYZE, CREATE + * INDEX CONCURRENTLY */ #define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */ #define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW * SHARE */ diff --git a/src/postgres/include/storage/lwlock.h b/src/postgres/include/storage/lwlock.h index e03d317e..34169e58 100644 --- a/src/postgres/include/storage/lwlock.h +++ b/src/postgres/include/storage/lwlock.h @@ -4,7 +4,7 @@ * Lightweight lock manager * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/lwlock.h @@ -23,6 +23,15 @@ struct PGPROC; +/* what state of the wait process is a backend in */ +typedef enum LWLockWaitState +{ + LW_WS_NOT_WAITING, /* not currently waiting / woken up */ + LW_WS_WAITING, /* currently waiting */ + LW_WS_PENDING_WAKEUP, /* removed from waitlist, but not yet + * signalled */ +} LWLockWaitState; + /* * Code outside of lwlock.c should not manipulate the contents of this * structure directly, but we have to declare it here to allow LWLocks to be @@ -51,6 +60,9 @@ typedef struct LWLock */ #define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE +StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE, + "Miscalculated LWLock padding"); + /* LWLock, padded to a full cache line size */ typedef union LWLockPadded { @@ -124,7 +136,7 @@ extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride); extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode); extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval); -extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 value); +extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 val); extern Size LWLockShmemSize(void); extern void CreateLWLocks(void); @@ -193,6 +205,8 @@ typedef enum BuiltinTrancheIds LWTRANCHE_PGSTATS_DSA, LWTRANCHE_PGSTATS_HASH, LWTRANCHE_PGSTATS_DATA, + LWTRANCHE_LAUNCHER_DSA, + LWTRANCHE_LAUNCHER_HASH, LWTRANCHE_FIRST_USER_DEFINED } BuiltinTrancheIds; diff --git a/src/postgres/include/storage/off.h b/src/postgres/include/storage/off.h index e6573aca..35403080 100644 --- a/src/postgres/include/storage/off.h +++ b/src/postgres/include/storage/off.h @@ -4,7 +4,7 @@ * POSTGRES disk "offset" definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/off.h diff --git a/src/postgres/include/storage/pg_sema.h b/src/postgres/include/storage/pg_sema.h index 5ca941ae..3bf03420 100644 --- a/src/postgres/include/storage/pg_sema.h +++ b/src/postgres/include/storage/pg_sema.h @@ -10,7 +10,7 @@ * be provided by each port. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/pg_sema.h diff --git a/src/postgres/include/storage/pg_shmem.h b/src/postgres/include/storage/pg_shmem.h index da5962ed..4dd05f15 100644 --- a/src/postgres/include/storage/pg_shmem.h +++ b/src/postgres/include/storage/pg_shmem.h @@ -14,7 +14,7 @@ * only one ID number. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/pg_shmem.h diff --git a/src/postgres/include/storage/pmsignal.h b/src/postgres/include/storage/pmsignal.h index 58f4ddf4..92dc7646 100644 --- a/src/postgres/include/storage/pmsignal.h +++ b/src/postgres/include/storage/pmsignal.h @@ -4,7 +4,7 @@ * routines for signaling between the postmaster and its child processes * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/pmsignal.h diff --git a/src/postgres/include/storage/predicate.h b/src/postgres/include/storage/predicate.h index 8dfcb394..cd48afa1 100644 --- a/src/postgres/include/storage/predicate.h +++ b/src/postgres/include/storage/predicate.h @@ -4,7 +4,7 @@ * POSTGRES public predicate locking definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/predicate.h @@ -58,7 +58,7 @@ extern void RegisterPredicateLockingXid(TransactionId xid); extern void PredicateLockRelation(Relation relation, Snapshot snapshot); extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot); extern void PredicateLockTID(Relation relation, ItemPointer tid, Snapshot snapshot, - TransactionId insert_xid); + TransactionId tuple_xid); extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno); extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno); extern void TransferPredicateLocksToHeapRelation(Relation relation); diff --git a/src/postgres/include/storage/proc.h b/src/postgres/include/storage/proc.h index 2579e619..ef74f326 100644 --- a/src/postgres/include/storage/proc.h +++ b/src/postgres/include/storage/proc.h @@ -4,7 +4,7 @@ * per-process shared memory data structures * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/proc.h @@ -32,6 +32,8 @@ * If none of the caches have overflowed, we can assume that an XID that's not * listed anywhere in the PGPROC array is not a running transaction. Else we * have to look at pg_subtrans. + * + * See src/test/isolation/specs/subxid-overflow.spec if you change this. */ #define PGPROC_MAX_CACHED_SUBXIDS 64 /* XXX guessed-at value */ @@ -89,7 +91,7 @@ struct XidCache #define INVALID_PGPROCNO PG_INT32_MAX /* - * Flags for PGPROC.delayChkpt + * Flags for PGPROC.delayChkptFlags * * These flags can be used to delay the start or completion of a checkpoint * for short periods. A flag is in effect if the corresponding bit is set in @@ -116,7 +118,7 @@ struct XidCache * to phase 3. This is useful if we are performing a WAL-logged operation that * might invalidate buffers, such as relation truncation. In this case, we need * to ensure that any buffers which were invalidated and thus not flushed by - * the checkpoint are actaully destroyed on disk. Replay can cope with a file + * the checkpoint are actually destroyed on disk. Replay can cope with a file * or block that doesn't exist, but not with a block that has the wrong * contents. */ @@ -147,7 +149,7 @@ typedef enum * but its myProcLocks[] lists are valid. * * We allow many fields of this struct to be accessed without locks, such as - * delayChkpt and isBackgroundWorker. However, keep in mind that writing + * delayChkptFlags and isBackgroundWorker. However, keep in mind that writing * mirrored ones (see below) requires holding ProcArrayLock or XidGenLock in * at least shared mode, so that pgxactoff does not change concurrently. * @@ -165,8 +167,8 @@ typedef enum struct PGPROC { /* proc->links MUST BE FIRST IN STRUCT (see ProcSleep,ProcWakeup,etc) */ - SHM_QUEUE links; /* list link if process is in a list */ - PGPROC **procgloballist; /* procglobal list that owns this PGPROC */ + dlist_node links; /* list link if process is in a list */ + dlist_head *procgloballist; /* procglobal list that owns this PGPROC */ PGSemaphore sem; /* ONE semaphore to sleep on */ ProcWaitStatus waitStatus; @@ -191,7 +193,11 @@ struct PGPROC int pgxactoff; /* offset into various ProcGlobal->arrays with * data mirrored from this PGPROC */ - int pgprocno; + + int pgprocno; /* Number of this PGPROC in + * ProcGlobal->allProcs array. This is set + * once by InitProcGlobal(). + * ProcGlobal->allProcs[n].pgprocno == n */ /* These fields are zero while a backend is still starting up: */ BackendId backendId; /* This backend's backend ID (if assigned) */ @@ -211,7 +217,7 @@ struct PGPROC bool recoveryConflictPending; /* Info about LWLock the process is currently waiting for, if any. */ - bool lwWaiting; /* true if waiting for an LW lock */ + uint8 lwWaiting; /* see LWLockWaitState */ uint8 lwWaitMode; /* lwlock mode being waited for */ proclist_node lwWaitLink; /* position in LW lock wait list */ @@ -242,14 +248,14 @@ struct PGPROC */ XLogRecPtr waitLSN; /* waiting for this LSN or higher */ int syncRepState; /* wait state for sync rep */ - SHM_QUEUE syncRepLinks; /* list link if process is in syncrep queue */ + dlist_node syncRepLinks; /* list link if process is in syncrep queue */ /* * All PROCLOCK objects for locks held or awaited by this backend are * linked into one of these lists, according to the partition number of * their lock. */ - SHM_QUEUE myProcLocks[NUM_LOCK_PARTITIONS]; + dlist_head myProcLocks[NUM_LOCK_PARTITIONS]; XidCacheStatus subxidStatus; /* mirrored with * ProcGlobal->subxidStates[i] */ @@ -379,13 +385,13 @@ typedef struct PROC_HDR /* Length of allProcs array */ uint32 allProcCount; /* Head of list of free PGPROC structures */ - PGPROC *freeProcs; + dlist_head freeProcs; /* Head of list of autovacuum's free PGPROC structures */ - PGPROC *autovacFreeProcs; + dlist_head autovacFreeProcs; /* Head of list of bgworker free PGPROC structures */ - PGPROC *bgworkerFreeProcs; + dlist_head bgworkerFreeProcs; /* Head of list of walsender free PGPROC structures */ - PGPROC *walsenderFreeProcs; + dlist_head walsenderFreeProcs; /* First pgproc waiting for group XID clear */ pg_atomic_uint32 procArrayGroupFirst; /* First pgproc waiting for group transaction status update */ @@ -439,12 +445,11 @@ extern void InitAuxiliaryProcess(void); extern void SetStartupBufferPinWaitBufId(int bufid); extern int GetStartupBufferPinWaitBufId(void); -extern bool HaveNFreeProcs(int n); +extern bool HaveNFreeProcs(int n, int *nfree); extern void ProcReleaseLocks(bool isCommit); -extern void ProcQueueInit(PROC_QUEUE *queue); extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable); -extern PGPROC *ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus); +extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus); extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock); extern void CheckDeadLockAlert(void); extern bool IsWaitingForLock(void); diff --git a/src/postgres/include/storage/procarray.h b/src/postgres/include/storage/procarray.h index 1b2cfac5..d8cae3ce 100644 --- a/src/postgres/include/storage/procarray.h +++ b/src/postgres/include/storage/procarray.h @@ -4,7 +4,7 @@ * POSTGRES process array definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/procarray.h @@ -39,6 +39,7 @@ extern void ExpireTreeKnownAssignedTransactionIds(TransactionId xid, TransactionId max_xid); extern void ExpireAllKnownAssignedTransactionIds(void); extern void ExpireOldKnownAssignedTransactionIds(TransactionId xid); +extern void KnownAssignedTransactionIdsIdleMaintenance(void); extern int GetMaxSnapshotXidCount(void); extern int GetMaxSnapshotSubxidCount(void); @@ -57,7 +58,7 @@ extern TransactionId GetOldestNonRemovableTransactionId(Relation rel); extern TransactionId GetOldestTransactionIdConsideredRunning(void); extern TransactionId GetOldestActiveTransactionId(void); extern TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly); -extern void GetReplicationHorizons(TransactionId *slot_xmin, TransactionId *catalog_xmin); +extern void GetReplicationHorizons(TransactionId *xmin, TransactionId *catalog_xmin); extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type); extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, diff --git a/src/postgres/include/storage/proclist_types.h b/src/postgres/include/storage/proclist_types.h index 52326794..526c3ea6 100644 --- a/src/postgres/include/storage/proclist_types.h +++ b/src/postgres/include/storage/proclist_types.h @@ -5,7 +5,7 @@ * * See proclist.h for functions that operate on these types. * - * Portions Copyright (c) 2016-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/include/storage/proclist_types.h diff --git a/src/postgres/include/storage/procsignal.h b/src/postgres/include/storage/procsignal.h index ee636900..2f52100b 100644 --- a/src/postgres/include/storage/procsignal.h +++ b/src/postgres/include/storage/procsignal.h @@ -4,7 +4,7 @@ * Routines for interprocess signaling * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/procsignal.h @@ -35,12 +35,14 @@ typedef enum PROCSIG_WALSND_INIT_STOPPING, /* ask walsenders to prepare for shutdown */ PROCSIG_BARRIER, /* global barrier interrupt */ PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */ + PROCSIG_PARALLEL_APPLY_MESSAGE, /* Message from parallel apply workers */ /* Recovery conflict reasons */ PROCSIG_RECOVERY_CONFLICT_DATABASE, PROCSIG_RECOVERY_CONFLICT_TABLESPACE, PROCSIG_RECOVERY_CONFLICT_LOCK, PROCSIG_RECOVERY_CONFLICT_SNAPSHOT, + PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT, PROCSIG_RECOVERY_CONFLICT_BUFFERPIN, PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, diff --git a/src/postgres/include/storage/relfilelocator.h b/src/postgres/include/storage/relfilelocator.h new file mode 100644 index 00000000..61cf0169 --- /dev/null +++ b/src/postgres/include/storage/relfilelocator.h @@ -0,0 +1,99 @@ +/*------------------------------------------------------------------------- + * + * relfilelocator.h + * Physical access information for relations. + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/storage/relfilelocator.h + * + *------------------------------------------------------------------------- + */ +#ifndef RELFILELOCATOR_H +#define RELFILELOCATOR_H + +#include "common/relpath.h" +#include "storage/backendid.h" + +/* + * RelFileLocator must provide all that we need to know to physically access + * a relation, with the exception of the backend ID, which can be provided + * separately. Note, however, that a "physical" relation is comprised of + * multiple files on the filesystem, as each fork is stored as a separate + * file, and each fork can be divided into multiple segments. See md.c. + * + * spcOid identifies the tablespace of the relation. It corresponds to + * pg_tablespace.oid. + * + * dbOid identifies the database of the relation. It is zero for + * "shared" relations (those common to all databases of a cluster). + * Nonzero dbOid values correspond to pg_database.oid. + * + * relNumber identifies the specific relation. relNumber corresponds to + * pg_class.relfilenode (NOT pg_class.oid, because we need to be able + * to assign new physical files to relations in some situations). + * Notice that relNumber is only unique within a database in a particular + * tablespace. + * + * Note: spcOid must be GLOBALTABLESPACE_OID if and only if dbOid is + * zero. We support shared relations only in the "global" tablespace. + * + * Note: in pg_class we allow reltablespace == 0 to denote that the + * relation is stored in its database's "default" tablespace (as + * identified by pg_database.dattablespace). However this shorthand + * is NOT allowed in RelFileLocator structs --- the real tablespace ID + * must be supplied when setting spcOid. + * + * Note: in pg_class, relfilenode can be zero to denote that the relation + * is a "mapped" relation, whose current true filenode number is available + * from relmapper.c. Again, this case is NOT allowed in RelFileLocators. + * + * Note: various places use RelFileLocator in hashtable keys. Therefore, + * there *must not* be any unused padding bytes in this struct. That + * should be safe as long as all the fields are of type Oid. + */ +typedef struct RelFileLocator +{ + Oid spcOid; /* tablespace */ + Oid dbOid; /* database */ + RelFileNumber relNumber; /* relation */ +} RelFileLocator; + +/* + * Augmenting a relfilelocator with the backend ID provides all the information + * we need to locate the physical storage. The backend ID is InvalidBackendId + * for regular relations (those accessible to more than one backend), or the + * owning backend's ID for backend-local relations. Backend-local relations + * are always transient and removed in case of a database crash; they are + * never WAL-logged or fsync'd. + */ +typedef struct RelFileLocatorBackend +{ + RelFileLocator locator; + BackendId backend; +} RelFileLocatorBackend; + +#define RelFileLocatorBackendIsTemp(rlocator) \ + ((rlocator).backend != InvalidBackendId) + +/* + * Note: RelFileLocatorEquals and RelFileLocatorBackendEquals compare relNumber + * first since that is most likely to be different in two unequal + * RelFileLocators. It is probably redundant to compare spcOid if the other + * fields are found equal, but do it anyway to be sure. Likewise for checking + * the backend ID in RelFileLocatorBackendEquals. + */ +#define RelFileLocatorEquals(locator1, locator2) \ + ((locator1).relNumber == (locator2).relNumber && \ + (locator1).dbOid == (locator2).dbOid && \ + (locator1).spcOid == (locator2).spcOid) + +#define RelFileLocatorBackendEquals(locator1, locator2) \ + ((locator1).locator.relNumber == (locator2).locator.relNumber && \ + (locator1).locator.dbOid == (locator2).locator.dbOid && \ + (locator1).backend == (locator2).backend && \ + (locator1).locator.spcOid == (locator2).locator.spcOid) + +#endif /* RELFILELOCATOR_H */ diff --git a/src/postgres/include/storage/relfilenode.h b/src/postgres/include/storage/relfilenode.h deleted file mode 100644 index 4fdc606c..00000000 --- a/src/postgres/include/storage/relfilenode.h +++ /dev/null @@ -1,99 +0,0 @@ -/*------------------------------------------------------------------------- - * - * relfilenode.h - * Physical access information for relations. - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/storage/relfilenode.h - * - *------------------------------------------------------------------------- - */ -#ifndef RELFILENODE_H -#define RELFILENODE_H - -#include "common/relpath.h" -#include "storage/backendid.h" - -/* - * RelFileNode must provide all that we need to know to physically access - * a relation, with the exception of the backend ID, which can be provided - * separately. Note, however, that a "physical" relation is comprised of - * multiple files on the filesystem, as each fork is stored as a separate - * file, and each fork can be divided into multiple segments. See md.c. - * - * spcNode identifies the tablespace of the relation. It corresponds to - * pg_tablespace.oid. - * - * dbNode identifies the database of the relation. It is zero for - * "shared" relations (those common to all databases of a cluster). - * Nonzero dbNode values correspond to pg_database.oid. - * - * relNode identifies the specific relation. relNode corresponds to - * pg_class.relfilenode (NOT pg_class.oid, because we need to be able - * to assign new physical files to relations in some situations). - * Notice that relNode is only unique within a database in a particular - * tablespace. - * - * Note: spcNode must be GLOBALTABLESPACE_OID if and only if dbNode is - * zero. We support shared relations only in the "global" tablespace. - * - * Note: in pg_class we allow reltablespace == 0 to denote that the - * relation is stored in its database's "default" tablespace (as - * identified by pg_database.dattablespace). However this shorthand - * is NOT allowed in RelFileNode structs --- the real tablespace ID - * must be supplied when setting spcNode. - * - * Note: in pg_class, relfilenode can be zero to denote that the relation - * is a "mapped" relation, whose current true filenode number is available - * from relmapper.c. Again, this case is NOT allowed in RelFileNodes. - * - * Note: various places use RelFileNode in hashtable keys. Therefore, - * there *must not* be any unused padding bytes in this struct. That - * should be safe as long as all the fields are of type Oid. - */ -typedef struct RelFileNode -{ - Oid spcNode; /* tablespace */ - Oid dbNode; /* database */ - Oid relNode; /* relation */ -} RelFileNode; - -/* - * Augmenting a relfilenode with the backend ID provides all the information - * we need to locate the physical storage. The backend ID is InvalidBackendId - * for regular relations (those accessible to more than one backend), or the - * owning backend's ID for backend-local relations. Backend-local relations - * are always transient and removed in case of a database crash; they are - * never WAL-logged or fsync'd. - */ -typedef struct RelFileNodeBackend -{ - RelFileNode node; - BackendId backend; -} RelFileNodeBackend; - -#define RelFileNodeBackendIsTemp(rnode) \ - ((rnode).backend != InvalidBackendId) - -/* - * Note: RelFileNodeEquals and RelFileNodeBackendEquals compare relNode first - * since that is most likely to be different in two unequal RelFileNodes. It - * is probably redundant to compare spcNode if the other fields are found equal, - * but do it anyway to be sure. Likewise for checking the backend ID in - * RelFileNodeBackendEquals. - */ -#define RelFileNodeEquals(node1, node2) \ - ((node1).relNode == (node2).relNode && \ - (node1).dbNode == (node2).dbNode && \ - (node1).spcNode == (node2).spcNode) - -#define RelFileNodeBackendEquals(node1, node2) \ - ((node1).node.relNode == (node2).node.relNode && \ - (node1).node.dbNode == (node2).node.dbNode && \ - (node1).backend == (node2).backend && \ - (node1).node.spcNode == (node2).node.spcNode) - -#endif /* RELFILENODE_H */ diff --git a/src/postgres/include/storage/s_lock.h b/src/postgres/include/storage/s_lock.h index 4d3ffc76..c9fa84cc 100644 --- a/src/postgres/include/storage/s_lock.h +++ b/src/postgres/include/storage/s_lock.h @@ -86,7 +86,7 @@ * when using the SysV semaphore code. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/s_lock.h @@ -142,7 +142,7 @@ typedef unsigned char slock_t; static __inline__ int tas(volatile slock_t *lock) { - register slock_t _res = 1; + slock_t _res = 1; /* * Use a non-locking test before asserting the bus lock. Note that the @@ -223,7 +223,7 @@ typedef unsigned char slock_t; static __inline__ int tas(volatile slock_t *lock) { - register slock_t _res = 1; + slock_t _res = 1; __asm__ __volatile__( " lock \n" @@ -250,78 +250,13 @@ spin_delay(void) #endif /* __x86_64__ */ -#if defined(__ia64__) || defined(__ia64) -/* - * Intel Itanium, gcc or Intel's compiler. - * - * Itanium has weak memory ordering, but we rely on the compiler to enforce - * strict ordering of accesses to volatile data. In particular, while the - * xchg instruction implicitly acts as a memory barrier with 'acquire' - * semantics, we do not have an explicit memory fence instruction in the - * S_UNLOCK macro. We use a regular assignment to clear the spinlock, and - * trust that the compiler marks the generated store instruction with the - * ".rel" opcode. - * - * Testing shows that assumption to hold on gcc, although I could not find - * any explicit statement on that in the gcc manual. In Intel's compiler, - * the -m[no-]serialize-volatile option controls that, and testing shows that - * it is enabled by default. - * - * While icc accepts gcc asm blocks on x86[_64], this is not true on ia64 - * (at least not in icc versions before 12.x). So we have to carry a separate - * compiler-intrinsic-based implementation for it. - */ -#define HAS_TEST_AND_SET - -typedef unsigned int slock_t; - -#define TAS(lock) tas(lock) - -/* On IA64, it's a win to use a non-locking test before the xchg proper */ -#define TAS_SPIN(lock) (*(lock) ? 1 : TAS(lock)) - -#ifndef __INTEL_COMPILER - -static __inline__ int -tas(volatile slock_t *lock) -{ - long int ret; - - __asm__ __volatile__( - " xchg4 %0=%1,%2 \n" -: "=r"(ret), "+m"(*lock) -: "r"(1) -: "memory"); - return (int) ret; -} - -#else /* __INTEL_COMPILER */ - -static __inline__ int -tas(volatile slock_t *lock) -{ - int ret; - - ret = _InterlockedExchange(lock,1); /* this is a xchg asm macro */ - - return ret; -} - -/* icc can't use the regular gcc S_UNLOCK() macro either in this case */ -#define S_UNLOCK(lock) \ - do { __memory_barrier(); *(lock) = 0; } while (0) - -#endif /* __INTEL_COMPILER */ -#endif /* __ia64__ || __ia64 */ - - /* * On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available. * * We use the int-width variant of the builtin because it works on more chips * than other widths. */ -#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__aarch64) +#if defined(__arm__) || defined(__arm) || defined(__aarch64__) #ifdef HAVE_GCC__SYNC_INT32_TAS #define HAS_TEST_AND_SET @@ -342,7 +277,7 @@ tas(volatile slock_t *lock) * high-core-count ARM64 processors. It seems mostly a wash for smaller gear, * and ISB doesn't exist at all on pre-v7 ARM chips. */ -#if defined(__aarch64__) || defined(__aarch64) +#if defined(__aarch64__) #define SPIN_DELAY() spin_delay() @@ -353,9 +288,9 @@ spin_delay(void) " isb; \n"); } -#endif /* __aarch64__ || __aarch64 */ +#endif /* __aarch64__ */ #endif /* HAVE_GCC__SYNC_INT32_TAS */ -#endif /* __arm__ || __arm || __aarch64__ || __aarch64 */ +#endif /* __arm__ || __arm || __aarch64__ */ /* S/390 and S/390x Linux (32- and 64-bit zSeries) */ @@ -386,7 +321,7 @@ tas(volatile slock_t *lock) /* * Solaris has always run sparc processors in TSO (total store) mode, but * linux didn't use to and the *BSDs still don't. So, be careful about - * acquire/release semantics. The CPU will treat superfluous membars as + * acquire/release semantics. The CPU will treat superfluous members as * NOPs, so it's just code space. */ #define HAS_TEST_AND_SET @@ -398,7 +333,7 @@ typedef unsigned char slock_t; static __inline__ int tas(volatile slock_t *lock) { - register slock_t _res; + slock_t _res; /* * See comment in src/backend/port/tas/sunstudio_sparc.s for why this @@ -477,7 +412,8 @@ typedef unsigned int slock_t; * * NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002, * an isync is a sufficient synchronization barrier after a lwarx/stwcx loop. - * On newer machines, we can use lwsync instead for better performance. + * But if the spinlock is in ordinary memory, we can use lwsync instead for + * better performance. * * Ordinarily, we'd code the branches here using GNU-style local symbols, that * is "1f" referencing "1:" and so on. But some people run gcc on AIX with @@ -492,23 +428,15 @@ tas(volatile slock_t *lock) int _res; __asm__ __volatile__( -#ifdef USE_PPC_LWARX_MUTEX_HINT " lwarx %0,0,%3,1 \n" -#else -" lwarx %0,0,%3 \n" -#endif " cmpwi %0,0 \n" " bne $+16 \n" /* branch to li %1,1 */ " addi %0,%0,1 \n" " stwcx. %0,0,%3 \n" -" beq $+12 \n" /* branch to lwsync/isync */ +" beq $+12 \n" /* branch to lwsync */ " li %1,1 \n" " b $+12 \n" /* branch to end of asm sequence */ -#ifdef USE_PPC_LWSYNC " lwsync \n" -#else -" isync \n" -#endif " li %1,0 \n" : "=&b"(_t), "=r"(_res), "+m"(*lock) @@ -519,107 +447,18 @@ tas(volatile slock_t *lock) /* * PowerPC S_UNLOCK is almost standard but requires a "sync" instruction. - * On newer machines, we can use lwsync instead for better performance. + * But we can use lwsync instead for better performance. */ -#ifdef USE_PPC_LWSYNC #define S_UNLOCK(lock) \ do \ { \ __asm__ __volatile__ (" lwsync \n" ::: "memory"); \ *((volatile slock_t *) (lock)) = 0; \ } while (0) -#else -#define S_UNLOCK(lock) \ -do \ -{ \ - __asm__ __volatile__ (" sync \n" ::: "memory"); \ - *((volatile slock_t *) (lock)) = 0; \ -} while (0) -#endif /* USE_PPC_LWSYNC */ #endif /* powerpc */ -/* Linux Motorola 68k */ -#if (defined(__mc68000__) || defined(__m68k__)) && defined(__linux__) -#define HAS_TEST_AND_SET - -typedef unsigned char slock_t; - -#define TAS(lock) tas(lock) - -static __inline__ int -tas(volatile slock_t *lock) -{ - register int rv; - - __asm__ __volatile__( - " clrl %0 \n" - " tas %1 \n" - " sne %0 \n" -: "=d"(rv), "+m"(*lock) -: /* no inputs */ -: "memory", "cc"); - return rv; -} - -#endif /* (__mc68000__ || __m68k__) && __linux__ */ - - -/* Motorola 88k */ -#if defined(__m88k__) -#define HAS_TEST_AND_SET - -typedef unsigned int slock_t; - -#define TAS(lock) tas(lock) - -static __inline__ int -tas(volatile slock_t *lock) -{ - register slock_t _res = 1; - - __asm__ __volatile__( - " xmem %0, %2, %%r0 \n" -: "+r"(_res), "+m"(*lock) -: "r"(lock) -: "memory"); - return (int) _res; -} - -#endif /* __m88k__ */ - - -/* - * VAXen -- even multiprocessor ones - * (thanks to Tom Ivar Helbekkmo) - */ -#if defined(__vax__) -#define HAS_TEST_AND_SET - -typedef unsigned char slock_t; - -#define TAS(lock) tas(lock) - -static __inline__ int -tas(volatile slock_t *lock) -{ - register int _res; - - __asm__ __volatile__( - " movl $1, %0 \n" - " bbssi $0, (%2), 1f \n" - " clrl %0 \n" - "1: \n" -: "=&r"(_res), "+m"(*lock) -: "r"(lock) -: "memory"); - return _res; -} - -#endif /* __vax__ */ - - #if defined(__mips__) && !defined(__sgi) /* non-SGI MIPS */ #define HAS_TEST_AND_SET @@ -649,9 +488,9 @@ typedef unsigned int slock_t; static __inline__ int tas(volatile slock_t *lock) { - register volatile slock_t *_l = lock; - register int _res; - register int _tmp; + volatile slock_t *_l = lock; + int _res; + int _tmp; __asm__ __volatile__( " .set push \n" @@ -691,56 +530,70 @@ do \ #endif /* __mips__ && !__sgi */ -#if defined(__m32r__) && defined(HAVE_SYS_TAS_H) /* Renesas' M32R */ -#define HAS_TEST_AND_SET - -#include - -typedef int slock_t; - -#define TAS(lock) tas(lock) - -#endif /* __m32r__ */ - - -#if defined(__sh__) /* Renesas' SuperH */ +#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC */ +/* + * HP's PA-RISC + * + * Because LDCWX requires a 16-byte-aligned address, we declare slock_t as a + * 16-byte struct. The active word in the struct is whichever has the aligned + * address; the other three words just sit at -1. + */ #define HAS_TEST_AND_SET -typedef unsigned char slock_t; +typedef struct +{ + int sema[4]; +} slock_t; -#define TAS(lock) tas(lock) +#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((uintptr_t) (lock) + 15) & ~15)) static __inline__ int tas(volatile slock_t *lock) { - register int _res; + volatile int *lockword = TAS_ACTIVE_WORD(lock); + int lockval; /* - * This asm is coded as if %0 could be any register, but actually SuperH - * restricts the target of xor-immediate to be R0. That's handled by - * the "z" constraint on _res. + * The LDCWX instruction atomically clears the target word and + * returns the previous value. Hence, if the instruction returns + * 0, someone else has already acquired the lock before we tested + * it (i.e., we have failed). + * + * Notice that this means that we actually clear the word to set + * the lock and set the word to clear the lock. This is the + * opposite behavior from the SPARC LDSTUB instruction. For some + * reason everything that H-P does is rather baroque... + * + * For details about the LDCWX instruction, see the "Precision + * Architecture and Instruction Reference Manual" (09740-90014 of June + * 1987), p. 5-38. */ __asm__ __volatile__( - " tas.b @%2 \n" - " movt %0 \n" - " xor #1,%0 \n" -: "=z"(_res), "+m"(*lock) -: "r"(lock) -: "memory", "t"); - return _res; + " ldcwx 0(0,%2),%0 \n" +: "=r"(lockval), "+m"(*lockword) +: "r"(lockword) +: "memory"); + return (lockval == 0); } -#endif /* __sh__ */ - - -/* These live in s_lock.c, but only for gcc */ +#define S_UNLOCK(lock) \ + do { \ + __asm__ __volatile__("" : : : "memory"); \ + *TAS_ACTIVE_WORD(lock) = -1; \ + } while (0) +#define S_INIT_LOCK(lock) \ + do { \ + volatile slock_t *lock_ = (lock); \ + lock_->sema[0] = -1; \ + lock_->sema[1] = -1; \ + lock_->sema[2] = -1; \ + lock_->sema[3] = -1; \ + } while (0) -#if defined(__m68k__) && !defined(__linux__) /* non-Linux Motorola 68k */ -#define HAS_TEST_AND_SET +#define S_LOCK_FREE(lock) (*TAS_ACTIVE_WORD(lock) != 0) -typedef unsigned char slock_t; -#endif +#endif /* __hppa || __hppa__ */ /* @@ -805,7 +658,6 @@ tas(volatile slock_t *lock) #endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */ - /* * --------------------------------------------------------------------- * Platforms that use non-gcc inline assembly: @@ -814,101 +666,6 @@ tas(volatile slock_t *lock) #if !defined(HAS_TEST_AND_SET) /* We didn't trigger above, let's try here */ - -#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */ -/* - * HP's PA-RISC - * - * See src/backend/port/hpux/tas.c.template for details about LDCWX. Because - * LDCWX requires a 16-byte-aligned address, we declare slock_t as a 16-byte - * struct. The active word in the struct is whichever has the aligned address; - * the other three words just sit at -1. - * - * When using gcc, we can inline the required assembly code. - */ -#define HAS_TEST_AND_SET - -typedef struct -{ - int sema[4]; -} slock_t; - -#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((uintptr_t) (lock) + 15) & ~15)) - -#if defined(__GNUC__) - -static __inline__ int -tas(volatile slock_t *lock) -{ - volatile int *lockword = TAS_ACTIVE_WORD(lock); - register int lockval; - - __asm__ __volatile__( - " ldcwx 0(0,%2),%0 \n" -: "=r"(lockval), "+m"(*lockword) -: "r"(lockword) -: "memory"); - return (lockval == 0); -} - -/* - * The hppa implementation doesn't follow the rules of this files and provides - * a gcc specific implementation outside of the above defined(__GNUC__). It - * does so to avoid duplication between the HP compiler and gcc. So undefine - * the generic fallback S_UNLOCK from above. - */ -#ifdef S_UNLOCK -#undef S_UNLOCK -#endif -#define S_UNLOCK(lock) \ - do { \ - __asm__ __volatile__("" : : : "memory"); \ - *TAS_ACTIVE_WORD(lock) = -1; \ - } while (0) - -#endif /* __GNUC__ */ - -#define S_INIT_LOCK(lock) \ - do { \ - volatile slock_t *lock_ = (lock); \ - lock_->sema[0] = -1; \ - lock_->sema[1] = -1; \ - lock_->sema[2] = -1; \ - lock_->sema[3] = -1; \ - } while (0) - -#define S_LOCK_FREE(lock) (*TAS_ACTIVE_WORD(lock) != 0) - -#endif /* __hppa || __hppa__ */ - - -#if defined(__hpux) && defined(__ia64) && !defined(__GNUC__) -/* - * HP-UX on Itanium, non-gcc/icc compiler - * - * We assume that the compiler enforces strict ordering of loads/stores on - * volatile data (see comments on the gcc-version earlier in this file). - * Note that this assumption does *not* hold if you use the - * +Ovolatile=__unordered option on the HP-UX compiler, so don't do that. - * - * See also Implementing Spinlocks on the Intel Itanium Architecture and - * PA-RISC, by Tor Ekqvist and David Graves, for more information. As of - * this writing, version 1.0 of the manual is available at: - * http://h21007.www2.hp.com/portal/download/files/unprot/itanium/spinlocks.pdf - */ -#define HAS_TEST_AND_SET - -typedef unsigned int slock_t; - -#include -#define TAS(lock) _Asm_xchg(_SZ_W, lock, 1, _LDHINT_NONE) -/* On IA64, it's a win to use a non-locking test before the xchg proper */ -#define TAS_SPIN(lock) (*(lock) ? 1 : TAS(lock)) -#define S_UNLOCK(lock) \ - do { _Asm_mf(); (*(lock)) = 0; } while (0) - -#endif /* HPUX on IA64, non gcc/icc */ - #if defined(_AIX) /* AIX */ /* * AIX (POWER) @@ -1016,7 +773,7 @@ extern int tas_sema(volatile slock_t *lock); #if !defined(S_LOCK) #define S_LOCK(lock) \ - (TAS(lock) ? s_lock((lock), __FILE__, __LINE__, PG_FUNCNAME_MACRO) : 0) + (TAS(lock) ? s_lock((lock), __FILE__, __LINE__, __func__) : 0) #endif /* S_LOCK */ #if !defined(S_LOCK_FREE) @@ -1103,7 +860,7 @@ init_spin_delay(SpinDelayStatus *status, status->func = func; } -#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__, PG_FUNCNAME_MACRO) +#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__, __func__) extern void perform_spin_delay(SpinDelayStatus *status); extern void finish_spin_delay(SpinDelayStatus *status); diff --git a/src/postgres/include/storage/sharedfileset.h b/src/postgres/include/storage/sharedfileset.h index b1cde36d..aa6f97f8 100644 --- a/src/postgres/include/storage/sharedfileset.h +++ b/src/postgres/include/storage/sharedfileset.h @@ -4,7 +4,7 @@ * Shared temporary file management. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/sharedfileset.h diff --git a/src/postgres/include/storage/shm_mq.h b/src/postgres/include/storage/shm_mq.h index b6fe6872..2e04e418 100644 --- a/src/postgres/include/storage/shm_mq.h +++ b/src/postgres/include/storage/shm_mq.h @@ -3,7 +3,7 @@ * shm_mq.h * single-reader, single-writer shared memory message queue * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/shm_mq.h diff --git a/src/postgres/include/storage/shm_toc.h b/src/postgres/include/storage/shm_toc.h index 153a57cf..7a2f8e99 100644 --- a/src/postgres/include/storage/shm_toc.h +++ b/src/postgres/include/storage/shm_toc.h @@ -12,7 +12,7 @@ * other data structure within the segment and only put the pointer to * the data structure itself in the table of contents. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/shm_toc.h diff --git a/src/postgres/include/storage/shmem.h b/src/postgres/include/storage/shmem.h index de9e7c6e..0e1fb200 100644 --- a/src/postgres/include/storage/shmem.h +++ b/src/postgres/include/storage/shmem.h @@ -11,7 +11,7 @@ * at the same address. This means shared memory pointers can be passed * around directly between different processes. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/shmem.h @@ -24,13 +24,6 @@ #include "utils/hsearch.h" -/* shmqueue.c */ -typedef struct SHM_QUEUE -{ - struct SHM_QUEUE *prev; - struct SHM_QUEUE *next; -} SHM_QUEUE; - /* shmem.c */ extern void InitShmemAccess(void *seghdr); extern void InitShmemAllocation(void); @@ -63,19 +56,4 @@ typedef struct Size allocated_size; /* # bytes actually allocated */ } ShmemIndexEnt; -/* - * prototypes for functions in shmqueue.c - */ -extern void SHMQueueInit(SHM_QUEUE *queue); -extern void SHMQueueElemInit(SHM_QUEUE *queue); -extern void SHMQueueDelete(SHM_QUEUE *queue); -extern void SHMQueueInsertBefore(SHM_QUEUE *queue, SHM_QUEUE *elem); -extern void SHMQueueInsertAfter(SHM_QUEUE *queue, SHM_QUEUE *elem); -extern Pointer SHMQueueNext(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, - Size linkOffset); -extern Pointer SHMQueuePrev(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, - Size linkOffset); -extern bool SHMQueueEmpty(const SHM_QUEUE *queue); -extern bool SHMQueueIsDetached(const SHM_QUEUE *queue); - #endif /* SHMEM_H */ diff --git a/src/postgres/include/storage/sinval.h b/src/postgres/include/storage/sinval.h index e7cd4565..0721e4d2 100644 --- a/src/postgres/include/storage/sinval.h +++ b/src/postgres/include/storage/sinval.h @@ -4,7 +4,7 @@ * POSTGRES shared cache invalidation communication definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/sinval.h @@ -16,7 +16,7 @@ #include -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" /* * We support several types of shared-invalidation messages: @@ -90,7 +90,7 @@ typedef struct int8 id; /* type field --- must be first */ int8 backend_hi; /* high bits of backend ID, if temprel */ uint16 backend_lo; /* low bits of backend ID, if temprel */ - RelFileNode rnode; /* spcNode, dbNode, relNode */ + RelFileLocator rlocator; /* spcOid, dbOid, relNumber */ } SharedInvalSmgrMsg; #define SHAREDINVALRELMAP_ID (-4) diff --git a/src/postgres/include/storage/sinvaladt.h b/src/postgres/include/storage/sinvaladt.h index 91e24189..db38819b 100644 --- a/src/postgres/include/storage/sinvaladt.h +++ b/src/postgres/include/storage/sinvaladt.h @@ -12,7 +12,7 @@ * The struct type SharedInvalidationMessage, defining the contents of * a single message, is defined in sinval.h. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/sinvaladt.h @@ -32,7 +32,9 @@ extern Size SInvalShmemSize(void); extern void CreateSharedInvalidationState(void); extern void SharedInvalBackendInit(bool sendOnly); extern PGPROC *BackendIdGetProc(int backendID); -extern void BackendIdGetTransactionIds(int backendID, TransactionId *xid, TransactionId *xmin); +extern void BackendIdGetTransactionIds(int backendID, TransactionId *xid, + TransactionId *xmin, int *nsubxid, + bool *overflowed); extern void SIInsertDataEntries(const SharedInvalidationMessage *data, int n); extern int SIGetDataEntries(SharedInvalidationMessage *data, int datasize); diff --git a/src/postgres/include/storage/smgr.h b/src/postgres/include/storage/smgr.h index 6b63c60f..a9a179aa 100644 --- a/src/postgres/include/storage/smgr.h +++ b/src/postgres/include/storage/smgr.h @@ -4,7 +4,7 @@ * storage manager switch public interface declarations. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/smgr.h @@ -16,7 +16,7 @@ #include "lib/ilist.h" #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" /* * smgr.c maintains a table of SMgrRelation objects, which are essentially @@ -38,8 +38,8 @@ */ typedef struct SMgrRelationData { - /* rnode is the hashtable lookup key, so it must be first! */ - RelFileNodeBackend smgr_rnode; /* relation physical identifier */ + /* rlocator is the hashtable lookup key, so it must be first! */ + RelFileLocatorBackend smgr_rlocator; /* relation physical identifier */ /* pointer to owning pointer, or NULL if none */ struct SMgrRelationData **smgr_owner; @@ -75,29 +75,31 @@ typedef struct SMgrRelationData typedef SMgrRelationData *SMgrRelation; #define SmgrIsTemp(smgr) \ - RelFileNodeBackendIsTemp((smgr)->smgr_rnode) + RelFileLocatorBackendIsTemp((smgr)->smgr_rlocator) extern void smgrinit(void); -extern SMgrRelation smgropen(RelFileNode rnode, BackendId backend); +extern SMgrRelation smgropen(RelFileLocator rlocator, BackendId backend); extern bool smgrexists(SMgrRelation reln, ForkNumber forknum); extern void smgrsetowner(SMgrRelation *owner, SMgrRelation reln); extern void smgrclearowner(SMgrRelation *owner, SMgrRelation reln); extern void smgrclose(SMgrRelation reln); extern void smgrcloseall(void); -extern void smgrclosenode(RelFileNodeBackend rnode); +extern void smgrcloserellocator(RelFileLocatorBackend rlocator); extern void smgrrelease(SMgrRelation reln); extern void smgrreleaseall(void); extern void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo); extern void smgrdosyncall(SMgrRelation *rels, int nrels); extern void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo); extern void smgrextend(SMgrRelation reln, ForkNumber forknum, - BlockNumber blocknum, char *buffer, bool skipFsync); + BlockNumber blocknum, const void *buffer, bool skipFsync); +extern void smgrzeroextend(SMgrRelation reln, ForkNumber forknum, + BlockNumber blocknum, int nblocks, bool skipFsync); extern bool smgrprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum); extern void smgrread(SMgrRelation reln, ForkNumber forknum, - BlockNumber blocknum, char *buffer); + BlockNumber blocknum, void *buffer); extern void smgrwrite(SMgrRelation reln, ForkNumber forknum, - BlockNumber blocknum, char *buffer, bool skipFsync); + BlockNumber blocknum, const void *buffer, bool skipFsync); extern void smgrwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks); extern BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum); diff --git a/src/postgres/include/storage/spin.h b/src/postgres/include/storage/spin.h index 7031f1d2..5d809cc9 100644 --- a/src/postgres/include/storage/spin.h +++ b/src/postgres/include/storage/spin.h @@ -41,7 +41,7 @@ * be again. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/spin.h diff --git a/src/postgres/include/storage/standby.h b/src/postgres/include/storage/standby.h index 6a776326..e8f50569 100644 --- a/src/postgres/include/storage/standby.h +++ b/src/postgres/include/storage/standby.h @@ -4,7 +4,7 @@ * Definitions for hot standby mode. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/standby.h @@ -17,11 +17,10 @@ #include "datatype/timestamp.h" #include "storage/lock.h" #include "storage/procsignal.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "storage/standbydefs.h" /* User-settable GUC parameters */ -extern PGDLLIMPORT int vacuum_defer_cleanup_age; extern PGDLLIMPORT int max_standby_archive_delay; extern PGDLLIMPORT int max_standby_streaming_delay; extern PGDLLIMPORT bool log_recovery_conflict_waits; @@ -29,10 +28,12 @@ extern PGDLLIMPORT bool log_recovery_conflict_waits; extern void InitRecoveryTransactionEnvironment(void); extern void ShutdownRecoveryTransactionEnvironment(void); -extern void ResolveRecoveryConflictWithSnapshot(TransactionId latestRemovedXid, - RelFileNode node); -extern void ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId latestRemovedFullXid, - RelFileNode node); +extern void ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon, + bool isCatalogRel, + RelFileLocator locator); +extern void ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId snapshotConflictHorizon, + bool isCatalogRel, + RelFileLocator locator); extern void ResolveRecoveryConflictWithTablespace(Oid tsid); extern void ResolveRecoveryConflictWithDatabase(Oid dbid); @@ -43,7 +44,7 @@ extern void StandbyDeadLockHandler(void); extern void StandbyTimeoutHandler(void); extern void StandbyLockTimeoutHandler(void); extern void LogRecoveryConflict(ProcSignalReason reason, TimestampTz wait_start, - TimestampTz cur_ts, VirtualTransactionId *wait_list, + TimestampTz now, VirtualTransactionId *wait_list, bool still_waiting); /* diff --git a/src/postgres/include/storage/standbydefs.h b/src/postgres/include/storage/standbydefs.h index c0234b6c..188e3486 100644 --- a/src/postgres/include/storage/standbydefs.h +++ b/src/postgres/include/storage/standbydefs.h @@ -4,7 +4,7 @@ * Frontend exposed definitions for hot standby mode. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/standbydefs.h diff --git a/src/postgres/include/storage/sync.h b/src/postgres/include/storage/sync.h index 9737e1eb..cfbcfa67 100644 --- a/src/postgres/include/storage/sync.h +++ b/src/postgres/include/storage/sync.h @@ -3,7 +3,7 @@ * sync.h * File synchronization management code. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/sync.h @@ -13,7 +13,7 @@ #ifndef SYNC_H #define SYNC_H -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" /* * Type of sync request. These are used to manage the set of pending @@ -51,7 +51,7 @@ typedef struct FileTag { int16 handler; /* SyncRequestHandler value, saving space */ int16 forknum; /* ForkNumber, saving space */ - RelFileNode rnode; + RelFileLocator rlocator; uint32 segno; } FileTag; diff --git a/src/postgres/include/tcop/cmdtag.h b/src/postgres/include/tcop/cmdtag.h index b9e8992a..1e7514dc 100644 --- a/src/postgres/include/tcop/cmdtag.h +++ b/src/postgres/include/tcop/cmdtag.h @@ -3,7 +3,7 @@ * cmdtag.h * Declarations for commandtag names and enumeration. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/cmdtag.h @@ -13,6 +13,8 @@ #ifndef CMDTAG_H #define CMDTAG_H +/* buffer size required for command completion tags */ +#define COMPLETION_TAG_BUFSIZE 64 #define PG_CMDTAG(tag, name, evtrgok, rwrok, rowcnt) \ tag, @@ -50,9 +52,12 @@ CopyQueryCompletion(QueryCompletion *dst, const QueryCompletion *src) extern void InitializeQueryCompletion(QueryCompletion *qc); extern const char *GetCommandTagName(CommandTag commandTag); +extern const char *GetCommandTagNameAndLen(CommandTag commandTag, Size *len); extern bool command_tag_display_rowcount(CommandTag commandTag); extern bool command_tag_event_trigger_ok(CommandTag commandTag); extern bool command_tag_table_rewrite_ok(CommandTag commandTag); -extern CommandTag GetCommandTagEnum(const char *tagname); +extern CommandTag GetCommandTagEnum(const char *commandname); +extern Size BuildQueryCompletionString(char *buff, const QueryCompletion *qc, + bool nameonly); #endif /* CMDTAG_H */ diff --git a/src/postgres/include/tcop/cmdtaglist.h b/src/postgres/include/tcop/cmdtaglist.h index 9e94f44c..e738ac1c 100644 --- a/src/postgres/include/tcop/cmdtaglist.h +++ b/src/postgres/include/tcop/cmdtaglist.h @@ -8,7 +8,7 @@ * determined by the PG_CMDTAG macro, which is not defined in this file; * it can be defined by the caller for special purposes. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/cmdtaglist.h diff --git a/src/postgres/include/tcop/deparse_utility.h b/src/postgres/include/tcop/deparse_utility.h index 94de13d9..b585810b 100644 --- a/src/postgres/include/tcop/deparse_utility.h +++ b/src/postgres/include/tcop/deparse_utility.h @@ -2,7 +2,7 @@ * * deparse_utility.h * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/deparse_utility.h diff --git a/src/postgres/include/tcop/dest.h b/src/postgres/include/tcop/dest.h index 3c3eabae..a7d86e7a 100644 --- a/src/postgres/include/tcop/dest.h +++ b/src/postgres/include/tcop/dest.h @@ -57,7 +57,7 @@ * calls in portal and cursor manipulations. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/dest.h @@ -71,8 +71,6 @@ #include "tcop/cmdtag.h" -/* buffer size to use for command completion tags */ -#define COMPLETION_TAG_BUFSIZE 64 /* ---------------- diff --git a/src/postgres/include/tcop/fastpath.h b/src/postgres/include/tcop/fastpath.h index cb15a16a..9d57f79d 100644 --- a/src/postgres/include/tcop/fastpath.h +++ b/src/postgres/include/tcop/fastpath.h @@ -3,7 +3,7 @@ * fastpath.h * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/fastpath.h diff --git a/src/postgres/include/tcop/pquery.h b/src/postgres/include/tcop/pquery.h index f9a6882e..a5e65b98 100644 --- a/src/postgres/include/tcop/pquery.h +++ b/src/postgres/include/tcop/pquery.h @@ -4,7 +4,7 @@ * prototypes for pquery.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/pquery.h diff --git a/src/postgres/include/tcop/tcopprot.h b/src/postgres/include/tcop/tcopprot.h index 84ca54db..7c4670eb 100644 --- a/src/postgres/include/tcop/tcopprot.h +++ b/src/postgres/include/tcop/tcopprot.h @@ -4,7 +4,7 @@ * prototypes for postgres.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/tcopprot.h @@ -66,9 +66,6 @@ extern List *pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, ParamListInfo boundParams); -extern bool check_max_stack_depth(int *newval, void **extra, GucSource source); -extern void assign_max_stack_depth(int newval, void *extra); - extern void die(SIGNAL_ARGS); extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn(); extern void StatementCancelHandler(SIGNAL_ARGS); diff --git a/src/postgres/include/tcop/utility.h b/src/postgres/include/tcop/utility.h index f9daf5b7..59e64aea 100644 --- a/src/postgres/include/tcop/utility.h +++ b/src/postgres/include/tcop/utility.h @@ -4,7 +4,7 @@ * prototypes for utility.c. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tcop/utility.h diff --git a/src/postgres/include/tsearch/ts_cache.h b/src/postgres/include/tsearch/ts_cache.h index 5e4a49ea..d432bd0a 100644 --- a/src/postgres/include/tsearch/ts_cache.h +++ b/src/postgres/include/tsearch/ts_cache.h @@ -3,7 +3,7 @@ * ts_cache.h * Tsearch related object caches. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/tsearch/ts_cache.h @@ -13,7 +13,7 @@ #ifndef TS_CACHE_H #define TS_CACHE_H -#include "utils/guc.h" +#include "fmgr.h" /* @@ -92,7 +92,5 @@ extern TSDictionaryCacheEntry *lookup_ts_dictionary_cache(Oid dictId); extern TSConfigCacheEntry *lookup_ts_config_cache(Oid cfgId); extern Oid getTSCurrentConfig(bool emitError); -extern bool check_TSCurrentConfig(char **newval, void **extra, GucSource source); -extern void assign_TSCurrentConfig(const char *newval, void *extra); #endif /* TS_CACHE_H */ diff --git a/src/postgres/include/utils/acl.h b/src/postgres/include/utils/acl.h index 48f7d72a..aba1afa9 100644 --- a/src/postgres/include/utils/acl.h +++ b/src/postgres/include/utils/acl.h @@ -4,7 +4,7 @@ * Definition of (and support for) access control list data structures. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/acl.h @@ -59,33 +59,33 @@ typedef struct AclItem } AclItem; /* - * The upper 16 bits of the ai_privs field of an AclItem are the grant option - * bits, and the lower 16 bits are the actual privileges. We use "rights" + * The upper 32 bits of the ai_privs field of an AclItem are the grant option + * bits, and the lower 32 bits are the actual privileges. We use "rights" * to mean the combined grant option and privilege bits fields. */ -#define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFF) -#define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 16) & 0xFFFF) +#define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFFFFFF) +#define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 32) & 0xFFFFFFFF) #define ACLITEM_GET_RIGHTS(item) ((item).ai_privs) -#define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFF) << 16) -#define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 16) & 0xFFFF) +#define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFFFFFF) << 32) +#define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 32) & 0xFFFFFFFF) #define ACLITEM_SET_PRIVS(item,privs) \ - ((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFF)) | \ - ((AclMode) (privs) & 0xFFFF)) + ((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFFFFFF)) | \ + ((AclMode) (privs) & 0xFFFFFFFF)) #define ACLITEM_SET_GOPTIONS(item,goptions) \ - ((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFF) << 16)) | \ - (((AclMode) (goptions) & 0xFFFF) << 16)) + ((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFFFFFF) << 32)) | \ + (((AclMode) (goptions) & 0xFFFFFFFF) << 32)) #define ACLITEM_SET_RIGHTS(item,rights) \ ((item).ai_privs = (AclMode) (rights)) #define ACLITEM_SET_PRIVS_GOPTIONS(item,privs,goptions) \ - ((item).ai_privs = ((AclMode) (privs) & 0xFFFF) | \ - (((AclMode) (goptions) & 0xFFFF) << 16)) + ((item).ai_privs = ((AclMode) (privs) & 0xFFFFFFFF) | \ + (((AclMode) (goptions) & 0xFFFFFFFF) << 32)) -#define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFF) -#define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFF << 16) +#define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFFFFFF) +#define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFFFFFF << 32) /* * Definitions for convenient access to Acl (array of AclItem). @@ -209,12 +209,14 @@ extern AclMode aclmask(const Acl *acl, Oid roleid, Oid ownerId, extern int aclmembers(const Acl *acl, Oid **roleids); extern bool has_privs_of_role(Oid member, Oid role); +extern bool member_can_set_role(Oid member, Oid role); +extern void check_can_set_role(Oid member, Oid role); extern bool is_member_of_role(Oid member, Oid role); extern bool is_member_of_role_nosuper(Oid member, Oid role); extern bool is_admin_of_role(Oid member, Oid role); -extern void check_is_member_of_role(Oid member, Oid role); -extern Oid get_role_oid(const char *rolename, bool missing_ok); -extern Oid get_role_oid_or_public(const char *rolename); +extern Oid select_best_admin(Oid member, Oid role); +extern Oid get_role_oid(const char *rolname, bool missing_ok); +extern Oid get_role_oid_or_public(const char *rolname); extern Oid get_rolespec_oid(const RoleSpec *role, bool missing_ok); extern void check_rolespec_name(const RoleSpec *role, const char *detail_msg); extern HeapTuple get_rolespec_tuple(const RoleSpec *role); @@ -234,39 +236,13 @@ extern void ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivi extern void RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid); -extern AclMode pg_attribute_aclmask(Oid table_oid, AttrNumber attnum, - Oid roleid, AclMode mask, AclMaskHow how); -extern AclMode pg_attribute_aclmask_ext(Oid table_oid, AttrNumber attnum, - Oid roleid, AclMode mask, - AclMaskHow how, bool *is_missing); extern AclMode pg_class_aclmask(Oid table_oid, Oid roleid, AclMode mask, AclMaskHow how); -extern AclMode pg_class_aclmask_ext(Oid table_oid, Oid roleid, - AclMode mask, AclMaskHow how, - bool *is_missing); -extern AclMode pg_database_aclmask(Oid db_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_parameter_aclmask(const char *name, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_parameter_acl_aclmask(Oid acl_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_proc_aclmask(Oid proc_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_language_aclmask(Oid lang_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_largeobject_aclmask_snapshot(Oid lobj_oid, Oid roleid, - AclMode mask, AclMaskHow how, Snapshot snapshot); -extern AclMode pg_namespace_aclmask(Oid nsp_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_tablespace_aclmask(Oid spc_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_foreign_data_wrapper_aclmask(Oid fdw_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_foreign_server_aclmask(Oid srv_oid, Oid roleid, - AclMode mask, AclMaskHow how); -extern AclMode pg_type_aclmask(Oid type_oid, Oid roleid, - AclMode mask, AclMaskHow how); +/* generic function */ +extern AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode); + +/* special cases */ extern AclResult pg_attribute_aclcheck(Oid table_oid, AttrNumber attnum, Oid roleid, AclMode mode); extern AclResult pg_attribute_aclcheck_ext(Oid table_oid, AttrNumber attnum, @@ -277,20 +253,10 @@ extern AclResult pg_attribute_aclcheck_all(Oid table_oid, Oid roleid, extern AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode); extern AclResult pg_class_aclcheck_ext(Oid table_oid, Oid roleid, AclMode mode, bool *is_missing); -extern AclResult pg_database_aclcheck(Oid db_oid, Oid roleid, AclMode mode); extern AclResult pg_parameter_aclcheck(const char *name, Oid roleid, AclMode mode); -extern AclResult pg_parameter_acl_aclcheck(Oid acl_oid, Oid roleid, - AclMode mode); -extern AclResult pg_proc_aclcheck(Oid proc_oid, Oid roleid, AclMode mode); -extern AclResult pg_language_aclcheck(Oid lang_oid, Oid roleid, AclMode mode); -extern AclResult pg_largeobject_aclcheck_snapshot(Oid lang_oid, Oid roleid, +extern AclResult pg_largeobject_aclcheck_snapshot(Oid lobj_oid, Oid roleid, AclMode mode, Snapshot snapshot); -extern AclResult pg_namespace_aclcheck(Oid nsp_oid, Oid roleid, AclMode mode); -extern AclResult pg_tablespace_aclcheck(Oid spc_oid, Oid roleid, AclMode mode); -extern AclResult pg_foreign_data_wrapper_aclcheck(Oid fdw_oid, Oid roleid, AclMode mode); -extern AclResult pg_foreign_server_aclcheck(Oid srv_oid, Oid roleid, AclMode mode); -extern AclResult pg_type_aclcheck(Oid type_oid, Oid roleid, AclMode mode); extern void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname); @@ -305,28 +271,7 @@ extern void removeExtObjInitPriv(Oid objoid, Oid classoid); /* ownercheck routines just return true (owner) or false (not) */ -extern bool pg_class_ownercheck(Oid class_oid, Oid roleid); -extern bool pg_type_ownercheck(Oid type_oid, Oid roleid); -extern bool pg_oper_ownercheck(Oid oper_oid, Oid roleid); -extern bool pg_proc_ownercheck(Oid proc_oid, Oid roleid); -extern bool pg_language_ownercheck(Oid lan_oid, Oid roleid); -extern bool pg_largeobject_ownercheck(Oid lobj_oid, Oid roleid); -extern bool pg_namespace_ownercheck(Oid nsp_oid, Oid roleid); -extern bool pg_tablespace_ownercheck(Oid spc_oid, Oid roleid); -extern bool pg_opclass_ownercheck(Oid opc_oid, Oid roleid); -extern bool pg_opfamily_ownercheck(Oid opf_oid, Oid roleid); -extern bool pg_database_ownercheck(Oid db_oid, Oid roleid); -extern bool pg_collation_ownercheck(Oid coll_oid, Oid roleid); -extern bool pg_conversion_ownercheck(Oid conv_oid, Oid roleid); -extern bool pg_ts_dict_ownercheck(Oid dict_oid, Oid roleid); -extern bool pg_ts_config_ownercheck(Oid cfg_oid, Oid roleid); -extern bool pg_foreign_data_wrapper_ownercheck(Oid srv_oid, Oid roleid); -extern bool pg_foreign_server_ownercheck(Oid srv_oid, Oid roleid); -extern bool pg_event_trigger_ownercheck(Oid et_oid, Oid roleid); -extern bool pg_extension_ownercheck(Oid ext_oid, Oid roleid); -extern bool pg_publication_ownercheck(Oid pub_oid, Oid roleid); -extern bool pg_subscription_ownercheck(Oid sub_oid, Oid roleid); -extern bool pg_statistics_object_ownercheck(Oid stat_oid, Oid roleid); +extern bool object_ownercheck(Oid classid, Oid objectid, Oid roleid); extern bool has_createrole_privilege(Oid roleid); extern bool has_bypassrls_privilege(Oid roleid); diff --git a/src/postgres/include/utils/aclchk_internal.h b/src/postgres/include/utils/aclchk_internal.h index 361284d8..55af624f 100644 --- a/src/postgres/include/utils/aclchk_internal.h +++ b/src/postgres/include/utils/aclchk_internal.h @@ -2,7 +2,7 @@ * * aclchk_internal.h * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/aclchk_internal.h diff --git a/src/postgres/include/utils/array.h b/src/postgres/include/utils/array.h index 656c766a..e6c8d88d 100644 --- a/src/postgres/include/utils/array.h +++ b/src/postgres/include/utils/array.h @@ -51,7 +51,7 @@ * arrays holding the elements. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/array.h @@ -74,6 +74,13 @@ struct ExprContext; */ #define MAXDIM 6 +/* + * Maximum number of elements in an array. We limit this to at most about a + * quarter billion elements, so that it's not necessary to check for overflow + * in quite so many places --- for instance when palloc'ing Datum arrays. + */ +#define MaxArraySize ((Size) (MaxAllocSize / sizeof(Datum))) + /* * Arrays are varlena objects, so must meet the varlena convention that * the first int32 of the object contains the total object size in bytes. @@ -387,6 +394,7 @@ extern void array_bitmap_copy(bits8 *destbitmap, int destoffset, extern ArrayType *construct_array(Datum *elems, int nelems, Oid elmtype, int elmlen, bool elmbyval, char elmalign); +extern ArrayType *construct_array_builtin(Datum *elems, int nelems, Oid elmtype); extern ArrayType *construct_md_array(Datum *elems, bool *nulls, int ndims, @@ -401,10 +409,16 @@ extern void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp); +extern void deconstruct_array_builtin(ArrayType *array, + Oid elmtype, + Datum **elemsp, bool **nullsp, int *nelemsp); extern bool array_contains_nulls(ArrayType *array); extern ArrayBuildState *initArrayResult(Oid element_type, MemoryContext rcontext, bool subcontext); +extern ArrayBuildState *initArrayResultWithSize(Oid element_type, + MemoryContext rcontext, + bool subcontext, int initsize); extern ArrayBuildState *accumArrayResult(ArrayBuildState *astate, Datum dvalue, bool disnull, Oid element_type, @@ -443,7 +457,11 @@ extern void array_free_iterator(ArrayIterator iterator); extern int ArrayGetOffset(int n, const int *dim, const int *lb, const int *indx); extern int ArrayGetOffset0(int n, const int *tup, const int *scale); extern int ArrayGetNItems(int ndim, const int *dims); +extern int ArrayGetNItemsSafe(int ndim, const int *dims, + struct Node *escontext); extern void ArrayCheckBounds(int ndim, const int *dims, const int *lb); +extern bool ArrayCheckBoundsSafe(int ndim, const int *dims, const int *lb, + struct Node *escontext); extern void mda_get_range(int n, int *span, const int *st, const int *endp); extern void mda_get_prod(int n, const int *range, int *prod); extern void mda_get_offset_values(int n, int *dist, const int *prod, const int *span); diff --git a/src/postgres/include/utils/backend_progress.h b/src/postgres/include/utils/backend_progress.h index 47bf8029..a84752ad 100644 --- a/src/postgres/include/utils/backend_progress.h +++ b/src/postgres/include/utils/backend_progress.h @@ -6,7 +6,7 @@ * backend's command progress counters, without ascribing meaning to the * individual fields. See commands/progress.h and system_views.sql for that. * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/utils/backend_progress.h * ---------- @@ -36,6 +36,7 @@ typedef enum ProgressCommandType extern void pgstat_progress_start_command(ProgressCommandType cmdtype, Oid relid); extern void pgstat_progress_update_param(int index, int64 val); +extern void pgstat_progress_incr_param(int index, int64 incr); extern void pgstat_progress_update_multi_param(int nparam, const int *index, const int64 *val); extern void pgstat_progress_end_command(void); diff --git a/src/postgres/include/utils/backend_status.h b/src/postgres/include/utils/backend_status.h index 7403bca2..d51c840d 100644 --- a/src/postgres/include/utils/backend_status.h +++ b/src/postgres/include/utils/backend_status.h @@ -2,7 +2,7 @@ * backend_status.h * Definitions related to backend status reporting * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/utils/backend_status.h * ---------- @@ -13,6 +13,7 @@ #include "datatype/timestamp.h" #include "libpq/pqcomm.h" #include "miscadmin.h" /* for BackendType */ +#include "storage/backendid.h" #include "utils/backend_progress.h" @@ -76,6 +77,7 @@ typedef struct PgBackendGSSStatus char gss_princ[NAMEDATALEN]; /* GSSAPI Principal used to auth */ bool gss_auth; /* If GSSAPI authentication was used */ bool gss_enc; /* If encryption is being used */ + bool gss_delegation; /* If credentials delegated */ } PgBackendGSSStatus; @@ -247,6 +249,13 @@ typedef struct LocalPgBackendStatus */ PgBackendStatus backendStatus; + /* + * The backend ID. For auxiliary processes, this will be set to a value + * greater than MaxBackends (since auxiliary processes do not have proper + * backend IDs). + */ + BackendId backend_id; + /* * The xid of the current transaction if available, InvalidTransactionId * if not. @@ -258,6 +267,17 @@ typedef struct LocalPgBackendStatus * not. */ TransactionId backend_xmin; + + /* + * Number of cached subtransactions in the current session. + */ + int backend_subxact_count; + + /* + * The number of subtransactions in the current session which exceeded the + * cached subtransaction limit. + */ + bool backend_subxact_overflowed; } LocalPgBackendStatus; @@ -313,8 +333,9 @@ extern uint64 pgstat_get_my_query_id(void); * ---------- */ extern int pgstat_fetch_stat_numbackends(void); -extern PgBackendStatus *pgstat_fetch_stat_beentry(int beid); -extern LocalPgBackendStatus *pgstat_fetch_stat_local_beentry(int beid); +extern PgBackendStatus *pgstat_get_beentry_by_backend_id(BackendId beid); +extern LocalPgBackendStatus *pgstat_get_local_beentry_by_backend_id(BackendId beid); +extern LocalPgBackendStatus *pgstat_get_local_beentry_by_index(int idx); extern char *pgstat_clip_activity(const char *raw_activity); diff --git a/src/postgres/include/utils/builtins.h b/src/postgres/include/utils/builtins.h index 24d16e8f..1c665691 100644 --- a/src/postgres/include/utils/builtins.h +++ b/src/postgres/include/utils/builtins.h @@ -4,7 +4,7 @@ * Declarations for operations on built-in types. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/builtins.h @@ -34,6 +34,8 @@ extern int errdomainconstraint(Oid datatypeOid, const char *conname); /* encode.c */ extern uint64 hex_encode(const char *src, size_t len, char *dst); extern uint64 hex_decode(const char *src, size_t len, char *dst); +extern uint64 hex_decode_safe(const char *src, size_t len, char *dst, + Node *escontext); /* int.c */ extern int2vector *buildint2vector(const int16 *int2s, int n); @@ -44,13 +46,20 @@ extern int namestrcmp(Name name, const char *str); /* numutils.c */ extern int16 pg_strtoint16(const char *s); +extern int16 pg_strtoint16_safe(const char *s, Node *escontext); extern int32 pg_strtoint32(const char *s); +extern int32 pg_strtoint32_safe(const char *s, Node *escontext); extern int64 pg_strtoint64(const char *s); +extern int64 pg_strtoint64_safe(const char *s, Node *escontext); +extern uint32 uint32in_subr(const char *s, char **endloc, + const char *typname, Node *escontext); +extern uint64 uint64in_subr(const char *s, char **endloc, + const char *typname, Node *escontext); extern int pg_itoa(int16 i, char *a); -extern int pg_ultoa_n(uint32 l, char *a); -extern int pg_ulltoa_n(uint64 l, char *a); -extern int pg_ltoa(int32 l, char *a); -extern int pg_lltoa(int64 ll, char *a); +extern int pg_ultoa_n(uint32 value, char *a); +extern int pg_ulltoa_n(uint64 value, char *a); +extern int pg_ltoa(int32 value, char *a); +extern int pg_lltoa(int64 value, char *a); extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth); extern char *pg_ultostr(char *str, uint32 value); diff --git a/src/postgres/include/utils/bytea.h b/src/postgres/include/utils/bytea.h index c3c9e547..166dd036 100644 --- a/src/postgres/include/utils/bytea.h +++ b/src/postgres/include/utils/bytea.h @@ -4,7 +4,7 @@ * Declarations for BYTEA data type support. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/bytea.h diff --git a/src/postgres/include/utils/catcache.h b/src/postgres/include/utils/catcache.h index d81e6fab..af0b3418 100644 --- a/src/postgres/include/utils/catcache.h +++ b/src/postgres/include/utils/catcache.h @@ -10,7 +10,7 @@ * guarantee that there can only be one matching row for a key combination. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/catcache.h diff --git a/src/postgres/include/utils/date.h b/src/postgres/include/utils/date.h index 91ae2425..97e1a021 100644 --- a/src/postgres/include/utils/date.h +++ b/src/postgres/include/utils/date.h @@ -4,7 +4,7 @@ * Definitions for the SQL "date" and "time" types. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/date.h @@ -42,21 +42,49 @@ typedef struct #define DATE_IS_NOEND(j) ((j) == DATEVAL_NOEND) #define DATE_NOT_FINITE(j) (DATE_IS_NOBEGIN(j) || DATE_IS_NOEND(j)) +#define MAX_TIME_PRECISION 6 + /* - * Macros for fmgr-callable functions. + * Functions for fmgr-callable functions. * * For TimeADT, we make use of the same support routines as for int64. * Therefore TimeADT is pass-by-reference if and only if int64 is! */ -#define MAX_TIME_PRECISION 6 +static inline DateADT +DatumGetDateADT(Datum X) +{ + return (DateADT) DatumGetInt32(X); +} + +static inline TimeADT +DatumGetTimeADT(Datum X) +{ + return (TimeADT) DatumGetInt64(X); +} -#define DatumGetDateADT(X) ((DateADT) DatumGetInt32(X)) -#define DatumGetTimeADT(X) ((TimeADT) DatumGetInt64(X)) -#define DatumGetTimeTzADTP(X) ((TimeTzADT *) DatumGetPointer(X)) +static inline TimeTzADT * +DatumGetTimeTzADTP(Datum X) +{ + return (TimeTzADT *) DatumGetPointer(X); +} + +static inline Datum +DateADTGetDatum(DateADT X) +{ + return Int32GetDatum(X); +} -#define DateADTGetDatum(X) Int32GetDatum(X) -#define TimeADTGetDatum(X) Int64GetDatum(X) -#define TimeTzADTPGetDatum(X) PointerGetDatum(X) +static inline Datum +TimeADTGetDatum(TimeADT X) +{ + return Int64GetDatum(X); +} + +static inline Datum +TimeTzADTPGetDatum(const TimeTzADT *X) +{ + return PointerGetDatum(X); +} #define PG_GETARG_DATEADT(n) DatumGetDateADT(PG_GETARG_DATUM(n)) #define PG_GETARG_TIMEADT(n) DatumGetTimeADT(PG_GETARG_DATUM(n)) diff --git a/src/postgres/include/utils/datetime.h b/src/postgres/include/utils/datetime.h index 4527e825..a871e322 100644 --- a/src/postgres/include/utils/datetime.h +++ b/src/postgres/include/utils/datetime.h @@ -6,7 +6,7 @@ * including date, and time. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/datetime.h @@ -16,7 +16,6 @@ #ifndef DATETIME_H #define DATETIME_H -#include "nodes/nodes.h" #include "utils/timestamp.h" /* this struct is declared in utils/tzparser.h: */ @@ -276,13 +275,30 @@ extern PGDLLIMPORT const int day_tab[2][13]; * Datetime input parsing routines (ParseDateTime, DecodeDateTime, etc) * return zero or a positive value on success. On failure, they return * one of these negative code values. DateTimeParseError may be used to - * produce a correct ereport. + * produce a suitable error report. For some of these codes, + * DateTimeParseError requires additional information, which is carried + * in struct DateTimeErrorExtra. */ #define DTERR_BAD_FORMAT (-1) #define DTERR_FIELD_OVERFLOW (-2) #define DTERR_MD_FIELD_OVERFLOW (-3) /* triggers hint about DateStyle */ #define DTERR_INTERVAL_OVERFLOW (-4) #define DTERR_TZDISP_OVERFLOW (-5) +#define DTERR_BAD_TIMEZONE (-6) +#define DTERR_BAD_ZONE_ABBREV (-7) + +typedef struct DateTimeErrorExtra +{ + /* Needed for DTERR_BAD_TIMEZONE and DTERR_BAD_ZONE_ABBREV: */ + const char *dtee_timezone; /* incorrect time zone name */ + /* Needed for DTERR_BAD_ZONE_ABBREV: */ + const char *dtee_abbrev; /* relevant time zone abbreviation */ +} DateTimeErrorExtra; + +/* Result codes for DecodeTimezoneName() */ +#define TZNAME_FIXED_OFFSET 0 +#define TZNAME_DYNTZ 1 +#define TZNAME_ZONE 2 extern void GetCurrentDateTime(struct pg_tm *tm); @@ -293,20 +309,21 @@ extern int date2j(int year, int month, int day); extern int ParseDateTime(const char *timestr, char *workbuf, size_t buflen, char **field, int *ftype, int maxfields, int *numfields); -extern int DecodeDateTime(char **field, int *ftype, - int nf, int *dtype, - struct pg_tm *tm, fsec_t *fsec, int *tzp); -extern int DecodeTimezone(char *str, int *tzp); -extern int DecodeTimeOnly(char **field, int *ftype, - int nf, int *dtype, - struct pg_tm *tm, fsec_t *fsec, int *tzp); +extern int DecodeDateTime(char **field, int *ftype, int nf, + int *dtype, struct pg_tm *tm, fsec_t *fsec, int *tzp, + DateTimeErrorExtra *extra); +extern int DecodeTimezone(const char *str, int *tzp); +extern int DecodeTimeOnly(char **field, int *ftype, int nf, + int *dtype, struct pg_tm *tm, fsec_t *fsec, int *tzp, + DateTimeErrorExtra *extra); extern int DecodeInterval(char **field, int *ftype, int nf, int range, int *dtype, struct pg_itm_in *itm_in); extern int DecodeISO8601Interval(char *str, int *dtype, struct pg_itm_in *itm_in); -extern void DateTimeParseError(int dterr, const char *str, - const char *datatype) pg_attribute_noreturn(); +extern void DateTimeParseError(int dterr, DateTimeErrorExtra *extra, + const char *str, const char *datatype, + struct Node *escontext); extern int DetermineTimeZoneOffset(struct pg_tm *tm, pg_tz *tzp); extern int DetermineTimeZoneAbbrevOffset(struct pg_tm *tm, const char *abbr, pg_tz *tzp); @@ -322,14 +339,18 @@ extern void EncodeSpecialTimestamp(Timestamp dt, char *str); extern int ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc, struct pg_tm *tm); -extern int DecodeTimezoneAbbrev(int field, char *lowtoken, - int *offset, pg_tz **tz); -extern int DecodeSpecial(int field, char *lowtoken, int *val); -extern int DecodeUnits(int field, char *lowtoken, int *val); +extern int DecodeTimezoneAbbrev(int field, const char *lowtoken, + int *ftype, int *offset, pg_tz **tz, + DateTimeErrorExtra *extra); +extern int DecodeSpecial(int field, const char *lowtoken, int *val); +extern int DecodeUnits(int field, const char *lowtoken, int *val); + +extern int DecodeTimezoneName(const char *tzname, int *offset, pg_tz **tz); +extern pg_tz *DecodeTimezoneNameToTz(const char *tzname); -extern int j2day(int jd); +extern int j2day(int date); -extern Node *TemporalSimplify(int32 max_precis, Node *node); +extern struct Node *TemporalSimplify(int32 max_precis, struct Node *node); extern bool CheckDateTokenTables(void); @@ -337,8 +358,7 @@ extern TimeZoneAbbrevTable *ConvertTimeZoneAbbrevs(struct tzEntry *abbrevs, int n); extern void InstallTimeZoneAbbrevs(TimeZoneAbbrevTable *tbl); -extern void AdjustTimestampForTypmod(Timestamp *time, int32 typmod); -extern bool AdjustTimestampForTypmodError(Timestamp *time, int32 typmod, - bool *error); +extern bool AdjustTimestampForTypmod(Timestamp *time, int32 typmod, + struct Node *escontext); #endif /* DATETIME_H */ diff --git a/src/postgres/include/utils/datum.h b/src/postgres/include/utils/datum.h index d7de961f..70a47f33 100644 --- a/src/postgres/include/utils/datum.h +++ b/src/postgres/include/utils/datum.h @@ -8,7 +8,7 @@ * of the Datum. (We do it this way because in most situations the caller * can look up the info just once and use it for many per-datum operations.) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/datum.h diff --git a/src/postgres/include/utils/dsa.h b/src/postgres/include/utils/dsa.h index 405606fe..3ce4ee30 100644 --- a/src/postgres/include/utils/dsa.h +++ b/src/postgres/include/utils/dsa.h @@ -3,7 +3,7 @@ * dsa.h * Dynamic shared memory areas. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -99,6 +99,10 @@ typedef pg_atomic_uint64 dsa_pointer_atomic; */ typedef dsm_handle dsa_handle; +/* Sentinel value to use for invalid dsa_handles. */ +#define DSA_HANDLE_INVALID ((dsa_handle) DSM_HANDLE_INVALID) + + extern dsa_area *dsa_create(int tranche_id); extern dsa_area *dsa_create_in_place(void *place, size_t size, int tranche_id, dsm_segment *segment); diff --git a/src/postgres/include/utils/dynahash.h b/src/postgres/include/utils/dynahash.h deleted file mode 100644 index 4564fb24..00000000 --- a/src/postgres/include/utils/dynahash.h +++ /dev/null @@ -1,20 +0,0 @@ -/*------------------------------------------------------------------------- - * - * dynahash.h - * POSTGRES dynahash.h file definitions - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * IDENTIFICATION - * src/include/utils/dynahash.h - * - *------------------------------------------------------------------------- - */ -#ifndef DYNAHASH_H -#define DYNAHASH_H - -extern int my_log2(long num); - -#endif /* DYNAHASH_H */ diff --git a/src/postgres/include/utils/elog.h b/src/postgres/include/utils/elog.h index 9cfad3d5..6acc2c25 100644 --- a/src/postgres/include/utils/elog.h +++ b/src/postgres/include/utils/elog.h @@ -4,7 +4,7 @@ * POSTGRES error reporting/logging definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/elog.h @@ -16,6 +16,12 @@ #include +#include "lib/stringinfo.h" + +/* We cannot include nodes.h yet, so forward-declare struct Node */ +struct Node; + + /* Error level codes */ #define DEBUG5 10 /* Debugging messages, in categories of * decreasing detail. */ @@ -83,7 +89,7 @@ */ #if defined(errno) && defined(__linux__) #define pg_prevent_errno_in_scope() int __errno_location pg_attribute_unused() -#elif defined(errno) && (defined(__darwin__) || defined(__freebsd__)) +#elif defined(errno) && (defined(__darwin__) || defined(__FreeBSD__)) #define pg_prevent_errno_in_scope() int __error pg_attribute_unused() #else #define pg_prevent_errno_in_scope() @@ -138,7 +144,7 @@ if (__builtin_constant_p(elevel) && (elevel) >= ERROR ? \ errstart_cold(elevel, domain) : \ errstart(elevel, domain)) \ - __VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \ + __VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \ if (__builtin_constant_p(elevel) && (elevel) >= ERROR) \ pg_unreachable(); \ } while(0) @@ -148,7 +154,7 @@ const int elevel_ = (elevel); \ pg_prevent_errno_in_scope(); \ if (errstart(elevel_, domain)) \ - __VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \ + __VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \ if (elevel_ >= ERROR) \ pg_unreachable(); \ } while(0) @@ -233,6 +239,63 @@ extern int getinternalerrposition(void); ereport(elevel, errmsg_internal(__VA_ARGS__)) +/*---------- + * Support for reporting "soft" errors that don't require a full transaction + * abort to clean up. This is to be used in this way: + * errsave(context, + * errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + * errmsg("invalid input syntax for type %s: \"%s\"", + * "boolean", in_str), + * ... other errxxx() fields as needed ...); + * + * "context" is a node pointer or NULL, and the remaining auxiliary calls + * provide the same error details as in ereport(). If context is not a + * pointer to an ErrorSaveContext node, then errsave(context, ...) + * behaves identically to ereport(ERROR, ...). If context is a pointer + * to an ErrorSaveContext node, then the information provided by the + * auxiliary calls is stored in the context node and control returns + * normally. The caller of errsave() must then do any required cleanup + * and return control back to its caller. That caller must check the + * ErrorSaveContext node to see whether an error occurred before + * it can trust the function's result to be meaningful. + * + * errsave_domain() allows a message domain to be specified; it is + * precisely analogous to ereport_domain(). + *---------- + */ +#define errsave_domain(context, domain, ...) \ + do { \ + struct Node *context_ = (context); \ + pg_prevent_errno_in_scope(); \ + if (errsave_start(context_, domain)) \ + __VA_ARGS__, errsave_finish(context_, __FILE__, __LINE__, __func__); \ + } while(0) + +#define errsave(context, ...) \ + errsave_domain(context, TEXTDOMAIN, __VA_ARGS__) + +/* + * "ereturn(context, dummy_value, ...);" is exactly the same as + * "errsave(context, ...); return dummy_value;". This saves a bit + * of typing in the common case where a function has no cleanup + * actions to take after reporting a soft error. "dummy_value" + * can be empty if the function returns void. + */ +#define ereturn_domain(context, dummy_value, domain, ...) \ + do { \ + errsave_domain(context, domain, __VA_ARGS__); \ + return dummy_value; \ + } while(0) + +#define ereturn(context, dummy_value, ...) \ + ereturn_domain(context, dummy_value, TEXTDOMAIN, __VA_ARGS__) + +extern bool errsave_start(struct Node *context, const char *domain); +extern void errsave_finish(struct Node *context, + const char *filename, int lineno, + const char *funcname); + + /* Support for constructing error strings separately from ereport() calls */ extern void pre_format_elog_string(int errnumber, const char *domain); @@ -308,39 +371,47 @@ extern PGDLLIMPORT __thread ErrorContextCallback *error_context_stack; * pedantry; we have seen bugs from compilers improperly optimizing code * away when such a variable was not marked. Beware that gcc's -Wclobbered * warnings are just about entirely useless for catching such oversights. + * + * Each of these macros accepts an optional argument which can be specified + * to apply a suffix to the variables declared within the macros. This suffix + * can be used to avoid the compiler emitting warnings about shadowed + * variables when compiling with -Wshadow in situations where nested PG_TRY() + * statements are required. The optional suffix may contain any character + * that's allowed in a variable name. The suffix, if specified, must be the + * same within each component macro of the given PG_TRY() statement. *---------- */ -#define PG_TRY() \ +#define PG_TRY(...) \ do { \ - sigjmp_buf *_save_exception_stack = PG_exception_stack; \ - ErrorContextCallback *_save_context_stack = error_context_stack; \ - sigjmp_buf _local_sigjmp_buf; \ - bool _do_rethrow = false; \ - if (sigsetjmp(_local_sigjmp_buf, 0) == 0) \ + sigjmp_buf *_save_exception_stack##__VA_ARGS__ = PG_exception_stack; \ + ErrorContextCallback *_save_context_stack##__VA_ARGS__ = error_context_stack; \ + sigjmp_buf _local_sigjmp_buf##__VA_ARGS__; \ + bool _do_rethrow##__VA_ARGS__ = false; \ + if (sigsetjmp(_local_sigjmp_buf##__VA_ARGS__, 0) == 0) \ { \ - PG_exception_stack = &_local_sigjmp_buf + PG_exception_stack = &_local_sigjmp_buf##__VA_ARGS__ -#define PG_CATCH() \ +#define PG_CATCH(...) \ } \ else \ { \ - PG_exception_stack = _save_exception_stack; \ - error_context_stack = _save_context_stack + PG_exception_stack = _save_exception_stack##__VA_ARGS__; \ + error_context_stack = _save_context_stack##__VA_ARGS__ -#define PG_FINALLY() \ +#define PG_FINALLY(...) \ } \ else \ - _do_rethrow = true; \ + _do_rethrow##__VA_ARGS__ = true; \ { \ - PG_exception_stack = _save_exception_stack; \ - error_context_stack = _save_context_stack + PG_exception_stack = _save_exception_stack##__VA_ARGS__; \ + error_context_stack = _save_context_stack##__VA_ARGS__ -#define PG_END_TRY() \ +#define PG_END_TRY(...) \ } \ - if (_do_rethrow) \ + if (_do_rethrow##__VA_ARGS__) \ PG_RE_THROW(); \ - PG_exception_stack = _save_exception_stack; \ - error_context_stack = _save_context_stack; \ + PG_exception_stack = _save_exception_stack##__VA_ARGS__; \ + error_context_stack = _save_context_stack##__VA_ARGS__; \ } while (0) /* @@ -439,6 +510,8 @@ extern PGDLLIMPORT bool syslog_split_messages; #define LOG_DESTINATION_JSONLOG 16 /* Other exported functions */ +extern void log_status_format(StringInfo buf, const char *format, + ErrorData *edata); extern void DebugFileOpen(void); extern char *unpack_sql_state(int sql_state); extern bool in_error_recursion_trouble(void); @@ -456,10 +529,6 @@ extern void write_pipe_chunks(char *data, int len, int dest); extern void write_csvlog(ErrorData *edata); extern void write_jsonlog(ErrorData *edata); -#ifdef HAVE_SYSLOG -extern void set_syslog_parameters(const char *ident, int facility); -#endif - /* * Write errors to stderr (or by equal means when stderr is * not available). Used before ereport/elog can be used @@ -467,4 +536,10 @@ extern void set_syslog_parameters(const char *ident, int facility); */ extern void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2); +/* + * Write a message to STDERR using only async-signal-safe functions. This can + * be used to safely emit a message from a signal handler. + */ +extern void write_stderr_signal_safe(const char *fmt); + #endif /* ELOG_H */ diff --git a/src/postgres/include/utils/expandeddatum.h b/src/postgres/include/utils/expandeddatum.h index ffdb0c45..a77bb7e7 100644 --- a/src/postgres/include/utils/expandeddatum.h +++ b/src/postgres/include/utils/expandeddatum.h @@ -34,7 +34,7 @@ * value if they fail partway through. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/expandeddatum.h @@ -44,6 +44,8 @@ #ifndef EXPANDEDDATUM_H #define EXPANDEDDATUM_H +#include "varatt.h" + /* Size of an EXTERNAL datum that contains a pointer to an expanded object */ #define EXPANDED_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof(varatt_expanded)) @@ -133,8 +135,17 @@ struct ExpandedObjectHeader * (More of these might be worth inlining later.) */ -#define EOHPGetRWDatum(eohptr) PointerGetDatum((eohptr)->eoh_rw_ptr) -#define EOHPGetRODatum(eohptr) PointerGetDatum((eohptr)->eoh_ro_ptr) +static inline Datum +EOHPGetRWDatum(const struct ExpandedObjectHeader *eohptr) +{ + return PointerGetDatum(eohptr->eoh_rw_ptr); +} + +static inline Datum +EOHPGetRODatum(const struct ExpandedObjectHeader *eohptr) +{ + return PointerGetDatum(eohptr->eoh_ro_ptr); +} /* Does the Datum represent a writable expanded object? */ #define DatumIsReadWriteExpandedObject(d, isnull, typlen) \ diff --git a/src/postgres/include/utils/expandedrecord.h b/src/postgres/include/utils/expandedrecord.h index be60e2ce..7e7c114b 100644 --- a/src/postgres/include/utils/expandedrecord.h +++ b/src/postgres/include/utils/expandedrecord.h @@ -3,7 +3,7 @@ * expandedrecord.h * Declarations for composite expanded objects. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/expandedrecord.h @@ -138,10 +138,20 @@ typedef struct ExpandedRecordHeader MemoryContextCallback er_mcb; } ExpandedRecordHeader; -/* fmgr macros for expanded record objects */ +/* fmgr functions and macros for expanded record objects */ +static inline Datum +ExpandedRecordGetDatum(const ExpandedRecordHeader *erh) +{ + return EOHPGetRWDatum(&erh->hdr); +} + +static inline Datum +ExpandedRecordGetRODatum(const ExpandedRecordHeader *erh) +{ + return EOHPGetRODatum(&erh->hdr); +} + #define PG_GETARG_EXPANDED_RECORD(n) DatumGetExpandedRecord(PG_GETARG_DATUM(n)) -#define ExpandedRecordGetDatum(erh) EOHPGetRWDatum(&(erh)->hdr) -#define ExpandedRecordGetRODatum(erh) EOHPGetRODatum(&(erh)->hdr) #define PG_RETURN_EXPANDED_RECORD(x) PG_RETURN_DATUM(ExpandedRecordGetDatum(x)) /* assorted other macros */ diff --git a/src/postgres/include/utils/float.h b/src/postgres/include/utils/float.h index 4bf0e3ac..7529899d 100644 --- a/src/postgres/include/utils/float.h +++ b/src/postgres/include/utils/float.h @@ -3,7 +3,7 @@ * float.h * Definitions for the built-in floating-point types * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -17,8 +17,8 @@ #include +/* X/Open (XSI) requires to provide M_PI, but core POSIX does not */ #ifndef M_PI -/* From my RH5.2 gcc math.h file - thomas 2000-04-03 */ #define M_PI 3.14159265358979323846 #endif @@ -42,10 +42,11 @@ extern void float_underflow_error(void) pg_attribute_noreturn(); extern void float_zero_divide_error(void) pg_attribute_noreturn(); extern int is_infinite(float8 val); extern float8 float8in_internal(char *num, char **endptr_p, - const char *type_name, const char *orig_string); -extern float8 float8in_internal_opt_error(char *num, char **endptr_p, - const char *type_name, const char *orig_string, - bool *have_error); + const char *type_name, const char *orig_string, + struct Node *escontext); +extern float4 float4in_internal(char *num, char **endptr_p, + const char *type_name, const char *orig_string, + struct Node *escontext); extern char *float8out_internal(float8 num); extern int float4_cmp_internal(float4 a, float4 b); extern int float8_cmp_internal(float8 a, float8 b); diff --git a/src/postgres/include/utils/fmgroids.h b/src/postgres/include/utils/fmgroids.h index 4cbc374b..b96a24bb 100644 --- a/src/postgres/include/utils/fmgroids.h +++ b/src/postgres/include/utils/fmgroids.h @@ -6,7 +6,7 @@ * These macros can be used to avoid a catalog lookup when a specific * fmgr-callable function needs to be referenced. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -3169,6 +3169,7 @@ #define F_PG_SHOW_REPLICATION_ORIGIN_STATUS 6014 #define F_JSONB_SUBSCRIPT_HANDLER 6098 #define F_PG_LSN 6103 +#define F_PG_STAT_GET_BACKEND_SUBXACT 6107 #define F_PG_STAT_GET_SUBSCRIPTION 6118 #define F_PG_GET_PUBLICATION_TABLES 6119 #define F_PG_GET_REPLICA_IDENTITY_INDEX 6120 @@ -3218,6 +3219,22 @@ #define F_HAS_PARAMETER_PRIVILEGE_NAME_TEXT_TEXT 6205 #define F_HAS_PARAMETER_PRIVILEGE_OID_TEXT_TEXT 6206 #define F_HAS_PARAMETER_PRIVILEGE_TEXT_TEXT 6207 +#define F_PG_READ_FILE_TEXT_BOOL 6208 +#define F_PG_READ_BINARY_FILE_TEXT_BOOL 6209 +#define F_PG_INPUT_IS_VALID 6210 +#define F_PG_INPUT_ERROR_INFO 6211 +#define F_RANDOM_NORMAL 6212 +#define F_PG_SPLIT_WALFILE_NAME 6213 +#define F_PG_STAT_GET_IO 6214 +#define F_ARRAY_SHUFFLE 6215 +#define F_ARRAY_SAMPLE 6216 +#define F_PG_STAT_GET_TUPLES_NEWPAGE_UPDATED 6217 +#define F_PG_STAT_GET_XACT_TUPLES_NEWPAGE_UPDATED 6218 +#define F_ERF 6219 +#define F_ERFC 6220 +#define F_DATE_ADD_TIMESTAMPTZ_INTERVAL 6221 +#define F_DATE_ADD_TIMESTAMPTZ_INTERVAL_TEXT 6222 +#define F_DATE_SUBTRACT_TIMESTAMPTZ_INTERVAL 6223 #define F_PG_GET_WAL_RESOURCE_MANAGERS 6224 #define F_MULTIRANGE_AGG_TRANSFN 6225 #define F_MULTIRANGE_AGG_FINALFN 6226 @@ -3257,5 +3274,41 @@ #define F_PG_LS_LOGICALSNAPDIR 6270 #define F_PG_LS_LOGICALMAPDIR 6271 #define F_PG_LS_REPLSLOTDIR 6272 +#define F_DATE_SUBTRACT_TIMESTAMPTZ_INTERVAL_TEXT 6273 +#define F_GENERATE_SERIES_TIMESTAMPTZ_TIMESTAMPTZ_INTERVAL_TEXT 6274 +#define F_JSON_AGG_STRICT_TRANSFN 6275 +#define F_JSON_AGG_STRICT 6276 +#define F_JSON_OBJECT_AGG_STRICT_TRANSFN 6277 +#define F_JSON_OBJECT_AGG_UNIQUE_TRANSFN 6278 +#define F_JSON_OBJECT_AGG_UNIQUE_STRICT_TRANSFN 6279 +#define F_JSON_OBJECT_AGG_STRICT 6280 +#define F_JSON_OBJECT_AGG_UNIQUE 6281 +#define F_JSON_OBJECT_AGG_UNIQUE_STRICT 6282 +#define F_JSONB_AGG_STRICT_TRANSFN 6283 +#define F_JSONB_AGG_STRICT 6284 +#define F_JSONB_OBJECT_AGG_STRICT_TRANSFN 6285 +#define F_JSONB_OBJECT_AGG_UNIQUE_TRANSFN 6286 +#define F_JSONB_OBJECT_AGG_UNIQUE_STRICT_TRANSFN 6287 +#define F_JSONB_OBJECT_AGG_STRICT 6288 +#define F_JSONB_OBJECT_AGG_UNIQUE 6289 +#define F_JSONB_OBJECT_AGG_UNIQUE_STRICT 6290 +#define F_ANY_VALUE 6291 +#define F_ANY_VALUE_TRANSFN 6292 +#define F_ARRAY_AGG_COMBINE 6293 +#define F_ARRAY_AGG_SERIALIZE 6294 +#define F_ARRAY_AGG_DESERIALIZE 6295 +#define F_ARRAY_AGG_ARRAY_COMBINE 6296 +#define F_ARRAY_AGG_ARRAY_SERIALIZE 6297 +#define F_ARRAY_AGG_ARRAY_DESERIALIZE 6298 +#define F_STRING_AGG_COMBINE 6299 +#define F_STRING_AGG_SERIALIZE 6300 +#define F_STRING_AGG_DESERIALIZE 6301 +#define F_PG_LOG_STANDBY_SNAPSHOT 6305 +#define F_WINDOW_PERCENT_RANK_SUPPORT 6306 +#define F_WINDOW_CUME_DIST_SUPPORT 6307 +#define F_WINDOW_NTILE_SUPPORT 6308 +#define F_PG_STAT_GET_DB_CONFLICT_LOGICALSLOT 6309 +#define F_PG_STAT_GET_LASTSCAN 6310 +#define F_SYSTEM_USER 6311 #endif /* FMGROIDS_H */ diff --git a/src/postgres/include/utils/fmgrprotos.h b/src/postgres/include/utils/fmgrprotos.h index 151e8dda..d5054fea 100644 --- a/src/postgres/include/utils/fmgrprotos.h +++ b/src/postgres/include/utils/fmgrprotos.h @@ -3,7 +3,7 @@ * fmgrprotos.h * Prototypes for built-in functions. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -1939,9 +1939,9 @@ extern Datum numeric_sortsupport(PG_FUNCTION_ARGS); extern Datum gist_poly_distance(PG_FUNCTION_ARGS); extern Datum dist_cpoint(PG_FUNCTION_ARGS); extern Datum dist_polyp(PG_FUNCTION_ARGS); -extern Datum pg_read_file_v2(PG_FUNCTION_ARGS); +extern Datum pg_read_file_off_len_missing(PG_FUNCTION_ARGS); extern Datum show_config_by_name_missing_ok(PG_FUNCTION_ARGS); -extern Datum pg_read_binary_file(PG_FUNCTION_ARGS); +extern Datum pg_read_binary_file_off_len_missing(PG_FUNCTION_ARGS); extern Datum pg_notification_queue_usage(PG_FUNCTION_ARGS); extern Datum pg_ls_dir(PG_FUNCTION_ARGS); extern Datum row_security_active(PG_FUNCTION_ARGS); @@ -2745,6 +2745,7 @@ extern Datum pg_replication_origin_progress(PG_FUNCTION_ARGS); extern Datum pg_show_replication_origin_status(PG_FUNCTION_ARGS); extern Datum jsonb_subscript_handler(PG_FUNCTION_ARGS); extern Datum numeric_pg_lsn(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_backend_subxact(PG_FUNCTION_ARGS); extern Datum pg_stat_get_subscription(PG_FUNCTION_ARGS); extern Datum pg_get_publication_tables(PG_FUNCTION_ARGS); extern Datum pg_get_replica_identity_index(PG_FUNCTION_ARGS); @@ -2788,6 +2789,20 @@ extern Datum extract_interval(PG_FUNCTION_ARGS); extern Datum has_parameter_privilege_name_name(PG_FUNCTION_ARGS); extern Datum has_parameter_privilege_id_name(PG_FUNCTION_ARGS); extern Datum has_parameter_privilege_name(PG_FUNCTION_ARGS); +extern Datum pg_read_file_all_missing(PG_FUNCTION_ARGS); +extern Datum pg_read_binary_file_all_missing(PG_FUNCTION_ARGS); +extern Datum pg_input_is_valid(PG_FUNCTION_ARGS); +extern Datum pg_input_error_info(PG_FUNCTION_ARGS); +extern Datum drandom_normal(PG_FUNCTION_ARGS); +extern Datum pg_split_walfile_name(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_io(PG_FUNCTION_ARGS); +extern Datum array_shuffle(PG_FUNCTION_ARGS); +extern Datum array_sample(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_tuples_newpage_updated(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_xact_tuples_newpage_updated(PG_FUNCTION_ARGS); +extern Datum derf(PG_FUNCTION_ARGS); +extern Datum derfc(PG_FUNCTION_ARGS); +extern Datum timestamptz_pl_interval_at_zone(PG_FUNCTION_ARGS); extern Datum pg_get_wal_resource_managers(PG_FUNCTION_ARGS); extern Datum multirange_agg_transfn(PG_FUNCTION_ARGS); extern Datum pg_stat_have_stats(PG_FUNCTION_ARGS); @@ -2825,5 +2840,32 @@ extern Datum regexp_substr(PG_FUNCTION_ARGS); extern Datum pg_ls_logicalsnapdir(PG_FUNCTION_ARGS); extern Datum pg_ls_logicalmapdir(PG_FUNCTION_ARGS); extern Datum pg_ls_replslotdir(PG_FUNCTION_ARGS); +extern Datum timestamptz_mi_interval_at_zone(PG_FUNCTION_ARGS); +extern Datum generate_series_timestamptz_at_zone(PG_FUNCTION_ARGS); +extern Datum json_agg_strict_transfn(PG_FUNCTION_ARGS); +extern Datum json_object_agg_strict_transfn(PG_FUNCTION_ARGS); +extern Datum json_object_agg_unique_transfn(PG_FUNCTION_ARGS); +extern Datum json_object_agg_unique_strict_transfn(PG_FUNCTION_ARGS); +extern Datum jsonb_agg_strict_transfn(PG_FUNCTION_ARGS); +extern Datum jsonb_object_agg_strict_transfn(PG_FUNCTION_ARGS); +extern Datum jsonb_object_agg_unique_transfn(PG_FUNCTION_ARGS); +extern Datum jsonb_object_agg_unique_strict_transfn(PG_FUNCTION_ARGS); +extern Datum any_value_transfn(PG_FUNCTION_ARGS); +extern Datum array_agg_combine(PG_FUNCTION_ARGS); +extern Datum array_agg_serialize(PG_FUNCTION_ARGS); +extern Datum array_agg_deserialize(PG_FUNCTION_ARGS); +extern Datum array_agg_array_combine(PG_FUNCTION_ARGS); +extern Datum array_agg_array_serialize(PG_FUNCTION_ARGS); +extern Datum array_agg_array_deserialize(PG_FUNCTION_ARGS); +extern Datum string_agg_combine(PG_FUNCTION_ARGS); +extern Datum string_agg_serialize(PG_FUNCTION_ARGS); +extern Datum string_agg_deserialize(PG_FUNCTION_ARGS); +extern Datum pg_log_standby_snapshot(PG_FUNCTION_ARGS); +extern Datum window_percent_rank_support(PG_FUNCTION_ARGS); +extern Datum window_cume_dist_support(PG_FUNCTION_ARGS); +extern Datum window_ntile_support(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_db_conflict_logicalslot(PG_FUNCTION_ARGS); +extern Datum pg_stat_get_lastscan(PG_FUNCTION_ARGS); +extern Datum system_user(PG_FUNCTION_ARGS); #endif /* FMGRPROTOS_H */ diff --git a/src/postgres/include/utils/fmgrtab.h b/src/postgres/include/utils/fmgrtab.h index 0a599376..838ffe3b 100644 --- a/src/postgres/include/utils/fmgrtab.h +++ b/src/postgres/include/utils/fmgrtab.h @@ -3,7 +3,7 @@ * fmgrtab.h * The function manager's table of internal functions. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/fmgrtab.h diff --git a/src/postgres/include/utils/guc.h b/src/postgres/include/utils/guc.h index 1bec4c23..2355fc2d 100644 --- a/src/postgres/include/utils/guc.h +++ b/src/postgres/include/utils/guc.h @@ -1,10 +1,9 @@ /*-------------------------------------------------------------------- * guc.h * - * External declarations pertaining to backend/utils/misc/guc.c and - * backend/utils/misc/guc-file.l + * External declarations pertaining to Grand Unified Configuration. * - * Copyright (c) 2000-2022, PostgreSQL Global Development Group + * Copyright (c) 2000-2023, PostgreSQL Global Development Group * Written by Peter Eisentraut . * * src/include/utils/guc.h @@ -203,46 +202,42 @@ typedef enum #define GUC_QUALIFIER_SEPARATOR '.' /* - * bit values in "flags" of a GUC variable + * Bit values in "flags" of a GUC variable. Note that these don't appear + * on disk, so we can reassign their values freely. */ -#define GUC_LIST_INPUT 0x0001 /* input can be list format */ -#define GUC_LIST_QUOTE 0x0002 /* double-quote list elements */ -#define GUC_NO_SHOW_ALL 0x0004 /* exclude from SHOW ALL */ -#define GUC_NO_RESET_ALL 0x0008 /* exclude from RESET ALL */ -#define GUC_REPORT 0x0010 /* auto-report changes to client */ -#define GUC_NOT_IN_SAMPLE 0x0020 /* not in postgresql.conf.sample */ -#define GUC_DISALLOW_IN_FILE 0x0040 /* can't set in postgresql.conf */ -#define GUC_CUSTOM_PLACEHOLDER 0x0080 /* placeholder for custom variable */ -#define GUC_SUPERUSER_ONLY 0x0100 /* show only to superusers */ -#define GUC_IS_NAME 0x0200 /* limit string to NAMEDATALEN-1 */ -#define GUC_NOT_WHILE_SEC_REST 0x0400 /* can't set if security restricted */ -#define GUC_DISALLOW_IN_AUTO_FILE 0x0800 /* can't set in - * PG_AUTOCONF_FILENAME */ - -#define GUC_UNIT_KB 0x1000 /* value is in kilobytes */ -#define GUC_UNIT_BLOCKS 0x2000 /* value is in blocks */ -#define GUC_UNIT_XBLOCKS 0x3000 /* value is in xlog blocks */ -#define GUC_UNIT_MB 0x4000 /* value is in megabytes */ -#define GUC_UNIT_BYTE 0x8000 /* value is in bytes */ -#define GUC_UNIT_MEMORY 0xF000 /* mask for size-related units */ - -#define GUC_UNIT_MS 0x10000 /* value is in milliseconds */ -#define GUC_UNIT_S 0x20000 /* value is in seconds */ -#define GUC_UNIT_MIN 0x30000 /* value is in minutes */ -#define GUC_UNIT_TIME 0xF0000 /* mask for time-related units */ - -#define GUC_EXPLAIN 0x100000 /* include in explain */ - -/* - * GUC_RUNTIME_COMPUTED is intended for runtime-computed GUCs that are only - * available via 'postgres -C' if the server is not running. - */ -#define GUC_RUNTIME_COMPUTED 0x200000 - -#define GUC_UNIT (GUC_UNIT_MEMORY | GUC_UNIT_TIME) - - -/* GUC vars that are actually declared in guc.c, rather than elsewhere */ +#define GUC_LIST_INPUT 0x000001 /* input can be list format */ +#define GUC_LIST_QUOTE 0x000002 /* double-quote list elements */ +#define GUC_NO_SHOW_ALL 0x000004 /* exclude from SHOW ALL */ +#define GUC_NO_RESET 0x000008 /* disallow RESET and SAVE */ +#define GUC_NO_RESET_ALL 0x000010 /* exclude from RESET ALL */ +#define GUC_EXPLAIN 0x000020 /* include in EXPLAIN */ +#define GUC_REPORT 0x000040 /* auto-report changes to client */ +#define GUC_NOT_IN_SAMPLE 0x000080 /* not in postgresql.conf.sample */ +#define GUC_DISALLOW_IN_FILE 0x000100 /* can't set in postgresql.conf */ +#define GUC_CUSTOM_PLACEHOLDER 0x000200 /* placeholder for custom variable */ +#define GUC_SUPERUSER_ONLY 0x000400 /* show only to superusers */ +#define GUC_IS_NAME 0x000800 /* limit string to NAMEDATALEN-1 */ +#define GUC_NOT_WHILE_SEC_REST 0x001000 /* can't set if security restricted */ +#define GUC_DISALLOW_IN_AUTO_FILE \ + 0x002000 /* can't set in PG_AUTOCONF_FILENAME */ +#define GUC_RUNTIME_COMPUTED 0x004000 /* delay processing in 'postgres -C' */ + +#define GUC_UNIT_KB 0x01000000 /* value is in kilobytes */ +#define GUC_UNIT_BLOCKS 0x02000000 /* value is in blocks */ +#define GUC_UNIT_XBLOCKS 0x03000000 /* value is in xlog blocks */ +#define GUC_UNIT_MB 0x04000000 /* value is in megabytes */ +#define GUC_UNIT_BYTE 0x05000000 /* value is in bytes */ +#define GUC_UNIT_MEMORY 0x0F000000 /* mask for size-related units */ + +#define GUC_UNIT_MS 0x10000000 /* value is in milliseconds */ +#define GUC_UNIT_S 0x20000000 /* value is in seconds */ +#define GUC_UNIT_MIN 0x30000000 /* value is in minutes */ +#define GUC_UNIT_TIME 0x70000000 /* mask for time-related units */ + +#define GUC_UNIT (GUC_UNIT_MEMORY | GUC_UNIT_TIME) + + +/* GUC vars that are actually defined in guc_tables.c, rather than elsewhere */ extern PGDLLIMPORT bool Debug_print_plan; extern PGDLLIMPORT bool Debug_print_parse; extern PGDLLIMPORT bool Debug_print_rewritten; @@ -269,7 +264,6 @@ extern PGDLLIMPORT int log_temp_files; extern PGDLLIMPORT double log_statement_sample_rate; extern PGDLLIMPORT double log_xact_sample_rate; extern PGDLLIMPORT __thread char *backtrace_functions; -extern PGDLLIMPORT __thread char *backtrace_symbol_list; extern PGDLLIMPORT int temp_file_limit; @@ -307,7 +301,7 @@ extern void DefineCustomBoolVariable(const char *name, int flags, GucBoolCheckHook check_hook, GucBoolAssignHook assign_hook, - GucShowHook show_hook); + GucShowHook show_hook) pg_attribute_nonnull(1, 4); extern void DefineCustomIntVariable(const char *name, const char *short_desc, @@ -320,7 +314,7 @@ extern void DefineCustomIntVariable(const char *name, int flags, GucIntCheckHook check_hook, GucIntAssignHook assign_hook, - GucShowHook show_hook); + GucShowHook show_hook) pg_attribute_nonnull(1, 4); extern void DefineCustomRealVariable(const char *name, const char *short_desc, @@ -333,7 +327,7 @@ extern void DefineCustomRealVariable(const char *name, int flags, GucRealCheckHook check_hook, GucRealAssignHook assign_hook, - GucShowHook show_hook); + GucShowHook show_hook) pg_attribute_nonnull(1, 4); extern void DefineCustomStringVariable(const char *name, const char *short_desc, @@ -344,7 +338,7 @@ extern void DefineCustomStringVariable(const char *name, int flags, GucStringCheckHook check_hook, GucStringAssignHook assign_hook, - GucShowHook show_hook); + GucShowHook show_hook) pg_attribute_nonnull(1, 4); extern void DefineCustomEnumVariable(const char *name, const char *short_desc, @@ -356,7 +350,7 @@ extern void DefineCustomEnumVariable(const char *name, int flags, GucEnumCheckHook check_hook, GucEnumAssignHook assign_hook, - GucShowHook show_hook); + GucShowHook show_hook) pg_attribute_nonnull(1, 4); extern void MarkGUCPrefixReserved(const char *className); @@ -371,7 +365,6 @@ extern void ProcessConfigFile(GucContext context); extern char *convert_GUC_name_for_parameter_acl(const char *name); extern bool check_GUC_name_for_parameter_acl(const char *name); extern void InitializeGUCOptions(void); -extern void InitializeWalConsistencyChecking(void); extern bool SelectConfigFiles(const char *userDoption, const char *progname); extern void ResetAllOptions(void); extern void AtStart_GUC(void); @@ -380,6 +373,7 @@ extern void AtEOXact_GUC(bool isCommit, int nestLevel); extern void BeginReportingGUCOptions(void); extern void ReportChangedGUCOptions(void); extern void ParseLongOption(const char *string, char **name, char **value); +extern const char *get_config_unit_name(int flags); extern bool parse_int(const char *value, int *result, int flags, const char **hintmsg); extern bool parse_real(const char *value, double *result, int flags, @@ -396,15 +390,6 @@ extern int set_config_option_ext(const char *name, const char *value, extern void AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt); extern char *GetConfigOptionByName(const char *name, const char **varname, bool missing_ok); -extern void GetConfigOptionByNum(int varnum, const char **values, bool *noshow); -extern int GetNumConfigOptions(void); - -extern void SetPGVariable(const char *name, List *args, bool is_local); -extern void GetPGVariable(const char *name, DestReceiver *dest); -extern TupleDesc GetPGVariableResultDesc(const char *name); - -extern void ExecSetVariableStmt(VariableSetStmt *stmt, bool isTopLevel); -extern char *ExtractSetVariableArgs(VariableSetStmt *stmt); extern void ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, GucAction action); @@ -412,6 +397,11 @@ extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *va extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name); extern ArrayType *GUCArrayReset(ArrayType *array); +extern void *guc_malloc(int elevel, size_t size); +extern pg_nodiscard void *guc_realloc(int elevel, void *old, size_t size); +extern char *guc_strdup(int elevel, const char *src); +extern void guc_free(void *ptr); + #ifdef EXEC_BACKEND extern void write_nondefault_variables(GucContext context); extern void read_nondefault_variables(void); @@ -422,6 +412,13 @@ extern Size EstimateGUCStateSpace(void); extern void SerializeGUCState(Size maxsize, char *start_address); extern void RestoreGUCState(void *gucstate); +/* Functions exported by guc_funcs.c */ +extern void ExecSetVariableStmt(VariableSetStmt *stmt, bool isTopLevel); +extern char *ExtractSetVariableArgs(VariableSetStmt *stmt); +extern void SetPGVariable(const char *name, List *args, bool is_local); +extern void GetPGVariable(const char *name, DestReceiver *dest); +extern TupleDesc GetPGVariableResultDesc(const char *name); + /* Support for messages reported from GUC check hooks */ extern PGDLLIMPORT char *GUC_check_errmsg_string; @@ -442,28 +439,4 @@ extern void GUC_check_errcode(int sqlerrcode); pre_format_elog_string(errno, TEXTDOMAIN), \ GUC_check_errhint_string = format_elog_string - -/* - * The following functions are not in guc.c, but are declared here to avoid - * having to include guc.h in some widely used headers that it really doesn't - * belong in. - */ - -/* in commands/tablespace.c */ -extern bool check_default_tablespace(char **newval, void **extra, GucSource source); -extern bool check_temp_tablespaces(char **newval, void **extra, GucSource source); -extern void assign_temp_tablespaces(const char *newval, void *extra); - -/* in catalog/namespace.c */ -extern bool check_search_path(char **newval, void **extra, GucSource source); -extern void assign_search_path(const char *newval, void *extra); - -/* in access/transam/xlog.c */ -extern bool check_wal_buffers(int *newval, void **extra, GucSource source); -extern void assign_xlog_sync_method(int new_sync_method, void *extra); - -/* in access/transam/xlogprefetcher.c */ -extern bool check_recovery_prefetch(int *new_value, void **extra, GucSource source); -extern void assign_recovery_prefetch(int new_value, void *extra); - #endif /* GUC_H */ diff --git a/src/postgres/include/utils/guc_hooks.h b/src/postgres/include/utils/guc_hooks.h new file mode 100644 index 00000000..952293a1 --- /dev/null +++ b/src/postgres/include/utils/guc_hooks.h @@ -0,0 +1,163 @@ +/*------------------------------------------------------------------------- + * + * guc_hooks.h + * Declarations of per-variable callback functions used by GUC. + * + * These functions are scattered throughout the system, but we + * declare them all here to avoid having to propagate guc.h into + * a lot of unrelated header files. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * + * src/include/utils/guc_hooks.h + * + *------------------------------------------------------------------------- + */ +#ifndef GUC_HOOKS_H +#define GUC_HOOKS_H 1 + +#include "utils/guc.h" + +/* + * See guc.h for the typedefs that these hook functions should match + * (GucBoolCheckHook and so on). + * + * Please keep the declarations in order by GUC variable name. + */ + +extern bool check_application_name(char **newval, void **extra, + GucSource source); +extern void assign_application_name(const char *newval, void *extra); +extern const char *show_archive_command(void); +extern bool check_autovacuum_max_workers(int *newval, void **extra, + GucSource source); +extern bool check_autovacuum_work_mem(int *newval, void **extra, + GucSource source); +extern bool check_vacuum_buffer_usage_limit(int *newval, void **extra, + GucSource source); +extern bool check_backtrace_functions(char **newval, void **extra, + GucSource source); +extern void assign_backtrace_functions(const char *newval, void *extra); +extern bool check_bonjour(bool *newval, void **extra, GucSource source); +extern bool check_canonical_path(char **newval, void **extra, GucSource source); +extern void assign_checkpoint_completion_target(double newval, void *extra); +extern bool check_client_connection_check_interval(int *newval, void **extra, + GucSource source); +extern bool check_client_encoding(char **newval, void **extra, GucSource source); +extern void assign_client_encoding(const char *newval, void *extra); +extern bool check_cluster_name(char **newval, void **extra, GucSource source); +extern const char *show_data_directory_mode(void); +extern bool check_datestyle(char **newval, void **extra, GucSource source); +extern void assign_datestyle(const char *newval, void *extra); +extern bool check_debug_io_direct(char **newval, void **extra, GucSource source); +extern void assign_debug_io_direct(const char *newval, void *extra); +extern bool check_default_table_access_method(char **newval, void **extra, + GucSource source); +extern bool check_default_tablespace(char **newval, void **extra, + GucSource source); +extern bool check_default_text_search_config(char **newval, void **extra, GucSource source); +extern void assign_default_text_search_config(const char *newval, void *extra); +extern bool check_default_with_oids(bool *newval, void **extra, + GucSource source); +extern bool check_effective_io_concurrency(int *newval, void **extra, + GucSource source); +extern bool check_huge_page_size(int *newval, void **extra, GucSource source); +extern const char *show_in_hot_standby(void); +extern bool check_locale_messages(char **newval, void **extra, GucSource source); +extern void assign_locale_messages(const char *newval, void *extra); +extern bool check_locale_monetary(char **newval, void **extra, GucSource source); +extern void assign_locale_monetary(const char *newval, void *extra); +extern bool check_locale_numeric(char **newval, void **extra, GucSource source); +extern void assign_locale_numeric(const char *newval, void *extra); +extern bool check_locale_time(char **newval, void **extra, GucSource source); +extern void assign_locale_time(const char *newval, void *extra); +extern bool check_log_destination(char **newval, void **extra, + GucSource source); +extern void assign_log_destination(const char *newval, void *extra); +extern const char *show_log_file_mode(void); +extern bool check_log_stats(bool *newval, void **extra, GucSource source); +extern bool check_log_timezone(char **newval, void **extra, GucSource source); +extern void assign_log_timezone(const char *newval, void *extra); +extern const char *show_log_timezone(void); +extern bool check_maintenance_io_concurrency(int *newval, void **extra, + GucSource source); +extern void assign_maintenance_io_concurrency(int newval, void *extra); +extern bool check_max_connections(int *newval, void **extra, GucSource source); +extern bool check_max_wal_senders(int *newval, void **extra, GucSource source); +extern void assign_max_wal_size(int newval, void *extra); +extern bool check_max_worker_processes(int *newval, void **extra, + GucSource source); +extern bool check_max_stack_depth(int *newval, void **extra, GucSource source); +extern void assign_max_stack_depth(int newval, void *extra); +extern bool check_primary_slot_name(char **newval, void **extra, + GucSource source); +extern bool check_random_seed(double *newval, void **extra, GucSource source); +extern void assign_random_seed(double newval, void *extra); +extern const char *show_random_seed(void); +extern bool check_recovery_prefetch(int *new_value, void **extra, + GucSource source); +extern void assign_recovery_prefetch(int new_value, void *extra); +extern bool check_recovery_target(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target(const char *newval, void *extra); +extern bool check_recovery_target_lsn(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target_lsn(const char *newval, void *extra); +extern bool check_recovery_target_name(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target_name(const char *newval, void *extra); +extern bool check_recovery_target_time(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target_time(const char *newval, void *extra); +extern bool check_recovery_target_timeline(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target_timeline(const char *newval, void *extra); +extern bool check_recovery_target_xid(char **newval, void **extra, + GucSource source); +extern void assign_recovery_target_xid(const char *newval, void *extra); +extern bool check_role(char **newval, void **extra, GucSource source); +extern void assign_role(const char *newval, void *extra); +extern const char *show_role(void); +extern bool check_search_path(char **newval, void **extra, GucSource source); +extern void assign_search_path(const char *newval, void *extra); +extern bool check_session_authorization(char **newval, void **extra, GucSource source); +extern void assign_session_authorization(const char *newval, void *extra); +extern void assign_session_replication_role(int newval, void *extra); +extern void assign_stats_fetch_consistency(int newval, void *extra); +extern bool check_ssl(bool *newval, void **extra, GucSource source); +extern bool check_stage_log_stats(bool *newval, void **extra, GucSource source); +extern bool check_synchronous_standby_names(char **newval, void **extra, + GucSource source); +extern void assign_synchronous_standby_names(const char *newval, void *extra); +extern void assign_synchronous_commit(int newval, void *extra); +extern void assign_syslog_facility(int newval, void *extra); +extern void assign_syslog_ident(const char *newval, void *extra); +extern void assign_tcp_keepalives_count(int newval, void *extra); +extern const char *show_tcp_keepalives_count(void); +extern void assign_tcp_keepalives_idle(int newval, void *extra); +extern const char *show_tcp_keepalives_idle(void); +extern void assign_tcp_keepalives_interval(int newval, void *extra); +extern const char *show_tcp_keepalives_interval(void); +extern void assign_tcp_user_timeout(int newval, void *extra); +extern const char *show_tcp_user_timeout(void); +extern bool check_temp_buffers(int *newval, void **extra, GucSource source); +extern bool check_temp_tablespaces(char **newval, void **extra, + GucSource source); +extern void assign_temp_tablespaces(const char *newval, void *extra); +extern bool check_timezone(char **newval, void **extra, GucSource source); +extern void assign_timezone(const char *newval, void *extra); +extern const char *show_timezone(void); +extern bool check_timezone_abbreviations(char **newval, void **extra, + GucSource source); +extern void assign_timezone_abbreviations(const char *newval, void *extra); +extern bool check_transaction_deferrable(bool *newval, void **extra, GucSource source); +extern bool check_transaction_isolation(int *newval, void **extra, GucSource source); +extern bool check_transaction_read_only(bool *newval, void **extra, GucSource source); +extern const char *show_unix_socket_permissions(void); +extern bool check_wal_buffers(int *newval, void **extra, GucSource source); +extern bool check_wal_consistency_checking(char **newval, void **extra, + GucSource source); +extern void assign_wal_consistency_checking(const char *newval, void *extra); +extern void assign_xlog_sync_method(int new_sync_method, void *extra); + +#endif /* GUC_HOOKS_H */ diff --git a/src/postgres/include/utils/guc_tables.h b/src/postgres/include/utils/guc_tables.h index 067d82ad..ab880cae 100644 --- a/src/postgres/include/utils/guc_tables.h +++ b/src/postgres/include/utils/guc_tables.h @@ -5,7 +5,7 @@ * * See src/backend/utils/misc/README for design notes. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/utils/guc_tables.h * @@ -14,6 +14,7 @@ #ifndef GUC_TABLES_H #define GUC_TABLES_H 1 +#include "lib/ilist.h" #include "utils/guc.h" /* @@ -56,6 +57,7 @@ enum config_group UNGROUPED, /* use for options not shown in pg_settings */ FILE_LOCATIONS, CONN_AUTH_SETTINGS, + CONN_AUTH_TCP, CONN_AUTH_AUTH, CONN_AUTH_SSL, RESOURCES_MEM, @@ -137,6 +139,11 @@ typedef struct guc_stack * if the value came from an internal source or the config file. Similarly * for reset_srole (which is usually BOOTSTRAP_SUPERUSERID, but not always). * + * Variables that are currently of active interest for maintenance + * operations are linked into various lists using the xxx_link fields. + * The link fields are unused/garbage in variables not currently having + * the specified properties. + * * Note that sourcefile/sourceline are kept here, and not pushed into stacked * values, although in principle they belong with some stacked value if the * active value is session- or transaction-local. This is to avoid bloating @@ -162,6 +169,12 @@ struct config_generic Oid reset_srole; /* role that set the reset value */ GucStack *stack; /* stacked prior values */ void *extra; /* "extra" pointer for current actual value */ + dlist_node nondef_link; /* list link for variables that have source + * different from PGC_S_DEFAULT */ + slist_node stack_link; /* list link for variables that have non-NULL + * stack */ + slist_node report_link; /* list link for variables that have the + * GUC_NEEDS_REPORT bit set in status */ char *last_reported; /* if variable is GUC_REPORT, value last sent * to client (NULL if not yet sent) */ char *sourcefile; /* file current setting is from (NULL if not @@ -227,6 +240,16 @@ struct config_real void *reset_extra; }; +/* + * A note about string GUCs: the boot_val is allowed to be NULL, which leads + * to the reset_val and the actual variable value (*variable) also being NULL. + * However, there is no way to set a NULL value subsequently using + * set_config_option or any other GUC API. Also, GUC APIs such as SHOW will + * display a NULL value as an empty string. Callers that choose to use a NULL + * boot_val should overwrite the setting later in startup, or else be careful + * that NULL doesn't have semantics that are visibly different from an empty + * string. + */ struct config_string { struct config_generic gen; @@ -262,8 +285,28 @@ extern PGDLLIMPORT const char *const config_type_names[]; extern PGDLLIMPORT const char *const GucContext_Names[]; extern PGDLLIMPORT const char *const GucSource_Names[]; +/* data arrays defining all the built-in GUC variables */ +extern PGDLLIMPORT struct config_bool ConfigureNamesBool[]; +extern PGDLLIMPORT struct config_int ConfigureNamesInt[]; +extern PGDLLIMPORT struct config_real ConfigureNamesReal[]; +extern PGDLLIMPORT struct config_string ConfigureNamesString[]; +extern PGDLLIMPORT struct config_enum ConfigureNamesEnum[]; + +/* lookup GUC variables, returning config_generic pointers */ +extern struct config_generic *find_option(const char *name, + bool create_placeholders, + bool skip_errors, + int elevel); +extern struct config_generic **get_explain_guc_options(int *num); + +/* get string value of variable */ +extern char *ShowGUCOption(struct config_generic *record, bool use_units); + +/* get whether or not the GUC variable is visible to current user */ +extern bool ConfigOptionIsVisible(struct config_generic *conf); + /* get the current set of variables */ -extern struct config_generic **get_guc_variables(void); +extern struct config_generic **get_guc_variables(int *num_vars); extern void build_guc_variables(void); @@ -271,6 +314,9 @@ extern void build_guc_variables(void); extern const char *config_enum_lookup_by_value(struct config_enum *record, int val); extern bool config_enum_lookup_by_name(struct config_enum *record, const char *value, int *retval); -extern struct config_generic **get_explain_guc_options(int *num); +extern char *config_enum_get_options(struct config_enum *record, + const char *prefix, + const char *suffix, + const char *separator); #endif /* GUC_TABLES_H */ diff --git a/src/postgres/include/utils/hsearch.h b/src/postgres/include/utils/hsearch.h index 854c3312..bc3d5efa 100644 --- a/src/postgres/include/utils/hsearch.h +++ b/src/postgres/include/utils/hsearch.h @@ -4,7 +4,7 @@ * exported definitions for utils/hash/dynahash.c; see notes therein * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/hsearch.h diff --git a/src/postgres/include/utils/inval.h b/src/postgres/include/utils/inval.h index 0e0323b9..14b4eac0 100644 --- a/src/postgres/include/utils/inval.h +++ b/src/postgres/include/utils/inval.h @@ -4,7 +4,7 @@ * POSTGRES cache invalidation dispatcher definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/inval.h @@ -15,7 +15,7 @@ #define INVAL_H #include "access/htup.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "utils/relcache.h" extern PGDLLIMPORT int debug_discard_caches; @@ -48,7 +48,7 @@ extern void CacheInvalidateRelcacheByTuple(HeapTuple classTuple); extern void CacheInvalidateRelcacheByRelid(Oid relid); -extern void CacheInvalidateSmgr(RelFileNodeBackend rnode); +extern void CacheInvalidateSmgr(RelFileLocatorBackend rlocator); extern void CacheInvalidateRelmap(Oid databaseId); diff --git a/src/postgres/include/utils/logtape.h b/src/postgres/include/utils/logtape.h new file mode 100644 index 00000000..5420a24a --- /dev/null +++ b/src/postgres/include/utils/logtape.h @@ -0,0 +1,77 @@ +/*------------------------------------------------------------------------- + * + * logtape.h + * Management of "logical tapes" within temporary files. + * + * See logtape.c for explanations. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/utils/logtape.h + * + *------------------------------------------------------------------------- + */ + +#ifndef LOGTAPE_H +#define LOGTAPE_H + +#include "storage/sharedfileset.h" + +/* + * LogicalTapeSet and LogicalTape are opaque types whose details are not + * known outside logtape.c. + */ +typedef struct LogicalTapeSet LogicalTapeSet; +typedef struct LogicalTape LogicalTape; + + +/* + * The approach tuplesort.c takes to parallel external sorts is that workers, + * whose state is almost the same as independent serial sorts, are made to + * produce a final materialized tape of sorted output in all cases. This is + * frozen, just like any case requiring a final materialized tape. However, + * there is one difference, which is that freezing will also export an + * underlying shared fileset BufFile for sharing. Freezing produces TapeShare + * metadata for the worker when this happens, which is passed along through + * shared memory to leader. + * + * The leader process can then pass an array of TapeShare metadata (one per + * worker participant) to LogicalTapeSetCreate(), alongside a handle to a + * shared fileset, which is sufficient to construct a new logical tapeset that + * consists of each of the tapes materialized by workers. + * + * Note that while logtape.c does create an empty leader tape at the end of the + * tapeset in the leader case, it can never be written to due to a restriction + * in the shared buffile infrastructure. + */ +typedef struct TapeShare +{ + /* + * Currently, all the leader process needs is the location of the + * materialized tape's first block. + */ + long firstblocknumber; +} TapeShare; + +/* + * prototypes for functions in logtape.c + */ + +extern LogicalTapeSet *LogicalTapeSetCreate(bool preallocate, + SharedFileSet *fileset, int worker); +extern void LogicalTapeClose(LogicalTape *lt); +extern void LogicalTapeSetClose(LogicalTapeSet *lts); +extern LogicalTape *LogicalTapeCreate(LogicalTapeSet *lts); +extern LogicalTape *LogicalTapeImport(LogicalTapeSet *lts, int worker, TapeShare *shared); +extern void LogicalTapeSetForgetFreeSpace(LogicalTapeSet *lts); +extern size_t LogicalTapeRead(LogicalTape *lt, void *ptr, size_t size); +extern void LogicalTapeWrite(LogicalTape *lt, const void *ptr, size_t size); +extern void LogicalTapeRewindForRead(LogicalTape *lt, size_t buffer_size); +extern void LogicalTapeFreeze(LogicalTape *lt, TapeShare *share); +extern size_t LogicalTapeBackspace(LogicalTape *lt, size_t size); +extern void LogicalTapeSeek(LogicalTape *lt, long blocknum, int offset); +extern void LogicalTapeTell(LogicalTape *lt, long *blocknum, int *offset); +extern long LogicalTapeSetBlocks(LogicalTapeSet *lts); + +#endif /* LOGTAPE_H */ diff --git a/src/postgres/include/utils/lsyscache.h b/src/postgres/include/utils/lsyscache.h index b8dd27d4..4f5418b9 100644 --- a/src/postgres/include/utils/lsyscache.h +++ b/src/postgres/include/utils/lsyscache.h @@ -3,7 +3,7 @@ * lsyscache.h * Convenience routines for common queries in the system catalog cache. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/lsyscache.h @@ -198,6 +198,10 @@ extern Oid get_index_column_opclass(Oid index_oid, int attno); extern bool get_index_isreplident(Oid index_oid); extern bool get_index_isvalid(Oid index_oid); extern bool get_index_isclustered(Oid index_oid); +extern Oid get_publication_oid(const char *pubname, bool missing_ok); +extern char *get_publication_name(Oid pubid, bool missing_ok); +extern Oid get_subscription_oid(const char *subname, bool missing_ok); +extern char *get_subscription_name(Oid subid, bool missing_ok); #define type_is_array(typid) (get_element_type(typid) != InvalidOid) /* type_is_array_domain accepts both plain arrays and domains over arrays */ diff --git a/src/postgres/include/utils/memdebug.h b/src/postgres/include/utils/memdebug.h index 6876e0ac..804ed1fb 100644 --- a/src/postgres/include/utils/memdebug.h +++ b/src/postgres/include/utils/memdebug.h @@ -7,7 +7,7 @@ * empty definitions for Valgrind client request macros we use. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/memdebug.h diff --git a/src/postgres/include/utils/memutils.h b/src/postgres/include/utils/memutils.h index 87882b21..01275a1e 100644 --- a/src/postgres/include/utils/memutils.h +++ b/src/postgres/include/utils/memutils.h @@ -7,7 +7,7 @@ * of the API of the memory management subsystem. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/memutils.h @@ -41,8 +41,11 @@ #define AllocSizeIsValid(size) ((Size) (size) <= MaxAllocSize) +/* Must be less than SIZE_MAX */ #define MaxAllocHugeSize (SIZE_MAX / 2) +#define InvalidAllocSize SIZE_MAX + #define AllocHugeSizeIsValid(size) ((Size) (size) <= MaxAllocHugeSize) @@ -79,6 +82,7 @@ extern void MemoryContextDeleteChildren(MemoryContext context); extern void MemoryContextSetIdentifier(MemoryContext context, const char *id); extern void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent); +extern MemoryContext GetMemoryChunkContext(void *pointer); extern Size GetMemoryChunkSpace(void *pointer); extern MemoryContext MemoryContextGetParent(MemoryContext context); extern bool MemoryContextIsEmpty(MemoryContext context); @@ -92,59 +96,11 @@ extern void MemoryContextAllowInCriticalSection(MemoryContext context, #ifdef MEMORY_CONTEXT_CHECKING extern void MemoryContextCheck(MemoryContext context); #endif -extern bool MemoryContextContains(MemoryContext context, void *pointer); /* Handy macro for copying and assigning context ID ... but note double eval */ #define MemoryContextCopyAndSetIdentifier(cxt, id) \ MemoryContextSetIdentifier(cxt, MemoryContextStrdup(cxt, id)) -/* - * GetMemoryChunkContext - * Given a currently-allocated chunk, determine the context - * it belongs to. - * - * All chunks allocated by any memory context manager are required to be - * preceded by the corresponding MemoryContext stored, without padding, in the - * preceding sizeof(void*) bytes. A currently-allocated chunk must contain a - * backpointer to its owning context. The backpointer is used by pfree() and - * repalloc() to find the context to call. - */ -#ifndef FRONTEND -static inline MemoryContext -GetMemoryChunkContext(void *pointer) -{ - MemoryContext context; - - /* - * Try to detect bogus pointers handed to us, poorly though we can. - * Presumably, a pointer that isn't MAXALIGNED isn't pointing at an - * allocated chunk. - */ - Assert(pointer != NULL); - Assert(pointer == (void *) MAXALIGN(pointer)); - - /* - * OK, it's probably safe to look at the context. - */ - context = *(MemoryContext *) (((char *) pointer) - sizeof(void *)); - - AssertArg(MemoryContextIsValid(context)); - - return context; -} -#endif - -/* - * This routine handles the context-type-independent part of memory - * context creation. It's intended to be called from context-type- - * specific creation routines, and noplace else. - */ -extern void MemoryContextCreate(MemoryContext node, - NodeTag tag, - const MemoryContextMethods *methods, - MemoryContext parent, - const char *name); - extern void HandleLogMemoryContextInterrupt(void); extern void ProcessLogMemoryContextInterrupt(void); diff --git a/src/postgres/include/utils/memutils_internal.h b/src/postgres/include/utils/memutils_internal.h new file mode 100644 index 00000000..2d107bbf --- /dev/null +++ b/src/postgres/include/utils/memutils_internal.h @@ -0,0 +1,136 @@ +/*------------------------------------------------------------------------- + * + * memutils_internal.h + * This file contains declarations for memory allocation utility + * functions for internal use. + * + * + * Portions Copyright (c) 2022-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/utils/memutils_internal.h + * + *------------------------------------------------------------------------- + */ + +#ifndef MEMUTILS_INTERNAL_H +#define MEMUTILS_INTERNAL_H + +#include "utils/memutils.h" + +/* These functions implement the MemoryContext API for AllocSet context. */ +extern void *AllocSetAlloc(MemoryContext context, Size size); +extern void AllocSetFree(void *pointer); +extern void *AllocSetRealloc(void *pointer, Size size); +extern void AllocSetReset(MemoryContext context); +extern void AllocSetDelete(MemoryContext context); +extern MemoryContext AllocSetGetChunkContext(void *pointer); +extern Size AllocSetGetChunkSpace(void *pointer); +extern bool AllocSetIsEmpty(MemoryContext context); +extern void AllocSetStats(MemoryContext context, + MemoryStatsPrintFunc printfunc, void *passthru, + MemoryContextCounters *totals, + bool print_to_stderr); +#ifdef MEMORY_CONTEXT_CHECKING +extern void AllocSetCheck(MemoryContext context); +#endif + +/* These functions implement the MemoryContext API for Generation context. */ +extern void *GenerationAlloc(MemoryContext context, Size size); +extern void GenerationFree(void *pointer); +extern void *GenerationRealloc(void *pointer, Size size); +extern void GenerationReset(MemoryContext context); +extern void GenerationDelete(MemoryContext context); +extern MemoryContext GenerationGetChunkContext(void *pointer); +extern Size GenerationGetChunkSpace(void *pointer); +extern bool GenerationIsEmpty(MemoryContext context); +extern void GenerationStats(MemoryContext context, + MemoryStatsPrintFunc printfunc, void *passthru, + MemoryContextCounters *totals, + bool print_to_stderr); +#ifdef MEMORY_CONTEXT_CHECKING +extern void GenerationCheck(MemoryContext context); +#endif + + +/* These functions implement the MemoryContext API for Slab context. */ +extern void *SlabAlloc(MemoryContext context, Size size); +extern void SlabFree(void *pointer); +extern void *SlabRealloc(void *pointer, Size size); +extern void SlabReset(MemoryContext context); +extern void SlabDelete(MemoryContext context); +extern MemoryContext SlabGetChunkContext(void *pointer); +extern Size SlabGetChunkSpace(void *pointer); +extern bool SlabIsEmpty(MemoryContext context); +extern void SlabStats(MemoryContext context, + MemoryStatsPrintFunc printfunc, void *passthru, + MemoryContextCounters *totals, + bool print_to_stderr); +#ifdef MEMORY_CONTEXT_CHECKING +extern void SlabCheck(MemoryContext context); +#endif + +/* + * These functions support the implementation of palloc_aligned() and are not + * part of a fully-fledged MemoryContext type. + */ +extern void AlignedAllocFree(void *pointer); +extern void *AlignedAllocRealloc(void *pointer, Size size); +extern MemoryContext AlignedAllocGetChunkContext(void *pointer); +extern Size AlignedAllocGetChunkSpace(void *pointer); + +/* + * How many extra bytes do we need to request in order to ensure that we can + * align a pointer to 'alignto'. Since palloc'd pointers are already aligned + * to MAXIMUM_ALIGNOF we can subtract that amount. We also need to make sure + * there is enough space for the redirection MemoryChunk. + */ +#define PallocAlignedExtraBytes(alignto) \ + ((alignto) + (sizeof(MemoryChunk) - MAXIMUM_ALIGNOF)) + +/* + * MemoryContextMethodID + * A unique identifier for each MemoryContext implementation which + * indicates the index into the mcxt_methods[] array. See mcxt.c. + * + * For robust error detection, ensure that MemoryContextMethodID has a value + * for each possible bit-pattern of MEMORY_CONTEXT_METHODID_MASK, and make + * dummy entries for unused IDs in the mcxt_methods[] array. We also try + * to avoid using bit-patterns as valid IDs if they are likely to occur in + * garbage data, or if they could falsely match on chunks that are really from + * malloc not palloc. (We can't tell that for most malloc implementations, + * but it happens that glibc stores flag bits in the same place where we put + * the MemoryContextMethodID, so the possible values are predictable for it.) + */ +typedef enum MemoryContextMethodID +{ + MCTX_UNUSED1_ID, /* 000 occurs in never-used memory */ + MCTX_UNUSED2_ID, /* glibc malloc'd chunks usually match 001 */ + MCTX_UNUSED3_ID, /* glibc malloc'd chunks > 128kB match 010 */ + MCTX_ASET_ID, + MCTX_GENERATION_ID, + MCTX_SLAB_ID, + MCTX_ALIGNED_REDIRECT_ID, + MCTX_UNUSED4_ID /* 111 occurs in wipe_mem'd memory */ +} MemoryContextMethodID; + +/* + * The number of bits that 8-byte memory chunk headers can use to encode the + * MemoryContextMethodID. + */ +#define MEMORY_CONTEXT_METHODID_BITS 3 +#define MEMORY_CONTEXT_METHODID_MASK \ + ((((uint64) 1) << MEMORY_CONTEXT_METHODID_BITS) - 1) + +/* + * This routine handles the context-type-independent part of memory + * context creation. It's intended to be called from context-type- + * specific creation routines, and noplace else. + */ +extern void MemoryContextCreate(MemoryContext node, + NodeTag tag, + MemoryContextMethodID method_id, + MemoryContext parent, + const char *name); + +#endif /* MEMUTILS_INTERNAL_H */ diff --git a/src/postgres/include/utils/memutils_memorychunk.h b/src/postgres/include/utils/memutils_memorychunk.h new file mode 100644 index 00000000..ffa91131 --- /dev/null +++ b/src/postgres/include/utils/memutils_memorychunk.h @@ -0,0 +1,237 @@ +/*------------------------------------------------------------------------- + * + * memutils_memorychunk.h + * Here we define a struct named MemoryChunk which implementations of + * MemoryContexts may use as a header for chunks of memory they allocate. + * + * MemoryChunk provides a lightweight header that a MemoryContext can use to + * store a reference back to the block which the given chunk is allocated on + * and also an additional 30-bits to store another value such as the size of + * the allocated chunk. + * + * Although MemoryChunks are used by each of our MemoryContexts, future + * implementations may choose to implement their own method for storing chunk + * headers. The only requirement is that the header ends with an 8-byte value + * which the least significant 3-bits of are set to the MemoryContextMethodID + * of the given context. + * + * By default, a MemoryChunk is 8 bytes in size, however, when + * MEMORY_CONTEXT_CHECKING is defined the header becomes 16 bytes in size due + * to the additional requested_size field. The MemoryContext may use this + * field for whatever they wish, but it is intended to be used for additional + * checks which are only done in MEMORY_CONTEXT_CHECKING builds. + * + * The MemoryChunk contains a uint64 field named 'hdrmask'. This field is + * used to encode 4 separate pieces of information. Starting with the least + * significant bits of 'hdrmask', the bit space is reserved as follows: + * + * 1. 3-bits to indicate the MemoryContextMethodID as defined by + * MEMORY_CONTEXT_METHODID_MASK + * 2. 1-bit to denote an "external" chunk (see below) + * 3. 30-bits reserved for the MemoryContext to use for anything it + * requires. Most MemoryContext likely want to store the size of the + * chunk here. + * 4. 30-bits for the number of bytes that must be subtracted from the chunk + * to obtain the address of the block that the chunk is stored on. + * + * In some cases, for example when memory allocations become large, it's + * possible fields 3 and 4 above are not large enough to store the values + * required for the chunk. In this case, the MemoryContext can choose to mark + * the chunk as "external" by calling the MemoryChunkSetHdrMaskExternal() + * function. When this is done, fields 3 and 4 are unavailable for use by the + * MemoryContext and it's up to the MemoryContext itself to devise its own + * method for getting the reference to the block. + * + * Interface: + * + * MemoryChunkSetHdrMask: + * Used to set up a non-external MemoryChunk. + * + * MemoryChunkSetHdrMaskExternal: + * Used to set up an externally managed MemoryChunk. + * + * MemoryChunkIsExternal: + * Determine if the given MemoryChunk is externally managed, i.e. + * MemoryChunkSetHdrMaskExternal() was called on the chunk. + * + * MemoryChunkGetValue: + * For non-external chunks, return the stored 30-bit value as it was set + * in the call to MemoryChunkSetHdrMask(). + * + * MemoryChunkGetBlock: + * For non-external chunks, return a pointer to the block as it was set + * in the call to MemoryChunkSetHdrMask(). + * + * Also exports: + * MEMORYCHUNK_MAX_VALUE + * MEMORYCHUNK_MAX_BLOCKOFFSET + * PointerGetMemoryChunk + * MemoryChunkGetPointer + * + * Portions Copyright (c) 2022-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/utils/memutils_memorychunk.h + * + *------------------------------------------------------------------------- + */ + +#ifndef MEMUTILS_MEMORYCHUNK_H +#define MEMUTILS_MEMORYCHUNK_H + +#include "utils/memutils_internal.h" + + /* + * The maximum allowed value that MemoryContexts can store in the value + * field. Must be 1 less than a power of 2. + */ +#define MEMORYCHUNK_MAX_VALUE UINT64CONST(0x3FFFFFFF) + +/* + * The maximum distance in bytes that a MemoryChunk can be offset from the + * block that is storing the chunk. Must be 1 less than a power of 2. + */ +#define MEMORYCHUNK_MAX_BLOCKOFFSET UINT64CONST(0x3FFFFFFF) + +/* define the least significant base-0 bit of each portion of the hdrmask */ +#define MEMORYCHUNK_EXTERNAL_BASEBIT MEMORY_CONTEXT_METHODID_BITS +#define MEMORYCHUNK_VALUE_BASEBIT (MEMORYCHUNK_EXTERNAL_BASEBIT + 1) +#define MEMORYCHUNK_BLOCKOFFSET_BASEBIT (MEMORYCHUNK_VALUE_BASEBIT + 30) + +/* + * A magic number for storing in the free bits of an external chunk. This + * must mask out the bits used for storing the MemoryContextMethodID and the + * external bit. + */ +#define MEMORYCHUNK_MAGIC (UINT64CONST(0xB1A8DB858EB6EFBA) >> \ + MEMORYCHUNK_VALUE_BASEBIT << \ + MEMORYCHUNK_VALUE_BASEBIT) + +typedef struct MemoryChunk +{ +#ifdef MEMORY_CONTEXT_CHECKING + Size requested_size; +#endif + + /* bitfield for storing details about the chunk */ + uint64 hdrmask; /* must be last */ +} MemoryChunk; + +/* Get the MemoryChunk from the pointer */ +#define PointerGetMemoryChunk(p) \ + ((MemoryChunk *) ((char *) (p) - sizeof(MemoryChunk))) +/* Get the pointer from the MemoryChunk */ +#define MemoryChunkGetPointer(c) \ + ((void *) ((char *) (c) + sizeof(MemoryChunk))) + +/* private macros for making the inline functions below more simple */ +#define HdrMaskIsExternal(hdrmask) \ + ((hdrmask) & (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT)) +#define HdrMaskGetValue(hdrmask) \ + (((hdrmask) >> MEMORYCHUNK_VALUE_BASEBIT) & MEMORYCHUNK_MAX_VALUE) + +/* + * We should have used up all the bits here, so the compiler is likely to + * optimize out the & MEMORYCHUNK_MAX_BLOCKOFFSET. + */ +#define HdrMaskBlockOffset(hdrmask) \ + (((hdrmask) >> MEMORYCHUNK_BLOCKOFFSET_BASEBIT) & MEMORYCHUNK_MAX_BLOCKOFFSET) + +/* For external chunks only, check the magic number matches */ +#define HdrMaskCheckMagic(hdrmask) \ + (MEMORYCHUNK_MAGIC == \ + ((hdrmask) >> MEMORYCHUNK_VALUE_BASEBIT << MEMORYCHUNK_VALUE_BASEBIT)) +/* + * MemoryChunkSetHdrMask + * Store the given 'block', 'chunk_size' and 'methodid' in the given + * MemoryChunk. + * + * The number of bytes between 'block' and 'chunk' must be <= + * MEMORYCHUNK_MAX_BLOCKOFFSET. + * 'value' must be <= MEMORYCHUNK_MAX_VALUE. + */ +static inline void +MemoryChunkSetHdrMask(MemoryChunk *chunk, void *block, + Size value, MemoryContextMethodID methodid) +{ + Size blockoffset = (char *) chunk - (char *) block; + + Assert((char *) chunk >= (char *) block); + Assert(blockoffset <= MEMORYCHUNK_MAX_BLOCKOFFSET); + Assert(value <= MEMORYCHUNK_MAX_VALUE); + Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK); + + chunk->hdrmask = (((uint64) blockoffset) << MEMORYCHUNK_BLOCKOFFSET_BASEBIT) | + (((uint64) value) << MEMORYCHUNK_VALUE_BASEBIT) | + methodid; +} + +/* + * MemoryChunkSetHdrMaskExternal + * Set 'chunk' as an externally managed chunk. Here we only record the + * MemoryContextMethodID and set the external chunk bit. + */ +static inline void +MemoryChunkSetHdrMaskExternal(MemoryChunk *chunk, + MemoryContextMethodID methodid) +{ + Assert((int) methodid <= MEMORY_CONTEXT_METHODID_MASK); + + chunk->hdrmask = MEMORYCHUNK_MAGIC | (((uint64) 1) << MEMORYCHUNK_EXTERNAL_BASEBIT) | + methodid; +} + +/* + * MemoryChunkIsExternal + * Return true if 'chunk' is marked as external. + */ +static inline bool +MemoryChunkIsExternal(MemoryChunk *chunk) +{ + /* + * External chunks should always store MEMORYCHUNK_MAGIC in the upper + * portion of the hdrmask, check that nothing has stomped on that. + */ + Assert(!HdrMaskIsExternal(chunk->hdrmask) || + HdrMaskCheckMagic(chunk->hdrmask)); + + return HdrMaskIsExternal(chunk->hdrmask); +} + +/* + * MemoryChunkGetValue + * For non-external chunks, returns the value field as it was set in + * MemoryChunkSetHdrMask. + */ +static inline Size +MemoryChunkGetValue(MemoryChunk *chunk) +{ + Assert(!HdrMaskIsExternal(chunk->hdrmask)); + + return HdrMaskGetValue(chunk->hdrmask); +} + +/* + * MemoryChunkGetBlock + * For non-external chunks, returns the pointer to the block as was set + * in MemoryChunkSetHdrMask. + */ +static inline void * +MemoryChunkGetBlock(MemoryChunk *chunk) +{ + Assert(!HdrMaskIsExternal(chunk->hdrmask)); + + return (void *) ((char *) chunk - HdrMaskBlockOffset(chunk->hdrmask)); +} + +/* cleanup all internal definitions */ +#undef MEMORYCHUNK_EXTERNAL_BASEBIT +#undef MEMORYCHUNK_VALUE_BASEBIT +#undef MEMORYCHUNK_BLOCKOFFSET_BASEBIT +#undef MEMORYCHUNK_MAGIC +#undef HdrMaskIsExternal +#undef HdrMaskGetValue +#undef HdrMaskBlockOffset +#undef HdrMaskCheckMagic + +#endif /* MEMUTILS_MEMORYCHUNK_H */ diff --git a/src/postgres/include/utils/numeric.h b/src/postgres/include/utils/numeric.h index 3caa74df..08e4f8c2 100644 --- a/src/postgres/include/utils/numeric.h +++ b/src/postgres/include/utils/numeric.h @@ -5,7 +5,7 @@ * * Original coding 1998, Jan Wieck. Heavily revised 2003, Tom Lane. * - * Copyright (c) 1998-2022, PostgreSQL Global Development Group + * Copyright (c) 1998-2023, PostgreSQL Global Development Group * * src/include/utils/numeric.h * @@ -56,9 +56,24 @@ typedef struct NumericData *Numeric; * fmgr interface macros */ -#define DatumGetNumeric(X) ((Numeric) PG_DETOAST_DATUM(X)) -#define DatumGetNumericCopy(X) ((Numeric) PG_DETOAST_DATUM_COPY(X)) -#define NumericGetDatum(X) PointerGetDatum(X) +static inline Numeric +DatumGetNumeric(Datum X) +{ + return (Numeric) PG_DETOAST_DATUM(X); +} + +static inline Numeric +DatumGetNumericCopy(Datum X) +{ + return (Numeric) PG_DETOAST_DATUM_COPY(X); +} + +static inline Datum +NumericGetDatum(Numeric X) +{ + return PointerGetDatum(X); +} + #define PG_GETARG_NUMERIC(n) DatumGetNumeric(PG_GETARG_DATUM(n)) #define PG_GETARG_NUMERIC_COPY(n) DatumGetNumericCopy(PG_GETARG_DATUM(n)) #define PG_RETURN_NUMERIC(x) return NumericGetDatum(x) @@ -85,6 +100,6 @@ extern Numeric numeric_div_opt_error(Numeric num1, Numeric num2, bool *have_error); extern Numeric numeric_mod_opt_error(Numeric num1, Numeric num2, bool *have_error); -extern int32 numeric_int4_opt_error(Numeric num, bool *error); +extern int32 numeric_int4_opt_error(Numeric num, bool *have_error); #endif /* _PG_NUMERIC_H_ */ diff --git a/src/postgres/include/utils/palloc.h b/src/postgres/include/utils/palloc.h index c39d395c..90a7684d 100644 --- a/src/postgres/include/utils/palloc.h +++ b/src/postgres/include/utils/palloc.h @@ -18,7 +18,7 @@ * everything that should be freed. See utils/mmgr/README for more info. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/palloc.h @@ -73,11 +73,17 @@ extern void *MemoryContextAllocZero(MemoryContext context, Size size); extern void *MemoryContextAllocZeroAligned(MemoryContext context, Size size); extern void *MemoryContextAllocExtended(MemoryContext context, Size size, int flags); +extern void *MemoryContextAllocAligned(MemoryContext context, + Size size, Size alignto, int flags); extern void *palloc(Size size); extern void *palloc0(Size size); extern void *palloc_extended(Size size, int flags); +extern void *palloc_aligned(Size size, Size alignto, int flags); extern pg_nodiscard void *repalloc(void *pointer, Size size); +extern pg_nodiscard void *repalloc_extended(void *pointer, + Size size, int flags); +extern pg_nodiscard void *repalloc0(void *pointer, Size oldsize, Size size); extern void pfree(void *pointer); /* @@ -101,6 +107,7 @@ extern void pfree(void *pointer); * objects of type "type" */ #define repalloc_array(pointer, type, count) ((type *) repalloc(pointer, sizeof(type) * (count))) +#define repalloc0_array(pointer, type, oldcount, count) ((type *) repalloc0(pointer, sizeof(type) * (oldcount), sizeof(type) * (count))) /* * The result of palloc() is always word-aligned, so we can skip testing diff --git a/src/postgres/include/utils/partcache.h b/src/postgres/include/utils/partcache.h index 3394e1fc..eb9bc4b0 100644 --- a/src/postgres/include/utils/partcache.h +++ b/src/postgres/include/utils/partcache.h @@ -2,7 +2,7 @@ * * partcache.h * - * Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/utils/partcache.h * @@ -13,6 +13,7 @@ #include "access/attnum.h" #include "fmgr.h" +#include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" #include "partitioning/partdefs.h" @@ -23,7 +24,7 @@ */ typedef struct PartitionKeyData { - char strategy; /* partitioning strategy */ + PartitionStrategy strategy; /* partitioning strategy */ int16 partnatts; /* number of columns in the partition key */ AttrNumber *partattrs; /* attribute numbers of columns in the * partition key or 0 if it's an expr */ diff --git a/src/postgres/include/utils/pg_locale.h b/src/postgres/include/utils/pg_locale.h index e7385fae..e2a72435 100644 --- a/src/postgres/include/utils/pg_locale.h +++ b/src/postgres/include/utils/pg_locale.h @@ -4,7 +4,7 @@ * * src/include/utils/pg_locale.h * - * Copyright (c) 2002-2022, PostgreSQL Global Development Group + * Copyright (c) 2002-2023, PostgreSQL Global Development Group * *----------------------------------------------------------------------- */ @@ -19,8 +19,6 @@ #include #endif -#include "utils/guc.h" - #ifdef USE_ICU /* * ucol_strcollUTF8() was introduced in ICU 50, but it is buggy before ICU 53. @@ -42,6 +40,7 @@ extern PGDLLIMPORT char *locale_messages; extern PGDLLIMPORT char *locale_monetary; extern PGDLLIMPORT char *locale_numeric; extern PGDLLIMPORT char *locale_time; +extern PGDLLIMPORT int icu_validation_level; /* lc_time localization cache */ extern PGDLLIMPORT char *localized_abbrev_days[]; @@ -49,19 +48,11 @@ extern PGDLLIMPORT char *localized_full_days[]; extern PGDLLIMPORT char *localized_abbrev_months[]; extern PGDLLIMPORT char *localized_full_months[]; - -extern bool check_locale_messages(char **newval, void **extra, GucSource source); -extern void assign_locale_messages(const char *newval, void *extra); -extern bool check_locale_monetary(char **newval, void **extra, GucSource source); -extern void assign_locale_monetary(const char *newval, void *extra); -extern bool check_locale_numeric(char **newval, void **extra, GucSource source); -extern void assign_locale_numeric(const char *newval, void *extra); -extern bool check_locale_time(char **newval, void **extra, GucSource source); -extern void assign_locale_time(const char *newval, void *extra); +/* is the databases's LC_CTYPE the C locale? */ +extern PGDLLIMPORT bool database_ctype_is_c; extern bool check_locale(int category, const char *locale, char **canonname); extern char *pg_perm_setlocale(int category, const char *locale); -extern void check_strxfrm_bug(void); extern bool lc_collate_is_c(Oid collation); extern bool lc_ctype_is_c(Oid collation); @@ -106,17 +97,34 @@ typedef struct pg_locale_struct *pg_locale_t; extern PGDLLIMPORT struct pg_locale_struct default_locale; extern void make_icu_collator(const char *iculocstr, + const char *icurules, struct pg_locale_struct *resultp); +extern bool pg_locale_deterministic(pg_locale_t locale); extern pg_locale_t pg_newlocale_from_collation(Oid collid); extern char *get_collation_actual_version(char collprovider, const char *collcollate); +extern int pg_strcoll(const char *arg1, const char *arg2, pg_locale_t locale); +extern int pg_strncoll(const char *arg1, size_t len1, + const char *arg2, size_t len2, pg_locale_t locale); +extern bool pg_strxfrm_enabled(pg_locale_t locale); +extern size_t pg_strxfrm(char *dest, const char *src, size_t destsize, + pg_locale_t locale); +extern size_t pg_strnxfrm(char *dest, size_t destsize, const char *src, + size_t srclen, pg_locale_t locale); +extern bool pg_strxfrm_prefix_enabled(pg_locale_t locale); +extern size_t pg_strxfrm_prefix(char *dest, const char *src, size_t destsize, + pg_locale_t locale); +extern size_t pg_strnxfrm_prefix(char *dest, size_t destsize, const char *src, + size_t srclen, pg_locale_t locale); + +extern void icu_validate_locale(const char *loc_str); +extern char *icu_language_tag(const char *loc_str, int elevel); #ifdef USE_ICU extern int32_t icu_to_uchar(UChar **buff_uchar, const char *buff, size_t nbytes); extern int32_t icu_from_uchar(char **result, const UChar *buff_uchar, int32_t len_uchar); #endif -extern void check_icu_locale(const char *icu_locale); /* These functions convert from/to libc's wchar_t, *not* pg_wchar_t */ extern size_t wchar2char(char *to, const wchar_t *from, size_t tolen, diff --git a/src/postgres/include/utils/pg_lsn.h b/src/postgres/include/utils/pg_lsn.h deleted file mode 100644 index 7b708f10..00000000 --- a/src/postgres/include/utils/pg_lsn.h +++ /dev/null @@ -1,29 +0,0 @@ -/*------------------------------------------------------------------------- - * - * pg_lsn.h - * Declarations for operations on log sequence numbers (LSNs) of - * PostgreSQL. - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/utils/pg_lsn.h - * - *------------------------------------------------------------------------- - */ -#ifndef PG_LSN_H -#define PG_LSN_H - -#include "access/xlogdefs.h" -#include "fmgr.h" - -#define DatumGetLSN(X) ((XLogRecPtr) DatumGetInt64(X)) -#define LSNGetDatum(X) (Int64GetDatum((int64) (X))) - -#define PG_GETARG_LSN(n) DatumGetLSN(PG_GETARG_DATUM(n)) -#define PG_RETURN_LSN(x) return LSNGetDatum(x) - -extern XLogRecPtr pg_lsn_in_internal(const char *str, bool *have_error); - -#endif /* PG_LSN_H */ diff --git a/src/postgres/include/utils/pgstat_internal.h b/src/postgres/include/utils/pgstat_internal.h index 4b65dfef..60fbf939 100644 --- a/src/postgres/include/utils/pgstat_internal.h +++ b/src/postgres/include/utils/pgstat_internal.h @@ -5,7 +5,7 @@ * only be needed by files implementing statistics support (rather than ones * reporting / querying stats). * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/utils/pgstat_internal.h * ---------- @@ -102,7 +102,7 @@ typedef struct PgStatShared_HashEntry } PgStatShared_HashEntry; /* - * Common header struct for PgStatShm_Stat*Entry. + * Common header struct for PgStatShared_*. */ typedef struct PgStatShared_Common { @@ -162,8 +162,7 @@ typedef struct PgStat_SubXactStatus * if the transaction commits/aborts. To handle replicas and crashes, * stats drops are included in commit / abort records. */ - dlist_head pending_drops; - int pending_drops_count; + dclist_head pending_drops; /* * Tuple insertion/deletion counts for an open transaction can't be @@ -330,6 +329,17 @@ typedef struct PgStatShared_Checkpointer PgStat_CheckpointerStats reset_offset; } PgStatShared_Checkpointer; +/* Shared-memory ready PgStat_IO */ +typedef struct PgStatShared_IO +{ + /* + * locks[i] protects stats.stats[i]. locks[0] also protects + * stats.stat_reset_timestamp. + */ + LWLock locks[BACKEND_NUM_TYPES]; + PgStat_IO stats; +} PgStatShared_IO; + typedef struct PgStatShared_SLRU { /* lock protects ->stats */ @@ -420,6 +430,7 @@ typedef struct PgStat_ShmemControl PgStatShared_Archiver archiver; PgStatShared_BgWriter bgwriter; PgStatShared_Checkpointer checkpointer; + PgStatShared_IO io; PgStatShared_SLRU slru; PgStatShared_Wal wal; } PgStat_ShmemControl; @@ -443,6 +454,8 @@ typedef struct PgStat_Snapshot PgStat_CheckpointerStats checkpointer; + PgStat_IO io; + PgStat_SLRUStats slru[SLRU_NUM_ELEMENTS]; PgStat_WalStats wal; @@ -550,6 +563,15 @@ extern void pgstat_database_reset_timestamp_cb(PgStatShared_Common *header, Time extern bool pgstat_function_flush_cb(PgStat_EntryRef *entry_ref, bool nowait); +/* + * Functions in pgstat_io.c + */ + +extern bool pgstat_flush_io(bool nowait); +extern void pgstat_io_reset_all_cb(TimestampTz ts); +extern void pgstat_io_snapshot_cb(void); + + /* * Functions in pgstat_relation.c */ @@ -580,7 +602,7 @@ extern void pgstat_attach_shmem(void); extern void pgstat_detach_shmem(void); extern PgStat_EntryRef *pgstat_get_entry_ref(PgStat_Kind kind, Oid dboid, Oid objoid, - bool create, bool *found); + bool create, bool *created_entry); extern bool pgstat_lock_entry(PgStat_EntryRef *entry_ref, bool nowait); extern bool pgstat_lock_entry_shared(PgStat_EntryRef *entry_ref, bool nowait); extern void pgstat_unlock_entry(PgStat_EntryRef *entry_ref); @@ -627,6 +649,7 @@ extern void pgstat_wal_snapshot_cb(void); extern bool pgstat_subscription_flush_cb(PgStat_EntryRef *entry_ref, bool nowait); extern void pgstat_subscription_reset_timestamp_cb(PgStatShared_Common *header, TimestampTz ts); + /* * Functions in pgstat_xact.c */ @@ -643,6 +666,13 @@ extern void pgstat_create_transactional(PgStat_Kind kind, Oid dboid, Oid objoid) extern PGDLLIMPORT PgStat_LocalState pgStatLocal; +/* + * Variables in pgstat_io.c + */ + +extern PGDLLIMPORT bool have_iostats; + + /* * Variables in pgstat_slru.c */ @@ -739,7 +769,7 @@ pgstat_copy_changecounted_stats(void *dst, void *src, size_t len, static inline int pgstat_cmp_hash_key(const void *a, const void *b, size_t size, void *arg) { - AssertArg(size == sizeof(PgStat_HashKey) && arg == NULL); + Assert(size == sizeof(PgStat_HashKey) && arg == NULL); return memcmp(a, b, sizeof(PgStat_HashKey)); } @@ -749,7 +779,7 @@ pgstat_hash_hash_key(const void *d, size_t size, void *arg) const PgStat_HashKey *key = (PgStat_HashKey *) d; uint32 hash; - AssertArg(size == sizeof(PgStat_HashKey) && arg == NULL); + Assert(size == sizeof(PgStat_HashKey) && arg == NULL); hash = murmurhash32(key->kind); hash = hash_combine(hash, murmurhash32(key->dboid)); diff --git a/src/postgres/include/utils/pidfile.h b/src/postgres/include/utils/pidfile.h index 14bfba42..1393a534 100644 --- a/src/postgres/include/utils/pidfile.h +++ b/src/postgres/include/utils/pidfile.h @@ -3,7 +3,7 @@ * pidfile.h * Declarations describing the data directory lock file (postmaster.pid) * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/pidfile.h diff --git a/src/postgres/include/utils/plancache.h b/src/postgres/include/utils/plancache.h index 0499635f..a443181d 100644 --- a/src/postgres/include/utils/plancache.h +++ b/src/postgres/include/utils/plancache.h @@ -5,7 +5,7 @@ * * See plancache.c for comments. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/plancache.h diff --git a/src/postgres/include/utils/portal.h b/src/postgres/include/utils/portal.h index aeddbdaf..aa08b1e0 100644 --- a/src/postgres/include/utils/portal.h +++ b/src/postgres/include/utils/portal.h @@ -36,7 +36,7 @@ * to look like NO SCROLL cursors. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/portal.h diff --git a/src/postgres/include/utils/probes.h b/src/postgres/include/utils/probes.h index 54316d06..f600a965 100644 --- a/src/postgres/include/utils/probes.h +++ b/src/postgres/include/utils/probes.h @@ -50,14 +50,18 @@ #define TRACE_POSTGRESQL_SORT_START_ENABLED() (0) #define TRACE_POSTGRESQL_SORT_DONE(INT1, INT2) do {} while (0) #define TRACE_POSTGRESQL_SORT_DONE_ENABLED() (0) -#define TRACE_POSTGRESQL_BUFFER_READ_START(INT1, INT2, INT3, INT4, INT5, INT6, INT7) do {} while (0) +#define TRACE_POSTGRESQL_BUFFER_READ_START(INT1, INT2, INT3, INT4, INT5, INT6) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_READ_START_ENABLED() (0) -#define TRACE_POSTGRESQL_BUFFER_READ_DONE(INT1, INT2, INT3, INT4, INT5, INT6, INT7, INT8) do {} while (0) +#define TRACE_POSTGRESQL_BUFFER_READ_DONE(INT1, INT2, INT3, INT4, INT5, INT6, INT7) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_READ_DONE_ENABLED() (0) #define TRACE_POSTGRESQL_BUFFER_FLUSH_START(INT1, INT2, INT3, INT4, INT5) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_FLUSH_START_ENABLED() (0) #define TRACE_POSTGRESQL_BUFFER_FLUSH_DONE(INT1, INT2, INT3, INT4, INT5) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_FLUSH_DONE_ENABLED() (0) +#define TRACE_POSTGRESQL_BUFFER_EXTEND_START(INT1, INT2, INT3, INT4, INT5, INT6) do {} while (0) +#define TRACE_POSTGRESQL_BUFFER_EXTEND_START_ENABLED() (0) +#define TRACE_POSTGRESQL_BUFFER_EXTEND_DONE(INT1, INT2, INT3, INT4, INT5, INT6, INT7) do {} while (0) +#define TRACE_POSTGRESQL_BUFFER_EXTEND_DONE_ENABLED() (0) #define TRACE_POSTGRESQL_BUFFER_CHECKPOINT_START(INT1) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_CHECKPOINT_START_ENABLED() (0) #define TRACE_POSTGRESQL_BUFFER_CHECKPOINT_SYNC_START() do {} while (0) @@ -70,10 +74,6 @@ #define TRACE_POSTGRESQL_BUFFER_SYNC_WRITTEN_ENABLED() (0) #define TRACE_POSTGRESQL_BUFFER_SYNC_DONE(INT1, INT2, INT3) do {} while (0) #define TRACE_POSTGRESQL_BUFFER_SYNC_DONE_ENABLED() (0) -#define TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_START(INT1, INT2, INT3, INT4, INT5) do {} while (0) -#define TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_START_ENABLED() (0) -#define TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_DONE(INT1, INT2, INT3, INT4, INT5) do {} while (0) -#define TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_DONE_ENABLED() (0) #define TRACE_POSTGRESQL_DEADLOCK_FOUND() do {} while (0) #define TRACE_POSTGRESQL_DEADLOCK_FOUND_ENABLED() (0) #define TRACE_POSTGRESQL_CHECKPOINT_START(INT1) do {} while (0) diff --git a/src/postgres/include/utils/ps_status.h b/src/postgres/include/utils/ps_status.h index bba46359..ff5a2b2b 100644 --- a/src/postgres/include/utils/ps_status.h +++ b/src/postgres/include/utils/ps_status.h @@ -12,13 +12,35 @@ #ifndef PS_STATUS_H #define PS_STATUS_H +/* disabled on Windows as the performance overhead can be significant */ +#ifdef WIN32 +#define DEFAULT_UPDATE_PROCESS_TITLE false +#else +#define DEFAULT_UPDATE_PROCESS_TITLE true +#endif + extern PGDLLIMPORT bool update_process_title; extern char **save_ps_display_args(int argc, char **argv); extern void init_ps_display(const char *fixed_part); -extern void set_ps_display(const char *activity); +extern void set_ps_display_suffix(const char *suffix); + +extern void set_ps_display_remove_suffix(void); + +extern void set_ps_display_with_len(const char *activity, size_t len); + +/* + * set_ps_display + * inlined to allow strlen to be evaluated during compilation when + * passing string constants. + */ +static inline void +set_ps_display(const char *activity) +{ + set_ps_display_with_len(activity, strlen(activity)); +} extern const char *get_ps_display(int *displen); diff --git a/src/postgres/include/utils/queryenvironment.h b/src/postgres/include/utils/queryenvironment.h index 23a16a91..532219ad 100644 --- a/src/postgres/include/utils/queryenvironment.h +++ b/src/postgres/include/utils/queryenvironment.h @@ -4,7 +4,7 @@ * Access to functions to mutate the query environment and retrieve the * actual data related to entries (if any). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/queryenvironment.h diff --git a/src/postgres/include/utils/regproc.h b/src/postgres/include/utils/regproc.h index a36ceba7..a1f7c6b0 100644 --- a/src/postgres/include/utils/regproc.h +++ b/src/postgres/include/utils/regproc.h @@ -3,7 +3,7 @@ * regproc.h * Functions for the built-in types regproc, regclass, regtype, etc. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/regproc.h @@ -25,10 +25,10 @@ extern char *format_procedure_extended(Oid procedure_oid, bits16 flags); #define FORMAT_OPERATOR_FORCE_QUALIFY 0x02 /* force qualification */ extern char *format_operator_extended(Oid operator_oid, bits16 flags); -extern List *stringToQualifiedNameList(const char *string); +extern List *stringToQualifiedNameList(const char *string, Node *escontext); extern char *format_procedure(Oid procedure_oid); extern char *format_procedure_qualified(Oid procedure_oid); -extern void format_procedure_parts(Oid operator_oid, List **objnames, +extern void format_procedure_parts(Oid procedure_oid, List **objnames, List **objargs, bool missing_ok); extern char *format_operator(Oid operator_oid); diff --git a/src/postgres/include/utils/rel.h b/src/postgres/include/utils/rel.h index 1896a9a0..1426a353 100644 --- a/src/postgres/include/utils/rel.h +++ b/src/postgres/include/utils/rel.h @@ -4,7 +4,7 @@ * POSTGRES relation descriptor (a/k/a relcache entry) definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/rel.h @@ -16,6 +16,7 @@ #include "access/tupdesc.h" #include "access/xlog.h" +#include "catalog/catalog.h" #include "catalog/pg_class.h" #include "catalog/pg_index.h" #include "catalog/pg_publication.h" @@ -23,7 +24,7 @@ #include "partitioning/partdefs.h" #include "rewrite/prs2lock.h" #include "storage/block.h" -#include "storage/relfilenode.h" +#include "storage/relfilelocator.h" #include "storage/smgr.h" #include "utils/relcache.h" #include "utils/reltrigger.h" @@ -53,7 +54,7 @@ typedef LockInfoData *LockInfo; typedef struct RelationData { - RelFileNode rd_node; /* relation physical identifier */ + RelFileLocator rd_locator; /* relation physical identifier */ SMgrRelation rd_smgr; /* cached file handle, or NULL */ int rd_refcnt; /* reference count */ BackendId rd_backend; /* owning backend id, if temporary relation */ @@ -66,44 +67,45 @@ typedef struct RelationData /*---------- * rd_createSubid is the ID of the highest subtransaction the rel has - * survived into or zero if the rel or its rd_node was created before the - * current top transaction. (IndexStmt.oldNode leads to the case of a new - * rel with an old rd_node.) rd_firstRelfilenodeSubid is the ID of the - * highest subtransaction an rd_node change has survived into or zero if - * rd_node matches the value it had at the start of the current top + * survived into or zero if the rel or its storage was created before the + * current top transaction. (IndexStmt.oldNumber leads to the case of a new + * rel with an old rd_locator.) rd_firstRelfilelocatorSubid is the ID of the + * highest subtransaction an rd_locator change has survived into or zero if + * rd_locator matches the value it had at the start of the current top * transaction. (Rolling back the subtransaction that - * rd_firstRelfilenodeSubid denotes would restore rd_node to the value it + * rd_firstRelfilelocatorSubid denotes would restore rd_locator to the value it * had at the start of the current top transaction. Rolling back any * lower subtransaction would not.) Their accuracy is critical to * RelationNeedsWAL(). * - * rd_newRelfilenodeSubid is the ID of the highest subtransaction the - * most-recent relfilenode change has survived into or zero if not changed + * rd_newRelfilelocatorSubid is the ID of the highest subtransaction the + * most-recent relfilenumber change has survived into or zero if not changed * in the current transaction (or we have forgotten changing it). This * field is accurate when non-zero, but it can be zero when a relation has - * multiple new relfilenodes within a single transaction, with one of them + * multiple new relfilenumbers within a single transaction, with one of them * occurring in a subsequently aborted subtransaction, e.g. * BEGIN; * TRUNCATE t; * SAVEPOINT save; * TRUNCATE t; * ROLLBACK TO save; - * -- rd_newRelfilenodeSubid is now forgotten + * -- rd_newRelfilelocatorSubid is now forgotten * * If every rd_*Subid field is zero, they are read-only outside - * relcache.c. Files that trigger rd_node changes by updating + * relcache.c. Files that trigger rd_locator changes by updating * pg_class.reltablespace and/or pg_class.relfilenode call - * RelationAssumeNewRelfilenode() to update rd_*Subid. + * RelationAssumeNewRelfilelocator() to update rd_*Subid. * * rd_droppedSubid is the ID of the highest subtransaction that a drop of * the rel has survived into. In entries visible outside relcache.c, this * is always zero. */ SubTransactionId rd_createSubid; /* rel was created in current xact */ - SubTransactionId rd_newRelfilenodeSubid; /* highest subxact changing - * rd_node to current value */ - SubTransactionId rd_firstRelfilenodeSubid; /* highest subxact changing - * rd_node to any value */ + SubTransactionId rd_newRelfilelocatorSubid; /* highest subxact changing + * rd_locator to current value */ + SubTransactionId rd_firstRelfilelocatorSubid; /* highest subxact + * changing rd_locator to + * any value */ SubTransactionId rd_droppedSubid; /* dropped with another Subid set */ Form_pg_class rd_rel; /* RELATION tuple */ @@ -155,10 +157,12 @@ typedef struct RelationData List *rd_statlist; /* list of OIDs of extended stats */ /* data managed by RelationGetIndexAttrBitmap: */ - Bitmapset *rd_indexattr; /* identifies columns used in indexes */ + bool rd_attrsvalid; /* are bitmaps of attrs valid? */ Bitmapset *rd_keyattr; /* cols that can be ref'd by foreign keys */ Bitmapset *rd_pkattr; /* cols included in primary key */ Bitmapset *rd_idattr; /* included in replica identity index */ + Bitmapset *rd_hotblockingattr; /* cols blocking HOT update */ + Bitmapset *rd_summarizedattr; /* cols indexed by summarizing indexes */ PublicationDesc *rd_pubdesc; /* publication descriptor, or NULL */ @@ -267,15 +271,27 @@ typedef struct RelationData */ typedef struct ForeignKeyCacheInfo { + pg_node_attr(no_equal, no_read, no_query_jumble) + NodeTag type; - Oid conoid; /* oid of the constraint itself */ - Oid conrelid; /* relation constrained by the foreign key */ - Oid confrelid; /* relation referenced by the foreign key */ - int nkeys; /* number of columns in the foreign key */ - /* these arrays each have nkeys valid entries: */ - AttrNumber conkey[INDEX_MAX_KEYS]; /* cols in referencing table */ - AttrNumber confkey[INDEX_MAX_KEYS]; /* cols in referenced table */ - Oid conpfeqop[INDEX_MAX_KEYS]; /* PK = FK operator OIDs */ + /* oid of the constraint itself */ + Oid conoid; + /* relation constrained by the foreign key */ + Oid conrelid; + /* relation referenced by the foreign key */ + Oid confrelid; + /* number of columns in the foreign key */ + int nkeys; + + /* + * these arrays each have nkeys valid entries: + */ + /* cols in referencing table */ + AttrNumber conkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); + /* cols in referenced table */ + AttrNumber confkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); + /* PK = FK operator OIDs */ + Oid conpfeqop[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys)); } ForeignKeyCacheInfo; @@ -531,13 +547,14 @@ typedef struct ViewOptions /* * RelationIsMapped - * True if the relation uses the relfilenode map. Note multiple eval + * True if the relation uses the relfilenumber map. Note multiple eval * of argument! */ #define RelationIsMapped(relation) \ (RELKIND_HAS_STORAGE((relation)->rd_rel->relkind) && \ - ((relation)->rd_rel->relfilenode == InvalidOid)) + ((relation)->rd_rel->relfilenode == InvalidRelFileNumber)) +#ifndef FRONTEND /* * RelationGetSmgr * Returns smgr file handle for a relation, opening it if needed. @@ -555,24 +572,24 @@ static inline SMgrRelation RelationGetSmgr(Relation rel) { if (unlikely(rel->rd_smgr == NULL)) - smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend)); + smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend)); return rel->rd_smgr; } /* * RelationCloseSmgr * Close the relation at the smgr level, if not already done. - * - * Note: smgrclose should unhook from owner pointer, hence the Assert. */ -#define RelationCloseSmgr(relation) \ - do { \ - if ((relation)->rd_smgr != NULL) \ - { \ - smgrclose((relation)->rd_smgr); \ - Assert((relation)->rd_smgr == NULL); \ - } \ - } while (0) +static inline void +RelationCloseSmgr(Relation relation) +{ + if (relation->rd_smgr != NULL) + smgrclose(relation->rd_smgr); + + /* smgrclose should unhook from owner pointer */ + Assert(relation->rd_smgr == NULL); +} +#endif /* !FRONTEND */ /* * RelationGetTargetBlock @@ -607,12 +624,12 @@ RelationGetSmgr(Relation rel) * * Returns false if wal_level = minimal and this relation is created or * truncated in the current transaction. See "Skipping WAL for New - * RelFileNode" in src/backend/access/transam/README. + * RelFileLocator" in src/backend/access/transam/README. */ #define RelationNeedsWAL(relation) \ (RelationIsPermanent(relation) && (XLogIsNeeded() || \ (relation->rd_createSubid == InvalidSubTransactionId && \ - relation->rd_firstRelfilenodeSubid == InvalidSubTransactionId))) + relation->rd_firstRelfilelocatorSubid == InvalidSubTransactionId))) /* * RelationUsesLocalBuffers diff --git a/src/postgres/include/utils/relcache.h b/src/postgres/include/utils/relcache.h index c93d8654..38524641 100644 --- a/src/postgres/include/utils/relcache.h +++ b/src/postgres/include/utils/relcache.h @@ -4,7 +4,7 @@ * Relation descriptor cache definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/relcache.h @@ -15,6 +15,7 @@ #define RELCACHE_H #include "access/tupdesc.h" +#include "common/relpath.h" #include "nodes/bitmapset.h" @@ -50,15 +51,19 @@ extern Oid RelationGetReplicaIndex(Relation relation); extern List *RelationGetIndexExpressions(Relation relation); extern List *RelationGetDummyIndexExpressions(Relation relation); extern List *RelationGetIndexPredicate(Relation relation); -extern Datum *RelationGetIndexRawAttOptions(Relation relation); +extern Datum *RelationGetIndexRawAttOptions(Relation indexrel); extern bytea **RelationGetIndexAttOptions(Relation relation, bool copy); +/* + * Which set of columns to return by RelationGetIndexAttrBitmap. + */ typedef enum IndexAttrBitmapKind { - INDEX_ATTR_BITMAP_ALL, INDEX_ATTR_BITMAP_KEY, INDEX_ATTR_BITMAP_PRIMARY_KEY, - INDEX_ATTR_BITMAP_IDENTITY_KEY + INDEX_ATTR_BITMAP_IDENTITY_KEY, + INDEX_ATTR_BITMAP_HOT_BLOCKING, + INDEX_ATTR_BITMAP_SUMMARIZED } IndexAttrBitmapKind; extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation, @@ -103,7 +108,7 @@ extern Relation RelationBuildLocalRelation(const char *relname, TupleDesc tupDesc, Oid relid, Oid accessmtd, - Oid relfilenode, + RelFileNumber relfilenumber, Oid reltablespace, bool shared_relation, bool mapped_relation, @@ -111,10 +116,10 @@ extern Relation RelationBuildLocalRelation(const char *relname, char relkind); /* - * Routines to manage assignment of new relfilenode to a relation + * Routines to manage assignment of new relfilenumber to a relation */ -extern void RelationSetNewRelfilenode(Relation relation, char persistence); -extern void RelationAssumeNewRelfilenode(Relation relation); +extern void RelationSetNewRelfilenumber(Relation relation, char persistence); +extern void RelationAssumeNewRelfilelocator(Relation relation); /* * Routines for flushing/rebuilding relcache entries in various scenarios diff --git a/src/postgres/include/utils/reltrigger.h b/src/postgres/include/utils/reltrigger.h index 9bac164a..df9a2fb6 100644 --- a/src/postgres/include/utils/reltrigger.h +++ b/src/postgres/include/utils/reltrigger.h @@ -4,7 +4,7 @@ * POSTGRES relation trigger definitions. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/reltrigger.h diff --git a/src/postgres/include/utils/resowner.h b/src/postgres/include/utils/resowner.h index 4aff7015..cd070b60 100644 --- a/src/postgres/include/utils/resowner.h +++ b/src/postgres/include/utils/resowner.h @@ -9,7 +9,7 @@ * See utils/resowner/README for more info. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/resowner.h diff --git a/src/postgres/include/utils/rls.h b/src/postgres/include/utils/rls.h deleted file mode 100644 index 75259cc1..00000000 --- a/src/postgres/include/utils/rls.h +++ /dev/null @@ -1,50 +0,0 @@ -/*------------------------------------------------------------------------- - * - * rls.h - * Header file for Row Level Security (RLS) utility commands to be used - * with the rowsecurity feature. - * - * Copyright (c) 2007-2022, PostgreSQL Global Development Group - * - * src/include/utils/rls.h - * - *------------------------------------------------------------------------- - */ -#ifndef RLS_H -#define RLS_H - -/* GUC variable */ -extern PGDLLIMPORT bool row_security; - -/* - * Used by callers of check_enable_rls. - * - * RLS could be completely disabled on the tables involved in the query, - * which is the simple case, or it may depend on the current environment - * (the role which is running the query or the value of the row_security - * GUC), or it might be simply enabled as usual. - * - * If RLS isn't on the table involved then RLS_NONE is returned to indicate - * that we don't need to worry about invalidating the query plan for RLS - * reasons. If RLS is on the table, but we are bypassing it for now, then - * we return RLS_NONE_ENV to indicate that, if the environment changes, - * we need to invalidate and replan. Finally, if RLS should be turned on - * for the query, then we return RLS_ENABLED, which means we also need to - * invalidate if the environment changes. - * - * Note that RLS_ENABLED will also be returned if noError is true - * (indicating that the caller simply want to know if RLS should be applied - * for this user but doesn't want an error thrown if it is; this is used - * by other error cases where we're just trying to decide if data from the - * table should be passed back to the user or not). - */ -enum CheckEnableRlsResult -{ - RLS_NONE, - RLS_NONE_ENV, - RLS_ENABLED -}; - -extern int check_enable_rls(Oid relid, Oid checkAsUser, bool noError); - -#endif /* RLS_H */ diff --git a/src/postgres/include/utils/ruleutils.h b/src/postgres/include/utils/ruleutils.h index 7d489718..b006d9d4 100644 --- a/src/postgres/include/utils/ruleutils.h +++ b/src/postgres/include/utils/ruleutils.h @@ -3,7 +3,7 @@ * ruleutils.h * Declarations for ruleutils.c * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/ruleutils.h @@ -20,9 +20,14 @@ struct Plan; /* avoid including plannodes.h here */ struct PlannedStmt; +/* Flags for pg_get_indexdef_columns_extended() */ +#define RULE_INDEXDEF_PRETTY 0x01 +#define RULE_INDEXDEF_KEYS_ONLY 0x02 /* ignore included attributes */ extern char *pg_get_indexdef_string(Oid indexrelid); extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty); +extern char *pg_get_indexdef_columns_extended(Oid indexrelid, + bits16 flags); extern char *pg_get_querydef(Query *query, bool pretty); extern char *pg_get_partkeydef_columns(Oid relid, bool pretty); diff --git a/src/postgres/include/utils/sharedtuplestore.h b/src/postgres/include/utils/sharedtuplestore.h index 79be13d5..c7075ad0 100644 --- a/src/postgres/include/utils/sharedtuplestore.h +++ b/src/postgres/include/utils/sharedtuplestore.h @@ -3,7 +3,7 @@ * sharedtuplestore.h * Simple mechanism for sharing tuples between backends. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/sharedtuplestore.h diff --git a/src/postgres/include/utils/snapmgr.h b/src/postgres/include/utils/snapmgr.h index 67b217b1..980d37a1 100644 --- a/src/postgres/include/utils/snapmgr.h +++ b/src/postgres/include/utils/snapmgr.h @@ -3,7 +3,7 @@ * snapmgr.h * POSTGRES snapshot manager * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/snapmgr.h @@ -97,11 +97,13 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData; ((snapshot)->snapshot_type == SNAPSHOT_MVCC || \ (snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC) +#ifndef FRONTEND static inline bool OldSnapshotThresholdActive(void) { return old_snapshot_threshold >= 0; } +#endif extern Snapshot GetTransactionSnapshot(void); extern Snapshot GetLatestSnapshot(void); @@ -167,7 +169,7 @@ extern bool XidInMVCCSnapshot(TransactionId xid, Snapshot snapshot); /* Support for catalog timetravel for logical decoding */ struct HTAB; extern struct HTAB *HistoricSnapshotGetTupleCids(void); -extern void SetupHistoricSnapshot(Snapshot snapshot_now, struct HTAB *tuplecids); +extern void SetupHistoricSnapshot(Snapshot historic_snapshot, struct HTAB *tuplecids); extern void TeardownHistoricSnapshot(bool is_error); extern bool HistoricSnapshotActive(void); diff --git a/src/postgres/include/utils/snapshot.h b/src/postgres/include/utils/snapshot.h index 4e96f1af..583a667a 100644 --- a/src/postgres/include/utils/snapshot.h +++ b/src/postgres/include/utils/snapshot.h @@ -3,7 +3,7 @@ * snapshot.h * POSTGRES snapshot definition * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/snapshot.h diff --git a/src/postgres/include/utils/sortsupport.h b/src/postgres/include/utils/sortsupport.h index 8c36cf8d..475ed1d5 100644 --- a/src/postgres/include/utils/sortsupport.h +++ b/src/postgres/include/utils/sortsupport.h @@ -42,7 +42,7 @@ * function for such cases, but probably not any other acceleration method. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/sortsupport.h @@ -372,7 +372,7 @@ ApplySortAbbrevFullComparator(Datum datum1, bool isNull1, /* * Datum comparison functions that we have specialized sort routines for. - * Datatypes that install these as their comparator or abbrevated comparator + * Datatypes that install these as their comparator or abbreviated comparator * are eligible for faster sorting. */ extern int ssup_datum_unsigned_cmp(Datum x, Datum y, SortSupport ssup); diff --git a/src/postgres/include/utils/syscache.h b/src/postgres/include/utils/syscache.h index 4463ea66..67ea6e49 100644 --- a/src/postgres/include/utils/syscache.h +++ b/src/postgres/include/utils/syscache.h @@ -6,7 +6,7 @@ * See also lsyscache.h, which provides convenience routines for * common cache-lookup operations. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/syscache.h @@ -157,6 +157,9 @@ extern HeapTuple SearchSysCacheCopyAttNum(Oid relid, int16 attnum); extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull); +extern Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, + AttrNumber attributeNumber); + extern uint32 GetSysCacheHashValue(int cacheId, Datum key1, Datum key2, Datum key3, Datum key4); diff --git a/src/postgres/include/utils/timeout.h b/src/postgres/include/utils/timeout.h index c068986d..e561a1cd 100644 --- a/src/postgres/include/utils/timeout.h +++ b/src/postgres/include/utils/timeout.h @@ -4,7 +4,7 @@ * Routines to multiplex SIGALRM interrupts for multiple timeout reasons. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/timeout.h diff --git a/src/postgres/include/utils/timestamp.h b/src/postgres/include/utils/timestamp.h index edf3a973..c4dd96c8 100644 --- a/src/postgres/include/utils/timestamp.h +++ b/src/postgres/include/utils/timestamp.h @@ -3,7 +3,7 @@ * timestamp.h * Definitions for the SQL "timestamp" and "interval" types. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/timestamp.h @@ -19,18 +19,46 @@ /* - * Macros for fmgr-callable functions. + * Functions for fmgr-callable functions. * * For Timestamp, we make use of the same support routines as for int64. * Therefore Timestamp is pass-by-reference if and only if int64 is! */ -#define DatumGetTimestamp(X) ((Timestamp) DatumGetInt64(X)) -#define DatumGetTimestampTz(X) ((TimestampTz) DatumGetInt64(X)) -#define DatumGetIntervalP(X) ((Interval *) DatumGetPointer(X)) - -#define TimestampGetDatum(X) Int64GetDatum(X) -#define TimestampTzGetDatum(X) Int64GetDatum(X) -#define IntervalPGetDatum(X) PointerGetDatum(X) +static inline Timestamp +DatumGetTimestamp(Datum X) +{ + return (Timestamp) DatumGetInt64(X); +} + +static inline TimestampTz +DatumGetTimestampTz(Datum X) +{ + return (TimestampTz) DatumGetInt64(X); +} + +static inline Interval * +DatumGetIntervalP(Datum X) +{ + return (Interval *) DatumGetPointer(X); +} + +static inline Datum +TimestampGetDatum(Timestamp X) +{ + return Int64GetDatum(X); +} + +static inline Datum +TimestampTzGetDatum(TimestampTz X) +{ + return Int64GetDatum(X); +} + +static inline Datum +IntervalPGetDatum(const Interval *X) +{ + return PointerGetDatum(X); +} #define PG_GETARG_TIMESTAMP(n) DatumGetTimestamp(PG_GETARG_DATUM(n)) #define PG_GETARG_TIMESTAMPTZ(n) DatumGetTimestampTz(PG_GETARG_DATUM(n)) @@ -53,7 +81,9 @@ #define INTERVAL_PRECISION(t) ((t) & INTERVAL_PRECISION_MASK) #define INTERVAL_RANGE(t) (((t) >> 16) & INTERVAL_RANGE_MASK) +/* Macros for doing timestamp arithmetic without assuming timestamp's units */ #define TimestampTzPlusMilliseconds(tz,ms) ((tz) + ((ms) * (int64) 1000)) +#define TimestampTzPlusSeconds(tz,s) ((tz) + ((s) * (int64) 1000000)) /* Set at postmaster start */ @@ -83,10 +113,10 @@ extern pg_time_t timestamptz_to_time_t(TimestampTz t); extern const char *timestamptz_to_str(TimestampTz t); -extern int tm2timestamp(struct pg_tm *tm, fsec_t fsec, int *tzp, Timestamp *dt); +extern int tm2timestamp(struct pg_tm *tm, fsec_t fsec, int *tzp, Timestamp *result); extern int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm *tm, fsec_t *fsec, const char **tzn, pg_tz *attimezone); -extern void dt2time(Timestamp dt, int *hour, int *min, int *sec, fsec_t *fsec); +extern void dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec); extern void interval2itm(Interval span, struct pg_itm *itm); extern int itm2interval(struct pg_itm *itm, Interval *span); diff --git a/src/postgres/include/utils/tuplesort.h b/src/postgres/include/utils/tuplesort.h index a2eaeabe..af057b63 100644 --- a/src/postgres/include/utils/tuplesort.h +++ b/src/postgres/include/utils/tuplesort.h @@ -11,7 +11,7 @@ * algorithm. Parallel sorts use a variant of this external sort * algorithm, and are typically only used for large amounts of data. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/tuplesort.h @@ -24,7 +24,9 @@ #include "access/itup.h" #include "executor/tuptable.h" #include "storage/dsm.h" +#include "utils/logtape.h" #include "utils/relcache.h" +#include "utils/sortsupport.h" /* @@ -102,6 +104,148 @@ typedef struct TuplesortInstrumentation int64 spaceUsed; /* space consumption, in kB */ } TuplesortInstrumentation; +/* + * The objects we actually sort are SortTuple structs. These contain + * a pointer to the tuple proper (might be a MinimalTuple or IndexTuple), + * which is a separate palloc chunk --- we assume it is just one chunk and + * can be freed by a simple pfree() (except during merge, when we use a + * simple slab allocator). SortTuples also contain the tuple's first key + * column in Datum/nullflag format, and a source/input tape number that + * tracks which tape each heap element/slot belongs to during merging. + * + * Storing the first key column lets us save heap_getattr or index_getattr + * calls during tuple comparisons. We could extract and save all the key + * columns not just the first, but this would increase code complexity and + * overhead, and wouldn't actually save any comparison cycles in the common + * case where the first key determines the comparison result. Note that + * for a pass-by-reference datatype, datum1 points into the "tuple" storage. + * + * There is one special case: when the sort support infrastructure provides an + * "abbreviated key" representation, where the key is (typically) a pass by + * value proxy for a pass by reference type. In this case, the abbreviated key + * is stored in datum1 in place of the actual first key column. + * + * When sorting single Datums, the data value is represented directly by + * datum1/isnull1 for pass by value types (or null values). If the datatype is + * pass-by-reference and isnull1 is false, then "tuple" points to a separately + * palloc'd data value, otherwise "tuple" is NULL. The value of datum1 is then + * either the same pointer as "tuple", or is an abbreviated key value as + * described above. Accordingly, "tuple" is always used in preference to + * datum1 as the authoritative value for pass-by-reference cases. + */ +typedef struct +{ + void *tuple; /* the tuple itself */ + Datum datum1; /* value of first key column */ + bool isnull1; /* is first key column NULL? */ + int srctape; /* source tape number */ +} SortTuple; + +typedef int (*SortTupleComparator) (const SortTuple *a, const SortTuple *b, + Tuplesortstate *state); + +/* + * The public part of a Tuple sort operation state. This data structure + * contains the definition of sort-variant-specific interface methods and + * the part of Tuple sort operation state required by their implementations. + */ +typedef struct +{ + /* + * These function pointers decouple the routines that must know what kind + * of tuple we are sorting from the routines that don't need to know it. + * They are set up by the tuplesort_begin_xxx routines. + * + * Function to compare two tuples; result is per qsort() convention, ie: + * <0, 0, >0 according as ab. The API must match + * qsort_arg_comparator. + */ + SortTupleComparator comparetup; + + /* + * Alter datum1 representation in the SortTuple's array back from the + * abbreviated key to the first column value. + */ + void (*removeabbrev) (Tuplesortstate *state, SortTuple *stups, + int count); + + /* + * Function to write a stored tuple onto tape. The representation of the + * tuple on tape need not be the same as it is in memory. + */ + void (*writetup) (Tuplesortstate *state, LogicalTape *tape, + SortTuple *stup); + + /* + * Function to read a stored tuple from tape back into memory. 'len' is + * the already-read length of the stored tuple. The tuple is allocated + * from the slab memory arena, or is palloc'd, see + * tuplesort_readtup_alloc(). + */ + void (*readtup) (Tuplesortstate *state, SortTuple *stup, + LogicalTape *tape, unsigned int len); + + /* + * Function to do some specific release of resources for the sort variant. + * In particular, this function should free everything stored in the "arg" + * field, which wouldn't be cleared on reset of the Tuple sort memory + * contexts. This can be NULL if nothing specific needs to be done. + */ + void (*freestate) (Tuplesortstate *state); + + /* + * The subsequent fields are used in the implementations of the functions + * above. + */ + MemoryContext maincontext; /* memory context for tuple sort metadata that + * persists across multiple batches */ + MemoryContext sortcontext; /* memory context holding most sort data */ + MemoryContext tuplecontext; /* sub-context of sortcontext for tuple data */ + + /* + * Whether SortTuple's datum1 and isnull1 members are maintained by the + * above routines. If not, some sort specializations are disabled. + */ + bool haveDatum1; + + /* + * The sortKeys variable is used by every case other than the hash index + * case; it is set by tuplesort_begin_xxx. tupDesc is only used by the + * MinimalTuple and CLUSTER routines, though. + */ + int nKeys; /* number of columns in sort key */ + SortSupport sortKeys; /* array of length nKeys */ + + /* + * This variable is shared by the single-key MinimalTuple case and the + * Datum case (which both use qsort_ssup()). Otherwise, it's NULL. The + * presence of a value in this field is also checked by various sort + * specialization functions as an optimization when comparing the leading + * key in a tiebreak situation to determine if there are any subsequent + * keys to sort on. + */ + SortSupport onlyKey; + + int sortopt; /* Bitmask of flags used to setup sort */ + + bool tuples; /* Can SortTuple.tuple ever be set? */ + + void *arg; /* Specific information for the sort variant */ +} TuplesortPublic; + +/* Sort parallel code from state for sort__start probes */ +#define PARALLEL_SORT(coordinate) (coordinate == NULL || \ + (coordinate)->sharedsort == NULL ? 0 : \ + (coordinate)->isWorker ? 1 : 2) + +#define TuplesortstateGetPublic(state) ((TuplesortPublic *) state) + +/* When using this macro, beware of double evaluation of len */ +#define LogicalTapeReadExact(tape, ptr, len) \ + do { \ + if (LogicalTapeRead(tape, ptr, len) != (size_t) (len)) \ + elog(ERROR, "unexpected end of data"); \ + } while(0) /* * We provide multiple interfaces to what is essentially the same code, @@ -205,6 +349,49 @@ typedef struct TuplesortInstrumentation * generated (typically, caller uses a parallel heap scan). */ + +extern Tuplesortstate *tuplesort_begin_common(int workMem, + SortCoordinate coordinate, + int sortopt); +extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound); +extern bool tuplesort_used_bound(Tuplesortstate *state); +extern void tuplesort_puttuple_common(Tuplesortstate *state, + SortTuple *tuple, bool useAbbrev); +extern void tuplesort_performsort(Tuplesortstate *state); +extern bool tuplesort_gettuple_common(Tuplesortstate *state, bool forward, + SortTuple *stup); +extern bool tuplesort_skiptuples(Tuplesortstate *state, int64 ntuples, + bool forward); +extern void tuplesort_end(Tuplesortstate *state); +extern void tuplesort_reset(Tuplesortstate *state); + +extern void tuplesort_get_stats(Tuplesortstate *state, + TuplesortInstrumentation *stats); +extern const char *tuplesort_method_name(TuplesortMethod m); +extern const char *tuplesort_space_type_name(TuplesortSpaceType t); + +extern int tuplesort_merge_order(int64 allowedMem); + +extern Size tuplesort_estimate_shared(int nWorkers); +extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers, + dsm_segment *seg); +extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg); + +/* + * These routines may only be called if TUPLESORT_RANDOMACCESS was specified + * during tuplesort_begin_*. Additionally backwards scan in gettuple/getdatum + * also require TUPLESORT_RANDOMACCESS. Note that parallel sorts do not + * support random access. + */ +extern void tuplesort_rescan(Tuplesortstate *state); +extern void tuplesort_markpos(Tuplesortstate *state); +extern void tuplesort_restorepos(Tuplesortstate *state); + +extern void *tuplesort_readtup_alloc(Tuplesortstate *state, Size tuplen); + + +/* tuplesortvariants.c */ + extern Tuplesortstate *tuplesort_begin_heap(TupleDesc tupDesc, int nkeys, AttrNumber *attNums, Oid *sortOperators, Oid *sortCollations, @@ -238,9 +425,6 @@ extern Tuplesortstate *tuplesort_begin_datum(Oid datumType, int workMem, SortCoordinate coordinate, int sortopt); -extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound); -extern bool tuplesort_used_bound(Tuplesortstate *state); - extern void tuplesort_puttupleslot(Tuplesortstate *state, TupleTableSlot *slot); extern void tuplesort_putheaptuple(Tuplesortstate *state, HeapTuple tup); @@ -250,42 +434,12 @@ extern void tuplesort_putindextuplevalues(Tuplesortstate *state, extern void tuplesort_putdatum(Tuplesortstate *state, Datum val, bool isNull); -extern void tuplesort_performsort(Tuplesortstate *state); - extern bool tuplesort_gettupleslot(Tuplesortstate *state, bool forward, bool copy, TupleTableSlot *slot, Datum *abbrev); extern HeapTuple tuplesort_getheaptuple(Tuplesortstate *state, bool forward); extern IndexTuple tuplesort_getindextuple(Tuplesortstate *state, bool forward); -extern bool tuplesort_getdatum(Tuplesortstate *state, bool forward, +extern bool tuplesort_getdatum(Tuplesortstate *state, bool forward, bool copy, Datum *val, bool *isNull, Datum *abbrev); -extern bool tuplesort_skiptuples(Tuplesortstate *state, int64 ntuples, - bool forward); - -extern void tuplesort_end(Tuplesortstate *state); - -extern void tuplesort_reset(Tuplesortstate *state); - -extern void tuplesort_get_stats(Tuplesortstate *state, - TuplesortInstrumentation *stats); -extern const char *tuplesort_method_name(TuplesortMethod m); -extern const char *tuplesort_space_type_name(TuplesortSpaceType t); - -extern int tuplesort_merge_order(int64 allowedMem); - -extern Size tuplesort_estimate_shared(int nworkers); -extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers, - dsm_segment *seg); -extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg); - -/* - * These routines may only be called if TUPLESORT_RANDOMACCESS was specified - * during tuplesort_begin_*. Additionally backwards scan in gettuple/getdatum - * also require TUPLESORT_RANDOMACCESS. Note that parallel sorts do not - * support random access. - */ -extern void tuplesort_rescan(Tuplesortstate *state); -extern void tuplesort_markpos(Tuplesortstate *state); -extern void tuplesort_restorepos(Tuplesortstate *state); #endif /* TUPLESORT_H */ diff --git a/src/postgres/include/utils/tuplestore.h b/src/postgres/include/utils/tuplestore.h index 01716fb4..36424b80 100644 --- a/src/postgres/include/utils/tuplestore.h +++ b/src/postgres/include/utils/tuplestore.h @@ -21,7 +21,7 @@ * Also, we have changed the API to return tuples in TupleTableSlots, * so that there is a check to prevent attempted access to system columns. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/tuplestore.h diff --git a/src/postgres/include/utils/typcache.h b/src/postgres/include/utils/typcache.h index 431ad7f1..95f3a9ee 100644 --- a/src/postgres/include/utils/typcache.h +++ b/src/postgres/include/utils/typcache.h @@ -6,7 +6,7 @@ * The type cache exists to speed lookup of certain information about data * types that is not directly available from a type's pg_type row. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/typcache.h diff --git a/src/postgres/include/utils/tzparser.h b/src/postgres/include/utils/tzparser.h deleted file mode 100644 index 015b1773..00000000 --- a/src/postgres/include/utils/tzparser.h +++ /dev/null @@ -1,39 +0,0 @@ -/*------------------------------------------------------------------------- - * - * tzparser.h - * Timezone offset file parsing definitions. - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/utils/tzparser.h - * - *------------------------------------------------------------------------- - */ -#ifndef TZPARSER_H -#define TZPARSER_H - -#include "utils/datetime.h" - -/* - * The result of parsing a timezone configuration file is an array of - * these structs, in order by abbrev. We export this because datetime.c - * needs it. - */ -typedef struct tzEntry -{ - /* the actual data */ - char *abbrev; /* TZ abbreviation (downcased) */ - char *zone; /* zone name if dynamic abbrev, else NULL */ - /* for a dynamic abbreviation, offset/is_dst are not used */ - int offset; /* offset in seconds from UTC */ - bool is_dst; /* true if a DST abbreviation */ - /* source information (for error messages) */ - int lineno; - const char *filename; -} tzEntry; - - -extern TimeZoneAbbrevTable *load_tzoffsets(const char *filename); - -#endif /* TZPARSER_H */ diff --git a/src/postgres/include/utils/varlena.h b/src/postgres/include/utils/varlena.h index c45208a2..77f5b247 100644 --- a/src/postgres/include/utils/varlena.h +++ b/src/postgres/include/utils/varlena.h @@ -3,7 +3,7 @@ * varlena.h * Functions for the variable-length built-in types. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/varlena.h @@ -38,4 +38,16 @@ extern text *replace_text_regexp(text *src_text, text *pattern_text, int cflags, Oid collation, int search_start, int n); +typedef struct ClosestMatchState +{ + const char *source; + int min_d; + int max_d; + const char *match; +} ClosestMatchState; + +extern void initClosestMatch(ClosestMatchState *state, const char *source, int max_d); +extern void updateClosestMatch(ClosestMatchState *state, const char *candidate); +extern const char *getClosestMatch(ClosestMatchState *state); + #endif diff --git a/src/postgres/include/utils/wait_event.h b/src/postgres/include/utils/wait_event.h index b578e2ec..518d3b0a 100644 --- a/src/postgres/include/utils/wait_event.h +++ b/src/postgres/include/utils/wait_event.h @@ -2,7 +2,7 @@ * wait_event.h * Definitions related to wait event reporting * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * src/include/utils/wait_event.h * ---------- @@ -42,6 +42,7 @@ typedef enum WAIT_EVENT_CHECKPOINTER_MAIN, WAIT_EVENT_LOGICAL_APPLY_MAIN, WAIT_EVENT_LOGICAL_LAUNCHER_MAIN, + WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN, WAIT_EVENT_RECOVERY_WAL_STREAM, WAIT_EVENT_SYSLOGGER_MAIN, WAIT_EVENT_WAL_RECEIVER_MAIN, @@ -97,14 +98,16 @@ typedef enum WAIT_EVENT_HASH_BUILD_ELECT, WAIT_EVENT_HASH_BUILD_HASH_INNER, WAIT_EVENT_HASH_BUILD_HASH_OUTER, - WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE, WAIT_EVENT_HASH_GROW_BATCHES_DECIDE, WAIT_EVENT_HASH_GROW_BATCHES_ELECT, WAIT_EVENT_HASH_GROW_BATCHES_FINISH, + WAIT_EVENT_HASH_GROW_BATCHES_REALLOCATE, WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION, - WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE, WAIT_EVENT_HASH_GROW_BUCKETS_ELECT, + WAIT_EVENT_HASH_GROW_BUCKETS_REALLOCATE, WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT, + WAIT_EVENT_LOGICAL_APPLY_SEND_DATA, + WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE, WAIT_EVENT_LOGICAL_SYNC_DATA, WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE, WAIT_EVENT_MQ_INTERNAL, @@ -145,6 +148,7 @@ typedef enum WAIT_EVENT_RECOVERY_APPLY_DELAY, WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL, WAIT_EVENT_REGISTER_SYNC_REQUEST, + WAIT_EVENT_SPIN_DELAY, WAIT_EVENT_VACUUM_DELAY, WAIT_EVENT_VACUUM_TRUNCATE } WaitEventTimeout; @@ -178,6 +182,7 @@ typedef enum WAIT_EVENT_DATA_FILE_SYNC, WAIT_EVENT_DATA_FILE_TRUNCATE, WAIT_EVENT_DATA_FILE_WRITE, + WAIT_EVENT_DSM_ALLOCATE, WAIT_EVENT_DSM_FILL_ZERO_WRITE, WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ, WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC, @@ -193,7 +198,7 @@ typedef enum WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE, WAIT_EVENT_LOGICAL_REWRITE_WRITE, WAIT_EVENT_RELATION_MAP_READ, - WAIT_EVENT_RELATION_MAP_SYNC, + WAIT_EVENT_RELATION_MAP_REPLACE, WAIT_EVENT_RELATION_MAP_WRITE, WAIT_EVENT_REORDER_BUFFER_READ, WAIT_EVENT_REORDER_BUFFER_WRITE, diff --git a/src/postgres/include/utils/xml.h b/src/postgres/include/utils/xml.h index 6620a626..224f6d75 100644 --- a/src/postgres/include/utils/xml.h +++ b/src/postgres/include/utils/xml.h @@ -4,7 +4,7 @@ * Declarations for XML data type support. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/utils/xml.h @@ -47,8 +47,17 @@ typedef enum /* struct PgXmlErrorContext is private to xml.c */ typedef struct PgXmlErrorContext PgXmlErrorContext; -#define DatumGetXmlP(X) ((xmltype *) PG_DETOAST_DATUM(X)) -#define XmlPGetDatum(X) PointerGetDatum(X) +static inline xmltype * +DatumGetXmlP(Datum X) +{ + return (xmltype *) PG_DETOAST_DATUM(X); +} + +static inline Datum +XmlPGetDatum(const xmltype *X) +{ + return PointerGetDatum(X); +} #define PG_GETARG_XML_P(n) DatumGetXmlP(PG_GETARG_DATUM(n)) #define PG_RETURN_XML_P(x) PG_RETURN_POINTER(x) @@ -64,11 +73,12 @@ extern xmltype *xmlconcat(List *args); extern xmltype *xmlelement(XmlExpr *xexpr, Datum *named_argvalue, bool *named_argnull, Datum *argvalue, bool *argnull); -extern xmltype *xmlparse(text *data, XmlOptionType xmloption, bool preserve_whitespace); +extern xmltype *xmlparse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace); extern xmltype *xmlpi(const char *target, text *arg, bool arg_is_null, bool *result_is_null); extern xmltype *xmlroot(xmltype *data, text *version, int standalone); extern bool xml_is_document(xmltype *arg); -extern text *xmltotext_with_xmloption(xmltype *data, XmlOptionType xmloption_arg); +extern text *xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, + bool indent); extern char *escape_xml(const char *str); extern char *map_sql_identifier_to_xml_name(const char *ident, bool fully_escaped, bool escape_period); diff --git a/src/postgres/include/varatt.h b/src/postgres/include/varatt.h new file mode 100644 index 00000000..e3487052 --- /dev/null +++ b/src/postgres/include/varatt.h @@ -0,0 +1,358 @@ +/*------------------------------------------------------------------------- + * + * varatt.h + * variable-length datatypes (TOAST support) + * + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1995, Regents of the University of California + * + * src/include/varatt.h + * + *------------------------------------------------------------------------- + */ + +#ifndef VARATT_H +#define VARATT_H + +/* + * struct varatt_external is a traditional "TOAST pointer", that is, the + * information needed to fetch a Datum stored out-of-line in a TOAST table. + * The data is compressed if and only if the external size stored in + * va_extinfo is less than va_rawsize - VARHDRSZ. + * + * This struct must not contain any padding, because we sometimes compare + * these pointers using memcmp. + * + * Note that this information is stored unaligned within actual tuples, so + * you need to memcpy from the tuple into a local struct variable before + * you can look at these fields! (The reason we use memcmp is to avoid + * having to do that just to detect equality of two TOAST pointers...) + */ +typedef struct varatt_external +{ + int32 va_rawsize; /* Original data size (includes header) */ + uint32 va_extinfo; /* External saved size (without header) and + * compression method */ + Oid va_valueid; /* Unique ID of value within TOAST table */ + Oid va_toastrelid; /* RelID of TOAST table containing it */ +} varatt_external; + +/* + * These macros define the "saved size" portion of va_extinfo. Its remaining + * two high-order bits identify the compression method. + */ +#define VARLENA_EXTSIZE_BITS 30 +#define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1) + +/* + * struct varatt_indirect is a "TOAST pointer" representing an out-of-line + * Datum that's stored in memory, not in an external toast relation. + * The creator of such a Datum is entirely responsible that the referenced + * storage survives for as long as referencing pointer Datums can exist. + * + * Note that just as for struct varatt_external, this struct is stored + * unaligned within any containing tuple. + */ +typedef struct varatt_indirect +{ + struct varlena *pointer; /* Pointer to in-memory varlena */ +} varatt_indirect; + +/* + * struct varatt_expanded is a "TOAST pointer" representing an out-of-line + * Datum that is stored in memory, in some type-specific, not necessarily + * physically contiguous format that is convenient for computation not + * storage. APIs for this, in particular the definition of struct + * ExpandedObjectHeader, are in src/include/utils/expandeddatum.h. + * + * Note that just as for struct varatt_external, this struct is stored + * unaligned within any containing tuple. + */ +typedef struct ExpandedObjectHeader ExpandedObjectHeader; + +typedef struct varatt_expanded +{ + ExpandedObjectHeader *eohptr; +} varatt_expanded; + +/* + * Type tag for the various sorts of "TOAST pointer" datums. The peculiar + * value for VARTAG_ONDISK comes from a requirement for on-disk compatibility + * with a previous notion that the tag field was the pointer datum's length. + */ +typedef enum vartag_external +{ + VARTAG_INDIRECT = 1, + VARTAG_EXPANDED_RO = 2, + VARTAG_EXPANDED_RW = 3, + VARTAG_ONDISK = 18 +} vartag_external; + +/* this test relies on the specific tag values above */ +#define VARTAG_IS_EXPANDED(tag) \ + (((tag) & ~1) == VARTAG_EXPANDED_RO) + +#define VARTAG_SIZE(tag) \ + ((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \ + VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \ + (tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \ + (AssertMacro(false), 0)) + +/* + * These structs describe the header of a varlena object that may have been + * TOASTed. Generally, don't reference these structs directly, but use the + * macros below. + * + * We use separate structs for the aligned and unaligned cases because the + * compiler might otherwise think it could generate code that assumes + * alignment while touching fields of a 1-byte-header varlena. + */ +typedef union +{ + struct /* Normal varlena (4-byte length) */ + { + uint32 va_header; + char va_data[FLEXIBLE_ARRAY_MEMBER]; + } va_4byte; + struct /* Compressed-in-line format */ + { + uint32 va_header; + uint32 va_tcinfo; /* Original data size (excludes header) and + * compression method; see va_extinfo */ + char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */ + } va_compressed; +} varattrib_4b; + +typedef struct +{ + uint8 va_header; + char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Data begins here */ +} varattrib_1b; + +/* TOAST pointers are a subset of varattrib_1b with an identifying tag byte */ +typedef struct +{ + uint8 va_header; /* Always 0x80 or 0x01 */ + uint8 va_tag; /* Type of datum */ + char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Type-specific data */ +} varattrib_1b_e; + +/* + * Bit layouts for varlena headers on big-endian machines: + * + * 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G) + * 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G) + * 10000000 1-byte length word, unaligned, TOAST pointer + * 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b) + * + * Bit layouts for varlena headers on little-endian machines: + * + * xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G) + * xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G) + * 00000001 1-byte length word, unaligned, TOAST pointer + * xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b) + * + * The "xxx" bits are the length field (which includes itself in all cases). + * In the big-endian case we mask to extract the length, in the little-endian + * case we shift. Note that in both cases the flag bits are in the physically + * first byte. Also, it is not possible for a 1-byte length word to be zero; + * this lets us disambiguate alignment padding bytes from the start of an + * unaligned datum. (We now *require* pad bytes to be filled with zero!) + * + * In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern + * the specific type and length of the pointer datum. + */ + +/* + * Endian-dependent macros. These are considered internal --- use the + * external macros below instead of using these directly. + * + * Note: IS_1B is true for external toast records but VARSIZE_1B will return 0 + * for such records. Hence you should usually check for IS_EXTERNAL before + * checking for IS_1B. + */ + +#ifdef WORDS_BIGENDIAN + +#define VARATT_IS_4B(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00) +#define VARATT_IS_4B_U(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00) +#define VARATT_IS_4B_C(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40) +#define VARATT_IS_1B(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80) +#define VARATT_IS_1B_E(PTR) \ + ((((varattrib_1b *) (PTR))->va_header) == 0x80) +#define VARATT_NOT_PAD_BYTE(PTR) \ + (*((uint8 *) (PTR)) != 0) + +/* VARSIZE_4B() should only be used on known-aligned data */ +#define VARSIZE_4B(PTR) \ + (((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF) +#define VARSIZE_1B(PTR) \ + (((varattrib_1b *) (PTR))->va_header & 0x7F) +#define VARTAG_1B_E(PTR) \ + (((varattrib_1b_e *) (PTR))->va_tag) + +#define SET_VARSIZE_4B(PTR,len) \ + (((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF) +#define SET_VARSIZE_4B_C(PTR,len) \ + (((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000) +#define SET_VARSIZE_1B(PTR,len) \ + (((varattrib_1b *) (PTR))->va_header = (len) | 0x80) +#define SET_VARTAG_1B_E(PTR,tag) \ + (((varattrib_1b_e *) (PTR))->va_header = 0x80, \ + ((varattrib_1b_e *) (PTR))->va_tag = (tag)) + +#else /* !WORDS_BIGENDIAN */ + +#define VARATT_IS_4B(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00) +#define VARATT_IS_4B_U(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00) +#define VARATT_IS_4B_C(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02) +#define VARATT_IS_1B(PTR) \ + ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01) +#define VARATT_IS_1B_E(PTR) \ + ((((varattrib_1b *) (PTR))->va_header) == 0x01) +#define VARATT_NOT_PAD_BYTE(PTR) \ + (*((uint8 *) (PTR)) != 0) + +/* VARSIZE_4B() should only be used on known-aligned data */ +#define VARSIZE_4B(PTR) \ + ((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF) +#define VARSIZE_1B(PTR) \ + ((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F) +#define VARTAG_1B_E(PTR) \ + (((varattrib_1b_e *) (PTR))->va_tag) + +#define SET_VARSIZE_4B(PTR,len) \ + (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2)) +#define SET_VARSIZE_4B_C(PTR,len) \ + (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02) +#define SET_VARSIZE_1B(PTR,len) \ + (((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01) +#define SET_VARTAG_1B_E(PTR,tag) \ + (((varattrib_1b_e *) (PTR))->va_header = 0x01, \ + ((varattrib_1b_e *) (PTR))->va_tag = (tag)) + +#endif /* WORDS_BIGENDIAN */ + +#define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data) +#define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data) +#define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data) +#define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data) + +/* + * Externally visible TOAST macros begin here. + */ + +#define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data) +#define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data) +#define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data) + +#define VARATT_SHORT_MAX 0x7F +#define VARATT_CAN_MAKE_SHORT(PTR) \ + (VARATT_IS_4B_U(PTR) && \ + (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX) +#define VARATT_CONVERTED_SHORT_SIZE(PTR) \ + (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) + +/* + * In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(), + * VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call + * PG_DETOAST_DATUM(), VARDATA() and VARSIZE(). Directly fetching an int16, + * int32 or wider field in the struct representing the datum layout requires + * aligned data. memcpy() is alignment-oblivious, as are most operations on + * datatypes, such as text, whose layout struct contains only char fields. + * + * Code assembling a new datum should call VARDATA() and SET_VARSIZE(). + * (Datums begin life untoasted.) + * + * Other macros here should usually be used only by tuple assembly/disassembly + * code and code that specifically wants to work with still-toasted Datums. + */ +#define VARDATA(PTR) VARDATA_4B(PTR) +#define VARSIZE(PTR) VARSIZE_4B(PTR) + +#define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR) +#define VARDATA_SHORT(PTR) VARDATA_1B(PTR) + +#define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR) +#define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR))) +#define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR) + +#define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR) +#define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR) +#define VARATT_IS_EXTERNAL_ONDISK(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK) +#define VARATT_IS_EXTERNAL_INDIRECT(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT) +#define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO) +#define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW) +#define VARATT_IS_EXTERNAL_EXPANDED(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR))) +#define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \ + (VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR))) +#define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR) +#define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR)) + +#define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len) +#define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len) +#define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len) + +#define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag) + +#define VARSIZE_ANY(PTR) \ + (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \ + (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \ + VARSIZE_4B(PTR))) + +/* Size of a varlena data, excluding header */ +#define VARSIZE_ANY_EXHDR(PTR) \ + (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \ + (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \ + VARSIZE_4B(PTR)-VARHDRSZ)) + +/* caution: this will not work on an external or compressed-in-line Datum */ +/* caution: this will return a possibly unaligned pointer */ +#define VARDATA_ANY(PTR) \ + (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR)) + +/* Decompressed size and compression method of a compressed-in-line Datum */ +#define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \ + (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK) +#define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \ + (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS) + +/* Same for external Datums; but note argument is a struct varatt_external */ +#define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \ + ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK) +#define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \ + ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS) + +#define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \ + do { \ + Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \ + (cm) == TOAST_LZ4_COMPRESSION_ID); \ + ((toast_pointer).va_extinfo = \ + (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \ + } while (0) + +/* + * Testing whether an externally-stored value is compressed now requires + * comparing size stored in va_extinfo (the actual length of the external data) + * to rawsize (the original uncompressed datum's size). The latter includes + * VARHDRSZ overhead, the former doesn't. We never use compression unless it + * actually saves space, so we expect either equality or less-than. + */ +#define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \ + (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \ + (toast_pointer).va_rawsize - VARHDRSZ) + +#endif diff --git a/src/postgres/src_backend_catalog_namespace.c b/src/postgres/src_backend_catalog_namespace.c index 9d6e7533..8f652a32 100644 --- a/src/postgres/src_backend_catalog_namespace.c +++ b/src/postgres/src_backend_catalog_namespace.c @@ -16,7 +16,7 @@ * and implementing search-path-controlled searches. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -35,6 +35,7 @@ #include "catalog/pg_authid.h" #include "catalog/pg_collation.h" #include "catalog/pg_conversion.h" +#include "catalog/pg_database.h" #include "catalog/pg_namespace.h" #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" @@ -58,7 +59,7 @@ #include "utils/acl.h" #include "utils/builtins.h" #include "utils/catcache.h" -#include "utils/guc.h" +#include "utils/guc_hooks.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/memutils.h" @@ -869,6 +870,10 @@ NameListToString(List *names) /* * PushOverrideSearchPath - temporarily override the search path * + * Do not use this function; almost any usage introduces a security + * vulnerability. It exists for the benefit of legacy code running in + * non-security-sensitive environments. + * * We allow nested overrides, hence the push/pop terminology. The GUC * search_path variable is ignored while an override is active. * diff --git a/src/postgres/src_backend_catalog_pg_proc.c b/src/postgres/src_backend_catalog_pg_proc.c index b2f8df0b..ecc5c06e 100644 --- a/src/postgres/src_backend_catalog_pg_proc.c +++ b/src/postgres/src_backend_catalog_pg_proc.c @@ -9,7 +9,7 @@ * pg_proc.c * routines to support manipulation of the pg_proc relation * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_backend_commands_define.c b/src/postgres/src_backend_commands_define.c index 57e41831..4f0ea4f0 100644 --- a/src/postgres/src_backend_commands_define.c +++ b/src/postgres/src_backend_commands_define.c @@ -10,7 +10,7 @@ * Support routines for various kinds of object creation. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_backend_nodes_bitmapset.c b/src/postgres/src_backend_nodes_bitmapset.c index b6c861a8..8c5147af 100644 --- a/src/postgres/src_backend_nodes_bitmapset.c +++ b/src/postgres/src_backend_nodes_bitmapset.c @@ -2,8 +2,6 @@ * Symbols referenced in this file: * - bms_copy * - bms_equal - * - bms_is_empty - * - bms_first_member * - bms_free * - bms_next_member * - bms_num_members @@ -17,13 +15,11 @@ * * A bitmap set can represent any set of nonnegative integers, although * it is mainly intended for sets where the maximum value is not large, - * say at most a few hundred. By convention, a NULL pointer is always - * accepted by all operations to represent the empty set. (But beware - * that this is not the only representation of the empty set. Use - * bms_is_empty() in preference to testing for NULL.) + * say at most a few hundred. By convention, we always represent the + * empty set by a NULL pointer. * * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/backend/nodes/bitmapset.c @@ -78,6 +74,8 @@ #error "invalid BITS_PER_BITMAPWORD" #endif +static bool bms_is_empty_internal(const Bitmapset *a); + /* * bms_copy - make a palloc'd copy of a bitmapset @@ -116,10 +114,10 @@ bms_equal(const Bitmapset *a, const Bitmapset *b) { if (b == NULL) return true; - return bms_is_empty(b); + return false; } else if (b == NULL) - return bms_is_empty(a); + return false; /* Identify shorter and longer input */ if (a->nwords <= b->nwords) { @@ -290,28 +288,13 @@ bms_num_members(const Bitmapset *a) /* - * bms_is_empty - is a set empty? + * bms_is_empty_internal - is a set empty? * - * This is even faster than bms_membership(). + * This is now used only locally, to detect cases where a function has + * computed an empty set that we must now get rid of. Hence, we can + * assume the input isn't NULL. */ -bool -bms_is_empty(const Bitmapset *a) -{ - int nwords; - int wordnum; - - if (a == NULL) - return true; - nwords = a->nwords; - for (wordnum = 0; wordnum < nwords; wordnum++) - { - bitmapword w = a->words[wordnum]; - if (w != 0) - return false; - } - return true; -} /* @@ -370,48 +353,6 @@ bms_is_empty(const Bitmapset *a) */ -/* - * bms_first_member - find and remove first member of a set - * - * Returns -1 if set is empty. NB: set is destructively modified! - * - * This is intended as support for iterating through the members of a set. - * The typical pattern is - * - * while ((x = bms_first_member(inputset)) >= 0) - * process member x; - * - * CAUTION: this destroys the content of "inputset". If the set must - * not be modified, use bms_next_member instead. - */ -int -bms_first_member(Bitmapset *a) -{ - int nwords; - int wordnum; - - if (a == NULL) - return -1; - nwords = a->nwords; - for (wordnum = 0; wordnum < nwords; wordnum++) - { - bitmapword w = a->words[wordnum]; - - if (w != 0) - { - int result; - - w = RIGHTMOST_ONE(w); - a->words[wordnum] &= ~w; - - result = wordnum * BITS_PER_BITMAPWORD; - result += bmw_rightmost_one_pos(w); - return result; - } - } - return -1; -} - /* * bms_next_member - find next member of a set * diff --git a/src/postgres/src_backend_nodes_copyfuncs.c b/src/postgres/src_backend_nodes_copyfuncs.c index 9ee90c65..91e60af7 100644 --- a/src/postgres/src_backend_nodes_copyfuncs.c +++ b/src/postgres/src_backend_nodes_copyfuncs.c @@ -1,305 +1,10 @@ /*-------------------------------------------------------------------- * Symbols referenced in this file: * - copyObjectImpl - * - _copyPlannedStmt - * - _copyPlan - * - CopyPlanFields - * - _copyResult - * - _copyProjectSet - * - _copyModifyTable - * - _copyAppend - * - _copyMergeAppend - * - _copyRecursiveUnion - * - _copyBitmapAnd - * - _copyBitmapOr - * - _copyScan - * - CopyScanFields - * - _copyGather - * - _copyGatherMerge - * - _copySeqScan - * - _copySampleScan - * - _copyIndexScan - * - _copyIndexOnlyScan - * - _copyBitmapIndexScan - * - _copyBitmapHeapScan - * - _copyTidScan - * - _copyTidRangeScan - * - _copySubqueryScan - * - _copyFunctionScan - * - _copyTableFuncScan - * - _copyValuesScan - * - _copyCteScan - * - _copyNamedTuplestoreScan - * - _copyWorkTableScan - * - _copyForeignScan - * - _copyCustomScan - * - _copyJoin - * - CopyJoinFields - * - _copyNestLoop - * - _copyMergeJoin - * - _copyHashJoin - * - _copyMaterial - * - _copyMemoize - * - _copySort - * - CopySortFields - * - _copyIncrementalSort - * - _copyGroup - * - _copyAgg - * - _copyWindowAgg - * - _copyUnique - * - _copyHash - * - _copySetOp - * - _copyLockRows - * - _copyLimit - * - _copyNestLoopParam - * - _copyPlanRowMark - * - _copyPartitionPruneInfo - * - _copyPartitionedRelPruneInfo - * - _copyPartitionPruneStepOp - * - _copyPartitionPruneStepCombine - * - _copyPlanInvalItem - * - _copyAlias - * - _copyRangeVar - * - _copyTableFunc - * - _copyIntoClause - * - _copyVar * - _copyConst - * - _copyParam - * - _copyAggref - * - _copyGroupingFunc - * - _copyWindowFunc - * - _copySubscriptingRef - * - _copyFuncExpr - * - _copyNamedArgExpr - * - _copyOpExpr - * - _copyDistinctExpr - * - _copyNullIfExpr - * - _copyScalarArrayOpExpr - * - _copyBoolExpr - * - _copySubLink - * - _copySubPlan - * - _copyAlternativeSubPlan - * - _copyFieldSelect - * - _copyFieldStore - * - _copyRelabelType - * - _copyCoerceViaIO - * - _copyArrayCoerceExpr - * - _copyConvertRowtypeExpr - * - _copyCollateExpr - * - _copyCaseExpr - * - _copyCaseWhen - * - _copyCaseTestExpr - * - _copyArrayExpr - * - _copyRowExpr - * - _copyRowCompareExpr - * - _copyCoalesceExpr - * - _copyMinMaxExpr - * - _copySQLValueFunction - * - _copyXmlExpr - * - _copyNullTest - * - _copyBooleanTest - * - _copyCoerceToDomain - * - _copyCoerceToDomainValue - * - _copySetToDefault - * - _copyCurrentOfExpr - * - _copyNextValueExpr - * - _copyInferenceElem - * - _copyTargetEntry - * - _copyRangeTblRef - * - _copyJoinExpr - * - _copyFromExpr - * - _copyOnConflictExpr - * - _copyPathKey - * - _copyRestrictInfo - * - _copyPlaceHolderVar - * - _copySpecialJoinInfo - * - _copyAppendRelInfo - * - _copyPlaceHolderInfo - * - _copyInteger - * - _copyFloat - * - _copyBoolean - * - _copyString - * - _copyBitString - * - _copyExtensibleNode - * - _copyQuery - * - _copyRawStmt - * - _copyInsertStmt - * - _copyDeleteStmt - * - _copyUpdateStmt - * - _copyMergeStmt - * - _copySelectStmt - * - _copySetOperationStmt - * - _copyReturnStmt - * - _copyPLAssignStmt - * - _copyAlterTableStmt - * - _copyAlterTableCmd - * - _copyAlterCollationStmt - * - _copyAlterDomainStmt - * - _copyGrantStmt - * - _copyGrantRoleStmt - * - _copyAlterDefaultPrivilegesStmt - * - _copyDeclareCursorStmt - * - _copyClosePortalStmt - * - _copyCallStmt - * - _copyClusterStmt - * - _copyCopyStmt - * - _copyCreateStmt - * - CopyCreateStmtFields - * - _copyTableLikeClause - * - _copyDefineStmt - * - _copyDropStmt - * - _copyTruncateStmt - * - _copyCommentStmt - * - _copySecLabelStmt - * - _copyFetchStmt - * - _copyIndexStmt - * - _copyCreateStatsStmt - * - _copyAlterStatsStmt - * - _copyCreateFunctionStmt - * - _copyFunctionParameter - * - _copyAlterFunctionStmt - * - _copyDoStmt - * - _copyRenameStmt - * - _copyAlterObjectDependsStmt - * - _copyAlterObjectSchemaStmt - * - _copyAlterOwnerStmt - * - _copyAlterOperatorStmt - * - _copyAlterTypeStmt - * - _copyRuleStmt - * - _copyNotifyStmt - * - _copyListenStmt - * - _copyUnlistenStmt - * - _copyTransactionStmt - * - _copyCompositeTypeStmt - * - _copyCreateEnumStmt - * - _copyCreateRangeStmt - * - _copyAlterEnumStmt - * - _copyViewStmt - * - _copyLoadStmt - * - _copyCreateDomainStmt - * - _copyCreateOpClassStmt - * - _copyCreateOpClassItem - * - _copyCreateOpFamilyStmt - * - _copyAlterOpFamilyStmt - * - _copyCreatedbStmt - * - _copyAlterDatabaseStmt - * - _copyAlterDatabaseRefreshCollStmt - * - _copyAlterDatabaseSetStmt - * - _copyDropdbStmt - * - _copyVacuumStmt - * - _copyVacuumRelation - * - _copyExplainStmt - * - _copyCreateTableAsStmt - * - _copyRefreshMatViewStmt - * - _copyReplicaIdentityStmt - * - _copyAlterSystemStmt - * - _copyCreateSeqStmt - * - _copyAlterSeqStmt - * - _copyVariableSetStmt - * - _copyVariableShowStmt - * - _copyDiscardStmt - * - _copyCreateTableSpaceStmt - * - _copyDropTableSpaceStmt - * - _copyAlterTableSpaceOptionsStmt - * - _copyAlterTableMoveAllStmt - * - _copyCreateExtensionStmt - * - _copyAlterExtensionStmt - * - _copyAlterExtensionContentsStmt - * - _copyCreateFdwStmt - * - _copyAlterFdwStmt - * - _copyCreateForeignServerStmt - * - _copyAlterForeignServerStmt - * - _copyCreateUserMappingStmt - * - _copyAlterUserMappingStmt - * - _copyDropUserMappingStmt - * - _copyCreateForeignTableStmt - * - _copyImportForeignSchemaStmt - * - _copyCreateTransformStmt - * - _copyCreateAmStmt - * - _copyCreateTrigStmt - * - _copyCreateEventTrigStmt - * - _copyAlterEventTrigStmt - * - _copyCreatePLangStmt - * - _copyCreateRoleStmt - * - _copyAlterRoleStmt - * - _copyAlterRoleSetStmt - * - _copyDropRoleStmt - * - _copyLockStmt - * - _copyConstraintsSetStmt - * - _copyReindexStmt - * - _copyCreateSchemaStmt - * - _copyCreateConversionStmt - * - _copyCreateCastStmt - * - _copyPrepareStmt - * - _copyExecuteStmt - * - _copyDeallocateStmt - * - _copyDropOwnedStmt - * - _copyReassignOwnedStmt - * - _copyAlterTSDictionaryStmt - * - _copyAlterTSConfigurationStmt - * - _copyCreatePolicyStmt - * - _copyAlterPolicyStmt - * - _copyCreatePublicationStmt - * - _copyAlterPublicationStmt - * - _copyCreateSubscriptionStmt - * - _copyAlterSubscriptionStmt - * - _copyDropSubscriptionStmt - * - _copyA_Expr - * - _copyColumnRef - * - _copyParamRef * - _copyA_Const - * - _copyFuncCall - * - _copyA_Star - * - _copyA_Indices - * - _copyA_Indirection - * - _copyA_ArrayExpr - * - _copyResTarget - * - _copyMultiAssignRef - * - _copyTypeCast - * - _copyCollateClause - * - _copySortBy - * - _copyWindowDef - * - _copyRangeSubselect - * - _copyRangeFunction - * - _copyRangeTableSample - * - _copyRangeTableFunc - * - _copyRangeTableFuncCol - * - _copyTypeName - * - _copyIndexElem - * - _copyStatsElem - * - _copyColumnDef - * - _copyConstraint - * - _copyDefElem - * - _copyLockingClause - * - _copyRangeTblEntry - * - _copyRangeTblFunction - * - _copyTableSampleClause - * - _copyWithCheckOption - * - _copySortGroupClause - * - _copyGroupingSet - * - _copyWindowClause - * - _copyRowMarkClause - * - _copyWithClause - * - _copyInferClause - * - _copyOnConflictClause - * - _copyCTESearchClause - * - _copyCTECycleClause - * - _copyCommonTableExpr - * - _copyMergeWhenClause - * - _copyMergeAction - * - _copyObjectWithArgs - * - _copyAccessPriv - * - _copyXmlSerialize - * - _copyRoleSpec - * - _copyTriggerTransition - * - _copyPartitionElem - * - _copyPartitionSpec - * - _copyPartitionBoundSpec - * - _copyPartitionRangeDatum - * - _copyPartitionCmd - * - _copyPublicationObject - * - _copyPublicationTable - * - _copyForeignKeyCacheInfo + * - _copyBitmapset + * - _copyExtensibleNode *-------------------------------------------------------------------- */ @@ -308,15 +13,8 @@ * copyfuncs.c * Copy functions for Postgres tree nodes. * - * NOTE: we currently support copying all node types found in parse and - * plan trees. We do not support copying executor state trees; there - * is no need for that, and no point in maintaining all the code that - * would be needed. We also do not support copying Path trees, mainly - * because the circular linkages between RelOptInfo and Path nodes can't - * be handled easily in a simple depth-first traversal. * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -328,11 +26,7 @@ #include "postgres.h" #include "miscadmin.h" -#include "nodes/extensible.h" -#include "nodes/pathnodes.h" -#include "nodes/plannodes.h" #include "utils/datum.h" -#include "utils/rel.h" /* @@ -378,5946 +72,146 @@ (newnode->fldname = from->fldname) -/* **************************************************************** - * plannodes.h copy functions - * **************************************************************** - */ - -/* - * _copyPlannedStmt - */ -static PlannedStmt * -_copyPlannedStmt(const PlannedStmt *from) -{ - PlannedStmt *newnode = makeNode(PlannedStmt); - - COPY_SCALAR_FIELD(commandType); - COPY_SCALAR_FIELD(queryId); - COPY_SCALAR_FIELD(hasReturning); - COPY_SCALAR_FIELD(hasModifyingCTE); - COPY_SCALAR_FIELD(canSetTag); - COPY_SCALAR_FIELD(transientPlan); - COPY_SCALAR_FIELD(dependsOnRole); - COPY_SCALAR_FIELD(parallelModeNeeded); - COPY_SCALAR_FIELD(jitFlags); - COPY_NODE_FIELD(planTree); - COPY_NODE_FIELD(rtable); - COPY_NODE_FIELD(resultRelations); - COPY_NODE_FIELD(appendRelations); - COPY_NODE_FIELD(subplans); - COPY_BITMAPSET_FIELD(rewindPlanIDs); - COPY_NODE_FIELD(rowMarks); - COPY_NODE_FIELD(relationOids); - COPY_NODE_FIELD(invalItems); - COPY_NODE_FIELD(paramExecTypes); - COPY_NODE_FIELD(utilityStmt); - COPY_LOCATION_FIELD(stmt_location); - COPY_SCALAR_FIELD(stmt_len); - - return newnode; -} - -/* - * CopyPlanFields - * - * This function copies the fields of the Plan node. It is used by - * all the copy functions for classes which inherit from Plan. - */ -static void -CopyPlanFields(const Plan *from, Plan *newnode) -{ - COPY_SCALAR_FIELD(startup_cost); - COPY_SCALAR_FIELD(total_cost); - COPY_SCALAR_FIELD(plan_rows); - COPY_SCALAR_FIELD(plan_width); - COPY_SCALAR_FIELD(parallel_aware); - COPY_SCALAR_FIELD(parallel_safe); - COPY_SCALAR_FIELD(async_capable); - COPY_SCALAR_FIELD(plan_node_id); - COPY_NODE_FIELD(targetlist); - COPY_NODE_FIELD(qual); - COPY_NODE_FIELD(lefttree); - COPY_NODE_FIELD(righttree); - COPY_NODE_FIELD(initPlan); - COPY_BITMAPSET_FIELD(extParam); - COPY_BITMAPSET_FIELD(allParam); -} - -/* - * _copyPlan - */ -static Plan * -_copyPlan(const Plan *from) -{ - Plan *newnode = makeNode(Plan); - - /* - * copy node superclass fields - */ - CopyPlanFields(from, newnode); - - return newnode; -} - - -/* - * _copyResult - */ -static Result * -_copyResult(const Result *from) -{ - Result *newnode = makeNode(Result); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(resconstantqual); - - return newnode; -} - -/* - * _copyProjectSet - */ -static ProjectSet * -_copyProjectSet(const ProjectSet *from) -{ - ProjectSet *newnode = makeNode(ProjectSet); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - return newnode; -} - -/* - * _copyModifyTable - */ -static ModifyTable * -_copyModifyTable(const ModifyTable *from) -{ - ModifyTable *newnode = makeNode(ModifyTable); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(operation); - COPY_SCALAR_FIELD(canSetTag); - COPY_SCALAR_FIELD(nominalRelation); - COPY_SCALAR_FIELD(rootRelation); - COPY_SCALAR_FIELD(partColsUpdated); - COPY_NODE_FIELD(resultRelations); - COPY_NODE_FIELD(updateColnosLists); - COPY_NODE_FIELD(withCheckOptionLists); - COPY_NODE_FIELD(returningLists); - COPY_NODE_FIELD(fdwPrivLists); - COPY_BITMAPSET_FIELD(fdwDirectModifyPlans); - COPY_NODE_FIELD(rowMarks); - COPY_SCALAR_FIELD(epqParam); - COPY_SCALAR_FIELD(onConflictAction); - COPY_NODE_FIELD(arbiterIndexes); - COPY_NODE_FIELD(onConflictSet); - COPY_NODE_FIELD(onConflictCols); - COPY_NODE_FIELD(onConflictWhere); - COPY_SCALAR_FIELD(exclRelRTI); - COPY_NODE_FIELD(exclRelTlist); - COPY_NODE_FIELD(mergeActionLists); +#include "copyfuncs.funcs.c" - return newnode; -} /* - * _copyAppend + * Support functions for nodes with custom_copy_equal attribute */ -static Append * -_copyAppend(const Append *from) -{ - Append *newnode = makeNode(Append); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_BITMAPSET_FIELD(apprelids); - COPY_NODE_FIELD(appendplans); - COPY_SCALAR_FIELD(nasyncplans); - COPY_SCALAR_FIELD(first_partial_plan); - COPY_NODE_FIELD(part_prune_info); - - return newnode; -} -/* - * _copyMergeAppend - */ -static MergeAppend * -_copyMergeAppend(const MergeAppend *from) +static Const * +_copyConst(const Const *from) { - MergeAppend *newnode = makeNode(MergeAppend); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_BITMAPSET_FIELD(apprelids); - COPY_NODE_FIELD(mergeplans); - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); - COPY_NODE_FIELD(part_prune_info); - - return newnode; -} + Const *newnode = makeNode(Const); -/* - * _copyRecursiveUnion - */ -static RecursiveUnion * -_copyRecursiveUnion(const RecursiveUnion *from) -{ - RecursiveUnion *newnode = makeNode(RecursiveUnion); + COPY_SCALAR_FIELD(consttype); + COPY_SCALAR_FIELD(consttypmod); + COPY_SCALAR_FIELD(constcollid); + COPY_SCALAR_FIELD(constlen); - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); + if (from->constbyval || from->constisnull) + { + /* + * passed by value so just copy the datum. Also, don't try to copy + * struct when value is null! + */ + newnode->constvalue = from->constvalue; + } + else + { + /* + * passed by reference. We need a palloc'd copy. + */ + newnode->constvalue = datumCopy(from->constvalue, + from->constbyval, + from->constlen); + } - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(wtParam); - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); - COPY_SCALAR_FIELD(numGroups); + COPY_SCALAR_FIELD(constisnull); + COPY_SCALAR_FIELD(constbyval); + COPY_LOCATION_FIELD(location); return newnode; } -/* - * _copyBitmapAnd - */ -static BitmapAnd * -_copyBitmapAnd(const BitmapAnd *from) +static A_Const * +_copyA_Const(const A_Const *from) { - BitmapAnd *newnode = makeNode(BitmapAnd); + A_Const *newnode = makeNode(A_Const); - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); + COPY_SCALAR_FIELD(isnull); + if (!from->isnull) + { + /* This part must duplicate other _copy*() functions. */ + COPY_SCALAR_FIELD(val.node.type); + switch (nodeTag(&from->val)) + { + case T_Integer: + COPY_SCALAR_FIELD(val.ival.ival); + break; + case T_Float: + COPY_STRING_FIELD(val.fval.fval); + break; + case T_Boolean: + COPY_SCALAR_FIELD(val.boolval.boolval); + break; + case T_String: + COPY_STRING_FIELD(val.sval.sval); + break; + case T_BitString: + COPY_STRING_FIELD(val.bsval.bsval); + break; + default: + elog(ERROR, "unrecognized node type: %d", + (int) nodeTag(&from->val)); + break; + } + } - /* - * copy remainder of node - */ - COPY_NODE_FIELD(bitmapplans); + COPY_LOCATION_FIELD(location); return newnode; } -/* - * _copyBitmapOr - */ -static BitmapOr * -_copyBitmapOr(const BitmapOr *from) +static ExtensibleNode * +_copyExtensibleNode(const ExtensibleNode *from) { - BitmapOr *newnode = makeNode(BitmapOr); + ExtensibleNode *newnode; + const ExtensibleNodeMethods *methods; - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); + methods = GetExtensibleNodeMethods(from->extnodename, false); + newnode = (ExtensibleNode *) newNode(methods->node_size, + T_ExtensibleNode); + COPY_STRING_FIELD(extnodename); - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(isshared); - COPY_NODE_FIELD(bitmapplans); + /* copy the private fields */ + methods->nodeCopy(newnode, from); return newnode; } -/* - * _copyGather - */ -static Gather * -_copyGather(const Gather *from) +static Bitmapset * +_copyBitmapset(const Bitmapset *from) { - Gather *newnode = makeNode(Gather); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(num_workers); - COPY_SCALAR_FIELD(rescan_param); - COPY_SCALAR_FIELD(single_copy); - COPY_SCALAR_FIELD(invisible); - COPY_BITMAPSET_FIELD(initParam); - - return newnode; + return bms_copy(from); } -/* - * _copyGatherMerge - */ -static GatherMerge * -_copyGatherMerge(const GatherMerge *from) -{ - GatherMerge *newnode = makeNode(GatherMerge); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(num_workers); - COPY_SCALAR_FIELD(rescan_param); - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); - COPY_BITMAPSET_FIELD(initParam); - - return newnode; -} /* - * CopyScanFields + * copyObjectImpl -- implementation of copyObject(); see nodes/nodes.h * - * This function copies the fields of the Scan node. It is used by - * all the copy functions for classes which inherit from Scan. - */ -static void -CopyScanFields(const Scan *from, Scan *newnode) -{ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(scanrelid); -} - -/* - * _copyScan - */ -static Scan * -_copyScan(const Scan *from) -{ - Scan *newnode = makeNode(Scan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - return newnode; -} - -/* - * _copySeqScan - */ -static SeqScan * -_copySeqScan(const SeqScan *from) -{ - SeqScan *newnode = makeNode(SeqScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - return newnode; -} - -/* - * _copySampleScan - */ -static SampleScan * -_copySampleScan(const SampleScan *from) -{ - SampleScan *newnode = makeNode(SampleScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(tablesample); - - return newnode; -} - -/* - * _copyIndexScan - */ -static IndexScan * -_copyIndexScan(const IndexScan *from) -{ - IndexScan *newnode = makeNode(IndexScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(indexid); - COPY_NODE_FIELD(indexqual); - COPY_NODE_FIELD(indexqualorig); - COPY_NODE_FIELD(indexorderby); - COPY_NODE_FIELD(indexorderbyorig); - COPY_NODE_FIELD(indexorderbyops); - COPY_SCALAR_FIELD(indexorderdir); - - return newnode; -} - -/* - * _copyIndexOnlyScan - */ -static IndexOnlyScan * -_copyIndexOnlyScan(const IndexOnlyScan *from) -{ - IndexOnlyScan *newnode = makeNode(IndexOnlyScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(indexid); - COPY_NODE_FIELD(indexqual); - COPY_NODE_FIELD(recheckqual); - COPY_NODE_FIELD(indexorderby); - COPY_NODE_FIELD(indextlist); - COPY_SCALAR_FIELD(indexorderdir); - - return newnode; -} - -/* - * _copyBitmapIndexScan - */ -static BitmapIndexScan * -_copyBitmapIndexScan(const BitmapIndexScan *from) -{ - BitmapIndexScan *newnode = makeNode(BitmapIndexScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(indexid); - COPY_SCALAR_FIELD(isshared); - COPY_NODE_FIELD(indexqual); - COPY_NODE_FIELD(indexqualorig); - - return newnode; -} - -/* - * _copyBitmapHeapScan - */ -static BitmapHeapScan * -_copyBitmapHeapScan(const BitmapHeapScan *from) -{ - BitmapHeapScan *newnode = makeNode(BitmapHeapScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(bitmapqualorig); - - return newnode; -} - -/* - * _copyTidScan - */ -static TidScan * -_copyTidScan(const TidScan *from) -{ - TidScan *newnode = makeNode(TidScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(tidquals); - - return newnode; -} - -/* - * _copyTidRangeScan + * Create a copy of a Node tree or list. This is a "deep" copy: all + * substructure is copied too, recursively. */ -static TidRangeScan * -_copyTidRangeScan(const TidRangeScan *from) +void * +copyObjectImpl(const void *from) { - TidRangeScan *newnode = makeNode(TidRangeScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(tidrangequals); - - return newnode; -} + void *retval; -/* - * _copySubqueryScan - */ -static SubqueryScan * -_copySubqueryScan(const SubqueryScan *from) -{ - SubqueryScan *newnode = makeNode(SubqueryScan); + if (from == NULL) + return NULL; - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); + /* Guard against stack overflow due to overly complex expressions */ + check_stack_depth(); - /* - * copy remainder of node - */ - COPY_NODE_FIELD(subplan); - COPY_SCALAR_FIELD(scanstatus); + switch (nodeTag(from)) + { +#include "copyfuncs.switch.c" - return newnode; -} - -/* - * _copyFunctionScan - */ -static FunctionScan * -_copyFunctionScan(const FunctionScan *from) -{ - FunctionScan *newnode = makeNode(FunctionScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(functions); - COPY_SCALAR_FIELD(funcordinality); - - return newnode; -} - -/* - * _copyTableFuncScan - */ -static TableFuncScan * -_copyTableFuncScan(const TableFuncScan *from) -{ - TableFuncScan *newnode = makeNode(TableFuncScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(tablefunc); - - return newnode; -} - -/* - * _copyValuesScan - */ -static ValuesScan * -_copyValuesScan(const ValuesScan *from) -{ - ValuesScan *newnode = makeNode(ValuesScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(values_lists); - - return newnode; -} - -/* - * _copyCteScan - */ -static CteScan * -_copyCteScan(const CteScan *from) -{ - CteScan *newnode = makeNode(CteScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(ctePlanId); - COPY_SCALAR_FIELD(cteParam); - - return newnode; -} - -/* - * _copyNamedTuplestoreScan - */ -static NamedTuplestoreScan * -_copyNamedTuplestoreScan(const NamedTuplestoreScan *from) -{ - NamedTuplestoreScan *newnode = makeNode(NamedTuplestoreScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_STRING_FIELD(enrname); - - return newnode; -} - -/* - * _copyWorkTableScan - */ -static WorkTableScan * -_copyWorkTableScan(const WorkTableScan *from) -{ - WorkTableScan *newnode = makeNode(WorkTableScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(wtParam); - - return newnode; -} - -/* - * _copyForeignScan - */ -static ForeignScan * -_copyForeignScan(const ForeignScan *from) -{ - ForeignScan *newnode = makeNode(ForeignScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(operation); - COPY_SCALAR_FIELD(resultRelation); - COPY_SCALAR_FIELD(fs_server); - COPY_NODE_FIELD(fdw_exprs); - COPY_NODE_FIELD(fdw_private); - COPY_NODE_FIELD(fdw_scan_tlist); - COPY_NODE_FIELD(fdw_recheck_quals); - COPY_BITMAPSET_FIELD(fs_relids); - COPY_SCALAR_FIELD(fsSystemCol); - - return newnode; -} - -/* - * _copyCustomScan - */ -static CustomScan * -_copyCustomScan(const CustomScan *from) -{ - CustomScan *newnode = makeNode(CustomScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(flags); - COPY_NODE_FIELD(custom_plans); - COPY_NODE_FIELD(custom_exprs); - COPY_NODE_FIELD(custom_private); - COPY_NODE_FIELD(custom_scan_tlist); - COPY_BITMAPSET_FIELD(custom_relids); - - /* - * NOTE: The method field of CustomScan is required to be a pointer to a - * static table of callback functions. So we don't copy the table itself, - * just reference the original one. - */ - COPY_SCALAR_FIELD(methods); - - return newnode; -} - -/* - * CopyJoinFields - * - * This function copies the fields of the Join node. It is used by - * all the copy functions for classes which inherit from Join. - */ -static void -CopyJoinFields(const Join *from, Join *newnode) -{ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(jointype); - COPY_SCALAR_FIELD(inner_unique); - COPY_NODE_FIELD(joinqual); -} - - -/* - * _copyJoin - */ -static Join * -_copyJoin(const Join *from) -{ - Join *newnode = makeNode(Join); - - /* - * copy node superclass fields - */ - CopyJoinFields(from, newnode); - - return newnode; -} - - -/* - * _copyNestLoop - */ -static NestLoop * -_copyNestLoop(const NestLoop *from) -{ - NestLoop *newnode = makeNode(NestLoop); - - /* - * copy node superclass fields - */ - CopyJoinFields((const Join *) from, (Join *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(nestParams); - - return newnode; -} - - -/* - * _copyMergeJoin - */ -static MergeJoin * -_copyMergeJoin(const MergeJoin *from) -{ - MergeJoin *newnode = makeNode(MergeJoin); - int numCols; - - /* - * copy node superclass fields - */ - CopyJoinFields((const Join *) from, (Join *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(skip_mark_restore); - COPY_NODE_FIELD(mergeclauses); - numCols = list_length(from->mergeclauses); - COPY_POINTER_FIELD(mergeFamilies, numCols * sizeof(Oid)); - COPY_POINTER_FIELD(mergeCollations, numCols * sizeof(Oid)); - COPY_POINTER_FIELD(mergeStrategies, numCols * sizeof(int)); - COPY_POINTER_FIELD(mergeNullsFirst, numCols * sizeof(bool)); - - return newnode; -} - -/* - * _copyHashJoin - */ -static HashJoin * -_copyHashJoin(const HashJoin *from) -{ - HashJoin *newnode = makeNode(HashJoin); - - /* - * copy node superclass fields - */ - CopyJoinFields((const Join *) from, (Join *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(hashclauses); - COPY_NODE_FIELD(hashoperators); - COPY_NODE_FIELD(hashcollations); - COPY_NODE_FIELD(hashkeys); - - return newnode; -} - - -/* - * _copyMaterial - */ -static Material * -_copyMaterial(const Material *from) -{ - Material *newnode = makeNode(Material); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - return newnode; -} - - -/* - * _copyMemoize - */ -static Memoize * -_copyMemoize(const Memoize *from) -{ - Memoize *newnode = makeNode(Memoize); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(numKeys); - COPY_POINTER_FIELD(hashOperators, sizeof(Oid) * from->numKeys); - COPY_POINTER_FIELD(collations, sizeof(Oid) * from->numKeys); - COPY_NODE_FIELD(param_exprs); - COPY_SCALAR_FIELD(singlerow); - COPY_SCALAR_FIELD(binary_mode); - COPY_SCALAR_FIELD(est_entries); - COPY_BITMAPSET_FIELD(keyparamids); - - return newnode; -} - - -/* - * CopySortFields - * - * This function copies the fields of the Sort node. It is used by - * all the copy functions for classes which inherit from Sort. - */ -static void -CopySortFields(const Sort *from, Sort *newnode) -{ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); -} - -/* - * _copySort - */ -static Sort * -_copySort(const Sort *from) -{ - Sort *newnode = makeNode(Sort); - - /* - * copy node superclass fields - */ - CopySortFields(from, newnode); - - return newnode; -} - - -/* - * _copyIncrementalSort - */ -static IncrementalSort * -_copyIncrementalSort(const IncrementalSort *from) -{ - IncrementalSort *newnode = makeNode(IncrementalSort); - - /* - * copy node superclass fields - */ - CopySortFields((const Sort *) from, (Sort *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(nPresortedCols); - - return newnode; -} - - -/* - * _copyGroup - */ -static Group * -_copyGroup(const Group *from) -{ - Group *newnode = makeNode(Group); - - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); - - return newnode; -} - -/* - * _copyAgg - */ -static Agg * -_copyAgg(const Agg *from) -{ - Agg *newnode = makeNode(Agg); - - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(aggstrategy); - COPY_SCALAR_FIELD(aggsplit); - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); - COPY_SCALAR_FIELD(numGroups); - COPY_SCALAR_FIELD(transitionSpace); - COPY_BITMAPSET_FIELD(aggParams); - COPY_NODE_FIELD(groupingSets); - COPY_NODE_FIELD(chain); - - return newnode; -} - -/* - * _copyWindowAgg - */ -static WindowAgg * -_copyWindowAgg(const WindowAgg *from) -{ - WindowAgg *newnode = makeNode(WindowAgg); - - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - COPY_SCALAR_FIELD(winref); - COPY_SCALAR_FIELD(partNumCols); - COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid)); - COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid)); - COPY_SCALAR_FIELD(ordNumCols); - COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid)); - COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid)); - COPY_SCALAR_FIELD(frameOptions); - COPY_NODE_FIELD(startOffset); - COPY_NODE_FIELD(endOffset); - COPY_NODE_FIELD(runCondition); - COPY_NODE_FIELD(runConditionOrig); - COPY_SCALAR_FIELD(startInRangeFunc); - COPY_SCALAR_FIELD(endInRangeFunc); - COPY_SCALAR_FIELD(inRangeColl); - COPY_SCALAR_FIELD(inRangeAsc); - COPY_SCALAR_FIELD(inRangeNullsFirst); - COPY_SCALAR_FIELD(topWindow); - - return newnode; -} - -/* - * _copyUnique - */ -static Unique * -_copyUnique(const Unique *from) -{ - Unique *newnode = makeNode(Unique); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(uniqColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(uniqOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(uniqCollations, from->numCols * sizeof(Oid)); - - return newnode; -} - -/* - * _copyHash - */ -static Hash * -_copyHash(const Hash *from) -{ - Hash *newnode = makeNode(Hash); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(hashkeys); - COPY_SCALAR_FIELD(skewTable); - COPY_SCALAR_FIELD(skewColumn); - COPY_SCALAR_FIELD(skewInherit); - COPY_SCALAR_FIELD(rows_total); - - return newnode; -} - -/* - * _copySetOp - */ -static SetOp * -_copySetOp(const SetOp *from) -{ - SetOp *newnode = makeNode(SetOp); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_SCALAR_FIELD(cmd); - COPY_SCALAR_FIELD(strategy); - COPY_SCALAR_FIELD(numCols); - COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); - COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); - COPY_SCALAR_FIELD(flagColIdx); - COPY_SCALAR_FIELD(firstFlag); - COPY_SCALAR_FIELD(numGroups); - - return newnode; -} - -/* - * _copyLockRows - */ -static LockRows * -_copyLockRows(const LockRows *from) -{ - LockRows *newnode = makeNode(LockRows); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(rowMarks); - COPY_SCALAR_FIELD(epqParam); - - return newnode; -} - -/* - * _copyLimit - */ -static Limit * -_copyLimit(const Limit *from) -{ - Limit *newnode = makeNode(Limit); - - /* - * copy node superclass fields - */ - CopyPlanFields((const Plan *) from, (Plan *) newnode); - - /* - * copy remainder of node - */ - COPY_NODE_FIELD(limitOffset); - COPY_NODE_FIELD(limitCount); - COPY_SCALAR_FIELD(limitOption); - COPY_SCALAR_FIELD(uniqNumCols); - COPY_POINTER_FIELD(uniqColIdx, from->uniqNumCols * sizeof(AttrNumber)); - COPY_POINTER_FIELD(uniqOperators, from->uniqNumCols * sizeof(Oid)); - COPY_POINTER_FIELD(uniqCollations, from->uniqNumCols * sizeof(Oid)); - - return newnode; -} - -/* - * _copyNestLoopParam - */ -static NestLoopParam * -_copyNestLoopParam(const NestLoopParam *from) -{ - NestLoopParam *newnode = makeNode(NestLoopParam); - - COPY_SCALAR_FIELD(paramno); - COPY_NODE_FIELD(paramval); - - return newnode; -} - -/* - * _copyPlanRowMark - */ -static PlanRowMark * -_copyPlanRowMark(const PlanRowMark *from) -{ - PlanRowMark *newnode = makeNode(PlanRowMark); - - COPY_SCALAR_FIELD(rti); - COPY_SCALAR_FIELD(prti); - COPY_SCALAR_FIELD(rowmarkId); - COPY_SCALAR_FIELD(markType); - COPY_SCALAR_FIELD(allMarkTypes); - COPY_SCALAR_FIELD(strength); - COPY_SCALAR_FIELD(waitPolicy); - COPY_SCALAR_FIELD(isParent); - - return newnode; -} - -static PartitionPruneInfo * -_copyPartitionPruneInfo(const PartitionPruneInfo *from) -{ - PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo); - - COPY_NODE_FIELD(prune_infos); - COPY_BITMAPSET_FIELD(other_subplans); - - return newnode; -} - -static PartitionedRelPruneInfo * -_copyPartitionedRelPruneInfo(const PartitionedRelPruneInfo *from) -{ - PartitionedRelPruneInfo *newnode = makeNode(PartitionedRelPruneInfo); - - COPY_SCALAR_FIELD(rtindex); - COPY_BITMAPSET_FIELD(present_parts); - COPY_SCALAR_FIELD(nparts); - COPY_POINTER_FIELD(subplan_map, from->nparts * sizeof(int)); - COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int)); - COPY_POINTER_FIELD(relid_map, from->nparts * sizeof(Oid)); - COPY_NODE_FIELD(initial_pruning_steps); - COPY_NODE_FIELD(exec_pruning_steps); - COPY_BITMAPSET_FIELD(execparamids); - - return newnode; -} - -/* - * _copyPartitionPruneStepOp - */ -static PartitionPruneStepOp * -_copyPartitionPruneStepOp(const PartitionPruneStepOp *from) -{ - PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp); - - COPY_SCALAR_FIELD(step.step_id); - COPY_SCALAR_FIELD(opstrategy); - COPY_NODE_FIELD(exprs); - COPY_NODE_FIELD(cmpfns); - COPY_BITMAPSET_FIELD(nullkeys); - - return newnode; -} - -/* - * _copyPartitionPruneStepCombine - */ -static PartitionPruneStepCombine * -_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from) -{ - PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine); - - COPY_SCALAR_FIELD(step.step_id); - COPY_SCALAR_FIELD(combineOp); - COPY_NODE_FIELD(source_stepids); - - return newnode; -} - -/* - * _copyPlanInvalItem - */ -static PlanInvalItem * -_copyPlanInvalItem(const PlanInvalItem *from) -{ - PlanInvalItem *newnode = makeNode(PlanInvalItem); - - COPY_SCALAR_FIELD(cacheId); - COPY_SCALAR_FIELD(hashValue); - - return newnode; -} - -/* **************************************************************** - * primnodes.h copy functions - * **************************************************************** - */ - -/* - * _copyAlias - */ -static Alias * -_copyAlias(const Alias *from) -{ - Alias *newnode = makeNode(Alias); - - COPY_STRING_FIELD(aliasname); - COPY_NODE_FIELD(colnames); - - return newnode; -} - -/* - * _copyRangeVar - */ -static RangeVar * -_copyRangeVar(const RangeVar *from) -{ - RangeVar *newnode = makeNode(RangeVar); - - COPY_STRING_FIELD(catalogname); - COPY_STRING_FIELD(schemaname); - COPY_STRING_FIELD(relname); - COPY_SCALAR_FIELD(inh); - COPY_SCALAR_FIELD(relpersistence); - COPY_NODE_FIELD(alias); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyTableFunc - */ -static TableFunc * -_copyTableFunc(const TableFunc *from) -{ - TableFunc *newnode = makeNode(TableFunc); - - COPY_NODE_FIELD(ns_uris); - COPY_NODE_FIELD(ns_names); - COPY_NODE_FIELD(docexpr); - COPY_NODE_FIELD(rowexpr); - COPY_NODE_FIELD(colnames); - COPY_NODE_FIELD(coltypes); - COPY_NODE_FIELD(coltypmods); - COPY_NODE_FIELD(colcollations); - COPY_NODE_FIELD(colexprs); - COPY_NODE_FIELD(coldefexprs); - COPY_BITMAPSET_FIELD(notnulls); - COPY_SCALAR_FIELD(ordinalitycol); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyIntoClause - */ -static IntoClause * -_copyIntoClause(const IntoClause *from) -{ - IntoClause *newnode = makeNode(IntoClause); - - COPY_NODE_FIELD(rel); - COPY_NODE_FIELD(colNames); - COPY_STRING_FIELD(accessMethod); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(onCommit); - COPY_STRING_FIELD(tableSpaceName); - COPY_NODE_FIELD(viewQuery); - COPY_SCALAR_FIELD(skipData); - - return newnode; -} - -/* - * We don't need a _copyExpr because Expr is an abstract supertype which - * should never actually get instantiated. Also, since it has no common - * fields except NodeTag, there's no need for a helper routine to factor - * out copying the common fields... - */ - -/* - * _copyVar - */ -static Var * -_copyVar(const Var *from) -{ - Var *newnode = makeNode(Var); - - COPY_SCALAR_FIELD(varno); - COPY_SCALAR_FIELD(varattno); - COPY_SCALAR_FIELD(vartype); - COPY_SCALAR_FIELD(vartypmod); - COPY_SCALAR_FIELD(varcollid); - COPY_SCALAR_FIELD(varlevelsup); - COPY_SCALAR_FIELD(varnosyn); - COPY_SCALAR_FIELD(varattnosyn); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyConst - */ -static Const * -_copyConst(const Const *from) -{ - Const *newnode = makeNode(Const); - - COPY_SCALAR_FIELD(consttype); - COPY_SCALAR_FIELD(consttypmod); - COPY_SCALAR_FIELD(constcollid); - COPY_SCALAR_FIELD(constlen); - - if (from->constbyval || from->constisnull) - { - /* - * passed by value so just copy the datum. Also, don't try to copy - * struct when value is null! - */ - newnode->constvalue = from->constvalue; - } - else - { - /* - * passed by reference. We need a palloc'd copy. - */ - newnode->constvalue = datumCopy(from->constvalue, - from->constbyval, - from->constlen); - } - - COPY_SCALAR_FIELD(constisnull); - COPY_SCALAR_FIELD(constbyval); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyParam - */ -static Param * -_copyParam(const Param *from) -{ - Param *newnode = makeNode(Param); - - COPY_SCALAR_FIELD(paramkind); - COPY_SCALAR_FIELD(paramid); - COPY_SCALAR_FIELD(paramtype); - COPY_SCALAR_FIELD(paramtypmod); - COPY_SCALAR_FIELD(paramcollid); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyAggref - */ -static Aggref * -_copyAggref(const Aggref *from) -{ - Aggref *newnode = makeNode(Aggref); - - COPY_SCALAR_FIELD(aggfnoid); - COPY_SCALAR_FIELD(aggtype); - COPY_SCALAR_FIELD(aggcollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_SCALAR_FIELD(aggtranstype); - COPY_NODE_FIELD(aggargtypes); - COPY_NODE_FIELD(aggdirectargs); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(aggorder); - COPY_NODE_FIELD(aggdistinct); - COPY_NODE_FIELD(aggfilter); - COPY_SCALAR_FIELD(aggstar); - COPY_SCALAR_FIELD(aggvariadic); - COPY_SCALAR_FIELD(aggkind); - COPY_SCALAR_FIELD(agglevelsup); - COPY_SCALAR_FIELD(aggsplit); - COPY_SCALAR_FIELD(aggno); - COPY_SCALAR_FIELD(aggtransno); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyGroupingFunc - */ -static GroupingFunc * -_copyGroupingFunc(const GroupingFunc *from) -{ - GroupingFunc *newnode = makeNode(GroupingFunc); - - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(refs); - COPY_NODE_FIELD(cols); - COPY_SCALAR_FIELD(agglevelsup); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyWindowFunc - */ -static WindowFunc * -_copyWindowFunc(const WindowFunc *from) -{ - WindowFunc *newnode = makeNode(WindowFunc); - - COPY_SCALAR_FIELD(winfnoid); - COPY_SCALAR_FIELD(wintype); - COPY_SCALAR_FIELD(wincollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(aggfilter); - COPY_SCALAR_FIELD(winref); - COPY_SCALAR_FIELD(winstar); - COPY_SCALAR_FIELD(winagg); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copySubscriptingRef - */ -static SubscriptingRef * -_copySubscriptingRef(const SubscriptingRef *from) -{ - SubscriptingRef *newnode = makeNode(SubscriptingRef); - - COPY_SCALAR_FIELD(refcontainertype); - COPY_SCALAR_FIELD(refelemtype); - COPY_SCALAR_FIELD(refrestype); - COPY_SCALAR_FIELD(reftypmod); - COPY_SCALAR_FIELD(refcollid); - COPY_NODE_FIELD(refupperindexpr); - COPY_NODE_FIELD(reflowerindexpr); - COPY_NODE_FIELD(refexpr); - COPY_NODE_FIELD(refassgnexpr); - - return newnode; -} - -/* - * _copyFuncExpr - */ -static FuncExpr * -_copyFuncExpr(const FuncExpr *from) -{ - FuncExpr *newnode = makeNode(FuncExpr); - - COPY_SCALAR_FIELD(funcid); - COPY_SCALAR_FIELD(funcresulttype); - COPY_SCALAR_FIELD(funcretset); - COPY_SCALAR_FIELD(funcvariadic); - COPY_SCALAR_FIELD(funcformat); - COPY_SCALAR_FIELD(funccollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyNamedArgExpr * - */ -static NamedArgExpr * -_copyNamedArgExpr(const NamedArgExpr *from) -{ - NamedArgExpr *newnode = makeNode(NamedArgExpr); - - COPY_NODE_FIELD(arg); - COPY_STRING_FIELD(name); - COPY_SCALAR_FIELD(argnumber); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyOpExpr - */ -static OpExpr * -_copyOpExpr(const OpExpr *from) -{ - OpExpr *newnode = makeNode(OpExpr); - - COPY_SCALAR_FIELD(opno); - COPY_SCALAR_FIELD(opfuncid); - COPY_SCALAR_FIELD(opresulttype); - COPY_SCALAR_FIELD(opretset); - COPY_SCALAR_FIELD(opcollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyDistinctExpr (same as OpExpr) - */ -static DistinctExpr * -_copyDistinctExpr(const DistinctExpr *from) -{ - DistinctExpr *newnode = makeNode(DistinctExpr); - - COPY_SCALAR_FIELD(opno); - COPY_SCALAR_FIELD(opfuncid); - COPY_SCALAR_FIELD(opresulttype); - COPY_SCALAR_FIELD(opretset); - COPY_SCALAR_FIELD(opcollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyNullIfExpr (same as OpExpr) - */ -static NullIfExpr * -_copyNullIfExpr(const NullIfExpr *from) -{ - NullIfExpr *newnode = makeNode(NullIfExpr); - - COPY_SCALAR_FIELD(opno); - COPY_SCALAR_FIELD(opfuncid); - COPY_SCALAR_FIELD(opresulttype); - COPY_SCALAR_FIELD(opretset); - COPY_SCALAR_FIELD(opcollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyScalarArrayOpExpr - */ -static ScalarArrayOpExpr * -_copyScalarArrayOpExpr(const ScalarArrayOpExpr *from) -{ - ScalarArrayOpExpr *newnode = makeNode(ScalarArrayOpExpr); - - COPY_SCALAR_FIELD(opno); - COPY_SCALAR_FIELD(opfuncid); - COPY_SCALAR_FIELD(hashfuncid); - COPY_SCALAR_FIELD(negfuncid); - COPY_SCALAR_FIELD(useOr); - COPY_SCALAR_FIELD(inputcollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyBoolExpr - */ -static BoolExpr * -_copyBoolExpr(const BoolExpr *from) -{ - BoolExpr *newnode = makeNode(BoolExpr); - - COPY_SCALAR_FIELD(boolop); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copySubLink - */ -static SubLink * -_copySubLink(const SubLink *from) -{ - SubLink *newnode = makeNode(SubLink); - - COPY_SCALAR_FIELD(subLinkType); - COPY_SCALAR_FIELD(subLinkId); - COPY_NODE_FIELD(testexpr); - COPY_NODE_FIELD(operName); - COPY_NODE_FIELD(subselect); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copySubPlan - */ -static SubPlan * -_copySubPlan(const SubPlan *from) -{ - SubPlan *newnode = makeNode(SubPlan); - - COPY_SCALAR_FIELD(subLinkType); - COPY_NODE_FIELD(testexpr); - COPY_NODE_FIELD(paramIds); - COPY_SCALAR_FIELD(plan_id); - COPY_STRING_FIELD(plan_name); - COPY_SCALAR_FIELD(firstColType); - COPY_SCALAR_FIELD(firstColTypmod); - COPY_SCALAR_FIELD(firstColCollation); - COPY_SCALAR_FIELD(useHashTable); - COPY_SCALAR_FIELD(unknownEqFalse); - COPY_SCALAR_FIELD(parallel_safe); - COPY_NODE_FIELD(setParam); - COPY_NODE_FIELD(parParam); - COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(startup_cost); - COPY_SCALAR_FIELD(per_call_cost); - - return newnode; -} - -/* - * _copyAlternativeSubPlan - */ -static AlternativeSubPlan * -_copyAlternativeSubPlan(const AlternativeSubPlan *from) -{ - AlternativeSubPlan *newnode = makeNode(AlternativeSubPlan); - - COPY_NODE_FIELD(subplans); - - return newnode; -} - -/* - * _copyFieldSelect - */ -static FieldSelect * -_copyFieldSelect(const FieldSelect *from) -{ - FieldSelect *newnode = makeNode(FieldSelect); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(fieldnum); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(resulttypmod); - COPY_SCALAR_FIELD(resultcollid); - - return newnode; -} - -/* - * _copyFieldStore - */ -static FieldStore * -_copyFieldStore(const FieldStore *from) -{ - FieldStore *newnode = makeNode(FieldStore); - - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(newvals); - COPY_NODE_FIELD(fieldnums); - COPY_SCALAR_FIELD(resulttype); - - return newnode; -} - -/* - * _copyRelabelType - */ -static RelabelType * -_copyRelabelType(const RelabelType *from) -{ - RelabelType *newnode = makeNode(RelabelType); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(resulttypmod); - COPY_SCALAR_FIELD(resultcollid); - COPY_SCALAR_FIELD(relabelformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCoerceViaIO - */ -static CoerceViaIO * -_copyCoerceViaIO(const CoerceViaIO *from) -{ - CoerceViaIO *newnode = makeNode(CoerceViaIO); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(resultcollid); - COPY_SCALAR_FIELD(coerceformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyArrayCoerceExpr - */ -static ArrayCoerceExpr * -_copyArrayCoerceExpr(const ArrayCoerceExpr *from) -{ - ArrayCoerceExpr *newnode = makeNode(ArrayCoerceExpr); - - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(elemexpr); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(resulttypmod); - COPY_SCALAR_FIELD(resultcollid); - COPY_SCALAR_FIELD(coerceformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyConvertRowtypeExpr - */ -static ConvertRowtypeExpr * -_copyConvertRowtypeExpr(const ConvertRowtypeExpr *from) -{ - ConvertRowtypeExpr *newnode = makeNode(ConvertRowtypeExpr); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(convertformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCollateExpr - */ -static CollateExpr * -_copyCollateExpr(const CollateExpr *from) -{ - CollateExpr *newnode = makeNode(CollateExpr); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(collOid); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCaseExpr - */ -static CaseExpr * -_copyCaseExpr(const CaseExpr *from) -{ - CaseExpr *newnode = makeNode(CaseExpr); - - COPY_SCALAR_FIELD(casetype); - COPY_SCALAR_FIELD(casecollid); - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(defresult); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCaseWhen - */ -static CaseWhen * -_copyCaseWhen(const CaseWhen *from) -{ - CaseWhen *newnode = makeNode(CaseWhen); - - COPY_NODE_FIELD(expr); - COPY_NODE_FIELD(result); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCaseTestExpr - */ -static CaseTestExpr * -_copyCaseTestExpr(const CaseTestExpr *from) -{ - CaseTestExpr *newnode = makeNode(CaseTestExpr); - - COPY_SCALAR_FIELD(typeId); - COPY_SCALAR_FIELD(typeMod); - COPY_SCALAR_FIELD(collation); - - return newnode; -} - -/* - * _copyArrayExpr - */ -static ArrayExpr * -_copyArrayExpr(const ArrayExpr *from) -{ - ArrayExpr *newnode = makeNode(ArrayExpr); - - COPY_SCALAR_FIELD(array_typeid); - COPY_SCALAR_FIELD(array_collid); - COPY_SCALAR_FIELD(element_typeid); - COPY_NODE_FIELD(elements); - COPY_SCALAR_FIELD(multidims); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyRowExpr - */ -static RowExpr * -_copyRowExpr(const RowExpr *from) -{ - RowExpr *newnode = makeNode(RowExpr); - - COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(row_typeid); - COPY_SCALAR_FIELD(row_format); - COPY_NODE_FIELD(colnames); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyRowCompareExpr - */ -static RowCompareExpr * -_copyRowCompareExpr(const RowCompareExpr *from) -{ - RowCompareExpr *newnode = makeNode(RowCompareExpr); - - COPY_SCALAR_FIELD(rctype); - COPY_NODE_FIELD(opnos); - COPY_NODE_FIELD(opfamilies); - COPY_NODE_FIELD(inputcollids); - COPY_NODE_FIELD(largs); - COPY_NODE_FIELD(rargs); - - return newnode; -} - -/* - * _copyCoalesceExpr - */ -static CoalesceExpr * -_copyCoalesceExpr(const CoalesceExpr *from) -{ - CoalesceExpr *newnode = makeNode(CoalesceExpr); - - COPY_SCALAR_FIELD(coalescetype); - COPY_SCALAR_FIELD(coalescecollid); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyMinMaxExpr - */ -static MinMaxExpr * -_copyMinMaxExpr(const MinMaxExpr *from) -{ - MinMaxExpr *newnode = makeNode(MinMaxExpr); - - COPY_SCALAR_FIELD(minmaxtype); - COPY_SCALAR_FIELD(minmaxcollid); - COPY_SCALAR_FIELD(inputcollid); - COPY_SCALAR_FIELD(op); - COPY_NODE_FIELD(args); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copySQLValueFunction - */ -static SQLValueFunction * -_copySQLValueFunction(const SQLValueFunction *from) -{ - SQLValueFunction *newnode = makeNode(SQLValueFunction); - - COPY_SCALAR_FIELD(op); - COPY_SCALAR_FIELD(type); - COPY_SCALAR_FIELD(typmod); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyXmlExpr - */ -static XmlExpr * -_copyXmlExpr(const XmlExpr *from) -{ - XmlExpr *newnode = makeNode(XmlExpr); - - COPY_SCALAR_FIELD(op); - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(named_args); - COPY_NODE_FIELD(arg_names); - COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(xmloption); - COPY_SCALAR_FIELD(type); - COPY_SCALAR_FIELD(typmod); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyNullTest - */ -static NullTest * -_copyNullTest(const NullTest *from) -{ - NullTest *newnode = makeNode(NullTest); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(nulltesttype); - COPY_SCALAR_FIELD(argisrow); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyBooleanTest - */ -static BooleanTest * -_copyBooleanTest(const BooleanTest *from) -{ - BooleanTest *newnode = makeNode(BooleanTest); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(booltesttype); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCoerceToDomain - */ -static CoerceToDomain * -_copyCoerceToDomain(const CoerceToDomain *from) -{ - CoerceToDomain *newnode = makeNode(CoerceToDomain); - - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(resulttype); - COPY_SCALAR_FIELD(resulttypmod); - COPY_SCALAR_FIELD(resultcollid); - COPY_SCALAR_FIELD(coercionformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCoerceToDomainValue - */ -static CoerceToDomainValue * -_copyCoerceToDomainValue(const CoerceToDomainValue *from) -{ - CoerceToDomainValue *newnode = makeNode(CoerceToDomainValue); - - COPY_SCALAR_FIELD(typeId); - COPY_SCALAR_FIELD(typeMod); - COPY_SCALAR_FIELD(collation); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copySetToDefault - */ -static SetToDefault * -_copySetToDefault(const SetToDefault *from) -{ - SetToDefault *newnode = makeNode(SetToDefault); - - COPY_SCALAR_FIELD(typeId); - COPY_SCALAR_FIELD(typeMod); - COPY_SCALAR_FIELD(collation); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -/* - * _copyCurrentOfExpr - */ -static CurrentOfExpr * -_copyCurrentOfExpr(const CurrentOfExpr *from) -{ - CurrentOfExpr *newnode = makeNode(CurrentOfExpr); - - COPY_SCALAR_FIELD(cvarno); - COPY_STRING_FIELD(cursor_name); - COPY_SCALAR_FIELD(cursor_param); - - return newnode; -} - - /* - * _copyNextValueExpr - */ -static NextValueExpr * -_copyNextValueExpr(const NextValueExpr *from) -{ - NextValueExpr *newnode = makeNode(NextValueExpr); - - COPY_SCALAR_FIELD(seqid); - COPY_SCALAR_FIELD(typeId); - - return newnode; -} - -/* - * _copyInferenceElem - */ -static InferenceElem * -_copyInferenceElem(const InferenceElem *from) -{ - InferenceElem *newnode = makeNode(InferenceElem); - - COPY_NODE_FIELD(expr); - COPY_SCALAR_FIELD(infercollid); - COPY_SCALAR_FIELD(inferopclass); - - return newnode; -} - -/* - * _copyTargetEntry - */ -static TargetEntry * -_copyTargetEntry(const TargetEntry *from) -{ - TargetEntry *newnode = makeNode(TargetEntry); - - COPY_NODE_FIELD(expr); - COPY_SCALAR_FIELD(resno); - COPY_STRING_FIELD(resname); - COPY_SCALAR_FIELD(ressortgroupref); - COPY_SCALAR_FIELD(resorigtbl); - COPY_SCALAR_FIELD(resorigcol); - COPY_SCALAR_FIELD(resjunk); - - return newnode; -} - -/* - * _copyRangeTblRef - */ -static RangeTblRef * -_copyRangeTblRef(const RangeTblRef *from) -{ - RangeTblRef *newnode = makeNode(RangeTblRef); - - COPY_SCALAR_FIELD(rtindex); - - return newnode; -} - -/* - * _copyJoinExpr - */ -static JoinExpr * -_copyJoinExpr(const JoinExpr *from) -{ - JoinExpr *newnode = makeNode(JoinExpr); - - COPY_SCALAR_FIELD(jointype); - COPY_SCALAR_FIELD(isNatural); - COPY_NODE_FIELD(larg); - COPY_NODE_FIELD(rarg); - COPY_NODE_FIELD(usingClause); - COPY_NODE_FIELD(join_using_alias); - COPY_NODE_FIELD(quals); - COPY_NODE_FIELD(alias); - COPY_SCALAR_FIELD(rtindex); - - return newnode; -} - -/* - * _copyFromExpr - */ -static FromExpr * -_copyFromExpr(const FromExpr *from) -{ - FromExpr *newnode = makeNode(FromExpr); - - COPY_NODE_FIELD(fromlist); - COPY_NODE_FIELD(quals); - - return newnode; -} - -/* - * _copyOnConflictExpr - */ -static OnConflictExpr * -_copyOnConflictExpr(const OnConflictExpr *from) -{ - OnConflictExpr *newnode = makeNode(OnConflictExpr); - - COPY_SCALAR_FIELD(action); - COPY_NODE_FIELD(arbiterElems); - COPY_NODE_FIELD(arbiterWhere); - COPY_SCALAR_FIELD(constraint); - COPY_NODE_FIELD(onConflictSet); - COPY_NODE_FIELD(onConflictWhere); - COPY_SCALAR_FIELD(exclRelIndex); - COPY_NODE_FIELD(exclRelTlist); - - return newnode; -} - -/* **************************************************************** - * pathnodes.h copy functions - * - * We don't support copying RelOptInfo, IndexOptInfo, or Path nodes. - * There are some subsidiary structs that are useful to copy, though. - * **************************************************************** - */ - -/* - * _copyPathKey - */ -static PathKey * -_copyPathKey(const PathKey *from) -{ - PathKey *newnode = makeNode(PathKey); - - /* EquivalenceClasses are never moved, so just shallow-copy the pointer */ - COPY_SCALAR_FIELD(pk_eclass); - COPY_SCALAR_FIELD(pk_opfamily); - COPY_SCALAR_FIELD(pk_strategy); - COPY_SCALAR_FIELD(pk_nulls_first); - - return newnode; -} - -/* - * _copyRestrictInfo - */ -static RestrictInfo * -_copyRestrictInfo(const RestrictInfo *from) -{ - RestrictInfo *newnode = makeNode(RestrictInfo); - - COPY_NODE_FIELD(clause); - COPY_SCALAR_FIELD(is_pushed_down); - COPY_SCALAR_FIELD(outerjoin_delayed); - COPY_SCALAR_FIELD(can_join); - COPY_SCALAR_FIELD(pseudoconstant); - COPY_SCALAR_FIELD(leakproof); - COPY_SCALAR_FIELD(has_volatile); - COPY_SCALAR_FIELD(security_level); - COPY_BITMAPSET_FIELD(clause_relids); - COPY_BITMAPSET_FIELD(required_relids); - COPY_BITMAPSET_FIELD(outer_relids); - COPY_BITMAPSET_FIELD(nullable_relids); - COPY_BITMAPSET_FIELD(left_relids); - COPY_BITMAPSET_FIELD(right_relids); - COPY_NODE_FIELD(orclause); - /* EquivalenceClasses are never copied, so shallow-copy the pointers */ - COPY_SCALAR_FIELD(parent_ec); - COPY_SCALAR_FIELD(eval_cost); - COPY_SCALAR_FIELD(norm_selec); - COPY_SCALAR_FIELD(outer_selec); - COPY_NODE_FIELD(mergeopfamilies); - /* EquivalenceClasses are never copied, so shallow-copy the pointers */ - COPY_SCALAR_FIELD(left_ec); - COPY_SCALAR_FIELD(right_ec); - COPY_SCALAR_FIELD(left_em); - COPY_SCALAR_FIELD(right_em); - /* MergeScanSelCache isn't a Node, so hard to copy; just reset cache */ - newnode->scansel_cache = NIL; - COPY_SCALAR_FIELD(outer_is_left); - COPY_SCALAR_FIELD(hashjoinoperator); - COPY_SCALAR_FIELD(left_bucketsize); - COPY_SCALAR_FIELD(right_bucketsize); - COPY_SCALAR_FIELD(left_mcvfreq); - COPY_SCALAR_FIELD(right_mcvfreq); - COPY_SCALAR_FIELD(left_hasheqoperator); - COPY_SCALAR_FIELD(right_hasheqoperator); - - return newnode; -} - -/* - * _copyPlaceHolderVar - */ -static PlaceHolderVar * -_copyPlaceHolderVar(const PlaceHolderVar *from) -{ - PlaceHolderVar *newnode = makeNode(PlaceHolderVar); - - COPY_NODE_FIELD(phexpr); - COPY_BITMAPSET_FIELD(phrels); - COPY_SCALAR_FIELD(phid); - COPY_SCALAR_FIELD(phlevelsup); - - return newnode; -} - -/* - * _copySpecialJoinInfo - */ -static SpecialJoinInfo * -_copySpecialJoinInfo(const SpecialJoinInfo *from) -{ - SpecialJoinInfo *newnode = makeNode(SpecialJoinInfo); - - COPY_BITMAPSET_FIELD(min_lefthand); - COPY_BITMAPSET_FIELD(min_righthand); - COPY_BITMAPSET_FIELD(syn_lefthand); - COPY_BITMAPSET_FIELD(syn_righthand); - COPY_SCALAR_FIELD(jointype); - COPY_SCALAR_FIELD(lhs_strict); - COPY_SCALAR_FIELD(delay_upper_joins); - COPY_SCALAR_FIELD(semi_can_btree); - COPY_SCALAR_FIELD(semi_can_hash); - COPY_NODE_FIELD(semi_operators); - COPY_NODE_FIELD(semi_rhs_exprs); - - return newnode; -} - -/* - * _copyAppendRelInfo - */ -static AppendRelInfo * -_copyAppendRelInfo(const AppendRelInfo *from) -{ - AppendRelInfo *newnode = makeNode(AppendRelInfo); - - COPY_SCALAR_FIELD(parent_relid); - COPY_SCALAR_FIELD(child_relid); - COPY_SCALAR_FIELD(parent_reltype); - COPY_SCALAR_FIELD(child_reltype); - COPY_NODE_FIELD(translated_vars); - COPY_SCALAR_FIELD(num_child_cols); - COPY_POINTER_FIELD(parent_colnos, from->num_child_cols * sizeof(AttrNumber)); - COPY_SCALAR_FIELD(parent_reloid); - - return newnode; -} - -/* - * _copyPlaceHolderInfo - */ -static PlaceHolderInfo * -_copyPlaceHolderInfo(const PlaceHolderInfo *from) -{ - PlaceHolderInfo *newnode = makeNode(PlaceHolderInfo); - - COPY_SCALAR_FIELD(phid); - COPY_NODE_FIELD(ph_var); - COPY_BITMAPSET_FIELD(ph_eval_at); - COPY_BITMAPSET_FIELD(ph_lateral); - COPY_BITMAPSET_FIELD(ph_needed); - COPY_SCALAR_FIELD(ph_width); - - return newnode; -} - -/* **************************************************************** - * parsenodes.h copy functions - * **************************************************************** - */ - -static RangeTblEntry * -_copyRangeTblEntry(const RangeTblEntry *from) -{ - RangeTblEntry *newnode = makeNode(RangeTblEntry); - - COPY_SCALAR_FIELD(rtekind); - COPY_SCALAR_FIELD(relid); - COPY_SCALAR_FIELD(relkind); - COPY_SCALAR_FIELD(rellockmode); - COPY_NODE_FIELD(tablesample); - COPY_NODE_FIELD(subquery); - COPY_SCALAR_FIELD(security_barrier); - COPY_SCALAR_FIELD(jointype); - COPY_SCALAR_FIELD(joinmergedcols); - COPY_NODE_FIELD(joinaliasvars); - COPY_NODE_FIELD(joinleftcols); - COPY_NODE_FIELD(joinrightcols); - COPY_NODE_FIELD(join_using_alias); - COPY_NODE_FIELD(functions); - COPY_SCALAR_FIELD(funcordinality); - COPY_NODE_FIELD(tablefunc); - COPY_NODE_FIELD(values_lists); - COPY_STRING_FIELD(ctename); - COPY_SCALAR_FIELD(ctelevelsup); - COPY_SCALAR_FIELD(self_reference); - COPY_NODE_FIELD(coltypes); - COPY_NODE_FIELD(coltypmods); - COPY_NODE_FIELD(colcollations); - COPY_STRING_FIELD(enrname); - COPY_SCALAR_FIELD(enrtuples); - COPY_NODE_FIELD(alias); - COPY_NODE_FIELD(eref); - COPY_SCALAR_FIELD(lateral); - COPY_SCALAR_FIELD(inh); - COPY_SCALAR_FIELD(inFromCl); - COPY_SCALAR_FIELD(requiredPerms); - COPY_SCALAR_FIELD(checkAsUser); - COPY_BITMAPSET_FIELD(selectedCols); - COPY_BITMAPSET_FIELD(insertedCols); - COPY_BITMAPSET_FIELD(updatedCols); - COPY_BITMAPSET_FIELD(extraUpdatedCols); - COPY_NODE_FIELD(securityQuals); - - return newnode; -} - -static RangeTblFunction * -_copyRangeTblFunction(const RangeTblFunction *from) -{ - RangeTblFunction *newnode = makeNode(RangeTblFunction); - - COPY_NODE_FIELD(funcexpr); - COPY_SCALAR_FIELD(funccolcount); - COPY_NODE_FIELD(funccolnames); - COPY_NODE_FIELD(funccoltypes); - COPY_NODE_FIELD(funccoltypmods); - COPY_NODE_FIELD(funccolcollations); - COPY_BITMAPSET_FIELD(funcparams); - - return newnode; -} - -static TableSampleClause * -_copyTableSampleClause(const TableSampleClause *from) -{ - TableSampleClause *newnode = makeNode(TableSampleClause); - - COPY_SCALAR_FIELD(tsmhandler); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(repeatable); - - return newnode; -} - -static WithCheckOption * -_copyWithCheckOption(const WithCheckOption *from) -{ - WithCheckOption *newnode = makeNode(WithCheckOption); - - COPY_SCALAR_FIELD(kind); - COPY_STRING_FIELD(relname); - COPY_STRING_FIELD(polname); - COPY_NODE_FIELD(qual); - COPY_SCALAR_FIELD(cascaded); - - return newnode; -} - -static SortGroupClause * -_copySortGroupClause(const SortGroupClause *from) -{ - SortGroupClause *newnode = makeNode(SortGroupClause); - - COPY_SCALAR_FIELD(tleSortGroupRef); - COPY_SCALAR_FIELD(eqop); - COPY_SCALAR_FIELD(sortop); - COPY_SCALAR_FIELD(nulls_first); - COPY_SCALAR_FIELD(hashable); - - return newnode; -} - -static GroupingSet * -_copyGroupingSet(const GroupingSet *from) -{ - GroupingSet *newnode = makeNode(GroupingSet); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(content); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static WindowClause * -_copyWindowClause(const WindowClause *from) -{ - WindowClause *newnode = makeNode(WindowClause); - - COPY_STRING_FIELD(name); - COPY_STRING_FIELD(refname); - COPY_NODE_FIELD(partitionClause); - COPY_NODE_FIELD(orderClause); - COPY_SCALAR_FIELD(frameOptions); - COPY_NODE_FIELD(startOffset); - COPY_NODE_FIELD(endOffset); - COPY_NODE_FIELD(runCondition); - COPY_SCALAR_FIELD(startInRangeFunc); - COPY_SCALAR_FIELD(endInRangeFunc); - COPY_SCALAR_FIELD(inRangeColl); - COPY_SCALAR_FIELD(inRangeAsc); - COPY_SCALAR_FIELD(inRangeNullsFirst); - COPY_SCALAR_FIELD(winref); - COPY_SCALAR_FIELD(copiedOrder); - - return newnode; -} - -static RowMarkClause * -_copyRowMarkClause(const RowMarkClause *from) -{ - RowMarkClause *newnode = makeNode(RowMarkClause); - - COPY_SCALAR_FIELD(rti); - COPY_SCALAR_FIELD(strength); - COPY_SCALAR_FIELD(waitPolicy); - COPY_SCALAR_FIELD(pushedDown); - - return newnode; -} - -static WithClause * -_copyWithClause(const WithClause *from) -{ - WithClause *newnode = makeNode(WithClause); - - COPY_NODE_FIELD(ctes); - COPY_SCALAR_FIELD(recursive); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static InferClause * -_copyInferClause(const InferClause *from) -{ - InferClause *newnode = makeNode(InferClause); - - COPY_NODE_FIELD(indexElems); - COPY_NODE_FIELD(whereClause); - COPY_STRING_FIELD(conname); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static OnConflictClause * -_copyOnConflictClause(const OnConflictClause *from) -{ - OnConflictClause *newnode = makeNode(OnConflictClause); - - COPY_SCALAR_FIELD(action); - COPY_NODE_FIELD(infer); - COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(whereClause); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static CTESearchClause * -_copyCTESearchClause(const CTESearchClause *from) -{ - CTESearchClause *newnode = makeNode(CTESearchClause); - - COPY_NODE_FIELD(search_col_list); - COPY_SCALAR_FIELD(search_breadth_first); - COPY_STRING_FIELD(search_seq_column); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static CTECycleClause * -_copyCTECycleClause(const CTECycleClause *from) -{ - CTECycleClause *newnode = makeNode(CTECycleClause); - - COPY_NODE_FIELD(cycle_col_list); - COPY_STRING_FIELD(cycle_mark_column); - COPY_NODE_FIELD(cycle_mark_value); - COPY_NODE_FIELD(cycle_mark_default); - COPY_STRING_FIELD(cycle_path_column); - COPY_LOCATION_FIELD(location); - COPY_SCALAR_FIELD(cycle_mark_type); - COPY_SCALAR_FIELD(cycle_mark_typmod); - COPY_SCALAR_FIELD(cycle_mark_collation); - COPY_SCALAR_FIELD(cycle_mark_neop); - - return newnode; -} - -static CommonTableExpr * -_copyCommonTableExpr(const CommonTableExpr *from) -{ - CommonTableExpr *newnode = makeNode(CommonTableExpr); - - COPY_STRING_FIELD(ctename); - COPY_NODE_FIELD(aliascolnames); - COPY_SCALAR_FIELD(ctematerialized); - COPY_NODE_FIELD(ctequery); - COPY_NODE_FIELD(search_clause); - COPY_NODE_FIELD(cycle_clause); - COPY_LOCATION_FIELD(location); - COPY_SCALAR_FIELD(cterecursive); - COPY_SCALAR_FIELD(cterefcount); - COPY_NODE_FIELD(ctecolnames); - COPY_NODE_FIELD(ctecoltypes); - COPY_NODE_FIELD(ctecoltypmods); - COPY_NODE_FIELD(ctecolcollations); - - return newnode; -} - -static MergeWhenClause * -_copyMergeWhenClause(const MergeWhenClause *from) -{ - MergeWhenClause *newnode = makeNode(MergeWhenClause); - - COPY_SCALAR_FIELD(matched); - COPY_SCALAR_FIELD(commandType); - COPY_SCALAR_FIELD(override); - COPY_NODE_FIELD(condition); - COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(values); - return newnode; -} - -static MergeAction * -_copyMergeAction(const MergeAction *from) -{ - MergeAction *newnode = makeNode(MergeAction); - - COPY_SCALAR_FIELD(matched); - COPY_SCALAR_FIELD(commandType); - COPY_SCALAR_FIELD(override); - COPY_NODE_FIELD(qual); - COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(updateColnos); - - return newnode; -} - -static A_Expr * -_copyA_Expr(const A_Expr *from) -{ - A_Expr *newnode = makeNode(A_Expr); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(name); - COPY_NODE_FIELD(lexpr); - COPY_NODE_FIELD(rexpr); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static ColumnRef * -_copyColumnRef(const ColumnRef *from) -{ - ColumnRef *newnode = makeNode(ColumnRef); - - COPY_NODE_FIELD(fields); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static ParamRef * -_copyParamRef(const ParamRef *from) -{ - ParamRef *newnode = makeNode(ParamRef); - - COPY_SCALAR_FIELD(number); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static A_Const * -_copyA_Const(const A_Const *from) -{ - A_Const *newnode = makeNode(A_Const); - - COPY_SCALAR_FIELD(isnull); - if (!from->isnull) - { - /* This part must duplicate other _copy*() functions. */ - COPY_SCALAR_FIELD(val.node.type); - switch (nodeTag(&from->val)) - { - case T_Integer: - COPY_SCALAR_FIELD(val.ival.ival); - break; - case T_Float: - COPY_STRING_FIELD(val.fval.fval); - break; - case T_Boolean: - COPY_SCALAR_FIELD(val.boolval.boolval); - break; - case T_String: - COPY_STRING_FIELD(val.sval.sval); - break; - case T_BitString: - COPY_STRING_FIELD(val.bsval.bsval); - break; - default: - elog(ERROR, "unrecognized node type: %d", - (int) nodeTag(&from->val)); - break; - } - } - - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static FuncCall * -_copyFuncCall(const FuncCall *from) -{ - FuncCall *newnode = makeNode(FuncCall); - - COPY_NODE_FIELD(funcname); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(agg_order); - COPY_NODE_FIELD(agg_filter); - COPY_NODE_FIELD(over); - COPY_SCALAR_FIELD(agg_within_group); - COPY_SCALAR_FIELD(agg_star); - COPY_SCALAR_FIELD(agg_distinct); - COPY_SCALAR_FIELD(func_variadic); - COPY_SCALAR_FIELD(funcformat); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static A_Star * -_copyA_Star(const A_Star *from) -{ - A_Star *newnode = makeNode(A_Star); - - return newnode; -} - -static A_Indices * -_copyA_Indices(const A_Indices *from) -{ - A_Indices *newnode = makeNode(A_Indices); - - COPY_SCALAR_FIELD(is_slice); - COPY_NODE_FIELD(lidx); - COPY_NODE_FIELD(uidx); - - return newnode; -} - -static A_Indirection * -_copyA_Indirection(const A_Indirection *from) -{ - A_Indirection *newnode = makeNode(A_Indirection); - - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(indirection); - - return newnode; -} - -static A_ArrayExpr * -_copyA_ArrayExpr(const A_ArrayExpr *from) -{ - A_ArrayExpr *newnode = makeNode(A_ArrayExpr); - - COPY_NODE_FIELD(elements); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static ResTarget * -_copyResTarget(const ResTarget *from) -{ - ResTarget *newnode = makeNode(ResTarget); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(indirection); - COPY_NODE_FIELD(val); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static MultiAssignRef * -_copyMultiAssignRef(const MultiAssignRef *from) -{ - MultiAssignRef *newnode = makeNode(MultiAssignRef); - - COPY_NODE_FIELD(source); - COPY_SCALAR_FIELD(colno); - COPY_SCALAR_FIELD(ncolumns); - - return newnode; -} - -static TypeName * -_copyTypeName(const TypeName *from) -{ - TypeName *newnode = makeNode(TypeName); - - COPY_NODE_FIELD(names); - COPY_SCALAR_FIELD(typeOid); - COPY_SCALAR_FIELD(setof); - COPY_SCALAR_FIELD(pct_type); - COPY_NODE_FIELD(typmods); - COPY_SCALAR_FIELD(typemod); - COPY_NODE_FIELD(arrayBounds); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static SortBy * -_copySortBy(const SortBy *from) -{ - SortBy *newnode = makeNode(SortBy); - - COPY_NODE_FIELD(node); - COPY_SCALAR_FIELD(sortby_dir); - COPY_SCALAR_FIELD(sortby_nulls); - COPY_NODE_FIELD(useOp); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static WindowDef * -_copyWindowDef(const WindowDef *from) -{ - WindowDef *newnode = makeNode(WindowDef); - - COPY_STRING_FIELD(name); - COPY_STRING_FIELD(refname); - COPY_NODE_FIELD(partitionClause); - COPY_NODE_FIELD(orderClause); - COPY_SCALAR_FIELD(frameOptions); - COPY_NODE_FIELD(startOffset); - COPY_NODE_FIELD(endOffset); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static RangeSubselect * -_copyRangeSubselect(const RangeSubselect *from) -{ - RangeSubselect *newnode = makeNode(RangeSubselect); - - COPY_SCALAR_FIELD(lateral); - COPY_NODE_FIELD(subquery); - COPY_NODE_FIELD(alias); - - return newnode; -} - -static RangeFunction * -_copyRangeFunction(const RangeFunction *from) -{ - RangeFunction *newnode = makeNode(RangeFunction); - - COPY_SCALAR_FIELD(lateral); - COPY_SCALAR_FIELD(ordinality); - COPY_SCALAR_FIELD(is_rowsfrom); - COPY_NODE_FIELD(functions); - COPY_NODE_FIELD(alias); - COPY_NODE_FIELD(coldeflist); - - return newnode; -} - -static RangeTableSample * -_copyRangeTableSample(const RangeTableSample *from) -{ - RangeTableSample *newnode = makeNode(RangeTableSample); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(method); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(repeatable); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static RangeTableFunc * -_copyRangeTableFunc(const RangeTableFunc *from) -{ - RangeTableFunc *newnode = makeNode(RangeTableFunc); - - COPY_SCALAR_FIELD(lateral); - COPY_NODE_FIELD(docexpr); - COPY_NODE_FIELD(rowexpr); - COPY_NODE_FIELD(namespaces); - COPY_NODE_FIELD(columns); - COPY_NODE_FIELD(alias); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static RangeTableFuncCol * -_copyRangeTableFuncCol(const RangeTableFuncCol *from) -{ - RangeTableFuncCol *newnode = makeNode(RangeTableFuncCol); - - COPY_STRING_FIELD(colname); - COPY_NODE_FIELD(typeName); - COPY_SCALAR_FIELD(for_ordinality); - COPY_SCALAR_FIELD(is_not_null); - COPY_NODE_FIELD(colexpr); - COPY_NODE_FIELD(coldefexpr); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static TypeCast * -_copyTypeCast(const TypeCast *from) -{ - TypeCast *newnode = makeNode(TypeCast); - - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(typeName); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static CollateClause * -_copyCollateClause(const CollateClause *from) -{ - CollateClause *newnode = makeNode(CollateClause); - - COPY_NODE_FIELD(arg); - COPY_NODE_FIELD(collname); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static IndexElem * -_copyIndexElem(const IndexElem *from) -{ - IndexElem *newnode = makeNode(IndexElem); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(expr); - COPY_STRING_FIELD(indexcolname); - COPY_NODE_FIELD(collation); - COPY_NODE_FIELD(opclass); - COPY_NODE_FIELD(opclassopts); - COPY_SCALAR_FIELD(ordering); - COPY_SCALAR_FIELD(nulls_ordering); - - return newnode; -} - -static StatsElem * -_copyStatsElem(const StatsElem *from) -{ - StatsElem *newnode = makeNode(StatsElem); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(expr); - - return newnode; -} - -static ColumnDef * -_copyColumnDef(const ColumnDef *from) -{ - ColumnDef *newnode = makeNode(ColumnDef); - - COPY_STRING_FIELD(colname); - COPY_NODE_FIELD(typeName); - COPY_STRING_FIELD(compression); - COPY_SCALAR_FIELD(inhcount); - COPY_SCALAR_FIELD(is_local); - COPY_SCALAR_FIELD(is_not_null); - COPY_SCALAR_FIELD(is_from_type); - COPY_SCALAR_FIELD(storage); - COPY_NODE_FIELD(raw_default); - COPY_NODE_FIELD(cooked_default); - COPY_SCALAR_FIELD(identity); - COPY_NODE_FIELD(identitySequence); - COPY_SCALAR_FIELD(generated); - COPY_NODE_FIELD(collClause); - COPY_SCALAR_FIELD(collOid); - COPY_NODE_FIELD(constraints); - COPY_NODE_FIELD(fdwoptions); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static Constraint * -_copyConstraint(const Constraint *from) -{ - Constraint *newnode = makeNode(Constraint); - - COPY_SCALAR_FIELD(contype); - COPY_STRING_FIELD(conname); - COPY_SCALAR_FIELD(deferrable); - COPY_SCALAR_FIELD(initdeferred); - COPY_LOCATION_FIELD(location); - COPY_SCALAR_FIELD(is_no_inherit); - COPY_NODE_FIELD(raw_expr); - COPY_STRING_FIELD(cooked_expr); - COPY_SCALAR_FIELD(generated_when); - COPY_SCALAR_FIELD(nulls_not_distinct); - COPY_NODE_FIELD(keys); - COPY_NODE_FIELD(including); - COPY_NODE_FIELD(exclusions); - COPY_NODE_FIELD(options); - COPY_STRING_FIELD(indexname); - COPY_STRING_FIELD(indexspace); - COPY_SCALAR_FIELD(reset_default_tblspc); - COPY_STRING_FIELD(access_method); - COPY_NODE_FIELD(where_clause); - COPY_NODE_FIELD(pktable); - COPY_NODE_FIELD(fk_attrs); - COPY_NODE_FIELD(pk_attrs); - COPY_SCALAR_FIELD(fk_matchtype); - COPY_SCALAR_FIELD(fk_upd_action); - COPY_SCALAR_FIELD(fk_del_action); - COPY_NODE_FIELD(fk_del_set_cols); - COPY_NODE_FIELD(old_conpfeqop); - COPY_SCALAR_FIELD(old_pktable_oid); - COPY_SCALAR_FIELD(skip_validation); - COPY_SCALAR_FIELD(initially_valid); - - return newnode; -} - -static DefElem * -_copyDefElem(const DefElem *from) -{ - DefElem *newnode = makeNode(DefElem); - - COPY_STRING_FIELD(defnamespace); - COPY_STRING_FIELD(defname); - COPY_NODE_FIELD(arg); - COPY_SCALAR_FIELD(defaction); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static LockingClause * -_copyLockingClause(const LockingClause *from) -{ - LockingClause *newnode = makeNode(LockingClause); - - COPY_NODE_FIELD(lockedRels); - COPY_SCALAR_FIELD(strength); - COPY_SCALAR_FIELD(waitPolicy); - - return newnode; -} - -static XmlSerialize * -_copyXmlSerialize(const XmlSerialize *from) -{ - XmlSerialize *newnode = makeNode(XmlSerialize); - - COPY_SCALAR_FIELD(xmloption); - COPY_NODE_FIELD(expr); - COPY_NODE_FIELD(typeName); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static RoleSpec * -_copyRoleSpec(const RoleSpec *from) -{ - RoleSpec *newnode = makeNode(RoleSpec); - - COPY_SCALAR_FIELD(roletype); - COPY_STRING_FIELD(rolename); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static TriggerTransition * -_copyTriggerTransition(const TriggerTransition *from) -{ - TriggerTransition *newnode = makeNode(TriggerTransition); - - COPY_STRING_FIELD(name); - COPY_SCALAR_FIELD(isNew); - COPY_SCALAR_FIELD(isTable); - - return newnode; -} - -static Query * -_copyQuery(const Query *from) -{ - Query *newnode = makeNode(Query); - - COPY_SCALAR_FIELD(commandType); - COPY_SCALAR_FIELD(querySource); - COPY_SCALAR_FIELD(queryId); - COPY_SCALAR_FIELD(canSetTag); - COPY_NODE_FIELD(utilityStmt); - COPY_SCALAR_FIELD(resultRelation); - COPY_SCALAR_FIELD(hasAggs); - COPY_SCALAR_FIELD(hasWindowFuncs); - COPY_SCALAR_FIELD(hasTargetSRFs); - COPY_SCALAR_FIELD(hasSubLinks); - COPY_SCALAR_FIELD(hasDistinctOn); - COPY_SCALAR_FIELD(hasRecursive); - COPY_SCALAR_FIELD(hasModifyingCTE); - COPY_SCALAR_FIELD(hasForUpdate); - COPY_SCALAR_FIELD(hasRowSecurity); - COPY_SCALAR_FIELD(isReturn); - COPY_NODE_FIELD(cteList); - COPY_NODE_FIELD(rtable); - COPY_NODE_FIELD(jointree); - COPY_NODE_FIELD(targetList); - COPY_SCALAR_FIELD(override); - COPY_NODE_FIELD(onConflict); - COPY_NODE_FIELD(returningList); - COPY_NODE_FIELD(groupClause); - COPY_SCALAR_FIELD(groupDistinct); - COPY_NODE_FIELD(groupingSets); - COPY_NODE_FIELD(havingQual); - COPY_NODE_FIELD(windowClause); - COPY_NODE_FIELD(distinctClause); - COPY_NODE_FIELD(sortClause); - COPY_NODE_FIELD(limitOffset); - COPY_NODE_FIELD(limitCount); - COPY_SCALAR_FIELD(limitOption); - COPY_NODE_FIELD(rowMarks); - COPY_NODE_FIELD(setOperations); - COPY_NODE_FIELD(constraintDeps); - COPY_NODE_FIELD(withCheckOptions); - COPY_NODE_FIELD(mergeActionList); - COPY_SCALAR_FIELD(mergeUseOuterJoin); - COPY_LOCATION_FIELD(stmt_location); - COPY_SCALAR_FIELD(stmt_len); - - return newnode; -} - -static RawStmt * -_copyRawStmt(const RawStmt *from) -{ - RawStmt *newnode = makeNode(RawStmt); - - COPY_NODE_FIELD(stmt); - COPY_LOCATION_FIELD(stmt_location); - COPY_SCALAR_FIELD(stmt_len); - - return newnode; -} - -static InsertStmt * -_copyInsertStmt(const InsertStmt *from) -{ - InsertStmt *newnode = makeNode(InsertStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(cols); - COPY_NODE_FIELD(selectStmt); - COPY_NODE_FIELD(onConflictClause); - COPY_NODE_FIELD(returningList); - COPY_NODE_FIELD(withClause); - COPY_SCALAR_FIELD(override); - - return newnode; -} - -static DeleteStmt * -_copyDeleteStmt(const DeleteStmt *from) -{ - DeleteStmt *newnode = makeNode(DeleteStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(usingClause); - COPY_NODE_FIELD(whereClause); - COPY_NODE_FIELD(returningList); - COPY_NODE_FIELD(withClause); - - return newnode; -} - -static UpdateStmt * -_copyUpdateStmt(const UpdateStmt *from) -{ - UpdateStmt *newnode = makeNode(UpdateStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(whereClause); - COPY_NODE_FIELD(fromClause); - COPY_NODE_FIELD(returningList); - COPY_NODE_FIELD(withClause); - - return newnode; -} - -static MergeStmt * -_copyMergeStmt(const MergeStmt *from) -{ - MergeStmt *newnode = makeNode(MergeStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(sourceRelation); - COPY_NODE_FIELD(joinCondition); - COPY_NODE_FIELD(mergeWhenClauses); - COPY_NODE_FIELD(withClause); - - return newnode; -} - -static SelectStmt * -_copySelectStmt(const SelectStmt *from) -{ - SelectStmt *newnode = makeNode(SelectStmt); - - COPY_NODE_FIELD(distinctClause); - COPY_NODE_FIELD(intoClause); - COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(fromClause); - COPY_NODE_FIELD(whereClause); - COPY_NODE_FIELD(groupClause); - COPY_SCALAR_FIELD(groupDistinct); - COPY_NODE_FIELD(havingClause); - COPY_NODE_FIELD(windowClause); - COPY_NODE_FIELD(valuesLists); - COPY_NODE_FIELD(sortClause); - COPY_NODE_FIELD(limitOffset); - COPY_NODE_FIELD(limitCount); - COPY_SCALAR_FIELD(limitOption); - COPY_NODE_FIELD(lockingClause); - COPY_NODE_FIELD(withClause); - COPY_SCALAR_FIELD(op); - COPY_SCALAR_FIELD(all); - COPY_NODE_FIELD(larg); - COPY_NODE_FIELD(rarg); - - return newnode; -} - -static SetOperationStmt * -_copySetOperationStmt(const SetOperationStmt *from) -{ - SetOperationStmt *newnode = makeNode(SetOperationStmt); - - COPY_SCALAR_FIELD(op); - COPY_SCALAR_FIELD(all); - COPY_NODE_FIELD(larg); - COPY_NODE_FIELD(rarg); - COPY_NODE_FIELD(colTypes); - COPY_NODE_FIELD(colTypmods); - COPY_NODE_FIELD(colCollations); - COPY_NODE_FIELD(groupClauses); - - return newnode; -} - -static ReturnStmt * -_copyReturnStmt(const ReturnStmt *from) -{ - ReturnStmt *newnode = makeNode(ReturnStmt); - - COPY_NODE_FIELD(returnval); - - return newnode; -} - -static PLAssignStmt * -_copyPLAssignStmt(const PLAssignStmt *from) -{ - PLAssignStmt *newnode = makeNode(PLAssignStmt); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(indirection); - COPY_SCALAR_FIELD(nnames); - COPY_NODE_FIELD(val); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static AlterTableStmt * -_copyAlterTableStmt(const AlterTableStmt *from) -{ - AlterTableStmt *newnode = makeNode(AlterTableStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(cmds); - COPY_SCALAR_FIELD(objtype); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static AlterTableCmd * -_copyAlterTableCmd(const AlterTableCmd *from) -{ - AlterTableCmd *newnode = makeNode(AlterTableCmd); - - COPY_SCALAR_FIELD(subtype); - COPY_STRING_FIELD(name); - COPY_SCALAR_FIELD(num); - COPY_NODE_FIELD(newowner); - COPY_NODE_FIELD(def); - COPY_SCALAR_FIELD(behavior); - COPY_SCALAR_FIELD(missing_ok); - COPY_SCALAR_FIELD(recurse); - - return newnode; -} - -static AlterCollationStmt * -_copyAlterCollationStmt(const AlterCollationStmt *from) -{ - AlterCollationStmt *newnode = makeNode(AlterCollationStmt); - - COPY_NODE_FIELD(collname); - - return newnode; -} - -static AlterDomainStmt * -_copyAlterDomainStmt(const AlterDomainStmt *from) -{ - AlterDomainStmt *newnode = makeNode(AlterDomainStmt); - - COPY_SCALAR_FIELD(subtype); - COPY_NODE_FIELD(typeName); - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(def); - COPY_SCALAR_FIELD(behavior); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static GrantStmt * -_copyGrantStmt(const GrantStmt *from) -{ - GrantStmt *newnode = makeNode(GrantStmt); - - COPY_SCALAR_FIELD(is_grant); - COPY_SCALAR_FIELD(targtype); - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(objects); - COPY_NODE_FIELD(privileges); - COPY_NODE_FIELD(grantees); - COPY_SCALAR_FIELD(grant_option); - COPY_NODE_FIELD(grantor); - COPY_SCALAR_FIELD(behavior); - - return newnode; -} - -static ObjectWithArgs * -_copyObjectWithArgs(const ObjectWithArgs *from) -{ - ObjectWithArgs *newnode = makeNode(ObjectWithArgs); - - COPY_NODE_FIELD(objname); - COPY_NODE_FIELD(objargs); - COPY_NODE_FIELD(objfuncargs); - COPY_SCALAR_FIELD(args_unspecified); - - return newnode; -} - -static AccessPriv * -_copyAccessPriv(const AccessPriv *from) -{ - AccessPriv *newnode = makeNode(AccessPriv); - - COPY_STRING_FIELD(priv_name); - COPY_NODE_FIELD(cols); - - return newnode; -} - -static GrantRoleStmt * -_copyGrantRoleStmt(const GrantRoleStmt *from) -{ - GrantRoleStmt *newnode = makeNode(GrantRoleStmt); - - COPY_NODE_FIELD(granted_roles); - COPY_NODE_FIELD(grantee_roles); - COPY_SCALAR_FIELD(is_grant); - COPY_SCALAR_FIELD(admin_opt); - COPY_NODE_FIELD(grantor); - COPY_SCALAR_FIELD(behavior); - - return newnode; -} - -static AlterDefaultPrivilegesStmt * -_copyAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *from) -{ - AlterDefaultPrivilegesStmt *newnode = makeNode(AlterDefaultPrivilegesStmt); - - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(action); - - return newnode; -} - -static DeclareCursorStmt * -_copyDeclareCursorStmt(const DeclareCursorStmt *from) -{ - DeclareCursorStmt *newnode = makeNode(DeclareCursorStmt); - - COPY_STRING_FIELD(portalname); - COPY_SCALAR_FIELD(options); - COPY_NODE_FIELD(query); - - return newnode; -} - -static ClosePortalStmt * -_copyClosePortalStmt(const ClosePortalStmt *from) -{ - ClosePortalStmt *newnode = makeNode(ClosePortalStmt); - - COPY_STRING_FIELD(portalname); - - return newnode; -} - -static CallStmt * -_copyCallStmt(const CallStmt *from) -{ - CallStmt *newnode = makeNode(CallStmt); - - COPY_NODE_FIELD(funccall); - COPY_NODE_FIELD(funcexpr); - COPY_NODE_FIELD(outargs); - - return newnode; -} - -static ClusterStmt * -_copyClusterStmt(const ClusterStmt *from) -{ - ClusterStmt *newnode = makeNode(ClusterStmt); - - COPY_NODE_FIELD(relation); - COPY_STRING_FIELD(indexname); - COPY_NODE_FIELD(params); - - return newnode; -} - -static CopyStmt * -_copyCopyStmt(const CopyStmt *from) -{ - CopyStmt *newnode = makeNode(CopyStmt); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(query); - COPY_NODE_FIELD(attlist); - COPY_SCALAR_FIELD(is_from); - COPY_SCALAR_FIELD(is_program); - COPY_STRING_FIELD(filename); - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(whereClause); - - return newnode; -} - -/* - * CopyCreateStmtFields - * - * This function copies the fields of the CreateStmt node. It is used by - * copy functions for classes which inherit from CreateStmt. - */ -static void -CopyCreateStmtFields(const CreateStmt *from, CreateStmt *newnode) -{ - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(tableElts); - COPY_NODE_FIELD(inhRelations); - COPY_NODE_FIELD(partspec); - COPY_NODE_FIELD(partbound); - COPY_NODE_FIELD(ofTypename); - COPY_NODE_FIELD(constraints); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(oncommit); - COPY_STRING_FIELD(tablespacename); - COPY_STRING_FIELD(accessMethod); - COPY_SCALAR_FIELD(if_not_exists); -} - -static CreateStmt * -_copyCreateStmt(const CreateStmt *from) -{ - CreateStmt *newnode = makeNode(CreateStmt); - - CopyCreateStmtFields(from, newnode); - - return newnode; -} - -static TableLikeClause * -_copyTableLikeClause(const TableLikeClause *from) -{ - TableLikeClause *newnode = makeNode(TableLikeClause); - - COPY_NODE_FIELD(relation); - COPY_SCALAR_FIELD(options); - COPY_SCALAR_FIELD(relationOid); - - return newnode; -} - -static DefineStmt * -_copyDefineStmt(const DefineStmt *from) -{ - DefineStmt *newnode = makeNode(DefineStmt); - - COPY_SCALAR_FIELD(kind); - COPY_SCALAR_FIELD(oldstyle); - COPY_NODE_FIELD(defnames); - COPY_NODE_FIELD(args); - COPY_NODE_FIELD(definition); - COPY_SCALAR_FIELD(if_not_exists); - COPY_SCALAR_FIELD(replace); - - return newnode; -} - -static DropStmt * -_copyDropStmt(const DropStmt *from) -{ - DropStmt *newnode = makeNode(DropStmt); - - COPY_NODE_FIELD(objects); - COPY_SCALAR_FIELD(removeType); - COPY_SCALAR_FIELD(behavior); - COPY_SCALAR_FIELD(missing_ok); - COPY_SCALAR_FIELD(concurrent); - - return newnode; -} - -static TruncateStmt * -_copyTruncateStmt(const TruncateStmt *from) -{ - TruncateStmt *newnode = makeNode(TruncateStmt); - - COPY_NODE_FIELD(relations); - COPY_SCALAR_FIELD(restart_seqs); - COPY_SCALAR_FIELD(behavior); - - return newnode; -} - -static CommentStmt * -_copyCommentStmt(const CommentStmt *from) -{ - CommentStmt *newnode = makeNode(CommentStmt); - - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(object); - COPY_STRING_FIELD(comment); - - return newnode; -} - -static SecLabelStmt * -_copySecLabelStmt(const SecLabelStmt *from) -{ - SecLabelStmt *newnode = makeNode(SecLabelStmt); - - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(object); - COPY_STRING_FIELD(provider); - COPY_STRING_FIELD(label); - - return newnode; -} - -static FetchStmt * -_copyFetchStmt(const FetchStmt *from) -{ - FetchStmt *newnode = makeNode(FetchStmt); - - COPY_SCALAR_FIELD(direction); - COPY_SCALAR_FIELD(howMany); - COPY_STRING_FIELD(portalname); - COPY_SCALAR_FIELD(ismove); - - return newnode; -} - -static IndexStmt * -_copyIndexStmt(const IndexStmt *from) -{ - IndexStmt *newnode = makeNode(IndexStmt); - - COPY_STRING_FIELD(idxname); - COPY_NODE_FIELD(relation); - COPY_STRING_FIELD(accessMethod); - COPY_STRING_FIELD(tableSpace); - COPY_NODE_FIELD(indexParams); - COPY_NODE_FIELD(indexIncludingParams); - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(whereClause); - COPY_NODE_FIELD(excludeOpNames); - COPY_STRING_FIELD(idxcomment); - COPY_SCALAR_FIELD(indexOid); - COPY_SCALAR_FIELD(oldNode); - COPY_SCALAR_FIELD(oldCreateSubid); - COPY_SCALAR_FIELD(oldFirstRelfilenodeSubid); - COPY_SCALAR_FIELD(unique); - COPY_SCALAR_FIELD(nulls_not_distinct); - COPY_SCALAR_FIELD(primary); - COPY_SCALAR_FIELD(isconstraint); - COPY_SCALAR_FIELD(deferrable); - COPY_SCALAR_FIELD(initdeferred); - COPY_SCALAR_FIELD(transformed); - COPY_SCALAR_FIELD(concurrent); - COPY_SCALAR_FIELD(if_not_exists); - COPY_SCALAR_FIELD(reset_default_tblspc); - - return newnode; -} - -static CreateStatsStmt * -_copyCreateStatsStmt(const CreateStatsStmt *from) -{ - CreateStatsStmt *newnode = makeNode(CreateStatsStmt); - - COPY_NODE_FIELD(defnames); - COPY_NODE_FIELD(stat_types); - COPY_NODE_FIELD(exprs); - COPY_NODE_FIELD(relations); - COPY_STRING_FIELD(stxcomment); - COPY_SCALAR_FIELD(transformed); - COPY_SCALAR_FIELD(if_not_exists); - - return newnode; -} - -static AlterStatsStmt * -_copyAlterStatsStmt(const AlterStatsStmt *from) -{ - AlterStatsStmt *newnode = makeNode(AlterStatsStmt); - - COPY_NODE_FIELD(defnames); - COPY_SCALAR_FIELD(stxstattarget); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static CreateFunctionStmt * -_copyCreateFunctionStmt(const CreateFunctionStmt *from) -{ - CreateFunctionStmt *newnode = makeNode(CreateFunctionStmt); - - COPY_SCALAR_FIELD(is_procedure); - COPY_SCALAR_FIELD(replace); - COPY_NODE_FIELD(funcname); - COPY_NODE_FIELD(parameters); - COPY_NODE_FIELD(returnType); - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(sql_body); - - return newnode; -} - -static FunctionParameter * -_copyFunctionParameter(const FunctionParameter *from) -{ - FunctionParameter *newnode = makeNode(FunctionParameter); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(argType); - COPY_SCALAR_FIELD(mode); - COPY_NODE_FIELD(defexpr); - - return newnode; -} - -static AlterFunctionStmt * -_copyAlterFunctionStmt(const AlterFunctionStmt *from) -{ - AlterFunctionStmt *newnode = makeNode(AlterFunctionStmt); - - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(func); - COPY_NODE_FIELD(actions); - - return newnode; -} - -static DoStmt * -_copyDoStmt(const DoStmt *from) -{ - DoStmt *newnode = makeNode(DoStmt); - - COPY_NODE_FIELD(args); - - return newnode; -} - -static RenameStmt * -_copyRenameStmt(const RenameStmt *from) -{ - RenameStmt *newnode = makeNode(RenameStmt); - - COPY_SCALAR_FIELD(renameType); - COPY_SCALAR_FIELD(relationType); - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(object); - COPY_STRING_FIELD(subname); - COPY_STRING_FIELD(newname); - COPY_SCALAR_FIELD(behavior); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static AlterObjectDependsStmt * -_copyAlterObjectDependsStmt(const AlterObjectDependsStmt *from) -{ - AlterObjectDependsStmt *newnode = makeNode(AlterObjectDependsStmt); - - COPY_SCALAR_FIELD(objectType); - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(object); - COPY_NODE_FIELD(extname); - COPY_SCALAR_FIELD(remove); - - return newnode; -} - -static AlterObjectSchemaStmt * -_copyAlterObjectSchemaStmt(const AlterObjectSchemaStmt *from) -{ - AlterObjectSchemaStmt *newnode = makeNode(AlterObjectSchemaStmt); - - COPY_SCALAR_FIELD(objectType); - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(object); - COPY_STRING_FIELD(newschema); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static AlterOwnerStmt * -_copyAlterOwnerStmt(const AlterOwnerStmt *from) -{ - AlterOwnerStmt *newnode = makeNode(AlterOwnerStmt); - - COPY_SCALAR_FIELD(objectType); - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(object); - COPY_NODE_FIELD(newowner); - - return newnode; -} - -static AlterOperatorStmt * -_copyAlterOperatorStmt(const AlterOperatorStmt *from) -{ - AlterOperatorStmt *newnode = makeNode(AlterOperatorStmt); - - COPY_NODE_FIELD(opername); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterTypeStmt * -_copyAlterTypeStmt(const AlterTypeStmt *from) -{ - AlterTypeStmt *newnode = makeNode(AlterTypeStmt); - - COPY_NODE_FIELD(typeName); - COPY_NODE_FIELD(options); - - return newnode; -} - -static RuleStmt * -_copyRuleStmt(const RuleStmt *from) -{ - RuleStmt *newnode = makeNode(RuleStmt); - - COPY_NODE_FIELD(relation); - COPY_STRING_FIELD(rulename); - COPY_NODE_FIELD(whereClause); - COPY_SCALAR_FIELD(event); - COPY_SCALAR_FIELD(instead); - COPY_NODE_FIELD(actions); - COPY_SCALAR_FIELD(replace); - - return newnode; -} - -static NotifyStmt * -_copyNotifyStmt(const NotifyStmt *from) -{ - NotifyStmt *newnode = makeNode(NotifyStmt); - - COPY_STRING_FIELD(conditionname); - COPY_STRING_FIELD(payload); - - return newnode; -} - -static ListenStmt * -_copyListenStmt(const ListenStmt *from) -{ - ListenStmt *newnode = makeNode(ListenStmt); - - COPY_STRING_FIELD(conditionname); - - return newnode; -} - -static UnlistenStmt * -_copyUnlistenStmt(const UnlistenStmt *from) -{ - UnlistenStmt *newnode = makeNode(UnlistenStmt); - - COPY_STRING_FIELD(conditionname); - - return newnode; -} - -static TransactionStmt * -_copyTransactionStmt(const TransactionStmt *from) -{ - TransactionStmt *newnode = makeNode(TransactionStmt); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(options); - COPY_STRING_FIELD(savepoint_name); - COPY_STRING_FIELD(gid); - COPY_SCALAR_FIELD(chain); - - return newnode; -} - -static CompositeTypeStmt * -_copyCompositeTypeStmt(const CompositeTypeStmt *from) -{ - CompositeTypeStmt *newnode = makeNode(CompositeTypeStmt); - - COPY_NODE_FIELD(typevar); - COPY_NODE_FIELD(coldeflist); - - return newnode; -} - -static CreateEnumStmt * -_copyCreateEnumStmt(const CreateEnumStmt *from) -{ - CreateEnumStmt *newnode = makeNode(CreateEnumStmt); - - COPY_NODE_FIELD(typeName); - COPY_NODE_FIELD(vals); - - return newnode; -} - -static CreateRangeStmt * -_copyCreateRangeStmt(const CreateRangeStmt *from) -{ - CreateRangeStmt *newnode = makeNode(CreateRangeStmt); - - COPY_NODE_FIELD(typeName); - COPY_NODE_FIELD(params); - - return newnode; -} - -static AlterEnumStmt * -_copyAlterEnumStmt(const AlterEnumStmt *from) -{ - AlterEnumStmt *newnode = makeNode(AlterEnumStmt); - - COPY_NODE_FIELD(typeName); - COPY_STRING_FIELD(oldVal); - COPY_STRING_FIELD(newVal); - COPY_STRING_FIELD(newValNeighbor); - COPY_SCALAR_FIELD(newValIsAfter); - COPY_SCALAR_FIELD(skipIfNewValExists); - - return newnode; -} - -static ViewStmt * -_copyViewStmt(const ViewStmt *from) -{ - ViewStmt *newnode = makeNode(ViewStmt); - - COPY_NODE_FIELD(view); - COPY_NODE_FIELD(aliases); - COPY_NODE_FIELD(query); - COPY_SCALAR_FIELD(replace); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(withCheckOption); - - return newnode; -} - -static LoadStmt * -_copyLoadStmt(const LoadStmt *from) -{ - LoadStmt *newnode = makeNode(LoadStmt); - - COPY_STRING_FIELD(filename); - - return newnode; -} - -static CreateDomainStmt * -_copyCreateDomainStmt(const CreateDomainStmt *from) -{ - CreateDomainStmt *newnode = makeNode(CreateDomainStmt); - - COPY_NODE_FIELD(domainname); - COPY_NODE_FIELD(typeName); - COPY_NODE_FIELD(collClause); - COPY_NODE_FIELD(constraints); - - return newnode; -} - -static CreateOpClassStmt * -_copyCreateOpClassStmt(const CreateOpClassStmt *from) -{ - CreateOpClassStmt *newnode = makeNode(CreateOpClassStmt); - - COPY_NODE_FIELD(opclassname); - COPY_NODE_FIELD(opfamilyname); - COPY_STRING_FIELD(amname); - COPY_NODE_FIELD(datatype); - COPY_NODE_FIELD(items); - COPY_SCALAR_FIELD(isDefault); - - return newnode; -} - -static CreateOpClassItem * -_copyCreateOpClassItem(const CreateOpClassItem *from) -{ - CreateOpClassItem *newnode = makeNode(CreateOpClassItem); - - COPY_SCALAR_FIELD(itemtype); - COPY_NODE_FIELD(name); - COPY_SCALAR_FIELD(number); - COPY_NODE_FIELD(order_family); - COPY_NODE_FIELD(class_args); - COPY_NODE_FIELD(storedtype); - - return newnode; -} - -static CreateOpFamilyStmt * -_copyCreateOpFamilyStmt(const CreateOpFamilyStmt *from) -{ - CreateOpFamilyStmt *newnode = makeNode(CreateOpFamilyStmt); - - COPY_NODE_FIELD(opfamilyname); - COPY_STRING_FIELD(amname); - - return newnode; -} - -static AlterOpFamilyStmt * -_copyAlterOpFamilyStmt(const AlterOpFamilyStmt *from) -{ - AlterOpFamilyStmt *newnode = makeNode(AlterOpFamilyStmt); - - COPY_NODE_FIELD(opfamilyname); - COPY_STRING_FIELD(amname); - COPY_SCALAR_FIELD(isDrop); - COPY_NODE_FIELD(items); - - return newnode; -} - -static CreatedbStmt * -_copyCreatedbStmt(const CreatedbStmt *from) -{ - CreatedbStmt *newnode = makeNode(CreatedbStmt); - - COPY_STRING_FIELD(dbname); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterDatabaseStmt * -_copyAlterDatabaseStmt(const AlterDatabaseStmt *from) -{ - AlterDatabaseStmt *newnode = makeNode(AlterDatabaseStmt); - - COPY_STRING_FIELD(dbname); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterDatabaseRefreshCollStmt * -_copyAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *from) -{ - AlterDatabaseRefreshCollStmt *newnode = makeNode(AlterDatabaseRefreshCollStmt); - - COPY_STRING_FIELD(dbname); - - return newnode; -} - -static AlterDatabaseSetStmt * -_copyAlterDatabaseSetStmt(const AlterDatabaseSetStmt *from) -{ - AlterDatabaseSetStmt *newnode = makeNode(AlterDatabaseSetStmt); - - COPY_STRING_FIELD(dbname); - COPY_NODE_FIELD(setstmt); - - return newnode; -} - -static DropdbStmt * -_copyDropdbStmt(const DropdbStmt *from) -{ - DropdbStmt *newnode = makeNode(DropdbStmt); - - COPY_STRING_FIELD(dbname); - COPY_SCALAR_FIELD(missing_ok); - COPY_NODE_FIELD(options); - - return newnode; -} - -static VacuumStmt * -_copyVacuumStmt(const VacuumStmt *from) -{ - VacuumStmt *newnode = makeNode(VacuumStmt); - - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(rels); - COPY_SCALAR_FIELD(is_vacuumcmd); - - return newnode; -} - -static VacuumRelation * -_copyVacuumRelation(const VacuumRelation *from) -{ - VacuumRelation *newnode = makeNode(VacuumRelation); - - COPY_NODE_FIELD(relation); - COPY_SCALAR_FIELD(oid); - COPY_NODE_FIELD(va_cols); - - return newnode; -} - -static ExplainStmt * -_copyExplainStmt(const ExplainStmt *from) -{ - ExplainStmt *newnode = makeNode(ExplainStmt); - - COPY_NODE_FIELD(query); - COPY_NODE_FIELD(options); - - return newnode; -} - -static CreateTableAsStmt * -_copyCreateTableAsStmt(const CreateTableAsStmt *from) -{ - CreateTableAsStmt *newnode = makeNode(CreateTableAsStmt); - - COPY_NODE_FIELD(query); - COPY_NODE_FIELD(into); - COPY_SCALAR_FIELD(objtype); - COPY_SCALAR_FIELD(is_select_into); - COPY_SCALAR_FIELD(if_not_exists); - - return newnode; -} - -static RefreshMatViewStmt * -_copyRefreshMatViewStmt(const RefreshMatViewStmt *from) -{ - RefreshMatViewStmt *newnode = makeNode(RefreshMatViewStmt); - - COPY_SCALAR_FIELD(concurrent); - COPY_SCALAR_FIELD(skipData); - COPY_NODE_FIELD(relation); - - return newnode; -} - -static ReplicaIdentityStmt * -_copyReplicaIdentityStmt(const ReplicaIdentityStmt *from) -{ - ReplicaIdentityStmt *newnode = makeNode(ReplicaIdentityStmt); - - COPY_SCALAR_FIELD(identity_type); - COPY_STRING_FIELD(name); - - return newnode; -} - -static AlterSystemStmt * -_copyAlterSystemStmt(const AlterSystemStmt *from) -{ - AlterSystemStmt *newnode = makeNode(AlterSystemStmt); - - COPY_NODE_FIELD(setstmt); - - return newnode; -} - -static CreateSeqStmt * -_copyCreateSeqStmt(const CreateSeqStmt *from) -{ - CreateSeqStmt *newnode = makeNode(CreateSeqStmt); - - COPY_NODE_FIELD(sequence); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(ownerId); - COPY_SCALAR_FIELD(for_identity); - COPY_SCALAR_FIELD(if_not_exists); - - return newnode; -} - -static AlterSeqStmt * -_copyAlterSeqStmt(const AlterSeqStmt *from) -{ - AlterSeqStmt *newnode = makeNode(AlterSeqStmt); - - COPY_NODE_FIELD(sequence); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(for_identity); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static VariableSetStmt * -_copyVariableSetStmt(const VariableSetStmt *from) -{ - VariableSetStmt *newnode = makeNode(VariableSetStmt); - - COPY_SCALAR_FIELD(kind); - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(is_local); - - return newnode; -} - -static VariableShowStmt * -_copyVariableShowStmt(const VariableShowStmt *from) -{ - VariableShowStmt *newnode = makeNode(VariableShowStmt); - - COPY_STRING_FIELD(name); - - return newnode; -} - -static DiscardStmt * -_copyDiscardStmt(const DiscardStmt *from) -{ - DiscardStmt *newnode = makeNode(DiscardStmt); - - COPY_SCALAR_FIELD(target); - - return newnode; -} - -static CreateTableSpaceStmt * -_copyCreateTableSpaceStmt(const CreateTableSpaceStmt *from) -{ - CreateTableSpaceStmt *newnode = makeNode(CreateTableSpaceStmt); - - COPY_STRING_FIELD(tablespacename); - COPY_NODE_FIELD(owner); - COPY_STRING_FIELD(location); - COPY_NODE_FIELD(options); - - return newnode; -} - -static DropTableSpaceStmt * -_copyDropTableSpaceStmt(const DropTableSpaceStmt *from) -{ - DropTableSpaceStmt *newnode = makeNode(DropTableSpaceStmt); - - COPY_STRING_FIELD(tablespacename); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static AlterTableSpaceOptionsStmt * -_copyAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *from) -{ - AlterTableSpaceOptionsStmt *newnode = makeNode(AlterTableSpaceOptionsStmt); - - COPY_STRING_FIELD(tablespacename); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(isReset); - - return newnode; -} - -static AlterTableMoveAllStmt * -_copyAlterTableMoveAllStmt(const AlterTableMoveAllStmt *from) -{ - AlterTableMoveAllStmt *newnode = makeNode(AlterTableMoveAllStmt); - - COPY_STRING_FIELD(orig_tablespacename); - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(roles); - COPY_STRING_FIELD(new_tablespacename); - COPY_SCALAR_FIELD(nowait); - - return newnode; -} - -static CreateExtensionStmt * -_copyCreateExtensionStmt(const CreateExtensionStmt *from) -{ - CreateExtensionStmt *newnode = makeNode(CreateExtensionStmt); - - COPY_STRING_FIELD(extname); - COPY_SCALAR_FIELD(if_not_exists); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterExtensionStmt * -_copyAlterExtensionStmt(const AlterExtensionStmt *from) -{ - AlterExtensionStmt *newnode = makeNode(AlterExtensionStmt); - - COPY_STRING_FIELD(extname); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterExtensionContentsStmt * -_copyAlterExtensionContentsStmt(const AlterExtensionContentsStmt *from) -{ - AlterExtensionContentsStmt *newnode = makeNode(AlterExtensionContentsStmt); - - COPY_STRING_FIELD(extname); - COPY_SCALAR_FIELD(action); - COPY_SCALAR_FIELD(objtype); - COPY_NODE_FIELD(object); - - return newnode; -} - -static CreateFdwStmt * -_copyCreateFdwStmt(const CreateFdwStmt *from) -{ - CreateFdwStmt *newnode = makeNode(CreateFdwStmt); - - COPY_STRING_FIELD(fdwname); - COPY_NODE_FIELD(func_options); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterFdwStmt * -_copyAlterFdwStmt(const AlterFdwStmt *from) -{ - AlterFdwStmt *newnode = makeNode(AlterFdwStmt); - - COPY_STRING_FIELD(fdwname); - COPY_NODE_FIELD(func_options); - COPY_NODE_FIELD(options); - - return newnode; -} - -static CreateForeignServerStmt * -_copyCreateForeignServerStmt(const CreateForeignServerStmt *from) -{ - CreateForeignServerStmt *newnode = makeNode(CreateForeignServerStmt); - - COPY_STRING_FIELD(servername); - COPY_STRING_FIELD(servertype); - COPY_STRING_FIELD(version); - COPY_STRING_FIELD(fdwname); - COPY_SCALAR_FIELD(if_not_exists); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterForeignServerStmt * -_copyAlterForeignServerStmt(const AlterForeignServerStmt *from) -{ - AlterForeignServerStmt *newnode = makeNode(AlterForeignServerStmt); - - COPY_STRING_FIELD(servername); - COPY_STRING_FIELD(version); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(has_version); - - return newnode; -} - -static CreateUserMappingStmt * -_copyCreateUserMappingStmt(const CreateUserMappingStmt *from) -{ - CreateUserMappingStmt *newnode = makeNode(CreateUserMappingStmt); - - COPY_NODE_FIELD(user); - COPY_STRING_FIELD(servername); - COPY_SCALAR_FIELD(if_not_exists); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterUserMappingStmt * -_copyAlterUserMappingStmt(const AlterUserMappingStmt *from) -{ - AlterUserMappingStmt *newnode = makeNode(AlterUserMappingStmt); - - COPY_NODE_FIELD(user); - COPY_STRING_FIELD(servername); - COPY_NODE_FIELD(options); - - return newnode; -} - -static DropUserMappingStmt * -_copyDropUserMappingStmt(const DropUserMappingStmt *from) -{ - DropUserMappingStmt *newnode = makeNode(DropUserMappingStmt); - - COPY_NODE_FIELD(user); - COPY_STRING_FIELD(servername); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static CreateForeignTableStmt * -_copyCreateForeignTableStmt(const CreateForeignTableStmt *from) -{ - CreateForeignTableStmt *newnode = makeNode(CreateForeignTableStmt); - - CopyCreateStmtFields((const CreateStmt *) from, (CreateStmt *) newnode); - - COPY_STRING_FIELD(servername); - COPY_NODE_FIELD(options); - - return newnode; -} - -static ImportForeignSchemaStmt * -_copyImportForeignSchemaStmt(const ImportForeignSchemaStmt *from) -{ - ImportForeignSchemaStmt *newnode = makeNode(ImportForeignSchemaStmt); - - COPY_STRING_FIELD(server_name); - COPY_STRING_FIELD(remote_schema); - COPY_STRING_FIELD(local_schema); - COPY_SCALAR_FIELD(list_type); - COPY_NODE_FIELD(table_list); - COPY_NODE_FIELD(options); - - return newnode; -} - -static CreateTransformStmt * -_copyCreateTransformStmt(const CreateTransformStmt *from) -{ - CreateTransformStmt *newnode = makeNode(CreateTransformStmt); - - COPY_SCALAR_FIELD(replace); - COPY_NODE_FIELD(type_name); - COPY_STRING_FIELD(lang); - COPY_NODE_FIELD(fromsql); - COPY_NODE_FIELD(tosql); - - return newnode; -} - -static CreateAmStmt * -_copyCreateAmStmt(const CreateAmStmt *from) -{ - CreateAmStmt *newnode = makeNode(CreateAmStmt); - - COPY_STRING_FIELD(amname); - COPY_NODE_FIELD(handler_name); - COPY_SCALAR_FIELD(amtype); - - return newnode; -} - -static CreateTrigStmt * -_copyCreateTrigStmt(const CreateTrigStmt *from) -{ - CreateTrigStmt *newnode = makeNode(CreateTrigStmt); - - COPY_SCALAR_FIELD(replace); - COPY_SCALAR_FIELD(isconstraint); - COPY_STRING_FIELD(trigname); - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(funcname); - COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(row); - COPY_SCALAR_FIELD(timing); - COPY_SCALAR_FIELD(events); - COPY_NODE_FIELD(columns); - COPY_NODE_FIELD(whenClause); - COPY_NODE_FIELD(transitionRels); - COPY_SCALAR_FIELD(deferrable); - COPY_SCALAR_FIELD(initdeferred); - COPY_NODE_FIELD(constrrel); - - return newnode; -} - -static CreateEventTrigStmt * -_copyCreateEventTrigStmt(const CreateEventTrigStmt *from) -{ - CreateEventTrigStmt *newnode = makeNode(CreateEventTrigStmt); - - COPY_STRING_FIELD(trigname); - COPY_STRING_FIELD(eventname); - COPY_NODE_FIELD(whenclause); - COPY_NODE_FIELD(funcname); - - return newnode; -} - -static AlterEventTrigStmt * -_copyAlterEventTrigStmt(const AlterEventTrigStmt *from) -{ - AlterEventTrigStmt *newnode = makeNode(AlterEventTrigStmt); - - COPY_STRING_FIELD(trigname); - COPY_SCALAR_FIELD(tgenabled); - - return newnode; -} - -static CreatePLangStmt * -_copyCreatePLangStmt(const CreatePLangStmt *from) -{ - CreatePLangStmt *newnode = makeNode(CreatePLangStmt); - - COPY_SCALAR_FIELD(replace); - COPY_STRING_FIELD(plname); - COPY_NODE_FIELD(plhandler); - COPY_NODE_FIELD(plinline); - COPY_NODE_FIELD(plvalidator); - COPY_SCALAR_FIELD(pltrusted); - - return newnode; -} - -static CreateRoleStmt * -_copyCreateRoleStmt(const CreateRoleStmt *from) -{ - CreateRoleStmt *newnode = makeNode(CreateRoleStmt); - - COPY_SCALAR_FIELD(stmt_type); - COPY_STRING_FIELD(role); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterRoleStmt * -_copyAlterRoleStmt(const AlterRoleStmt *from) -{ - AlterRoleStmt *newnode = makeNode(AlterRoleStmt); - - COPY_NODE_FIELD(role); - COPY_NODE_FIELD(options); - COPY_SCALAR_FIELD(action); - - return newnode; -} - -static AlterRoleSetStmt * -_copyAlterRoleSetStmt(const AlterRoleSetStmt *from) -{ - AlterRoleSetStmt *newnode = makeNode(AlterRoleSetStmt); - - COPY_NODE_FIELD(role); - COPY_STRING_FIELD(database); - COPY_NODE_FIELD(setstmt); - - return newnode; -} - -static DropRoleStmt * -_copyDropRoleStmt(const DropRoleStmt *from) -{ - DropRoleStmt *newnode = makeNode(DropRoleStmt); - - COPY_NODE_FIELD(roles); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static LockStmt * -_copyLockStmt(const LockStmt *from) -{ - LockStmt *newnode = makeNode(LockStmt); - - COPY_NODE_FIELD(relations); - COPY_SCALAR_FIELD(mode); - COPY_SCALAR_FIELD(nowait); - - return newnode; -} - -static ConstraintsSetStmt * -_copyConstraintsSetStmt(const ConstraintsSetStmt *from) -{ - ConstraintsSetStmt *newnode = makeNode(ConstraintsSetStmt); - - COPY_NODE_FIELD(constraints); - COPY_SCALAR_FIELD(deferred); - - return newnode; -} - -static ReindexStmt * -_copyReindexStmt(const ReindexStmt *from) -{ - ReindexStmt *newnode = makeNode(ReindexStmt); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(relation); - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(params); - - return newnode; -} - -static CreateSchemaStmt * -_copyCreateSchemaStmt(const CreateSchemaStmt *from) -{ - CreateSchemaStmt *newnode = makeNode(CreateSchemaStmt); - - COPY_STRING_FIELD(schemaname); - COPY_NODE_FIELD(authrole); - COPY_NODE_FIELD(schemaElts); - COPY_SCALAR_FIELD(if_not_exists); - - return newnode; -} - -static CreateConversionStmt * -_copyCreateConversionStmt(const CreateConversionStmt *from) -{ - CreateConversionStmt *newnode = makeNode(CreateConversionStmt); - - COPY_NODE_FIELD(conversion_name); - COPY_STRING_FIELD(for_encoding_name); - COPY_STRING_FIELD(to_encoding_name); - COPY_NODE_FIELD(func_name); - COPY_SCALAR_FIELD(def); - - return newnode; -} - -static CreateCastStmt * -_copyCreateCastStmt(const CreateCastStmt *from) -{ - CreateCastStmt *newnode = makeNode(CreateCastStmt); - - COPY_NODE_FIELD(sourcetype); - COPY_NODE_FIELD(targettype); - COPY_NODE_FIELD(func); - COPY_SCALAR_FIELD(context); - COPY_SCALAR_FIELD(inout); - - return newnode; -} - -static PrepareStmt * -_copyPrepareStmt(const PrepareStmt *from) -{ - PrepareStmt *newnode = makeNode(PrepareStmt); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(argtypes); - COPY_NODE_FIELD(query); - - return newnode; -} - -static ExecuteStmt * -_copyExecuteStmt(const ExecuteStmt *from) -{ - ExecuteStmt *newnode = makeNode(ExecuteStmt); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(params); - - return newnode; -} - -static DeallocateStmt * -_copyDeallocateStmt(const DeallocateStmt *from) -{ - DeallocateStmt *newnode = makeNode(DeallocateStmt); - - COPY_STRING_FIELD(name); - - return newnode; -} - -static DropOwnedStmt * -_copyDropOwnedStmt(const DropOwnedStmt *from) -{ - DropOwnedStmt *newnode = makeNode(DropOwnedStmt); - - COPY_NODE_FIELD(roles); - COPY_SCALAR_FIELD(behavior); - - return newnode; -} - -static ReassignOwnedStmt * -_copyReassignOwnedStmt(const ReassignOwnedStmt *from) -{ - ReassignOwnedStmt *newnode = makeNode(ReassignOwnedStmt); - - COPY_NODE_FIELD(roles); - COPY_NODE_FIELD(newrole); - - return newnode; -} - -static AlterTSDictionaryStmt * -_copyAlterTSDictionaryStmt(const AlterTSDictionaryStmt *from) -{ - AlterTSDictionaryStmt *newnode = makeNode(AlterTSDictionaryStmt); - - COPY_NODE_FIELD(dictname); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterTSConfigurationStmt * -_copyAlterTSConfigurationStmt(const AlterTSConfigurationStmt *from) -{ - AlterTSConfigurationStmt *newnode = makeNode(AlterTSConfigurationStmt); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(cfgname); - COPY_NODE_FIELD(tokentype); - COPY_NODE_FIELD(dicts); - COPY_SCALAR_FIELD(override); - COPY_SCALAR_FIELD(replace); - COPY_SCALAR_FIELD(missing_ok); - - return newnode; -} - -static CreatePolicyStmt * -_copyCreatePolicyStmt(const CreatePolicyStmt *from) -{ - CreatePolicyStmt *newnode = makeNode(CreatePolicyStmt); - - COPY_STRING_FIELD(policy_name); - COPY_NODE_FIELD(table); - COPY_STRING_FIELD(cmd_name); - COPY_SCALAR_FIELD(permissive); - COPY_NODE_FIELD(roles); - COPY_NODE_FIELD(qual); - COPY_NODE_FIELD(with_check); - - return newnode; -} - -static AlterPolicyStmt * -_copyAlterPolicyStmt(const AlterPolicyStmt *from) -{ - AlterPolicyStmt *newnode = makeNode(AlterPolicyStmt); - - COPY_STRING_FIELD(policy_name); - COPY_NODE_FIELD(table); - COPY_NODE_FIELD(roles); - COPY_NODE_FIELD(qual); - COPY_NODE_FIELD(with_check); - - return newnode; -} - -static PartitionElem * -_copyPartitionElem(const PartitionElem *from) -{ - PartitionElem *newnode = makeNode(PartitionElem); - - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(expr); - COPY_NODE_FIELD(collation); - COPY_NODE_FIELD(opclass); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static PartitionSpec * -_copyPartitionSpec(const PartitionSpec *from) -{ - PartitionSpec *newnode = makeNode(PartitionSpec); - - COPY_STRING_FIELD(strategy); - COPY_NODE_FIELD(partParams); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static PartitionBoundSpec * -_copyPartitionBoundSpec(const PartitionBoundSpec *from) -{ - PartitionBoundSpec *newnode = makeNode(PartitionBoundSpec); - - COPY_SCALAR_FIELD(strategy); - COPY_SCALAR_FIELD(is_default); - COPY_SCALAR_FIELD(modulus); - COPY_SCALAR_FIELD(remainder); - COPY_NODE_FIELD(listdatums); - COPY_NODE_FIELD(lowerdatums); - COPY_NODE_FIELD(upperdatums); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static PartitionRangeDatum * -_copyPartitionRangeDatum(const PartitionRangeDatum *from) -{ - PartitionRangeDatum *newnode = makeNode(PartitionRangeDatum); - - COPY_SCALAR_FIELD(kind); - COPY_NODE_FIELD(value); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static PartitionCmd * -_copyPartitionCmd(const PartitionCmd *from) -{ - PartitionCmd *newnode = makeNode(PartitionCmd); - - COPY_NODE_FIELD(name); - COPY_NODE_FIELD(bound); - COPY_SCALAR_FIELD(concurrent); - - return newnode; -} - -static PublicationObjSpec * -_copyPublicationObject(const PublicationObjSpec *from) -{ - PublicationObjSpec *newnode = makeNode(PublicationObjSpec); - - COPY_SCALAR_FIELD(pubobjtype); - COPY_STRING_FIELD(name); - COPY_NODE_FIELD(pubtable); - COPY_LOCATION_FIELD(location); - - return newnode; -} - -static PublicationTable * -_copyPublicationTable(const PublicationTable *from) -{ - PublicationTable *newnode = makeNode(PublicationTable); - - COPY_NODE_FIELD(relation); - COPY_NODE_FIELD(whereClause); - COPY_NODE_FIELD(columns); - - return newnode; -} - -static CreatePublicationStmt * -_copyCreatePublicationStmt(const CreatePublicationStmt *from) -{ - CreatePublicationStmt *newnode = makeNode(CreatePublicationStmt); - - COPY_STRING_FIELD(pubname); - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(pubobjects); - COPY_SCALAR_FIELD(for_all_tables); - - return newnode; -} - -static AlterPublicationStmt * -_copyAlterPublicationStmt(const AlterPublicationStmt *from) -{ - AlterPublicationStmt *newnode = makeNode(AlterPublicationStmt); - - COPY_STRING_FIELD(pubname); - COPY_NODE_FIELD(options); - COPY_NODE_FIELD(pubobjects); - COPY_SCALAR_FIELD(for_all_tables); - COPY_SCALAR_FIELD(action); - - return newnode; -} - -static CreateSubscriptionStmt * -_copyCreateSubscriptionStmt(const CreateSubscriptionStmt *from) -{ - CreateSubscriptionStmt *newnode = makeNode(CreateSubscriptionStmt); - - COPY_STRING_FIELD(subname); - COPY_STRING_FIELD(conninfo); - COPY_NODE_FIELD(publication); - COPY_NODE_FIELD(options); - - return newnode; -} - -static AlterSubscriptionStmt * -_copyAlterSubscriptionStmt(const AlterSubscriptionStmt *from) -{ - AlterSubscriptionStmt *newnode = makeNode(AlterSubscriptionStmt); - - COPY_SCALAR_FIELD(kind); - COPY_STRING_FIELD(subname); - COPY_STRING_FIELD(conninfo); - COPY_NODE_FIELD(publication); - COPY_NODE_FIELD(options); - - return newnode; -} - -static DropSubscriptionStmt * -_copyDropSubscriptionStmt(const DropSubscriptionStmt *from) -{ - DropSubscriptionStmt *newnode = makeNode(DropSubscriptionStmt); - - COPY_STRING_FIELD(subname); - COPY_SCALAR_FIELD(missing_ok); - COPY_SCALAR_FIELD(behavior); - - return newnode; -} - -/* **************************************************************** - * extensible.h copy functions - * **************************************************************** - */ -static ExtensibleNode * -_copyExtensibleNode(const ExtensibleNode *from) -{ - ExtensibleNode *newnode; - const ExtensibleNodeMethods *methods; - - methods = GetExtensibleNodeMethods(from->extnodename, false); - newnode = (ExtensibleNode *) newNode(methods->node_size, - T_ExtensibleNode); - COPY_STRING_FIELD(extnodename); - - /* copy the private fields */ - methods->nodeCopy(newnode, from); - - return newnode; -} - -/* **************************************************************** - * value.h copy functions - * **************************************************************** - */ -static Integer * -_copyInteger(const Integer *from) -{ - Integer *newnode = makeNode(Integer); - - COPY_SCALAR_FIELD(ival); - - return newnode; -} - -static Float * -_copyFloat(const Float *from) -{ - Float *newnode = makeNode(Float); - - COPY_STRING_FIELD(fval); - - return newnode; -} - -static Boolean * -_copyBoolean(const Boolean *from) -{ - Boolean *newnode = makeNode(Boolean); - - COPY_SCALAR_FIELD(boolval); - - return newnode; -} - -static String * -_copyString(const String *from) -{ - String *newnode = makeNode(String); - - COPY_STRING_FIELD(sval); - - return newnode; -} - -static BitString * -_copyBitString(const BitString *from) -{ - BitString *newnode = makeNode(BitString); - - COPY_STRING_FIELD(bsval); - - return newnode; -} - - -static ForeignKeyCacheInfo * -_copyForeignKeyCacheInfo(const ForeignKeyCacheInfo *from) -{ - ForeignKeyCacheInfo *newnode = makeNode(ForeignKeyCacheInfo); - - COPY_SCALAR_FIELD(conoid); - COPY_SCALAR_FIELD(conrelid); - COPY_SCALAR_FIELD(confrelid); - COPY_SCALAR_FIELD(nkeys); - COPY_ARRAY_FIELD(conkey); - COPY_ARRAY_FIELD(confkey); - COPY_ARRAY_FIELD(conpfeqop); - - return newnode; -} - -/* - * copyObjectImpl -- implementation of copyObject(); see nodes/nodes.h - * - * Create a copy of a Node tree or list. This is a "deep" copy: all - * substructure is copied too, recursively. - */ -void * -copyObjectImpl(const void *from) -{ - void *retval; - - if (from == NULL) - return NULL; - - /* Guard against stack overflow due to overly complex expressions */ - check_stack_depth(); - - switch (nodeTag(from)) - { - /* - * PLAN NODES - */ - case T_PlannedStmt: - retval = _copyPlannedStmt(from); - break; - case T_Plan: - retval = _copyPlan(from); - break; - case T_Result: - retval = _copyResult(from); - break; - case T_ProjectSet: - retval = _copyProjectSet(from); - break; - case T_ModifyTable: - retval = _copyModifyTable(from); - break; - case T_Append: - retval = _copyAppend(from); - break; - case T_MergeAppend: - retval = _copyMergeAppend(from); - break; - case T_RecursiveUnion: - retval = _copyRecursiveUnion(from); - break; - case T_BitmapAnd: - retval = _copyBitmapAnd(from); - break; - case T_BitmapOr: - retval = _copyBitmapOr(from); - break; - case T_Scan: - retval = _copyScan(from); - break; - case T_Gather: - retval = _copyGather(from); - break; - case T_GatherMerge: - retval = _copyGatherMerge(from); - break; - case T_SeqScan: - retval = _copySeqScan(from); - break; - case T_SampleScan: - retval = _copySampleScan(from); - break; - case T_IndexScan: - retval = _copyIndexScan(from); - break; - case T_IndexOnlyScan: - retval = _copyIndexOnlyScan(from); - break; - case T_BitmapIndexScan: - retval = _copyBitmapIndexScan(from); - break; - case T_BitmapHeapScan: - retval = _copyBitmapHeapScan(from); - break; - case T_TidScan: - retval = _copyTidScan(from); - break; - case T_TidRangeScan: - retval = _copyTidRangeScan(from); - break; - case T_SubqueryScan: - retval = _copySubqueryScan(from); - break; - case T_FunctionScan: - retval = _copyFunctionScan(from); - break; - case T_TableFuncScan: - retval = _copyTableFuncScan(from); - break; - case T_ValuesScan: - retval = _copyValuesScan(from); - break; - case T_CteScan: - retval = _copyCteScan(from); - break; - case T_NamedTuplestoreScan: - retval = _copyNamedTuplestoreScan(from); - break; - case T_WorkTableScan: - retval = _copyWorkTableScan(from); - break; - case T_ForeignScan: - retval = _copyForeignScan(from); - break; - case T_CustomScan: - retval = _copyCustomScan(from); - break; - case T_Join: - retval = _copyJoin(from); - break; - case T_NestLoop: - retval = _copyNestLoop(from); - break; - case T_MergeJoin: - retval = _copyMergeJoin(from); - break; - case T_HashJoin: - retval = _copyHashJoin(from); - break; - case T_Material: - retval = _copyMaterial(from); - break; - case T_Memoize: - retval = _copyMemoize(from); - break; - case T_Sort: - retval = _copySort(from); - break; - case T_IncrementalSort: - retval = _copyIncrementalSort(from); - break; - case T_Group: - retval = _copyGroup(from); - break; - case T_Agg: - retval = _copyAgg(from); - break; - case T_WindowAgg: - retval = _copyWindowAgg(from); - break; - case T_Unique: - retval = _copyUnique(from); - break; - case T_Hash: - retval = _copyHash(from); - break; - case T_SetOp: - retval = _copySetOp(from); - break; - case T_LockRows: - retval = _copyLockRows(from); - break; - case T_Limit: - retval = _copyLimit(from); - break; - case T_NestLoopParam: - retval = _copyNestLoopParam(from); - break; - case T_PlanRowMark: - retval = _copyPlanRowMark(from); - break; - case T_PartitionPruneInfo: - retval = _copyPartitionPruneInfo(from); - break; - case T_PartitionedRelPruneInfo: - retval = _copyPartitionedRelPruneInfo(from); - break; - case T_PartitionPruneStepOp: - retval = _copyPartitionPruneStepOp(from); - break; - case T_PartitionPruneStepCombine: - retval = _copyPartitionPruneStepCombine(from); - break; - case T_PlanInvalItem: - retval = _copyPlanInvalItem(from); - break; - - /* - * PRIMITIVE NODES - */ - case T_Alias: - retval = _copyAlias(from); - break; - case T_RangeVar: - retval = _copyRangeVar(from); - break; - case T_TableFunc: - retval = _copyTableFunc(from); - break; - case T_IntoClause: - retval = _copyIntoClause(from); - break; - case T_Var: - retval = _copyVar(from); - break; - case T_Const: - retval = _copyConst(from); - break; - case T_Param: - retval = _copyParam(from); - break; - case T_Aggref: - retval = _copyAggref(from); - break; - case T_GroupingFunc: - retval = _copyGroupingFunc(from); - break; - case T_WindowFunc: - retval = _copyWindowFunc(from); - break; - case T_SubscriptingRef: - retval = _copySubscriptingRef(from); - break; - case T_FuncExpr: - retval = _copyFuncExpr(from); - break; - case T_NamedArgExpr: - retval = _copyNamedArgExpr(from); - break; - case T_OpExpr: - retval = _copyOpExpr(from); - break; - case T_DistinctExpr: - retval = _copyDistinctExpr(from); - break; - case T_NullIfExpr: - retval = _copyNullIfExpr(from); - break; - case T_ScalarArrayOpExpr: - retval = _copyScalarArrayOpExpr(from); - break; - case T_BoolExpr: - retval = _copyBoolExpr(from); - break; - case T_SubLink: - retval = _copySubLink(from); - break; - case T_SubPlan: - retval = _copySubPlan(from); - break; - case T_AlternativeSubPlan: - retval = _copyAlternativeSubPlan(from); - break; - case T_FieldSelect: - retval = _copyFieldSelect(from); - break; - case T_FieldStore: - retval = _copyFieldStore(from); - break; - case T_RelabelType: - retval = _copyRelabelType(from); - break; - case T_CoerceViaIO: - retval = _copyCoerceViaIO(from); - break; - case T_ArrayCoerceExpr: - retval = _copyArrayCoerceExpr(from); - break; - case T_ConvertRowtypeExpr: - retval = _copyConvertRowtypeExpr(from); - break; - case T_CollateExpr: - retval = _copyCollateExpr(from); - break; - case T_CaseExpr: - retval = _copyCaseExpr(from); - break; - case T_CaseWhen: - retval = _copyCaseWhen(from); - break; - case T_CaseTestExpr: - retval = _copyCaseTestExpr(from); - break; - case T_ArrayExpr: - retval = _copyArrayExpr(from); - break; - case T_RowExpr: - retval = _copyRowExpr(from); - break; - case T_RowCompareExpr: - retval = _copyRowCompareExpr(from); - break; - case T_CoalesceExpr: - retval = _copyCoalesceExpr(from); - break; - case T_MinMaxExpr: - retval = _copyMinMaxExpr(from); - break; - case T_SQLValueFunction: - retval = _copySQLValueFunction(from); - break; - case T_XmlExpr: - retval = _copyXmlExpr(from); - break; - case T_NullTest: - retval = _copyNullTest(from); - break; - case T_BooleanTest: - retval = _copyBooleanTest(from); - break; - case T_CoerceToDomain: - retval = _copyCoerceToDomain(from); - break; - case T_CoerceToDomainValue: - retval = _copyCoerceToDomainValue(from); - break; - case T_SetToDefault: - retval = _copySetToDefault(from); - break; - case T_CurrentOfExpr: - retval = _copyCurrentOfExpr(from); - break; - case T_NextValueExpr: - retval = _copyNextValueExpr(from); - break; - case T_InferenceElem: - retval = _copyInferenceElem(from); - break; - case T_TargetEntry: - retval = _copyTargetEntry(from); - break; - case T_RangeTblRef: - retval = _copyRangeTblRef(from); - break; - case T_JoinExpr: - retval = _copyJoinExpr(from); - break; - case T_FromExpr: - retval = _copyFromExpr(from); - break; - case T_OnConflictExpr: - retval = _copyOnConflictExpr(from); - break; - - /* - * RELATION NODES - */ - case T_PathKey: - retval = _copyPathKey(from); - break; - case T_RestrictInfo: - retval = _copyRestrictInfo(from); - break; - case T_PlaceHolderVar: - retval = _copyPlaceHolderVar(from); - break; - case T_SpecialJoinInfo: - retval = _copySpecialJoinInfo(from); - break; - case T_AppendRelInfo: - retval = _copyAppendRelInfo(from); - break; - case T_PlaceHolderInfo: - retval = _copyPlaceHolderInfo(from); - break; - - /* - * VALUE NODES - */ - case T_Integer: - retval = _copyInteger(from); - break; - case T_Float: - retval = _copyFloat(from); - break; - case T_Boolean: - retval = _copyBoolean(from); - break; - case T_String: - retval = _copyString(from); - break; - case T_BitString: - retval = _copyBitString(from); - break; - - /* - * LIST NODES - */ - case T_List: - retval = list_copy_deep(from); - break; + case T_List: + retval = list_copy_deep(from); + break; /* - * Lists of integers and OIDs don't need to be deep-copied, so we - * perform a shallow copy via list_copy() + * Lists of integers, OIDs and XIDs don't need to be deep-copied, + * so we perform a shallow copy via list_copy() */ case T_IntList: case T_OidList: + case T_XidList: retval = list_copy(from); break; - /* - * EXTENSIBLE NODES - */ - case T_ExtensibleNode: - retval = _copyExtensibleNode(from); - break; - - /* - * PARSE NODES - */ - case T_Query: - retval = _copyQuery(from); - break; - case T_RawStmt: - retval = _copyRawStmt(from); - break; - case T_InsertStmt: - retval = _copyInsertStmt(from); - break; - case T_DeleteStmt: - retval = _copyDeleteStmt(from); - break; - case T_UpdateStmt: - retval = _copyUpdateStmt(from); - break; - case T_MergeStmt: - retval = _copyMergeStmt(from); - break; - case T_SelectStmt: - retval = _copySelectStmt(from); - break; - case T_SetOperationStmt: - retval = _copySetOperationStmt(from); - break; - case T_ReturnStmt: - retval = _copyReturnStmt(from); - break; - case T_PLAssignStmt: - retval = _copyPLAssignStmt(from); - break; - case T_AlterTableStmt: - retval = _copyAlterTableStmt(from); - break; - case T_AlterTableCmd: - retval = _copyAlterTableCmd(from); - break; - case T_AlterCollationStmt: - retval = _copyAlterCollationStmt(from); - break; - case T_AlterDomainStmt: - retval = _copyAlterDomainStmt(from); - break; - case T_GrantStmt: - retval = _copyGrantStmt(from); - break; - case T_GrantRoleStmt: - retval = _copyGrantRoleStmt(from); - break; - case T_AlterDefaultPrivilegesStmt: - retval = _copyAlterDefaultPrivilegesStmt(from); - break; - case T_DeclareCursorStmt: - retval = _copyDeclareCursorStmt(from); - break; - case T_ClosePortalStmt: - retval = _copyClosePortalStmt(from); - break; - case T_CallStmt: - retval = _copyCallStmt(from); - break; - case T_ClusterStmt: - retval = _copyClusterStmt(from); - break; - case T_CopyStmt: - retval = _copyCopyStmt(from); - break; - case T_CreateStmt: - retval = _copyCreateStmt(from); - break; - case T_TableLikeClause: - retval = _copyTableLikeClause(from); - break; - case T_DefineStmt: - retval = _copyDefineStmt(from); - break; - case T_DropStmt: - retval = _copyDropStmt(from); - break; - case T_TruncateStmt: - retval = _copyTruncateStmt(from); - break; - case T_CommentStmt: - retval = _copyCommentStmt(from); - break; - case T_SecLabelStmt: - retval = _copySecLabelStmt(from); - break; - case T_FetchStmt: - retval = _copyFetchStmt(from); - break; - case T_IndexStmt: - retval = _copyIndexStmt(from); - break; - case T_CreateStatsStmt: - retval = _copyCreateStatsStmt(from); - break; - case T_AlterStatsStmt: - retval = _copyAlterStatsStmt(from); - break; - case T_CreateFunctionStmt: - retval = _copyCreateFunctionStmt(from); - break; - case T_FunctionParameter: - retval = _copyFunctionParameter(from); - break; - case T_AlterFunctionStmt: - retval = _copyAlterFunctionStmt(from); - break; - case T_DoStmt: - retval = _copyDoStmt(from); - break; - case T_RenameStmt: - retval = _copyRenameStmt(from); - break; - case T_AlterObjectDependsStmt: - retval = _copyAlterObjectDependsStmt(from); - break; - case T_AlterObjectSchemaStmt: - retval = _copyAlterObjectSchemaStmt(from); - break; - case T_AlterOwnerStmt: - retval = _copyAlterOwnerStmt(from); - break; - case T_AlterOperatorStmt: - retval = _copyAlterOperatorStmt(from); - break; - case T_AlterTypeStmt: - retval = _copyAlterTypeStmt(from); - break; - case T_RuleStmt: - retval = _copyRuleStmt(from); - break; - case T_NotifyStmt: - retval = _copyNotifyStmt(from); - break; - case T_ListenStmt: - retval = _copyListenStmt(from); - break; - case T_UnlistenStmt: - retval = _copyUnlistenStmt(from); - break; - case T_TransactionStmt: - retval = _copyTransactionStmt(from); - break; - case T_CompositeTypeStmt: - retval = _copyCompositeTypeStmt(from); - break; - case T_CreateEnumStmt: - retval = _copyCreateEnumStmt(from); - break; - case T_CreateRangeStmt: - retval = _copyCreateRangeStmt(from); - break; - case T_AlterEnumStmt: - retval = _copyAlterEnumStmt(from); - break; - case T_ViewStmt: - retval = _copyViewStmt(from); - break; - case T_LoadStmt: - retval = _copyLoadStmt(from); - break; - case T_CreateDomainStmt: - retval = _copyCreateDomainStmt(from); - break; - case T_CreateOpClassStmt: - retval = _copyCreateOpClassStmt(from); - break; - case T_CreateOpClassItem: - retval = _copyCreateOpClassItem(from); - break; - case T_CreateOpFamilyStmt: - retval = _copyCreateOpFamilyStmt(from); - break; - case T_AlterOpFamilyStmt: - retval = _copyAlterOpFamilyStmt(from); - break; - case T_CreatedbStmt: - retval = _copyCreatedbStmt(from); - break; - case T_AlterDatabaseStmt: - retval = _copyAlterDatabaseStmt(from); - break; - case T_AlterDatabaseRefreshCollStmt: - retval = _copyAlterDatabaseRefreshCollStmt(from); - break; - case T_AlterDatabaseSetStmt: - retval = _copyAlterDatabaseSetStmt(from); - break; - case T_DropdbStmt: - retval = _copyDropdbStmt(from); - break; - case T_VacuumStmt: - retval = _copyVacuumStmt(from); - break; - case T_VacuumRelation: - retval = _copyVacuumRelation(from); - break; - case T_ExplainStmt: - retval = _copyExplainStmt(from); - break; - case T_CreateTableAsStmt: - retval = _copyCreateTableAsStmt(from); - break; - case T_RefreshMatViewStmt: - retval = _copyRefreshMatViewStmt(from); - break; - case T_ReplicaIdentityStmt: - retval = _copyReplicaIdentityStmt(from); - break; - case T_AlterSystemStmt: - retval = _copyAlterSystemStmt(from); - break; - case T_CreateSeqStmt: - retval = _copyCreateSeqStmt(from); - break; - case T_AlterSeqStmt: - retval = _copyAlterSeqStmt(from); - break; - case T_VariableSetStmt: - retval = _copyVariableSetStmt(from); - break; - case T_VariableShowStmt: - retval = _copyVariableShowStmt(from); - break; - case T_DiscardStmt: - retval = _copyDiscardStmt(from); - break; - case T_CreateTableSpaceStmt: - retval = _copyCreateTableSpaceStmt(from); - break; - case T_DropTableSpaceStmt: - retval = _copyDropTableSpaceStmt(from); - break; - case T_AlterTableSpaceOptionsStmt: - retval = _copyAlterTableSpaceOptionsStmt(from); - break; - case T_AlterTableMoveAllStmt: - retval = _copyAlterTableMoveAllStmt(from); - break; - case T_CreateExtensionStmt: - retval = _copyCreateExtensionStmt(from); - break; - case T_AlterExtensionStmt: - retval = _copyAlterExtensionStmt(from); - break; - case T_AlterExtensionContentsStmt: - retval = _copyAlterExtensionContentsStmt(from); - break; - case T_CreateFdwStmt: - retval = _copyCreateFdwStmt(from); - break; - case T_AlterFdwStmt: - retval = _copyAlterFdwStmt(from); - break; - case T_CreateForeignServerStmt: - retval = _copyCreateForeignServerStmt(from); - break; - case T_AlterForeignServerStmt: - retval = _copyAlterForeignServerStmt(from); - break; - case T_CreateUserMappingStmt: - retval = _copyCreateUserMappingStmt(from); - break; - case T_AlterUserMappingStmt: - retval = _copyAlterUserMappingStmt(from); - break; - case T_DropUserMappingStmt: - retval = _copyDropUserMappingStmt(from); - break; - case T_CreateForeignTableStmt: - retval = _copyCreateForeignTableStmt(from); - break; - case T_ImportForeignSchemaStmt: - retval = _copyImportForeignSchemaStmt(from); - break; - case T_CreateTransformStmt: - retval = _copyCreateTransformStmt(from); - break; - case T_CreateAmStmt: - retval = _copyCreateAmStmt(from); - break; - case T_CreateTrigStmt: - retval = _copyCreateTrigStmt(from); - break; - case T_CreateEventTrigStmt: - retval = _copyCreateEventTrigStmt(from); - break; - case T_AlterEventTrigStmt: - retval = _copyAlterEventTrigStmt(from); - break; - case T_CreatePLangStmt: - retval = _copyCreatePLangStmt(from); - break; - case T_CreateRoleStmt: - retval = _copyCreateRoleStmt(from); - break; - case T_AlterRoleStmt: - retval = _copyAlterRoleStmt(from); - break; - case T_AlterRoleSetStmt: - retval = _copyAlterRoleSetStmt(from); - break; - case T_DropRoleStmt: - retval = _copyDropRoleStmt(from); - break; - case T_LockStmt: - retval = _copyLockStmt(from); - break; - case T_ConstraintsSetStmt: - retval = _copyConstraintsSetStmt(from); - break; - case T_ReindexStmt: - retval = _copyReindexStmt(from); - break; - case T_CheckPointStmt: - retval = (void *) makeNode(CheckPointStmt); - break; - case T_CreateSchemaStmt: - retval = _copyCreateSchemaStmt(from); - break; - case T_CreateConversionStmt: - retval = _copyCreateConversionStmt(from); - break; - case T_CreateCastStmt: - retval = _copyCreateCastStmt(from); - break; - case T_PrepareStmt: - retval = _copyPrepareStmt(from); - break; - case T_ExecuteStmt: - retval = _copyExecuteStmt(from); - break; - case T_DeallocateStmt: - retval = _copyDeallocateStmt(from); - break; - case T_DropOwnedStmt: - retval = _copyDropOwnedStmt(from); - break; - case T_ReassignOwnedStmt: - retval = _copyReassignOwnedStmt(from); - break; - case T_AlterTSDictionaryStmt: - retval = _copyAlterTSDictionaryStmt(from); - break; - case T_AlterTSConfigurationStmt: - retval = _copyAlterTSConfigurationStmt(from); - break; - case T_CreatePolicyStmt: - retval = _copyCreatePolicyStmt(from); - break; - case T_AlterPolicyStmt: - retval = _copyAlterPolicyStmt(from); - break; - case T_CreatePublicationStmt: - retval = _copyCreatePublicationStmt(from); - break; - case T_AlterPublicationStmt: - retval = _copyAlterPublicationStmt(from); - break; - case T_CreateSubscriptionStmt: - retval = _copyCreateSubscriptionStmt(from); - break; - case T_AlterSubscriptionStmt: - retval = _copyAlterSubscriptionStmt(from); - break; - case T_DropSubscriptionStmt: - retval = _copyDropSubscriptionStmt(from); - break; - case T_A_Expr: - retval = _copyA_Expr(from); - break; - case T_ColumnRef: - retval = _copyColumnRef(from); - break; - case T_ParamRef: - retval = _copyParamRef(from); - break; - case T_A_Const: - retval = _copyA_Const(from); - break; - case T_FuncCall: - retval = _copyFuncCall(from); - break; - case T_A_Star: - retval = _copyA_Star(from); - break; - case T_A_Indices: - retval = _copyA_Indices(from); - break; - case T_A_Indirection: - retval = _copyA_Indirection(from); - break; - case T_A_ArrayExpr: - retval = _copyA_ArrayExpr(from); - break; - case T_ResTarget: - retval = _copyResTarget(from); - break; - case T_MultiAssignRef: - retval = _copyMultiAssignRef(from); - break; - case T_TypeCast: - retval = _copyTypeCast(from); - break; - case T_CollateClause: - retval = _copyCollateClause(from); - break; - case T_SortBy: - retval = _copySortBy(from); - break; - case T_WindowDef: - retval = _copyWindowDef(from); - break; - case T_RangeSubselect: - retval = _copyRangeSubselect(from); - break; - case T_RangeFunction: - retval = _copyRangeFunction(from); - break; - case T_RangeTableSample: - retval = _copyRangeTableSample(from); - break; - case T_RangeTableFunc: - retval = _copyRangeTableFunc(from); - break; - case T_RangeTableFuncCol: - retval = _copyRangeTableFuncCol(from); - break; - case T_TypeName: - retval = _copyTypeName(from); - break; - case T_IndexElem: - retval = _copyIndexElem(from); - break; - case T_StatsElem: - retval = _copyStatsElem(from); - break; - case T_ColumnDef: - retval = _copyColumnDef(from); - break; - case T_Constraint: - retval = _copyConstraint(from); - break; - case T_DefElem: - retval = _copyDefElem(from); - break; - case T_LockingClause: - retval = _copyLockingClause(from); - break; - case T_RangeTblEntry: - retval = _copyRangeTblEntry(from); - break; - case T_RangeTblFunction: - retval = _copyRangeTblFunction(from); - break; - case T_TableSampleClause: - retval = _copyTableSampleClause(from); - break; - case T_WithCheckOption: - retval = _copyWithCheckOption(from); - break; - case T_SortGroupClause: - retval = _copySortGroupClause(from); - break; - case T_GroupingSet: - retval = _copyGroupingSet(from); - break; - case T_WindowClause: - retval = _copyWindowClause(from); - break; - case T_RowMarkClause: - retval = _copyRowMarkClause(from); - break; - case T_WithClause: - retval = _copyWithClause(from); - break; - case T_InferClause: - retval = _copyInferClause(from); - break; - case T_OnConflictClause: - retval = _copyOnConflictClause(from); - break; - case T_CTESearchClause: - retval = _copyCTESearchClause(from); - break; - case T_CTECycleClause: - retval = _copyCTECycleClause(from); - break; - case T_CommonTableExpr: - retval = _copyCommonTableExpr(from); - break; - case T_MergeWhenClause: - retval = _copyMergeWhenClause(from); - break; - case T_MergeAction: - retval = _copyMergeAction(from); - break; - case T_ObjectWithArgs: - retval = _copyObjectWithArgs(from); - break; - case T_AccessPriv: - retval = _copyAccessPriv(from); - break; - case T_XmlSerialize: - retval = _copyXmlSerialize(from); - break; - case T_RoleSpec: - retval = _copyRoleSpec(from); - break; - case T_TriggerTransition: - retval = _copyTriggerTransition(from); - break; - case T_PartitionElem: - retval = _copyPartitionElem(from); - break; - case T_PartitionSpec: - retval = _copyPartitionSpec(from); - break; - case T_PartitionBoundSpec: - retval = _copyPartitionBoundSpec(from); - break; - case T_PartitionRangeDatum: - retval = _copyPartitionRangeDatum(from); - break; - case T_PartitionCmd: - retval = _copyPartitionCmd(from); - break; - case T_PublicationObjSpec: - retval = _copyPublicationObject(from); - break; - case T_PublicationTable: - retval = _copyPublicationTable(from); - break; - - /* - * MISCELLANEOUS NODES - */ - case T_ForeignKeyCacheInfo: - retval = _copyForeignKeyCacheInfo(from); - break; - default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(from)); retval = 0; /* keep compiler quiet */ diff --git a/src/postgres/src_backend_nodes_copyfuncs.funcs.c b/src/postgres/src_backend_nodes_copyfuncs.funcs.c new file mode 100644 index 00000000..2a5b27e6 --- /dev/null +++ b/src/postgres/src_backend_nodes_copyfuncs.funcs.c @@ -0,0 +1,5321 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - _copyAlias + * - _copyRangeVar + * - _copyTableFunc + * - _copyIntoClause + * - _copyVar + * - _copyParam + * - _copyAggref + * - _copyGroupingFunc + * - _copyWindowFunc + * - _copySubscriptingRef + * - _copyFuncExpr + * - _copyNamedArgExpr + * - _copyOpExpr + * - _copyDistinctExpr + * - _copyNullIfExpr + * - _copyScalarArrayOpExpr + * - _copyBoolExpr + * - _copySubLink + * - _copySubPlan + * - _copyAlternativeSubPlan + * - _copyFieldSelect + * - _copyFieldStore + * - _copyRelabelType + * - _copyCoerceViaIO + * - _copyArrayCoerceExpr + * - _copyConvertRowtypeExpr + * - _copyCollateExpr + * - _copyCaseExpr + * - _copyCaseWhen + * - _copyCaseTestExpr + * - _copyArrayExpr + * - _copyRowExpr + * - _copyRowCompareExpr + * - _copyCoalesceExpr + * - _copyMinMaxExpr + * - _copySQLValueFunction + * - _copyXmlExpr + * - _copyJsonFormat + * - _copyJsonReturning + * - _copyJsonValueExpr + * - _copyJsonConstructorExpr + * - _copyJsonIsPredicate + * - _copyNullTest + * - _copyBooleanTest + * - _copyCoerceToDomain + * - _copyCoerceToDomainValue + * - _copySetToDefault + * - _copyCurrentOfExpr + * - _copyNextValueExpr + * - _copyInferenceElem + * - _copyTargetEntry + * - _copyRangeTblRef + * - _copyJoinExpr + * - _copyFromExpr + * - _copyOnConflictExpr + * - _copyQuery + * - _copyTypeName + * - _copyColumnRef + * - _copyParamRef + * - _copyA_Expr + * - _copyTypeCast + * - _copyCollateClause + * - _copyRoleSpec + * - _copyFuncCall + * - _copyA_Star + * - _copyA_Indices + * - _copyA_Indirection + * - _copyA_ArrayExpr + * - _copyResTarget + * - _copyMultiAssignRef + * - _copySortBy + * - _copyWindowDef + * - _copyRangeSubselect + * - _copyRangeFunction + * - _copyRangeTableFunc + * - _copyRangeTableFuncCol + * - _copyRangeTableSample + * - _copyColumnDef + * - _copyTableLikeClause + * - _copyIndexElem + * - _copyDefElem + * - _copyLockingClause + * - _copyXmlSerialize + * - _copyPartitionElem + * - _copyPartitionSpec + * - _copyPartitionBoundSpec + * - _copyPartitionRangeDatum + * - _copyPartitionCmd + * - _copyRangeTblEntry + * - _copyRTEPermissionInfo + * - _copyRangeTblFunction + * - _copyTableSampleClause + * - _copyWithCheckOption + * - _copySortGroupClause + * - _copyGroupingSet + * - _copyWindowClause + * - _copyRowMarkClause + * - _copyWithClause + * - _copyInferClause + * - _copyOnConflictClause + * - _copyCTESearchClause + * - _copyCTECycleClause + * - _copyCommonTableExpr + * - _copyMergeWhenClause + * - _copyMergeAction + * - _copyTriggerTransition + * - _copyJsonOutput + * - _copyJsonKeyValue + * - _copyJsonObjectConstructor + * - _copyJsonArrayConstructor + * - _copyJsonArrayQueryConstructor + * - _copyJsonAggConstructor + * - _copyJsonObjectAgg + * - _copyJsonArrayAgg + * - _copyRawStmt + * - _copyInsertStmt + * - _copyDeleteStmt + * - _copyUpdateStmt + * - _copyMergeStmt + * - _copySelectStmt + * - _copySetOperationStmt + * - _copyReturnStmt + * - _copyPLAssignStmt + * - _copyCreateSchemaStmt + * - _copyAlterTableStmt + * - _copyReplicaIdentityStmt + * - _copyAlterTableCmd + * - _copyAlterCollationStmt + * - _copyAlterDomainStmt + * - _copyGrantStmt + * - _copyObjectWithArgs + * - _copyAccessPriv + * - _copyGrantRoleStmt + * - _copyAlterDefaultPrivilegesStmt + * - _copyCopyStmt + * - _copyVariableSetStmt + * - _copyVariableShowStmt + * - _copyCreateStmt + * - _copyConstraint + * - _copyCreateTableSpaceStmt + * - _copyDropTableSpaceStmt + * - _copyAlterTableSpaceOptionsStmt + * - _copyAlterTableMoveAllStmt + * - _copyCreateExtensionStmt + * - _copyAlterExtensionStmt + * - _copyAlterExtensionContentsStmt + * - _copyCreateFdwStmt + * - _copyAlterFdwStmt + * - _copyCreateForeignServerStmt + * - _copyAlterForeignServerStmt + * - _copyCreateForeignTableStmt + * - _copyCreateUserMappingStmt + * - _copyAlterUserMappingStmt + * - _copyDropUserMappingStmt + * - _copyImportForeignSchemaStmt + * - _copyCreatePolicyStmt + * - _copyAlterPolicyStmt + * - _copyCreateAmStmt + * - _copyCreateTrigStmt + * - _copyCreateEventTrigStmt + * - _copyAlterEventTrigStmt + * - _copyCreatePLangStmt + * - _copyCreateRoleStmt + * - _copyAlterRoleStmt + * - _copyAlterRoleSetStmt + * - _copyDropRoleStmt + * - _copyCreateSeqStmt + * - _copyAlterSeqStmt + * - _copyDefineStmt + * - _copyCreateDomainStmt + * - _copyCreateOpClassStmt + * - _copyCreateOpClassItem + * - _copyCreateOpFamilyStmt + * - _copyAlterOpFamilyStmt + * - _copyDropStmt + * - _copyTruncateStmt + * - _copyCommentStmt + * - _copySecLabelStmt + * - _copyDeclareCursorStmt + * - _copyClosePortalStmt + * - _copyFetchStmt + * - _copyIndexStmt + * - _copyCreateStatsStmt + * - _copyStatsElem + * - _copyAlterStatsStmt + * - _copyCreateFunctionStmt + * - _copyFunctionParameter + * - _copyAlterFunctionStmt + * - _copyDoStmt + * - _copyCallStmt + * - _copyRenameStmt + * - _copyAlterObjectDependsStmt + * - _copyAlterObjectSchemaStmt + * - _copyAlterOwnerStmt + * - _copyAlterOperatorStmt + * - _copyAlterTypeStmt + * - _copyRuleStmt + * - _copyNotifyStmt + * - _copyListenStmt + * - _copyUnlistenStmt + * - _copyTransactionStmt + * - _copyCompositeTypeStmt + * - _copyCreateEnumStmt + * - _copyCreateRangeStmt + * - _copyAlterEnumStmt + * - _copyViewStmt + * - _copyLoadStmt + * - _copyCreatedbStmt + * - _copyAlterDatabaseStmt + * - _copyAlterDatabaseRefreshCollStmt + * - _copyAlterDatabaseSetStmt + * - _copyDropdbStmt + * - _copyAlterSystemStmt + * - _copyClusterStmt + * - _copyVacuumStmt + * - _copyVacuumRelation + * - _copyExplainStmt + * - _copyCreateTableAsStmt + * - _copyRefreshMatViewStmt + * - _copyCheckPointStmt + * - _copyDiscardStmt + * - _copyLockStmt + * - _copyConstraintsSetStmt + * - _copyReindexStmt + * - _copyCreateConversionStmt + * - _copyCreateCastStmt + * - _copyCreateTransformStmt + * - _copyPrepareStmt + * - _copyExecuteStmt + * - _copyDeallocateStmt + * - _copyDropOwnedStmt + * - _copyReassignOwnedStmt + * - _copyAlterTSDictionaryStmt + * - _copyAlterTSConfigurationStmt + * - _copyPublicationTable + * - _copyPublicationObjSpec + * - _copyCreatePublicationStmt + * - _copyAlterPublicationStmt + * - _copyCreateSubscriptionStmt + * - _copyAlterSubscriptionStmt + * - _copyDropSubscriptionStmt + * - _copyPathKey + * - _copyRestrictInfo + * - _copyPlaceHolderVar + * - _copySpecialJoinInfo + * - _copyAppendRelInfo + * - _copyPlaceHolderInfo + * - _copyPlannedStmt + * - _copyResult + * - _copyProjectSet + * - _copyModifyTable + * - _copyAppend + * - _copyMergeAppend + * - _copyRecursiveUnion + * - _copyBitmapAnd + * - _copyBitmapOr + * - _copySeqScan + * - _copySampleScan + * - _copyIndexScan + * - _copyIndexOnlyScan + * - _copyBitmapIndexScan + * - _copyBitmapHeapScan + * - _copyTidScan + * - _copyTidRangeScan + * - _copySubqueryScan + * - _copyFunctionScan + * - _copyValuesScan + * - _copyTableFuncScan + * - _copyCteScan + * - _copyNamedTuplestoreScan + * - _copyWorkTableScan + * - _copyForeignScan + * - _copyCustomScan + * - _copyNestLoop + * - _copyNestLoopParam + * - _copyMergeJoin + * - _copyHashJoin + * - _copyMaterial + * - _copyMemoize + * - _copySort + * - _copyIncrementalSort + * - _copyGroup + * - _copyAgg + * - _copyWindowAgg + * - _copyUnique + * - _copyGather + * - _copyGatherMerge + * - _copyHash + * - _copySetOp + * - _copyLockRows + * - _copyLimit + * - _copyPlanRowMark + * - _copyPartitionPruneInfo + * - _copyPartitionedRelPruneInfo + * - _copyPartitionPruneStepOp + * - _copyPartitionPruneStepCombine + * - _copyPlanInvalItem + * - _copyInteger + * - _copyFloat + * - _copyBoolean + * - _copyString + * - _copyBitString + * - _copyForeignKeyCacheInfo + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * copyfuncs.funcs.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ +#include "access/amapi.h" +#include "access/sdir.h" +#include "access/tableam.h" +#include "access/tsmapi.h" +#include "commands/event_trigger.h" +#include "commands/trigger.h" +#include "executor/tuptable.h" +#include "foreign/fdwapi.h" +#include "nodes/bitmapset.h" +#include "nodes/execnodes.h" +#include "nodes/extensible.h" +#include "nodes/lockoptions.h" +#include "nodes/miscnodes.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pathnodes.h" +#include "nodes/plannodes.h" +#include "nodes/primnodes.h" +#include "nodes/replnodes.h" +#include "nodes/supportnodes.h" +#include "nodes/value.h" +#include "utils/rel.h" + +static Alias * +_copyAlias(const Alias *from) +{ + Alias *newnode = makeNode(Alias); + + COPY_STRING_FIELD(aliasname); + COPY_NODE_FIELD(colnames); + + return newnode; +} + +static RangeVar * +_copyRangeVar(const RangeVar *from) +{ + RangeVar *newnode = makeNode(RangeVar); + + COPY_STRING_FIELD(catalogname); + COPY_STRING_FIELD(schemaname); + COPY_STRING_FIELD(relname); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(relpersistence); + COPY_NODE_FIELD(alias); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TableFunc * +_copyTableFunc(const TableFunc *from) +{ + TableFunc *newnode = makeNode(TableFunc); + + COPY_NODE_FIELD(ns_uris); + COPY_NODE_FIELD(ns_names); + COPY_NODE_FIELD(docexpr); + COPY_NODE_FIELD(rowexpr); + COPY_NODE_FIELD(colnames); + COPY_NODE_FIELD(coltypes); + COPY_NODE_FIELD(coltypmods); + COPY_NODE_FIELD(colcollations); + COPY_NODE_FIELD(colexprs); + COPY_NODE_FIELD(coldefexprs); + COPY_BITMAPSET_FIELD(notnulls); + COPY_SCALAR_FIELD(ordinalitycol); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static IntoClause * +_copyIntoClause(const IntoClause *from) +{ + IntoClause *newnode = makeNode(IntoClause); + + COPY_NODE_FIELD(rel); + COPY_NODE_FIELD(colNames); + COPY_STRING_FIELD(accessMethod); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(onCommit); + COPY_STRING_FIELD(tableSpaceName); + COPY_NODE_FIELD(viewQuery); + COPY_SCALAR_FIELD(skipData); + + return newnode; +} + +static Var * +_copyVar(const Var *from) +{ + Var *newnode = makeNode(Var); + + COPY_SCALAR_FIELD(varno); + COPY_SCALAR_FIELD(varattno); + COPY_SCALAR_FIELD(vartype); + COPY_SCALAR_FIELD(vartypmod); + COPY_SCALAR_FIELD(varcollid); + COPY_BITMAPSET_FIELD(varnullingrels); + COPY_SCALAR_FIELD(varlevelsup); + COPY_SCALAR_FIELD(varnosyn); + COPY_SCALAR_FIELD(varattnosyn); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static Param * +_copyParam(const Param *from) +{ + Param *newnode = makeNode(Param); + + COPY_SCALAR_FIELD(paramkind); + COPY_SCALAR_FIELD(paramid); + COPY_SCALAR_FIELD(paramtype); + COPY_SCALAR_FIELD(paramtypmod); + COPY_SCALAR_FIELD(paramcollid); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static Aggref * +_copyAggref(const Aggref *from) +{ + Aggref *newnode = makeNode(Aggref); + + COPY_SCALAR_FIELD(aggfnoid); + COPY_SCALAR_FIELD(aggtype); + COPY_SCALAR_FIELD(aggcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_SCALAR_FIELD(aggtranstype); + COPY_NODE_FIELD(aggargtypes); + COPY_NODE_FIELD(aggdirectargs); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(aggorder); + COPY_NODE_FIELD(aggdistinct); + COPY_NODE_FIELD(aggfilter); + COPY_SCALAR_FIELD(aggstar); + COPY_SCALAR_FIELD(aggvariadic); + COPY_SCALAR_FIELD(aggkind); + COPY_SCALAR_FIELD(aggpresorted); + COPY_SCALAR_FIELD(agglevelsup); + COPY_SCALAR_FIELD(aggsplit); + COPY_SCALAR_FIELD(aggno); + COPY_SCALAR_FIELD(aggtransno); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static GroupingFunc * +_copyGroupingFunc(const GroupingFunc *from) +{ + GroupingFunc *newnode = makeNode(GroupingFunc); + + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(refs); + COPY_NODE_FIELD(cols); + COPY_SCALAR_FIELD(agglevelsup); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowFunc * +_copyWindowFunc(const WindowFunc *from) +{ + WindowFunc *newnode = makeNode(WindowFunc); + + COPY_SCALAR_FIELD(winfnoid); + COPY_SCALAR_FIELD(wintype); + COPY_SCALAR_FIELD(wincollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(aggfilter); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(winstar); + COPY_SCALAR_FIELD(winagg); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubscriptingRef * +_copySubscriptingRef(const SubscriptingRef *from) +{ + SubscriptingRef *newnode = makeNode(SubscriptingRef); + + COPY_SCALAR_FIELD(refcontainertype); + COPY_SCALAR_FIELD(refelemtype); + COPY_SCALAR_FIELD(refrestype); + COPY_SCALAR_FIELD(reftypmod); + COPY_SCALAR_FIELD(refcollid); + COPY_NODE_FIELD(refupperindexpr); + COPY_NODE_FIELD(reflowerindexpr); + COPY_NODE_FIELD(refexpr); + COPY_NODE_FIELD(refassgnexpr); + + return newnode; +} + +static FuncExpr * +_copyFuncExpr(const FuncExpr *from) +{ + FuncExpr *newnode = makeNode(FuncExpr); + + COPY_SCALAR_FIELD(funcid); + COPY_SCALAR_FIELD(funcresulttype); + COPY_SCALAR_FIELD(funcretset); + COPY_SCALAR_FIELD(funcvariadic); + COPY_SCALAR_FIELD(funcformat); + COPY_SCALAR_FIELD(funccollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NamedArgExpr * +_copyNamedArgExpr(const NamedArgExpr *from) +{ + NamedArgExpr *newnode = makeNode(NamedArgExpr); + + COPY_NODE_FIELD(arg); + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(argnumber); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static OpExpr * +_copyOpExpr(const OpExpr *from) +{ + OpExpr *newnode = makeNode(OpExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static DistinctExpr * +_copyDistinctExpr(const DistinctExpr *from) +{ + DistinctExpr *newnode = makeNode(DistinctExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NullIfExpr * +_copyNullIfExpr(const NullIfExpr *from) +{ + NullIfExpr *newnode = makeNode(NullIfExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(opresulttype); + COPY_SCALAR_FIELD(opretset); + COPY_SCALAR_FIELD(opcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ScalarArrayOpExpr * +_copyScalarArrayOpExpr(const ScalarArrayOpExpr *from) +{ + ScalarArrayOpExpr *newnode = makeNode(ScalarArrayOpExpr); + + COPY_SCALAR_FIELD(opno); + COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(hashfuncid); + COPY_SCALAR_FIELD(negfuncid); + COPY_SCALAR_FIELD(useOr); + COPY_SCALAR_FIELD(inputcollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static BoolExpr * +_copyBoolExpr(const BoolExpr *from) +{ + BoolExpr *newnode = makeNode(BoolExpr); + + COPY_SCALAR_FIELD(boolop); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubLink * +_copySubLink(const SubLink *from) +{ + SubLink *newnode = makeNode(SubLink); + + COPY_SCALAR_FIELD(subLinkType); + COPY_SCALAR_FIELD(subLinkId); + COPY_NODE_FIELD(testexpr); + COPY_NODE_FIELD(operName); + COPY_NODE_FIELD(subselect); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SubPlan * +_copySubPlan(const SubPlan *from) +{ + SubPlan *newnode = makeNode(SubPlan); + + COPY_SCALAR_FIELD(subLinkType); + COPY_NODE_FIELD(testexpr); + COPY_NODE_FIELD(paramIds); + COPY_SCALAR_FIELD(plan_id); + COPY_STRING_FIELD(plan_name); + COPY_SCALAR_FIELD(firstColType); + COPY_SCALAR_FIELD(firstColTypmod); + COPY_SCALAR_FIELD(firstColCollation); + COPY_SCALAR_FIELD(useHashTable); + COPY_SCALAR_FIELD(unknownEqFalse); + COPY_SCALAR_FIELD(parallel_safe); + COPY_NODE_FIELD(setParam); + COPY_NODE_FIELD(parParam); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(startup_cost); + COPY_SCALAR_FIELD(per_call_cost); + + return newnode; +} + +static AlternativeSubPlan * +_copyAlternativeSubPlan(const AlternativeSubPlan *from) +{ + AlternativeSubPlan *newnode = makeNode(AlternativeSubPlan); + + COPY_NODE_FIELD(subplans); + + return newnode; +} + +static FieldSelect * +_copyFieldSelect(const FieldSelect *from) +{ + FieldSelect *newnode = makeNode(FieldSelect); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(fieldnum); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + + return newnode; +} + +static FieldStore * +_copyFieldStore(const FieldStore *from) +{ + FieldStore *newnode = makeNode(FieldStore); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(newvals); + COPY_NODE_FIELD(fieldnums); + COPY_SCALAR_FIELD(resulttype); + + return newnode; +} + +static RelabelType * +_copyRelabelType(const RelabelType *from) +{ + RelabelType *newnode = makeNode(RelabelType); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(relabelformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceViaIO * +_copyCoerceViaIO(const CoerceViaIO *from) +{ + CoerceViaIO *newnode = makeNode(CoerceViaIO); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coerceformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ArrayCoerceExpr * +_copyArrayCoerceExpr(const ArrayCoerceExpr *from) +{ + ArrayCoerceExpr *newnode = makeNode(ArrayCoerceExpr); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(elemexpr); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coerceformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ConvertRowtypeExpr * +_copyConvertRowtypeExpr(const ConvertRowtypeExpr *from) +{ + ConvertRowtypeExpr *newnode = makeNode(ConvertRowtypeExpr); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(convertformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CollateExpr * +_copyCollateExpr(const CollateExpr *from) +{ + CollateExpr *newnode = makeNode(CollateExpr); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(collOid); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseExpr * +_copyCaseExpr(const CaseExpr *from) +{ + CaseExpr *newnode = makeNode(CaseExpr); + + COPY_SCALAR_FIELD(casetype); + COPY_SCALAR_FIELD(casecollid); + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(defresult); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseWhen * +_copyCaseWhen(const CaseWhen *from) +{ + CaseWhen *newnode = makeNode(CaseWhen); + + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(result); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CaseTestExpr * +_copyCaseTestExpr(const CaseTestExpr *from) +{ + CaseTestExpr *newnode = makeNode(CaseTestExpr); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + + return newnode; +} + +static ArrayExpr * +_copyArrayExpr(const ArrayExpr *from) +{ + ArrayExpr *newnode = makeNode(ArrayExpr); + + COPY_SCALAR_FIELD(array_typeid); + COPY_SCALAR_FIELD(array_collid); + COPY_SCALAR_FIELD(element_typeid); + COPY_NODE_FIELD(elements); + COPY_SCALAR_FIELD(multidims); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RowExpr * +_copyRowExpr(const RowExpr *from) +{ + RowExpr *newnode = makeNode(RowExpr); + + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(row_typeid); + COPY_SCALAR_FIELD(row_format); + COPY_NODE_FIELD(colnames); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RowCompareExpr * +_copyRowCompareExpr(const RowCompareExpr *from) +{ + RowCompareExpr *newnode = makeNode(RowCompareExpr); + + COPY_SCALAR_FIELD(rctype); + COPY_NODE_FIELD(opnos); + COPY_NODE_FIELD(opfamilies); + COPY_NODE_FIELD(inputcollids); + COPY_NODE_FIELD(largs); + COPY_NODE_FIELD(rargs); + + return newnode; +} + +static CoalesceExpr * +_copyCoalesceExpr(const CoalesceExpr *from) +{ + CoalesceExpr *newnode = makeNode(CoalesceExpr); + + COPY_SCALAR_FIELD(coalescetype); + COPY_SCALAR_FIELD(coalescecollid); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static MinMaxExpr * +_copyMinMaxExpr(const MinMaxExpr *from) +{ + MinMaxExpr *newnode = makeNode(MinMaxExpr); + + COPY_SCALAR_FIELD(minmaxtype); + COPY_SCALAR_FIELD(minmaxcollid); + COPY_SCALAR_FIELD(inputcollid); + COPY_SCALAR_FIELD(op); + COPY_NODE_FIELD(args); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SQLValueFunction * +_copySQLValueFunction(const SQLValueFunction *from) +{ + SQLValueFunction *newnode = makeNode(SQLValueFunction); + + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(type); + COPY_SCALAR_FIELD(typmod); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static XmlExpr * +_copyXmlExpr(const XmlExpr *from) +{ + XmlExpr *newnode = makeNode(XmlExpr); + + COPY_SCALAR_FIELD(op); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(named_args); + COPY_NODE_FIELD(arg_names); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(xmloption); + COPY_SCALAR_FIELD(indent); + COPY_SCALAR_FIELD(type); + COPY_SCALAR_FIELD(typmod); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonFormat * +_copyJsonFormat(const JsonFormat *from) +{ + JsonFormat *newnode = makeNode(JsonFormat); + + COPY_SCALAR_FIELD(format_type); + COPY_SCALAR_FIELD(encoding); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonReturning * +_copyJsonReturning(const JsonReturning *from) +{ + JsonReturning *newnode = makeNode(JsonReturning); + + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(typid); + COPY_SCALAR_FIELD(typmod); + + return newnode; +} + +static JsonValueExpr * +_copyJsonValueExpr(const JsonValueExpr *from) +{ + JsonValueExpr *newnode = makeNode(JsonValueExpr); + + COPY_NODE_FIELD(raw_expr); + COPY_NODE_FIELD(formatted_expr); + COPY_NODE_FIELD(format); + + return newnode; +} + +static JsonConstructorExpr * +_copyJsonConstructorExpr(const JsonConstructorExpr *from) +{ + JsonConstructorExpr *newnode = makeNode(JsonConstructorExpr); + + COPY_SCALAR_FIELD(type); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(func); + COPY_NODE_FIELD(coercion); + COPY_NODE_FIELD(returning); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonIsPredicate * +_copyJsonIsPredicate(const JsonIsPredicate *from) +{ + JsonIsPredicate *newnode = makeNode(JsonIsPredicate); + + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(item_type); + COPY_SCALAR_FIELD(unique_keys); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static NullTest * +_copyNullTest(const NullTest *from) +{ + NullTest *newnode = makeNode(NullTest); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(nulltesttype); + COPY_SCALAR_FIELD(argisrow); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static BooleanTest * +_copyBooleanTest(const BooleanTest *from) +{ + BooleanTest *newnode = makeNode(BooleanTest); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(booltesttype); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceToDomain * +_copyCoerceToDomain(const CoerceToDomain *from) +{ + CoerceToDomain *newnode = makeNode(CoerceToDomain); + + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(resulttype); + COPY_SCALAR_FIELD(resulttypmod); + COPY_SCALAR_FIELD(resultcollid); + COPY_SCALAR_FIELD(coercionformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CoerceToDomainValue * +_copyCoerceToDomainValue(const CoerceToDomainValue *from) +{ + CoerceToDomainValue *newnode = makeNode(CoerceToDomainValue); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static SetToDefault * +_copySetToDefault(const SetToDefault *from) +{ + SetToDefault *newnode = makeNode(SetToDefault); + + COPY_SCALAR_FIELD(typeId); + COPY_SCALAR_FIELD(typeMod); + COPY_SCALAR_FIELD(collation); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CurrentOfExpr * +_copyCurrentOfExpr(const CurrentOfExpr *from) +{ + CurrentOfExpr *newnode = makeNode(CurrentOfExpr); + + COPY_SCALAR_FIELD(cvarno); + COPY_STRING_FIELD(cursor_name); + COPY_SCALAR_FIELD(cursor_param); + + return newnode; +} + +static NextValueExpr * +_copyNextValueExpr(const NextValueExpr *from) +{ + NextValueExpr *newnode = makeNode(NextValueExpr); + + COPY_SCALAR_FIELD(seqid); + COPY_SCALAR_FIELD(typeId); + + return newnode; +} + +static InferenceElem * +_copyInferenceElem(const InferenceElem *from) +{ + InferenceElem *newnode = makeNode(InferenceElem); + + COPY_NODE_FIELD(expr); + COPY_SCALAR_FIELD(infercollid); + COPY_SCALAR_FIELD(inferopclass); + + return newnode; +} + +static TargetEntry * +_copyTargetEntry(const TargetEntry *from) +{ + TargetEntry *newnode = makeNode(TargetEntry); + + COPY_NODE_FIELD(expr); + COPY_SCALAR_FIELD(resno); + COPY_STRING_FIELD(resname); + COPY_SCALAR_FIELD(ressortgroupref); + COPY_SCALAR_FIELD(resorigtbl); + COPY_SCALAR_FIELD(resorigcol); + COPY_SCALAR_FIELD(resjunk); + + return newnode; +} + +static RangeTblRef * +_copyRangeTblRef(const RangeTblRef *from) +{ + RangeTblRef *newnode = makeNode(RangeTblRef); + + COPY_SCALAR_FIELD(rtindex); + + return newnode; +} + +static JoinExpr * +_copyJoinExpr(const JoinExpr *from) +{ + JoinExpr *newnode = makeNode(JoinExpr); + + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(isNatural); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + COPY_NODE_FIELD(usingClause); + COPY_NODE_FIELD(join_using_alias); + COPY_NODE_FIELD(quals); + COPY_NODE_FIELD(alias); + COPY_SCALAR_FIELD(rtindex); + + return newnode; +} + +static FromExpr * +_copyFromExpr(const FromExpr *from) +{ + FromExpr *newnode = makeNode(FromExpr); + + COPY_NODE_FIELD(fromlist); + COPY_NODE_FIELD(quals); + + return newnode; +} + +static OnConflictExpr * +_copyOnConflictExpr(const OnConflictExpr *from) +{ + OnConflictExpr *newnode = makeNode(OnConflictExpr); + + COPY_SCALAR_FIELD(action); + COPY_NODE_FIELD(arbiterElems); + COPY_NODE_FIELD(arbiterWhere); + COPY_SCALAR_FIELD(constraint); + COPY_NODE_FIELD(onConflictSet); + COPY_NODE_FIELD(onConflictWhere); + COPY_SCALAR_FIELD(exclRelIndex); + COPY_NODE_FIELD(exclRelTlist); + + return newnode; +} + +static Query * +_copyQuery(const Query *from) +{ + Query *newnode = makeNode(Query); + + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(querySource); + COPY_SCALAR_FIELD(queryId); + COPY_SCALAR_FIELD(canSetTag); + COPY_NODE_FIELD(utilityStmt); + COPY_SCALAR_FIELD(resultRelation); + COPY_SCALAR_FIELD(hasAggs); + COPY_SCALAR_FIELD(hasWindowFuncs); + COPY_SCALAR_FIELD(hasTargetSRFs); + COPY_SCALAR_FIELD(hasSubLinks); + COPY_SCALAR_FIELD(hasDistinctOn); + COPY_SCALAR_FIELD(hasRecursive); + COPY_SCALAR_FIELD(hasModifyingCTE); + COPY_SCALAR_FIELD(hasForUpdate); + COPY_SCALAR_FIELD(hasRowSecurity); + COPY_SCALAR_FIELD(isReturn); + COPY_NODE_FIELD(cteList); + COPY_NODE_FIELD(rtable); + COPY_NODE_FIELD(rteperminfos); + COPY_NODE_FIELD(jointree); + COPY_NODE_FIELD(mergeActionList); + COPY_SCALAR_FIELD(mergeUseOuterJoin); + COPY_NODE_FIELD(targetList); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(onConflict); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(groupClause); + COPY_SCALAR_FIELD(groupDistinct); + COPY_NODE_FIELD(groupingSets); + COPY_NODE_FIELD(havingQual); + COPY_NODE_FIELD(windowClause); + COPY_NODE_FIELD(distinctClause); + COPY_NODE_FIELD(sortClause); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_NODE_FIELD(rowMarks); + COPY_NODE_FIELD(setOperations); + COPY_NODE_FIELD(constraintDeps); + COPY_NODE_FIELD(withCheckOptions); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static TypeName * +_copyTypeName(const TypeName *from) +{ + TypeName *newnode = makeNode(TypeName); + + COPY_NODE_FIELD(names); + COPY_SCALAR_FIELD(typeOid); + COPY_SCALAR_FIELD(setof); + COPY_SCALAR_FIELD(pct_type); + COPY_NODE_FIELD(typmods); + COPY_SCALAR_FIELD(typemod); + COPY_NODE_FIELD(arrayBounds); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ColumnRef * +_copyColumnRef(const ColumnRef *from) +{ + ColumnRef *newnode = makeNode(ColumnRef); + + COPY_NODE_FIELD(fields); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ParamRef * +_copyParamRef(const ParamRef *from) +{ + ParamRef *newnode = makeNode(ParamRef); + + COPY_SCALAR_FIELD(number); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static A_Expr * +_copyA_Expr(const A_Expr *from) +{ + A_Expr *newnode = makeNode(A_Expr); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(name); + COPY_NODE_FIELD(lexpr); + COPY_NODE_FIELD(rexpr); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TypeCast * +_copyTypeCast(const TypeCast *from) +{ + TypeCast *newnode = makeNode(TypeCast); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(typeName); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CollateClause * +_copyCollateClause(const CollateClause *from) +{ + CollateClause *newnode = makeNode(CollateClause); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(collname); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RoleSpec * +_copyRoleSpec(const RoleSpec *from) +{ + RoleSpec *newnode = makeNode(RoleSpec); + + COPY_SCALAR_FIELD(roletype); + COPY_STRING_FIELD(rolename); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static FuncCall * +_copyFuncCall(const FuncCall *from) +{ + FuncCall *newnode = makeNode(FuncCall); + + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(agg_order); + COPY_NODE_FIELD(agg_filter); + COPY_NODE_FIELD(over); + COPY_SCALAR_FIELD(agg_within_group); + COPY_SCALAR_FIELD(agg_star); + COPY_SCALAR_FIELD(agg_distinct); + COPY_SCALAR_FIELD(func_variadic); + COPY_SCALAR_FIELD(funcformat); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static A_Star * +_copyA_Star(const A_Star *from) +{ + A_Star *newnode = makeNode(A_Star); + + + return newnode; +} + +static A_Indices * +_copyA_Indices(const A_Indices *from) +{ + A_Indices *newnode = makeNode(A_Indices); + + COPY_SCALAR_FIELD(is_slice); + COPY_NODE_FIELD(lidx); + COPY_NODE_FIELD(uidx); + + return newnode; +} + +static A_Indirection * +_copyA_Indirection(const A_Indirection *from) +{ + A_Indirection *newnode = makeNode(A_Indirection); + + COPY_NODE_FIELD(arg); + COPY_NODE_FIELD(indirection); + + return newnode; +} + +static A_ArrayExpr * +_copyA_ArrayExpr(const A_ArrayExpr *from) +{ + A_ArrayExpr *newnode = makeNode(A_ArrayExpr); + + COPY_NODE_FIELD(elements); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ResTarget * +_copyResTarget(const ResTarget *from) +{ + ResTarget *newnode = makeNode(ResTarget); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(indirection); + COPY_NODE_FIELD(val); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static MultiAssignRef * +_copyMultiAssignRef(const MultiAssignRef *from) +{ + MultiAssignRef *newnode = makeNode(MultiAssignRef); + + COPY_NODE_FIELD(source); + COPY_SCALAR_FIELD(colno); + COPY_SCALAR_FIELD(ncolumns); + + return newnode; +} + +static SortBy * +_copySortBy(const SortBy *from) +{ + SortBy *newnode = makeNode(SortBy); + + COPY_NODE_FIELD(node); + COPY_SCALAR_FIELD(sortby_dir); + COPY_SCALAR_FIELD(sortby_nulls); + COPY_NODE_FIELD(useOp); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowDef * +_copyWindowDef(const WindowDef *from) +{ + WindowDef *newnode = makeNode(WindowDef); + + COPY_STRING_FIELD(name); + COPY_STRING_FIELD(refname); + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeSubselect * +_copyRangeSubselect(const RangeSubselect *from) +{ + RangeSubselect *newnode = makeNode(RangeSubselect); + + COPY_SCALAR_FIELD(lateral); + COPY_NODE_FIELD(subquery); + COPY_NODE_FIELD(alias); + + return newnode; +} + +static RangeFunction * +_copyRangeFunction(const RangeFunction *from) +{ + RangeFunction *newnode = makeNode(RangeFunction); + + COPY_SCALAR_FIELD(lateral); + COPY_SCALAR_FIELD(ordinality); + COPY_SCALAR_FIELD(is_rowsfrom); + COPY_NODE_FIELD(functions); + COPY_NODE_FIELD(alias); + COPY_NODE_FIELD(coldeflist); + + return newnode; +} + +static RangeTableFunc * +_copyRangeTableFunc(const RangeTableFunc *from) +{ + RangeTableFunc *newnode = makeNode(RangeTableFunc); + + COPY_SCALAR_FIELD(lateral); + COPY_NODE_FIELD(docexpr); + COPY_NODE_FIELD(rowexpr); + COPY_NODE_FIELD(namespaces); + COPY_NODE_FIELD(columns); + COPY_NODE_FIELD(alias); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeTableFuncCol * +_copyRangeTableFuncCol(const RangeTableFuncCol *from) +{ + RangeTableFuncCol *newnode = makeNode(RangeTableFuncCol); + + COPY_STRING_FIELD(colname); + COPY_NODE_FIELD(typeName); + COPY_SCALAR_FIELD(for_ordinality); + COPY_SCALAR_FIELD(is_not_null); + COPY_NODE_FIELD(colexpr); + COPY_NODE_FIELD(coldefexpr); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static RangeTableSample * +_copyRangeTableSample(const RangeTableSample *from) +{ + RangeTableSample *newnode = makeNode(RangeTableSample); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(method); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static ColumnDef * +_copyColumnDef(const ColumnDef *from) +{ + ColumnDef *newnode = makeNode(ColumnDef); + + COPY_STRING_FIELD(colname); + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(compression); + COPY_SCALAR_FIELD(inhcount); + COPY_SCALAR_FIELD(is_local); + COPY_SCALAR_FIELD(is_not_null); + COPY_SCALAR_FIELD(is_from_type); + COPY_SCALAR_FIELD(storage); + COPY_STRING_FIELD(storage_name); + COPY_NODE_FIELD(raw_default); + COPY_NODE_FIELD(cooked_default); + COPY_SCALAR_FIELD(identity); + COPY_NODE_FIELD(identitySequence); + COPY_SCALAR_FIELD(generated); + COPY_NODE_FIELD(collClause); + COPY_SCALAR_FIELD(collOid); + COPY_NODE_FIELD(constraints); + COPY_NODE_FIELD(fdwoptions); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static TableLikeClause * +_copyTableLikeClause(const TableLikeClause *from) +{ + TableLikeClause *newnode = makeNode(TableLikeClause); + + COPY_NODE_FIELD(relation); + COPY_SCALAR_FIELD(options); + COPY_SCALAR_FIELD(relationOid); + + return newnode; +} + +static IndexElem * +_copyIndexElem(const IndexElem *from) +{ + IndexElem *newnode = makeNode(IndexElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + COPY_STRING_FIELD(indexcolname); + COPY_NODE_FIELD(collation); + COPY_NODE_FIELD(opclass); + COPY_NODE_FIELD(opclassopts); + COPY_SCALAR_FIELD(ordering); + COPY_SCALAR_FIELD(nulls_ordering); + + return newnode; +} + +static DefElem * +_copyDefElem(const DefElem *from) +{ + DefElem *newnode = makeNode(DefElem); + + COPY_STRING_FIELD(defnamespace); + COPY_STRING_FIELD(defname); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(defaction); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static LockingClause * +_copyLockingClause(const LockingClause *from) +{ + LockingClause *newnode = makeNode(LockingClause); + + COPY_NODE_FIELD(lockedRels); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + + return newnode; +} + +static XmlSerialize * +_copyXmlSerialize(const XmlSerialize *from) +{ + XmlSerialize *newnode = makeNode(XmlSerialize); + + COPY_SCALAR_FIELD(xmloption); + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(typeName); + COPY_SCALAR_FIELD(indent); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionElem * +_copyPartitionElem(const PartitionElem *from) +{ + PartitionElem *newnode = makeNode(PartitionElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + COPY_NODE_FIELD(collation); + COPY_NODE_FIELD(opclass); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionSpec * +_copyPartitionSpec(const PartitionSpec *from) +{ + PartitionSpec *newnode = makeNode(PartitionSpec); + + COPY_SCALAR_FIELD(strategy); + COPY_NODE_FIELD(partParams); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionBoundSpec * +_copyPartitionBoundSpec(const PartitionBoundSpec *from) +{ + PartitionBoundSpec *newnode = makeNode(PartitionBoundSpec); + + COPY_SCALAR_FIELD(strategy); + COPY_SCALAR_FIELD(is_default); + COPY_SCALAR_FIELD(modulus); + COPY_SCALAR_FIELD(remainder); + COPY_NODE_FIELD(listdatums); + COPY_NODE_FIELD(lowerdatums); + COPY_NODE_FIELD(upperdatums); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionRangeDatum * +_copyPartitionRangeDatum(const PartitionRangeDatum *from) +{ + PartitionRangeDatum *newnode = makeNode(PartitionRangeDatum); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(value); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static PartitionCmd * +_copyPartitionCmd(const PartitionCmd *from) +{ + PartitionCmd *newnode = makeNode(PartitionCmd); + + COPY_NODE_FIELD(name); + COPY_NODE_FIELD(bound); + COPY_SCALAR_FIELD(concurrent); + + return newnode; +} + +static RangeTblEntry * +_copyRangeTblEntry(const RangeTblEntry *from) +{ + RangeTblEntry *newnode = makeNode(RangeTblEntry); + + COPY_SCALAR_FIELD(rtekind); + COPY_SCALAR_FIELD(relid); + COPY_SCALAR_FIELD(relkind); + COPY_SCALAR_FIELD(rellockmode); + COPY_NODE_FIELD(tablesample); + COPY_SCALAR_FIELD(perminfoindex); + COPY_NODE_FIELD(subquery); + COPY_SCALAR_FIELD(security_barrier); + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(joinmergedcols); + COPY_NODE_FIELD(joinaliasvars); + COPY_NODE_FIELD(joinleftcols); + COPY_NODE_FIELD(joinrightcols); + COPY_NODE_FIELD(join_using_alias); + COPY_NODE_FIELD(functions); + COPY_SCALAR_FIELD(funcordinality); + COPY_NODE_FIELD(tablefunc); + COPY_NODE_FIELD(values_lists); + COPY_STRING_FIELD(ctename); + COPY_SCALAR_FIELD(ctelevelsup); + COPY_SCALAR_FIELD(self_reference); + COPY_NODE_FIELD(coltypes); + COPY_NODE_FIELD(coltypmods); + COPY_NODE_FIELD(colcollations); + COPY_STRING_FIELD(enrname); + COPY_SCALAR_FIELD(enrtuples); + COPY_NODE_FIELD(alias); + COPY_NODE_FIELD(eref); + COPY_SCALAR_FIELD(lateral); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(inFromCl); + COPY_NODE_FIELD(securityQuals); + + return newnode; +} + +static RTEPermissionInfo * +_copyRTEPermissionInfo(const RTEPermissionInfo *from) +{ + RTEPermissionInfo *newnode = makeNode(RTEPermissionInfo); + + COPY_SCALAR_FIELD(relid); + COPY_SCALAR_FIELD(inh); + COPY_SCALAR_FIELD(requiredPerms); + COPY_SCALAR_FIELD(checkAsUser); + COPY_BITMAPSET_FIELD(selectedCols); + COPY_BITMAPSET_FIELD(insertedCols); + COPY_BITMAPSET_FIELD(updatedCols); + + return newnode; +} + +static RangeTblFunction * +_copyRangeTblFunction(const RangeTblFunction *from) +{ + RangeTblFunction *newnode = makeNode(RangeTblFunction); + + COPY_NODE_FIELD(funcexpr); + COPY_SCALAR_FIELD(funccolcount); + COPY_NODE_FIELD(funccolnames); + COPY_NODE_FIELD(funccoltypes); + COPY_NODE_FIELD(funccoltypmods); + COPY_NODE_FIELD(funccolcollations); + COPY_BITMAPSET_FIELD(funcparams); + + return newnode; +} + +static TableSampleClause * +_copyTableSampleClause(const TableSampleClause *from) +{ + TableSampleClause *newnode = makeNode(TableSampleClause); + + COPY_SCALAR_FIELD(tsmhandler); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + + return newnode; +} + +static WithCheckOption * +_copyWithCheckOption(const WithCheckOption *from) +{ + WithCheckOption *newnode = makeNode(WithCheckOption); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(relname); + COPY_STRING_FIELD(polname); + COPY_NODE_FIELD(qual); + COPY_SCALAR_FIELD(cascaded); + + return newnode; +} + +static SortGroupClause * +_copySortGroupClause(const SortGroupClause *from) +{ + SortGroupClause *newnode = makeNode(SortGroupClause); + + COPY_SCALAR_FIELD(tleSortGroupRef); + COPY_SCALAR_FIELD(eqop); + COPY_SCALAR_FIELD(sortop); + COPY_SCALAR_FIELD(nulls_first); + COPY_SCALAR_FIELD(hashable); + + return newnode; +} + +static GroupingSet * +_copyGroupingSet(const GroupingSet *from) +{ + GroupingSet *newnode = makeNode(GroupingSet); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(content); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static WindowClause * +_copyWindowClause(const WindowClause *from) +{ + WindowClause *newnode = makeNode(WindowClause); + + COPY_STRING_FIELD(name); + COPY_STRING_FIELD(refname); + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_NODE_FIELD(runCondition); + COPY_SCALAR_FIELD(startInRangeFunc); + COPY_SCALAR_FIELD(endInRangeFunc); + COPY_SCALAR_FIELD(inRangeColl); + COPY_SCALAR_FIELD(inRangeAsc); + COPY_SCALAR_FIELD(inRangeNullsFirst); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(copiedOrder); + + return newnode; +} + +static RowMarkClause * +_copyRowMarkClause(const RowMarkClause *from) +{ + RowMarkClause *newnode = makeNode(RowMarkClause); + + COPY_SCALAR_FIELD(rti); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + COPY_SCALAR_FIELD(pushedDown); + + return newnode; +} + +static WithClause * +_copyWithClause(const WithClause *from) +{ + WithClause *newnode = makeNode(WithClause); + + COPY_NODE_FIELD(ctes); + COPY_SCALAR_FIELD(recursive); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static InferClause * +_copyInferClause(const InferClause *from) +{ + InferClause *newnode = makeNode(InferClause); + + COPY_NODE_FIELD(indexElems); + COPY_NODE_FIELD(whereClause); + COPY_STRING_FIELD(conname); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static OnConflictClause * +_copyOnConflictClause(const OnConflictClause *from) +{ + OnConflictClause *newnode = makeNode(OnConflictClause); + + COPY_SCALAR_FIELD(action); + COPY_NODE_FIELD(infer); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(whereClause); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CTESearchClause * +_copyCTESearchClause(const CTESearchClause *from) +{ + CTESearchClause *newnode = makeNode(CTESearchClause); + + COPY_NODE_FIELD(search_col_list); + COPY_SCALAR_FIELD(search_breadth_first); + COPY_STRING_FIELD(search_seq_column); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CTECycleClause * +_copyCTECycleClause(const CTECycleClause *from) +{ + CTECycleClause *newnode = makeNode(CTECycleClause); + + COPY_NODE_FIELD(cycle_col_list); + COPY_STRING_FIELD(cycle_mark_column); + COPY_NODE_FIELD(cycle_mark_value); + COPY_NODE_FIELD(cycle_mark_default); + COPY_STRING_FIELD(cycle_path_column); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(cycle_mark_type); + COPY_SCALAR_FIELD(cycle_mark_typmod); + COPY_SCALAR_FIELD(cycle_mark_collation); + COPY_SCALAR_FIELD(cycle_mark_neop); + + return newnode; +} + +static CommonTableExpr * +_copyCommonTableExpr(const CommonTableExpr *from) +{ + CommonTableExpr *newnode = makeNode(CommonTableExpr); + + COPY_STRING_FIELD(ctename); + COPY_NODE_FIELD(aliascolnames); + COPY_SCALAR_FIELD(ctematerialized); + COPY_NODE_FIELD(ctequery); + COPY_NODE_FIELD(search_clause); + COPY_NODE_FIELD(cycle_clause); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(cterecursive); + COPY_SCALAR_FIELD(cterefcount); + COPY_NODE_FIELD(ctecolnames); + COPY_NODE_FIELD(ctecoltypes); + COPY_NODE_FIELD(ctecoltypmods); + COPY_NODE_FIELD(ctecolcollations); + + return newnode; +} + +static MergeWhenClause * +_copyMergeWhenClause(const MergeWhenClause *from) +{ + MergeWhenClause *newnode = makeNode(MergeWhenClause); + + COPY_SCALAR_FIELD(matched); + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(condition); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(values); + + return newnode; +} + +static MergeAction * +_copyMergeAction(const MergeAction *from) +{ + MergeAction *newnode = makeNode(MergeAction); + + COPY_SCALAR_FIELD(matched); + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(override); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(updateColnos); + + return newnode; +} + +static TriggerTransition * +_copyTriggerTransition(const TriggerTransition *from) +{ + TriggerTransition *newnode = makeNode(TriggerTransition); + + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(isNew); + COPY_SCALAR_FIELD(isTable); + + return newnode; +} + +static JsonOutput * +_copyJsonOutput(const JsonOutput *from) +{ + JsonOutput *newnode = makeNode(JsonOutput); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(returning); + + return newnode; +} + +static JsonKeyValue * +_copyJsonKeyValue(const JsonKeyValue *from) +{ + JsonKeyValue *newnode = makeNode(JsonKeyValue); + + COPY_NODE_FIELD(key); + COPY_NODE_FIELD(value); + + return newnode; +} + +static JsonObjectConstructor * +_copyJsonObjectConstructor(const JsonObjectConstructor *from) +{ + JsonObjectConstructor *newnode = makeNode(JsonObjectConstructor); + + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(output); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonArrayConstructor * +_copyJsonArrayConstructor(const JsonArrayConstructor *from) +{ + JsonArrayConstructor *newnode = makeNode(JsonArrayConstructor); + + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(output); + COPY_SCALAR_FIELD(absent_on_null); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonArrayQueryConstructor * +_copyJsonArrayQueryConstructor(const JsonArrayQueryConstructor *from) +{ + JsonArrayQueryConstructor *newnode = makeNode(JsonArrayQueryConstructor); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(output); + COPY_NODE_FIELD(format); + COPY_SCALAR_FIELD(absent_on_null); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonAggConstructor * +_copyJsonAggConstructor(const JsonAggConstructor *from) +{ + JsonAggConstructor *newnode = makeNode(JsonAggConstructor); + + COPY_NODE_FIELD(output); + COPY_NODE_FIELD(agg_filter); + COPY_NODE_FIELD(agg_order); + COPY_NODE_FIELD(over); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static JsonObjectAgg * +_copyJsonObjectAgg(const JsonObjectAgg *from) +{ + JsonObjectAgg *newnode = makeNode(JsonObjectAgg); + + COPY_NODE_FIELD(constructor); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(absent_on_null); + COPY_SCALAR_FIELD(unique); + + return newnode; +} + +static JsonArrayAgg * +_copyJsonArrayAgg(const JsonArrayAgg *from) +{ + JsonArrayAgg *newnode = makeNode(JsonArrayAgg); + + COPY_NODE_FIELD(constructor); + COPY_NODE_FIELD(arg); + COPY_SCALAR_FIELD(absent_on_null); + + return newnode; +} + +static RawStmt * +_copyRawStmt(const RawStmt *from) +{ + RawStmt *newnode = makeNode(RawStmt); + + COPY_NODE_FIELD(stmt); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static InsertStmt * +_copyInsertStmt(const InsertStmt *from) +{ + InsertStmt *newnode = makeNode(InsertStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(cols); + COPY_NODE_FIELD(selectStmt); + COPY_NODE_FIELD(onConflictClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + COPY_SCALAR_FIELD(override); + + return newnode; +} + +static DeleteStmt * +_copyDeleteStmt(const DeleteStmt *from) +{ + DeleteStmt *newnode = makeNode(DeleteStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(usingClause); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static UpdateStmt * +_copyUpdateStmt(const UpdateStmt *from) +{ + UpdateStmt *newnode = makeNode(UpdateStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(fromClause); + COPY_NODE_FIELD(returningList); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static MergeStmt * +_copyMergeStmt(const MergeStmt *from) +{ + MergeStmt *newnode = makeNode(MergeStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(sourceRelation); + COPY_NODE_FIELD(joinCondition); + COPY_NODE_FIELD(mergeWhenClauses); + COPY_NODE_FIELD(withClause); + + return newnode; +} + +static SelectStmt * +_copySelectStmt(const SelectStmt *from) +{ + SelectStmt *newnode = makeNode(SelectStmt); + + COPY_NODE_FIELD(distinctClause); + COPY_NODE_FIELD(intoClause); + COPY_NODE_FIELD(targetList); + COPY_NODE_FIELD(fromClause); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(groupClause); + COPY_SCALAR_FIELD(groupDistinct); + COPY_NODE_FIELD(havingClause); + COPY_NODE_FIELD(windowClause); + COPY_NODE_FIELD(valuesLists); + COPY_NODE_FIELD(sortClause); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_NODE_FIELD(lockingClause); + COPY_NODE_FIELD(withClause); + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(all); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + + return newnode; +} + +static SetOperationStmt * +_copySetOperationStmt(const SetOperationStmt *from) +{ + SetOperationStmt *newnode = makeNode(SetOperationStmt); + + COPY_SCALAR_FIELD(op); + COPY_SCALAR_FIELD(all); + COPY_NODE_FIELD(larg); + COPY_NODE_FIELD(rarg); + COPY_NODE_FIELD(colTypes); + COPY_NODE_FIELD(colTypmods); + COPY_NODE_FIELD(colCollations); + COPY_NODE_FIELD(groupClauses); + + return newnode; +} + +static ReturnStmt * +_copyReturnStmt(const ReturnStmt *from) +{ + ReturnStmt *newnode = makeNode(ReturnStmt); + + COPY_NODE_FIELD(returnval); + + return newnode; +} + +static PLAssignStmt * +_copyPLAssignStmt(const PLAssignStmt *from) +{ + PLAssignStmt *newnode = makeNode(PLAssignStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(indirection); + COPY_SCALAR_FIELD(nnames); + COPY_NODE_FIELD(val); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CreateSchemaStmt * +_copyCreateSchemaStmt(const CreateSchemaStmt *from) +{ + CreateSchemaStmt *newnode = makeNode(CreateSchemaStmt); + + COPY_STRING_FIELD(schemaname); + COPY_NODE_FIELD(authrole); + COPY_NODE_FIELD(schemaElts); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static AlterTableStmt * +_copyAlterTableStmt(const AlterTableStmt *from) +{ + AlterTableStmt *newnode = makeNode(AlterTableStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(cmds); + COPY_SCALAR_FIELD(objtype); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static ReplicaIdentityStmt * +_copyReplicaIdentityStmt(const ReplicaIdentityStmt *from) +{ + ReplicaIdentityStmt *newnode = makeNode(ReplicaIdentityStmt); + + COPY_SCALAR_FIELD(identity_type); + COPY_STRING_FIELD(name); + + return newnode; +} + +static AlterTableCmd * +_copyAlterTableCmd(const AlterTableCmd *from) +{ + AlterTableCmd *newnode = makeNode(AlterTableCmd); + + COPY_SCALAR_FIELD(subtype); + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(num); + COPY_NODE_FIELD(newowner); + COPY_NODE_FIELD(def); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(recurse); + + return newnode; +} + +static AlterCollationStmt * +_copyAlterCollationStmt(const AlterCollationStmt *from) +{ + AlterCollationStmt *newnode = makeNode(AlterCollationStmt); + + COPY_NODE_FIELD(collname); + + return newnode; +} + +static AlterDomainStmt * +_copyAlterDomainStmt(const AlterDomainStmt *from) +{ + AlterDomainStmt *newnode = makeNode(AlterDomainStmt); + + COPY_SCALAR_FIELD(subtype); + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(def); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static GrantStmt * +_copyGrantStmt(const GrantStmt *from) +{ + GrantStmt *newnode = makeNode(GrantStmt); + + COPY_SCALAR_FIELD(is_grant); + COPY_SCALAR_FIELD(targtype); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(objects); + COPY_NODE_FIELD(privileges); + COPY_NODE_FIELD(grantees); + COPY_SCALAR_FIELD(grant_option); + COPY_NODE_FIELD(grantor); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static ObjectWithArgs * +_copyObjectWithArgs(const ObjectWithArgs *from) +{ + ObjectWithArgs *newnode = makeNode(ObjectWithArgs); + + COPY_NODE_FIELD(objname); + COPY_NODE_FIELD(objargs); + COPY_NODE_FIELD(objfuncargs); + COPY_SCALAR_FIELD(args_unspecified); + + return newnode; +} + +static AccessPriv * +_copyAccessPriv(const AccessPriv *from) +{ + AccessPriv *newnode = makeNode(AccessPriv); + + COPY_STRING_FIELD(priv_name); + COPY_NODE_FIELD(cols); + + return newnode; +} + +static GrantRoleStmt * +_copyGrantRoleStmt(const GrantRoleStmt *from) +{ + GrantRoleStmt *newnode = makeNode(GrantRoleStmt); + + COPY_NODE_FIELD(granted_roles); + COPY_NODE_FIELD(grantee_roles); + COPY_SCALAR_FIELD(is_grant); + COPY_NODE_FIELD(opt); + COPY_NODE_FIELD(grantor); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static AlterDefaultPrivilegesStmt * +_copyAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *from) +{ + AlterDefaultPrivilegesStmt *newnode = makeNode(AlterDefaultPrivilegesStmt); + + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(action); + + return newnode; +} + +static CopyStmt * +_copyCopyStmt(const CopyStmt *from) +{ + CopyStmt *newnode = makeNode(CopyStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(attlist); + COPY_SCALAR_FIELD(is_from); + COPY_SCALAR_FIELD(is_program); + COPY_STRING_FIELD(filename); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(whereClause); + + return newnode; +} + +static VariableSetStmt * +_copyVariableSetStmt(const VariableSetStmt *from) +{ + VariableSetStmt *newnode = makeNode(VariableSetStmt); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(is_local); + + return newnode; +} + +static VariableShowStmt * +_copyVariableShowStmt(const VariableShowStmt *from) +{ + VariableShowStmt *newnode = makeNode(VariableShowStmt); + + COPY_STRING_FIELD(name); + + return newnode; +} + +static CreateStmt * +_copyCreateStmt(const CreateStmt *from) +{ + CreateStmt *newnode = makeNode(CreateStmt); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(tableElts); + COPY_NODE_FIELD(inhRelations); + COPY_NODE_FIELD(partbound); + COPY_NODE_FIELD(partspec); + COPY_NODE_FIELD(ofTypename); + COPY_NODE_FIELD(constraints); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(oncommit); + COPY_STRING_FIELD(tablespacename); + COPY_STRING_FIELD(accessMethod); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static Constraint * +_copyConstraint(const Constraint *from) +{ + Constraint *newnode = makeNode(Constraint); + + COPY_SCALAR_FIELD(contype); + COPY_STRING_FIELD(conname); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(is_no_inherit); + COPY_NODE_FIELD(raw_expr); + COPY_STRING_FIELD(cooked_expr); + COPY_SCALAR_FIELD(generated_when); + COPY_SCALAR_FIELD(nulls_not_distinct); + COPY_NODE_FIELD(keys); + COPY_NODE_FIELD(including); + COPY_NODE_FIELD(exclusions); + COPY_NODE_FIELD(options); + COPY_STRING_FIELD(indexname); + COPY_STRING_FIELD(indexspace); + COPY_SCALAR_FIELD(reset_default_tblspc); + COPY_STRING_FIELD(access_method); + COPY_NODE_FIELD(where_clause); + COPY_NODE_FIELD(pktable); + COPY_NODE_FIELD(fk_attrs); + COPY_NODE_FIELD(pk_attrs); + COPY_SCALAR_FIELD(fk_matchtype); + COPY_SCALAR_FIELD(fk_upd_action); + COPY_SCALAR_FIELD(fk_del_action); + COPY_NODE_FIELD(fk_del_set_cols); + COPY_NODE_FIELD(old_conpfeqop); + COPY_SCALAR_FIELD(old_pktable_oid); + COPY_SCALAR_FIELD(skip_validation); + COPY_SCALAR_FIELD(initially_valid); + + return newnode; +} + +static CreateTableSpaceStmt * +_copyCreateTableSpaceStmt(const CreateTableSpaceStmt *from) +{ + CreateTableSpaceStmt *newnode = makeNode(CreateTableSpaceStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_NODE_FIELD(owner); + COPY_STRING_FIELD(location); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropTableSpaceStmt * +_copyDropTableSpaceStmt(const DropTableSpaceStmt *from) +{ + DropTableSpaceStmt *newnode = makeNode(DropTableSpaceStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterTableSpaceOptionsStmt * +_copyAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *from) +{ + AlterTableSpaceOptionsStmt *newnode = makeNode(AlterTableSpaceOptionsStmt); + + COPY_STRING_FIELD(tablespacename); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(isReset); + + return newnode; +} + +static AlterTableMoveAllStmt * +_copyAlterTableMoveAllStmt(const AlterTableMoveAllStmt *from) +{ + AlterTableMoveAllStmt *newnode = makeNode(AlterTableMoveAllStmt); + + COPY_STRING_FIELD(orig_tablespacename); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(roles); + COPY_STRING_FIELD(new_tablespacename); + COPY_SCALAR_FIELD(nowait); + + return newnode; +} + +static CreateExtensionStmt * +_copyCreateExtensionStmt(const CreateExtensionStmt *from) +{ + CreateExtensionStmt *newnode = makeNode(CreateExtensionStmt); + + COPY_STRING_FIELD(extname); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterExtensionStmt * +_copyAlterExtensionStmt(const AlterExtensionStmt *from) +{ + AlterExtensionStmt *newnode = makeNode(AlterExtensionStmt); + + COPY_STRING_FIELD(extname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterExtensionContentsStmt * +_copyAlterExtensionContentsStmt(const AlterExtensionContentsStmt *from) +{ + AlterExtensionContentsStmt *newnode = makeNode(AlterExtensionContentsStmt); + + COPY_STRING_FIELD(extname); + COPY_SCALAR_FIELD(action); + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + + return newnode; +} + +static CreateFdwStmt * +_copyCreateFdwStmt(const CreateFdwStmt *from) +{ + CreateFdwStmt *newnode = makeNode(CreateFdwStmt); + + COPY_STRING_FIELD(fdwname); + COPY_NODE_FIELD(func_options); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterFdwStmt * +_copyAlterFdwStmt(const AlterFdwStmt *from) +{ + AlterFdwStmt *newnode = makeNode(AlterFdwStmt); + + COPY_STRING_FIELD(fdwname); + COPY_NODE_FIELD(func_options); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateForeignServerStmt * +_copyCreateForeignServerStmt(const CreateForeignServerStmt *from) +{ + CreateForeignServerStmt *newnode = makeNode(CreateForeignServerStmt); + + COPY_STRING_FIELD(servername); + COPY_STRING_FIELD(servertype); + COPY_STRING_FIELD(version); + COPY_STRING_FIELD(fdwname); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterForeignServerStmt * +_copyAlterForeignServerStmt(const AlterForeignServerStmt *from) +{ + AlterForeignServerStmt *newnode = makeNode(AlterForeignServerStmt); + + COPY_STRING_FIELD(servername); + COPY_STRING_FIELD(version); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(has_version); + + return newnode; +} + +static CreateForeignTableStmt * +_copyCreateForeignTableStmt(const CreateForeignTableStmt *from) +{ + CreateForeignTableStmt *newnode = makeNode(CreateForeignTableStmt); + + COPY_NODE_FIELD(base.relation); + COPY_NODE_FIELD(base.tableElts); + COPY_NODE_FIELD(base.inhRelations); + COPY_NODE_FIELD(base.partbound); + COPY_NODE_FIELD(base.partspec); + COPY_NODE_FIELD(base.ofTypename); + COPY_NODE_FIELD(base.constraints); + COPY_NODE_FIELD(base.options); + COPY_SCALAR_FIELD(base.oncommit); + COPY_STRING_FIELD(base.tablespacename); + COPY_STRING_FIELD(base.accessMethod); + COPY_SCALAR_FIELD(base.if_not_exists); + COPY_STRING_FIELD(servername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateUserMappingStmt * +_copyCreateUserMappingStmt(const CreateUserMappingStmt *from) +{ + CreateUserMappingStmt *newnode = makeNode(CreateUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_SCALAR_FIELD(if_not_exists); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterUserMappingStmt * +_copyAlterUserMappingStmt(const AlterUserMappingStmt *from) +{ + AlterUserMappingStmt *newnode = makeNode(AlterUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropUserMappingStmt * +_copyDropUserMappingStmt(const DropUserMappingStmt *from) +{ + DropUserMappingStmt *newnode = makeNode(DropUserMappingStmt); + + COPY_NODE_FIELD(user); + COPY_STRING_FIELD(servername); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static ImportForeignSchemaStmt * +_copyImportForeignSchemaStmt(const ImportForeignSchemaStmt *from) +{ + ImportForeignSchemaStmt *newnode = makeNode(ImportForeignSchemaStmt); + + COPY_STRING_FIELD(server_name); + COPY_STRING_FIELD(remote_schema); + COPY_STRING_FIELD(local_schema); + COPY_SCALAR_FIELD(list_type); + COPY_NODE_FIELD(table_list); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreatePolicyStmt * +_copyCreatePolicyStmt(const CreatePolicyStmt *from) +{ + CreatePolicyStmt *newnode = makeNode(CreatePolicyStmt); + + COPY_STRING_FIELD(policy_name); + COPY_NODE_FIELD(table); + COPY_STRING_FIELD(cmd_name); + COPY_SCALAR_FIELD(permissive); + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(with_check); + + return newnode; +} + +static AlterPolicyStmt * +_copyAlterPolicyStmt(const AlterPolicyStmt *from) +{ + AlterPolicyStmt *newnode = makeNode(AlterPolicyStmt); + + COPY_STRING_FIELD(policy_name); + COPY_NODE_FIELD(table); + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(qual); + COPY_NODE_FIELD(with_check); + + return newnode; +} + +static CreateAmStmt * +_copyCreateAmStmt(const CreateAmStmt *from) +{ + CreateAmStmt *newnode = makeNode(CreateAmStmt); + + COPY_STRING_FIELD(amname); + COPY_NODE_FIELD(handler_name); + COPY_SCALAR_FIELD(amtype); + + return newnode; +} + +static CreateTrigStmt * +_copyCreateTrigStmt(const CreateTrigStmt *from) +{ + CreateTrigStmt *newnode = makeNode(CreateTrigStmt); + + COPY_SCALAR_FIELD(replace); + COPY_SCALAR_FIELD(isconstraint); + COPY_STRING_FIELD(trigname); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(row); + COPY_SCALAR_FIELD(timing); + COPY_SCALAR_FIELD(events); + COPY_NODE_FIELD(columns); + COPY_NODE_FIELD(whenClause); + COPY_NODE_FIELD(transitionRels); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_NODE_FIELD(constrrel); + + return newnode; +} + +static CreateEventTrigStmt * +_copyCreateEventTrigStmt(const CreateEventTrigStmt *from) +{ + CreateEventTrigStmt *newnode = makeNode(CreateEventTrigStmt); + + COPY_STRING_FIELD(trigname); + COPY_STRING_FIELD(eventname); + COPY_NODE_FIELD(whenclause); + COPY_NODE_FIELD(funcname); + + return newnode; +} + +static AlterEventTrigStmt * +_copyAlterEventTrigStmt(const AlterEventTrigStmt *from) +{ + AlterEventTrigStmt *newnode = makeNode(AlterEventTrigStmt); + + COPY_STRING_FIELD(trigname); + COPY_SCALAR_FIELD(tgenabled); + + return newnode; +} + +static CreatePLangStmt * +_copyCreatePLangStmt(const CreatePLangStmt *from) +{ + CreatePLangStmt *newnode = makeNode(CreatePLangStmt); + + COPY_SCALAR_FIELD(replace); + COPY_STRING_FIELD(plname); + COPY_NODE_FIELD(plhandler); + COPY_NODE_FIELD(plinline); + COPY_NODE_FIELD(plvalidator); + COPY_SCALAR_FIELD(pltrusted); + + return newnode; +} + +static CreateRoleStmt * +_copyCreateRoleStmt(const CreateRoleStmt *from) +{ + CreateRoleStmt *newnode = makeNode(CreateRoleStmt); + + COPY_SCALAR_FIELD(stmt_type); + COPY_STRING_FIELD(role); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterRoleStmt * +_copyAlterRoleStmt(const AlterRoleStmt *from) +{ + AlterRoleStmt *newnode = makeNode(AlterRoleStmt); + + COPY_NODE_FIELD(role); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(action); + + return newnode; +} + +static AlterRoleSetStmt * +_copyAlterRoleSetStmt(const AlterRoleSetStmt *from) +{ + AlterRoleSetStmt *newnode = makeNode(AlterRoleSetStmt); + + COPY_NODE_FIELD(role); + COPY_STRING_FIELD(database); + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static DropRoleStmt * +_copyDropRoleStmt(const DropRoleStmt *from) +{ + DropRoleStmt *newnode = makeNode(DropRoleStmt); + + COPY_NODE_FIELD(roles); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static CreateSeqStmt * +_copyCreateSeqStmt(const CreateSeqStmt *from) +{ + CreateSeqStmt *newnode = makeNode(CreateSeqStmt); + + COPY_NODE_FIELD(sequence); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(ownerId); + COPY_SCALAR_FIELD(for_identity); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static AlterSeqStmt * +_copyAlterSeqStmt(const AlterSeqStmt *from) +{ + AlterSeqStmt *newnode = makeNode(AlterSeqStmt); + + COPY_NODE_FIELD(sequence); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(for_identity); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static DefineStmt * +_copyDefineStmt(const DefineStmt *from) +{ + DefineStmt *newnode = makeNode(DefineStmt); + + COPY_SCALAR_FIELD(kind); + COPY_SCALAR_FIELD(oldstyle); + COPY_NODE_FIELD(defnames); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(definition); + COPY_SCALAR_FIELD(if_not_exists); + COPY_SCALAR_FIELD(replace); + + return newnode; +} + +static CreateDomainStmt * +_copyCreateDomainStmt(const CreateDomainStmt *from) +{ + CreateDomainStmt *newnode = makeNode(CreateDomainStmt); + + COPY_NODE_FIELD(domainname); + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(collClause); + COPY_NODE_FIELD(constraints); + + return newnode; +} + +static CreateOpClassStmt * +_copyCreateOpClassStmt(const CreateOpClassStmt *from) +{ + CreateOpClassStmt *newnode = makeNode(CreateOpClassStmt); + + COPY_NODE_FIELD(opclassname); + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + COPY_NODE_FIELD(datatype); + COPY_NODE_FIELD(items); + COPY_SCALAR_FIELD(isDefault); + + return newnode; +} + +static CreateOpClassItem * +_copyCreateOpClassItem(const CreateOpClassItem *from) +{ + CreateOpClassItem *newnode = makeNode(CreateOpClassItem); + + COPY_SCALAR_FIELD(itemtype); + COPY_NODE_FIELD(name); + COPY_SCALAR_FIELD(number); + COPY_NODE_FIELD(order_family); + COPY_NODE_FIELD(class_args); + COPY_NODE_FIELD(storedtype); + + return newnode; +} + +static CreateOpFamilyStmt * +_copyCreateOpFamilyStmt(const CreateOpFamilyStmt *from) +{ + CreateOpFamilyStmt *newnode = makeNode(CreateOpFamilyStmt); + + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + + return newnode; +} + +static AlterOpFamilyStmt * +_copyAlterOpFamilyStmt(const AlterOpFamilyStmt *from) +{ + AlterOpFamilyStmt *newnode = makeNode(AlterOpFamilyStmt); + + COPY_NODE_FIELD(opfamilyname); + COPY_STRING_FIELD(amname); + COPY_SCALAR_FIELD(isDrop); + COPY_NODE_FIELD(items); + + return newnode; +} + +static DropStmt * +_copyDropStmt(const DropStmt *from) +{ + DropStmt *newnode = makeNode(DropStmt); + + COPY_NODE_FIELD(objects); + COPY_SCALAR_FIELD(removeType); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(concurrent); + + return newnode; +} + +static TruncateStmt * +_copyTruncateStmt(const TruncateStmt *from) +{ + TruncateStmt *newnode = makeNode(TruncateStmt); + + COPY_NODE_FIELD(relations); + COPY_SCALAR_FIELD(restart_seqs); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static CommentStmt * +_copyCommentStmt(const CommentStmt *from) +{ + CommentStmt *newnode = makeNode(CommentStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(comment); + + return newnode; +} + +static SecLabelStmt * +_copySecLabelStmt(const SecLabelStmt *from) +{ + SecLabelStmt *newnode = makeNode(SecLabelStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(provider); + COPY_STRING_FIELD(label); + + return newnode; +} + +static DeclareCursorStmt * +_copyDeclareCursorStmt(const DeclareCursorStmt *from) +{ + DeclareCursorStmt *newnode = makeNode(DeclareCursorStmt); + + COPY_STRING_FIELD(portalname); + COPY_SCALAR_FIELD(options); + COPY_NODE_FIELD(query); + + return newnode; +} + +static ClosePortalStmt * +_copyClosePortalStmt(const ClosePortalStmt *from) +{ + ClosePortalStmt *newnode = makeNode(ClosePortalStmt); + + COPY_STRING_FIELD(portalname); + + return newnode; +} + +static FetchStmt * +_copyFetchStmt(const FetchStmt *from) +{ + FetchStmt *newnode = makeNode(FetchStmt); + + COPY_SCALAR_FIELD(direction); + COPY_SCALAR_FIELD(howMany); + COPY_STRING_FIELD(portalname); + COPY_SCALAR_FIELD(ismove); + + return newnode; +} + +static IndexStmt * +_copyIndexStmt(const IndexStmt *from) +{ + IndexStmt *newnode = makeNode(IndexStmt); + + COPY_STRING_FIELD(idxname); + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(accessMethod); + COPY_STRING_FIELD(tableSpace); + COPY_NODE_FIELD(indexParams); + COPY_NODE_FIELD(indexIncludingParams); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(excludeOpNames); + COPY_STRING_FIELD(idxcomment); + COPY_SCALAR_FIELD(indexOid); + COPY_SCALAR_FIELD(oldNumber); + COPY_SCALAR_FIELD(oldCreateSubid); + COPY_SCALAR_FIELD(oldFirstRelfilelocatorSubid); + COPY_SCALAR_FIELD(unique); + COPY_SCALAR_FIELD(nulls_not_distinct); + COPY_SCALAR_FIELD(primary); + COPY_SCALAR_FIELD(isconstraint); + COPY_SCALAR_FIELD(deferrable); + COPY_SCALAR_FIELD(initdeferred); + COPY_SCALAR_FIELD(transformed); + COPY_SCALAR_FIELD(concurrent); + COPY_SCALAR_FIELD(if_not_exists); + COPY_SCALAR_FIELD(reset_default_tblspc); + + return newnode; +} + +static CreateStatsStmt * +_copyCreateStatsStmt(const CreateStatsStmt *from) +{ + CreateStatsStmt *newnode = makeNode(CreateStatsStmt); + + COPY_NODE_FIELD(defnames); + COPY_NODE_FIELD(stat_types); + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(relations); + COPY_STRING_FIELD(stxcomment); + COPY_SCALAR_FIELD(transformed); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static StatsElem * +_copyStatsElem(const StatsElem *from) +{ + StatsElem *newnode = makeNode(StatsElem); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(expr); + + return newnode; +} + +static AlterStatsStmt * +_copyAlterStatsStmt(const AlterStatsStmt *from) +{ + AlterStatsStmt *newnode = makeNode(AlterStatsStmt); + + COPY_NODE_FIELD(defnames); + COPY_SCALAR_FIELD(stxstattarget); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static CreateFunctionStmt * +_copyCreateFunctionStmt(const CreateFunctionStmt *from) +{ + CreateFunctionStmt *newnode = makeNode(CreateFunctionStmt); + + COPY_SCALAR_FIELD(is_procedure); + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(funcname); + COPY_NODE_FIELD(parameters); + COPY_NODE_FIELD(returnType); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(sql_body); + + return newnode; +} + +static FunctionParameter * +_copyFunctionParameter(const FunctionParameter *from) +{ + FunctionParameter *newnode = makeNode(FunctionParameter); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(argType); + COPY_SCALAR_FIELD(mode); + COPY_NODE_FIELD(defexpr); + + return newnode; +} + +static AlterFunctionStmt * +_copyAlterFunctionStmt(const AlterFunctionStmt *from) +{ + AlterFunctionStmt *newnode = makeNode(AlterFunctionStmt); + + COPY_SCALAR_FIELD(objtype); + COPY_NODE_FIELD(func); + COPY_NODE_FIELD(actions); + + return newnode; +} + +static DoStmt * +_copyDoStmt(const DoStmt *from) +{ + DoStmt *newnode = makeNode(DoStmt); + + COPY_NODE_FIELD(args); + + return newnode; +} + +static CallStmt * +_copyCallStmt(const CallStmt *from) +{ + CallStmt *newnode = makeNode(CallStmt); + + COPY_NODE_FIELD(funccall); + COPY_NODE_FIELD(funcexpr); + COPY_NODE_FIELD(outargs); + + return newnode; +} + +static RenameStmt * +_copyRenameStmt(const RenameStmt *from) +{ + RenameStmt *newnode = makeNode(RenameStmt); + + COPY_SCALAR_FIELD(renameType); + COPY_SCALAR_FIELD(relationType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(newname); + COPY_SCALAR_FIELD(behavior); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterObjectDependsStmt * +_copyAlterObjectDependsStmt(const AlterObjectDependsStmt *from) +{ + AlterObjectDependsStmt *newnode = makeNode(AlterObjectDependsStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_NODE_FIELD(extname); + COPY_SCALAR_FIELD(remove); + + return newnode; +} + +static AlterObjectSchemaStmt * +_copyAlterObjectSchemaStmt(const AlterObjectSchemaStmt *from) +{ + AlterObjectSchemaStmt *newnode = makeNode(AlterObjectSchemaStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_STRING_FIELD(newschema); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static AlterOwnerStmt * +_copyAlterOwnerStmt(const AlterOwnerStmt *from) +{ + AlterOwnerStmt *newnode = makeNode(AlterOwnerStmt); + + COPY_SCALAR_FIELD(objectType); + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(object); + COPY_NODE_FIELD(newowner); + + return newnode; +} + +static AlterOperatorStmt * +_copyAlterOperatorStmt(const AlterOperatorStmt *from) +{ + AlterOperatorStmt *newnode = makeNode(AlterOperatorStmt); + + COPY_NODE_FIELD(opername); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterTypeStmt * +_copyAlterTypeStmt(const AlterTypeStmt *from) +{ + AlterTypeStmt *newnode = makeNode(AlterTypeStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(options); + + return newnode; +} + +static RuleStmt * +_copyRuleStmt(const RuleStmt *from) +{ + RuleStmt *newnode = makeNode(RuleStmt); + + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(rulename); + COPY_NODE_FIELD(whereClause); + COPY_SCALAR_FIELD(event); + COPY_SCALAR_FIELD(instead); + COPY_NODE_FIELD(actions); + COPY_SCALAR_FIELD(replace); + + return newnode; +} + +static NotifyStmt * +_copyNotifyStmt(const NotifyStmt *from) +{ + NotifyStmt *newnode = makeNode(NotifyStmt); + + COPY_STRING_FIELD(conditionname); + COPY_STRING_FIELD(payload); + + return newnode; +} + +static ListenStmt * +_copyListenStmt(const ListenStmt *from) +{ + ListenStmt *newnode = makeNode(ListenStmt); + + COPY_STRING_FIELD(conditionname); + + return newnode; +} + +static UnlistenStmt * +_copyUnlistenStmt(const UnlistenStmt *from) +{ + UnlistenStmt *newnode = makeNode(UnlistenStmt); + + COPY_STRING_FIELD(conditionname); + + return newnode; +} + +static TransactionStmt * +_copyTransactionStmt(const TransactionStmt *from) +{ + TransactionStmt *newnode = makeNode(TransactionStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(options); + COPY_STRING_FIELD(savepoint_name); + COPY_STRING_FIELD(gid); + COPY_SCALAR_FIELD(chain); + + return newnode; +} + +static CompositeTypeStmt * +_copyCompositeTypeStmt(const CompositeTypeStmt *from) +{ + CompositeTypeStmt *newnode = makeNode(CompositeTypeStmt); + + COPY_NODE_FIELD(typevar); + COPY_NODE_FIELD(coldeflist); + + return newnode; +} + +static CreateEnumStmt * +_copyCreateEnumStmt(const CreateEnumStmt *from) +{ + CreateEnumStmt *newnode = makeNode(CreateEnumStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(vals); + + return newnode; +} + +static CreateRangeStmt * +_copyCreateRangeStmt(const CreateRangeStmt *from) +{ + CreateRangeStmt *newnode = makeNode(CreateRangeStmt); + + COPY_NODE_FIELD(typeName); + COPY_NODE_FIELD(params); + + return newnode; +} + +static AlterEnumStmt * +_copyAlterEnumStmt(const AlterEnumStmt *from) +{ + AlterEnumStmt *newnode = makeNode(AlterEnumStmt); + + COPY_NODE_FIELD(typeName); + COPY_STRING_FIELD(oldVal); + COPY_STRING_FIELD(newVal); + COPY_STRING_FIELD(newValNeighbor); + COPY_SCALAR_FIELD(newValIsAfter); + COPY_SCALAR_FIELD(skipIfNewValExists); + + return newnode; +} + +static ViewStmt * +_copyViewStmt(const ViewStmt *from) +{ + ViewStmt *newnode = makeNode(ViewStmt); + + COPY_NODE_FIELD(view); + COPY_NODE_FIELD(aliases); + COPY_NODE_FIELD(query); + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(options); + COPY_SCALAR_FIELD(withCheckOption); + + return newnode; +} + +static LoadStmt * +_copyLoadStmt(const LoadStmt *from) +{ + LoadStmt *newnode = makeNode(LoadStmt); + + COPY_STRING_FIELD(filename); + + return newnode; +} + +static CreatedbStmt * +_copyCreatedbStmt(const CreatedbStmt *from) +{ + CreatedbStmt *newnode = makeNode(CreatedbStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterDatabaseStmt * +_copyAlterDatabaseStmt(const AlterDatabaseStmt *from) +{ + AlterDatabaseStmt *newnode = makeNode(AlterDatabaseStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterDatabaseRefreshCollStmt * +_copyAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *from) +{ + AlterDatabaseRefreshCollStmt *newnode = makeNode(AlterDatabaseRefreshCollStmt); + + COPY_STRING_FIELD(dbname); + + return newnode; +} + +static AlterDatabaseSetStmt * +_copyAlterDatabaseSetStmt(const AlterDatabaseSetStmt *from) +{ + AlterDatabaseSetStmt *newnode = makeNode(AlterDatabaseSetStmt); + + COPY_STRING_FIELD(dbname); + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static DropdbStmt * +_copyDropdbStmt(const DropdbStmt *from) +{ + DropdbStmt *newnode = makeNode(DropdbStmt); + + COPY_STRING_FIELD(dbname); + COPY_SCALAR_FIELD(missing_ok); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterSystemStmt * +_copyAlterSystemStmt(const AlterSystemStmt *from) +{ + AlterSystemStmt *newnode = makeNode(AlterSystemStmt); + + COPY_NODE_FIELD(setstmt); + + return newnode; +} + +static ClusterStmt * +_copyClusterStmt(const ClusterStmt *from) +{ + ClusterStmt *newnode = makeNode(ClusterStmt); + + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(indexname); + COPY_NODE_FIELD(params); + + return newnode; +} + +static VacuumStmt * +_copyVacuumStmt(const VacuumStmt *from) +{ + VacuumStmt *newnode = makeNode(VacuumStmt); + + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(rels); + COPY_SCALAR_FIELD(is_vacuumcmd); + + return newnode; +} + +static VacuumRelation * +_copyVacuumRelation(const VacuumRelation *from) +{ + VacuumRelation *newnode = makeNode(VacuumRelation); + + COPY_NODE_FIELD(relation); + COPY_SCALAR_FIELD(oid); + COPY_NODE_FIELD(va_cols); + + return newnode; +} + +static ExplainStmt * +_copyExplainStmt(const ExplainStmt *from) +{ + ExplainStmt *newnode = makeNode(ExplainStmt); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(options); + + return newnode; +} + +static CreateTableAsStmt * +_copyCreateTableAsStmt(const CreateTableAsStmt *from) +{ + CreateTableAsStmt *newnode = makeNode(CreateTableAsStmt); + + COPY_NODE_FIELD(query); + COPY_NODE_FIELD(into); + COPY_SCALAR_FIELD(objtype); + COPY_SCALAR_FIELD(is_select_into); + COPY_SCALAR_FIELD(if_not_exists); + + return newnode; +} + +static RefreshMatViewStmt * +_copyRefreshMatViewStmt(const RefreshMatViewStmt *from) +{ + RefreshMatViewStmt *newnode = makeNode(RefreshMatViewStmt); + + COPY_SCALAR_FIELD(concurrent); + COPY_SCALAR_FIELD(skipData); + COPY_NODE_FIELD(relation); + + return newnode; +} + +static CheckPointStmt * +_copyCheckPointStmt(const CheckPointStmt *from) +{ + CheckPointStmt *newnode = makeNode(CheckPointStmt); + + + return newnode; +} + +static DiscardStmt * +_copyDiscardStmt(const DiscardStmt *from) +{ + DiscardStmt *newnode = makeNode(DiscardStmt); + + COPY_SCALAR_FIELD(target); + + return newnode; +} + +static LockStmt * +_copyLockStmt(const LockStmt *from) +{ + LockStmt *newnode = makeNode(LockStmt); + + COPY_NODE_FIELD(relations); + COPY_SCALAR_FIELD(mode); + COPY_SCALAR_FIELD(nowait); + + return newnode; +} + +static ConstraintsSetStmt * +_copyConstraintsSetStmt(const ConstraintsSetStmt *from) +{ + ConstraintsSetStmt *newnode = makeNode(ConstraintsSetStmt); + + COPY_NODE_FIELD(constraints); + COPY_SCALAR_FIELD(deferred); + + return newnode; +} + +static ReindexStmt * +_copyReindexStmt(const ReindexStmt *from) +{ + ReindexStmt *newnode = makeNode(ReindexStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(relation); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(params); + + return newnode; +} + +static CreateConversionStmt * +_copyCreateConversionStmt(const CreateConversionStmt *from) +{ + CreateConversionStmt *newnode = makeNode(CreateConversionStmt); + + COPY_NODE_FIELD(conversion_name); + COPY_STRING_FIELD(for_encoding_name); + COPY_STRING_FIELD(to_encoding_name); + COPY_NODE_FIELD(func_name); + COPY_SCALAR_FIELD(def); + + return newnode; +} + +static CreateCastStmt * +_copyCreateCastStmt(const CreateCastStmt *from) +{ + CreateCastStmt *newnode = makeNode(CreateCastStmt); + + COPY_NODE_FIELD(sourcetype); + COPY_NODE_FIELD(targettype); + COPY_NODE_FIELD(func); + COPY_SCALAR_FIELD(context); + COPY_SCALAR_FIELD(inout); + + return newnode; +} + +static CreateTransformStmt * +_copyCreateTransformStmt(const CreateTransformStmt *from) +{ + CreateTransformStmt *newnode = makeNode(CreateTransformStmt); + + COPY_SCALAR_FIELD(replace); + COPY_NODE_FIELD(type_name); + COPY_STRING_FIELD(lang); + COPY_NODE_FIELD(fromsql); + COPY_NODE_FIELD(tosql); + + return newnode; +} + +static PrepareStmt * +_copyPrepareStmt(const PrepareStmt *from) +{ + PrepareStmt *newnode = makeNode(PrepareStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(argtypes); + COPY_NODE_FIELD(query); + + return newnode; +} + +static ExecuteStmt * +_copyExecuteStmt(const ExecuteStmt *from) +{ + ExecuteStmt *newnode = makeNode(ExecuteStmt); + + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(params); + + return newnode; +} + +static DeallocateStmt * +_copyDeallocateStmt(const DeallocateStmt *from) +{ + DeallocateStmt *newnode = makeNode(DeallocateStmt); + + COPY_STRING_FIELD(name); + + return newnode; +} + +static DropOwnedStmt * +_copyDropOwnedStmt(const DropOwnedStmt *from) +{ + DropOwnedStmt *newnode = makeNode(DropOwnedStmt); + + COPY_NODE_FIELD(roles); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static ReassignOwnedStmt * +_copyReassignOwnedStmt(const ReassignOwnedStmt *from) +{ + ReassignOwnedStmt *newnode = makeNode(ReassignOwnedStmt); + + COPY_NODE_FIELD(roles); + COPY_NODE_FIELD(newrole); + + return newnode; +} + +static AlterTSDictionaryStmt * +_copyAlterTSDictionaryStmt(const AlterTSDictionaryStmt *from) +{ + AlterTSDictionaryStmt *newnode = makeNode(AlterTSDictionaryStmt); + + COPY_NODE_FIELD(dictname); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterTSConfigurationStmt * +_copyAlterTSConfigurationStmt(const AlterTSConfigurationStmt *from) +{ + AlterTSConfigurationStmt *newnode = makeNode(AlterTSConfigurationStmt); + + COPY_SCALAR_FIELD(kind); + COPY_NODE_FIELD(cfgname); + COPY_NODE_FIELD(tokentype); + COPY_NODE_FIELD(dicts); + COPY_SCALAR_FIELD(override); + COPY_SCALAR_FIELD(replace); + COPY_SCALAR_FIELD(missing_ok); + + return newnode; +} + +static PublicationTable * +_copyPublicationTable(const PublicationTable *from) +{ + PublicationTable *newnode = makeNode(PublicationTable); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(whereClause); + COPY_NODE_FIELD(columns); + + return newnode; +} + +static PublicationObjSpec * +_copyPublicationObjSpec(const PublicationObjSpec *from) +{ + PublicationObjSpec *newnode = makeNode(PublicationObjSpec); + + COPY_SCALAR_FIELD(pubobjtype); + COPY_STRING_FIELD(name); + COPY_NODE_FIELD(pubtable); + COPY_LOCATION_FIELD(location); + + return newnode; +} + +static CreatePublicationStmt * +_copyCreatePublicationStmt(const CreatePublicationStmt *from) +{ + CreatePublicationStmt *newnode = makeNode(CreatePublicationStmt); + + COPY_STRING_FIELD(pubname); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(pubobjects); + COPY_SCALAR_FIELD(for_all_tables); + + return newnode; +} + +static AlterPublicationStmt * +_copyAlterPublicationStmt(const AlterPublicationStmt *from) +{ + AlterPublicationStmt *newnode = makeNode(AlterPublicationStmt); + + COPY_STRING_FIELD(pubname); + COPY_NODE_FIELD(options); + COPY_NODE_FIELD(pubobjects); + COPY_SCALAR_FIELD(for_all_tables); + COPY_SCALAR_FIELD(action); + + return newnode; +} + +static CreateSubscriptionStmt * +_copyCreateSubscriptionStmt(const CreateSubscriptionStmt *from) +{ + CreateSubscriptionStmt *newnode = makeNode(CreateSubscriptionStmt); + + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(conninfo); + COPY_NODE_FIELD(publication); + COPY_NODE_FIELD(options); + + return newnode; +} + +static AlterSubscriptionStmt * +_copyAlterSubscriptionStmt(const AlterSubscriptionStmt *from) +{ + AlterSubscriptionStmt *newnode = makeNode(AlterSubscriptionStmt); + + COPY_SCALAR_FIELD(kind); + COPY_STRING_FIELD(subname); + COPY_STRING_FIELD(conninfo); + COPY_NODE_FIELD(publication); + COPY_NODE_FIELD(options); + + return newnode; +} + +static DropSubscriptionStmt * +_copyDropSubscriptionStmt(const DropSubscriptionStmt *from) +{ + DropSubscriptionStmt *newnode = makeNode(DropSubscriptionStmt); + + COPY_STRING_FIELD(subname); + COPY_SCALAR_FIELD(missing_ok); + COPY_SCALAR_FIELD(behavior); + + return newnode; +} + +static PathKey * +_copyPathKey(const PathKey *from) +{ + PathKey *newnode = makeNode(PathKey); + + COPY_SCALAR_FIELD(pk_eclass); + COPY_SCALAR_FIELD(pk_opfamily); + COPY_SCALAR_FIELD(pk_strategy); + COPY_SCALAR_FIELD(pk_nulls_first); + + return newnode; +} + +static RestrictInfo * +_copyRestrictInfo(const RestrictInfo *from) +{ + RestrictInfo *newnode = makeNode(RestrictInfo); + + COPY_NODE_FIELD(clause); + COPY_SCALAR_FIELD(is_pushed_down); + COPY_SCALAR_FIELD(can_join); + COPY_SCALAR_FIELD(pseudoconstant); + COPY_SCALAR_FIELD(has_clone); + COPY_SCALAR_FIELD(is_clone); + COPY_SCALAR_FIELD(leakproof); + COPY_SCALAR_FIELD(has_volatile); + COPY_SCALAR_FIELD(security_level); + COPY_SCALAR_FIELD(num_base_rels); + COPY_BITMAPSET_FIELD(clause_relids); + COPY_BITMAPSET_FIELD(required_relids); + COPY_BITMAPSET_FIELD(incompatible_relids); + COPY_BITMAPSET_FIELD(outer_relids); + COPY_BITMAPSET_FIELD(left_relids); + COPY_BITMAPSET_FIELD(right_relids); + COPY_NODE_FIELD(orclause); + COPY_SCALAR_FIELD(rinfo_serial); + COPY_SCALAR_FIELD(parent_ec); + COPY_SCALAR_FIELD(eval_cost); + COPY_SCALAR_FIELD(norm_selec); + COPY_SCALAR_FIELD(outer_selec); + COPY_NODE_FIELD(mergeopfamilies); + COPY_SCALAR_FIELD(left_ec); + COPY_SCALAR_FIELD(right_ec); + COPY_SCALAR_FIELD(left_em); + COPY_SCALAR_FIELD(right_em); + newnode->scansel_cache = NIL; + COPY_SCALAR_FIELD(outer_is_left); + COPY_SCALAR_FIELD(hashjoinoperator); + COPY_SCALAR_FIELD(left_bucketsize); + COPY_SCALAR_FIELD(right_bucketsize); + COPY_SCALAR_FIELD(left_mcvfreq); + COPY_SCALAR_FIELD(right_mcvfreq); + COPY_SCALAR_FIELD(left_hasheqoperator); + COPY_SCALAR_FIELD(right_hasheqoperator); + + return newnode; +} + +static PlaceHolderVar * +_copyPlaceHolderVar(const PlaceHolderVar *from) +{ + PlaceHolderVar *newnode = makeNode(PlaceHolderVar); + + COPY_NODE_FIELD(phexpr); + COPY_BITMAPSET_FIELD(phrels); + COPY_BITMAPSET_FIELD(phnullingrels); + COPY_SCALAR_FIELD(phid); + COPY_SCALAR_FIELD(phlevelsup); + + return newnode; +} + +static SpecialJoinInfo * +_copySpecialJoinInfo(const SpecialJoinInfo *from) +{ + SpecialJoinInfo *newnode = makeNode(SpecialJoinInfo); + + COPY_BITMAPSET_FIELD(min_lefthand); + COPY_BITMAPSET_FIELD(min_righthand); + COPY_BITMAPSET_FIELD(syn_lefthand); + COPY_BITMAPSET_FIELD(syn_righthand); + COPY_SCALAR_FIELD(jointype); + COPY_SCALAR_FIELD(ojrelid); + COPY_BITMAPSET_FIELD(commute_above_l); + COPY_BITMAPSET_FIELD(commute_above_r); + COPY_BITMAPSET_FIELD(commute_below_l); + COPY_BITMAPSET_FIELD(commute_below_r); + COPY_SCALAR_FIELD(lhs_strict); + COPY_SCALAR_FIELD(semi_can_btree); + COPY_SCALAR_FIELD(semi_can_hash); + COPY_NODE_FIELD(semi_operators); + COPY_NODE_FIELD(semi_rhs_exprs); + + return newnode; +} + +static AppendRelInfo * +_copyAppendRelInfo(const AppendRelInfo *from) +{ + AppendRelInfo *newnode = makeNode(AppendRelInfo); + + COPY_SCALAR_FIELD(parent_relid); + COPY_SCALAR_FIELD(child_relid); + COPY_SCALAR_FIELD(parent_reltype); + COPY_SCALAR_FIELD(child_reltype); + COPY_NODE_FIELD(translated_vars); + COPY_SCALAR_FIELD(num_child_cols); + COPY_POINTER_FIELD(parent_colnos, from->num_child_cols * sizeof(AttrNumber)); + COPY_SCALAR_FIELD(parent_reloid); + + return newnode; +} + +static PlaceHolderInfo * +_copyPlaceHolderInfo(const PlaceHolderInfo *from) +{ + PlaceHolderInfo *newnode = makeNode(PlaceHolderInfo); + + COPY_SCALAR_FIELD(phid); + COPY_NODE_FIELD(ph_var); + COPY_BITMAPSET_FIELD(ph_eval_at); + COPY_BITMAPSET_FIELD(ph_lateral); + COPY_BITMAPSET_FIELD(ph_needed); + COPY_SCALAR_FIELD(ph_width); + + return newnode; +} + +static PlannedStmt * +_copyPlannedStmt(const PlannedStmt *from) +{ + PlannedStmt *newnode = makeNode(PlannedStmt); + + COPY_SCALAR_FIELD(commandType); + COPY_SCALAR_FIELD(queryId); + COPY_SCALAR_FIELD(hasReturning); + COPY_SCALAR_FIELD(hasModifyingCTE); + COPY_SCALAR_FIELD(canSetTag); + COPY_SCALAR_FIELD(transientPlan); + COPY_SCALAR_FIELD(dependsOnRole); + COPY_SCALAR_FIELD(parallelModeNeeded); + COPY_SCALAR_FIELD(jitFlags); + COPY_NODE_FIELD(planTree); + COPY_NODE_FIELD(rtable); + COPY_NODE_FIELD(permInfos); + COPY_NODE_FIELD(resultRelations); + COPY_NODE_FIELD(appendRelations); + COPY_NODE_FIELD(subplans); + COPY_BITMAPSET_FIELD(rewindPlanIDs); + COPY_NODE_FIELD(rowMarks); + COPY_NODE_FIELD(relationOids); + COPY_NODE_FIELD(invalItems); + COPY_NODE_FIELD(paramExecTypes); + COPY_NODE_FIELD(utilityStmt); + COPY_LOCATION_FIELD(stmt_location); + COPY_SCALAR_FIELD(stmt_len); + + return newnode; +} + +static Result * +_copyResult(const Result *from) +{ + Result *newnode = makeNode(Result); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(resconstantqual); + + return newnode; +} + +static ProjectSet * +_copyProjectSet(const ProjectSet *from) +{ + ProjectSet *newnode = makeNode(ProjectSet); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + + return newnode; +} + +static ModifyTable * +_copyModifyTable(const ModifyTable *from) +{ + ModifyTable *newnode = makeNode(ModifyTable); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(operation); + COPY_SCALAR_FIELD(canSetTag); + COPY_SCALAR_FIELD(nominalRelation); + COPY_SCALAR_FIELD(rootRelation); + COPY_SCALAR_FIELD(partColsUpdated); + COPY_NODE_FIELD(resultRelations); + COPY_NODE_FIELD(updateColnosLists); + COPY_NODE_FIELD(withCheckOptionLists); + COPY_NODE_FIELD(returningLists); + COPY_NODE_FIELD(fdwPrivLists); + COPY_BITMAPSET_FIELD(fdwDirectModifyPlans); + COPY_NODE_FIELD(rowMarks); + COPY_SCALAR_FIELD(epqParam); + COPY_SCALAR_FIELD(onConflictAction); + COPY_NODE_FIELD(arbiterIndexes); + COPY_NODE_FIELD(onConflictSet); + COPY_NODE_FIELD(onConflictCols); + COPY_NODE_FIELD(onConflictWhere); + COPY_SCALAR_FIELD(exclRelRTI); + COPY_NODE_FIELD(exclRelTlist); + COPY_NODE_FIELD(mergeActionLists); + + return newnode; +} + +static Append * +_copyAppend(const Append *from) +{ + Append *newnode = makeNode(Append); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_BITMAPSET_FIELD(apprelids); + COPY_NODE_FIELD(appendplans); + COPY_SCALAR_FIELD(nasyncplans); + COPY_SCALAR_FIELD(first_partial_plan); + COPY_NODE_FIELD(part_prune_info); + + return newnode; +} + +static MergeAppend * +_copyMergeAppend(const MergeAppend *from) +{ + MergeAppend *newnode = makeNode(MergeAppend); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_BITMAPSET_FIELD(apprelids); + COPY_NODE_FIELD(mergeplans); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + COPY_NODE_FIELD(part_prune_info); + + return newnode; +} + +static RecursiveUnion * +_copyRecursiveUnion(const RecursiveUnion *from) +{ + RecursiveUnion *newnode = makeNode(RecursiveUnion); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(wtParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(numGroups); + + return newnode; +} + +static BitmapAnd * +_copyBitmapAnd(const BitmapAnd *from) +{ + BitmapAnd *newnode = makeNode(BitmapAnd); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(bitmapplans); + + return newnode; +} + +static BitmapOr * +_copyBitmapOr(const BitmapOr *from) +{ + BitmapOr *newnode = makeNode(BitmapOr); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(isshared); + COPY_NODE_FIELD(bitmapplans); + + return newnode; +} + +static SeqScan * +_copySeqScan(const SeqScan *from) +{ + SeqScan *newnode = makeNode(SeqScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + + return newnode; +} + +static SampleScan * +_copySampleScan(const SampleScan *from) +{ + SampleScan *newnode = makeNode(SampleScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tablesample); + + return newnode; +} + +static IndexScan * +_copyIndexScan(const IndexScan *from) +{ + IndexScan *newnode = makeNode(IndexScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(indexqualorig); + COPY_NODE_FIELD(indexorderby); + COPY_NODE_FIELD(indexorderbyorig); + COPY_NODE_FIELD(indexorderbyops); + COPY_SCALAR_FIELD(indexorderdir); + + return newnode; +} + +static IndexOnlyScan * +_copyIndexOnlyScan(const IndexOnlyScan *from) +{ + IndexOnlyScan *newnode = makeNode(IndexOnlyScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(recheckqual); + COPY_NODE_FIELD(indexorderby); + COPY_NODE_FIELD(indextlist); + COPY_SCALAR_FIELD(indexorderdir); + + return newnode; +} + +static BitmapIndexScan * +_copyBitmapIndexScan(const BitmapIndexScan *from) +{ + BitmapIndexScan *newnode = makeNode(BitmapIndexScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(indexid); + COPY_SCALAR_FIELD(isshared); + COPY_NODE_FIELD(indexqual); + COPY_NODE_FIELD(indexqualorig); + + return newnode; +} + +static BitmapHeapScan * +_copyBitmapHeapScan(const BitmapHeapScan *from) +{ + BitmapHeapScan *newnode = makeNode(BitmapHeapScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(bitmapqualorig); + + return newnode; +} + +static TidScan * +_copyTidScan(const TidScan *from) +{ + TidScan *newnode = makeNode(TidScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tidquals); + + return newnode; +} + +static TidRangeScan * +_copyTidRangeScan(const TidRangeScan *from) +{ + TidRangeScan *newnode = makeNode(TidRangeScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tidrangequals); + + return newnode; +} + +static SubqueryScan * +_copySubqueryScan(const SubqueryScan *from) +{ + SubqueryScan *newnode = makeNode(SubqueryScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(subplan); + COPY_SCALAR_FIELD(scanstatus); + + return newnode; +} + +static FunctionScan * +_copyFunctionScan(const FunctionScan *from) +{ + FunctionScan *newnode = makeNode(FunctionScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(functions); + COPY_SCALAR_FIELD(funcordinality); + + return newnode; +} + +static ValuesScan * +_copyValuesScan(const ValuesScan *from) +{ + ValuesScan *newnode = makeNode(ValuesScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(values_lists); + + return newnode; +} + +static TableFuncScan * +_copyTableFuncScan(const TableFuncScan *from) +{ + TableFuncScan *newnode = makeNode(TableFuncScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_NODE_FIELD(tablefunc); + + return newnode; +} + +static CteScan * +_copyCteScan(const CteScan *from) +{ + CteScan *newnode = makeNode(CteScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(ctePlanId); + COPY_SCALAR_FIELD(cteParam); + + return newnode; +} + +static NamedTuplestoreScan * +_copyNamedTuplestoreScan(const NamedTuplestoreScan *from) +{ + NamedTuplestoreScan *newnode = makeNode(NamedTuplestoreScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_STRING_FIELD(enrname); + + return newnode; +} + +static WorkTableScan * +_copyWorkTableScan(const WorkTableScan *from) +{ + WorkTableScan *newnode = makeNode(WorkTableScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(wtParam); + + return newnode; +} + +static ForeignScan * +_copyForeignScan(const ForeignScan *from) +{ + ForeignScan *newnode = makeNode(ForeignScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(operation); + COPY_SCALAR_FIELD(resultRelation); + COPY_SCALAR_FIELD(checkAsUser); + COPY_SCALAR_FIELD(fs_server); + COPY_NODE_FIELD(fdw_exprs); + COPY_NODE_FIELD(fdw_private); + COPY_NODE_FIELD(fdw_scan_tlist); + COPY_NODE_FIELD(fdw_recheck_quals); + COPY_BITMAPSET_FIELD(fs_relids); + COPY_BITMAPSET_FIELD(fs_base_relids); + COPY_SCALAR_FIELD(fsSystemCol); + + return newnode; +} + +static CustomScan * +_copyCustomScan(const CustomScan *from) +{ + CustomScan *newnode = makeNode(CustomScan); + + COPY_SCALAR_FIELD(scan.plan.startup_cost); + COPY_SCALAR_FIELD(scan.plan.total_cost); + COPY_SCALAR_FIELD(scan.plan.plan_rows); + COPY_SCALAR_FIELD(scan.plan.plan_width); + COPY_SCALAR_FIELD(scan.plan.parallel_aware); + COPY_SCALAR_FIELD(scan.plan.parallel_safe); + COPY_SCALAR_FIELD(scan.plan.async_capable); + COPY_SCALAR_FIELD(scan.plan.plan_node_id); + COPY_NODE_FIELD(scan.plan.targetlist); + COPY_NODE_FIELD(scan.plan.qual); + COPY_NODE_FIELD(scan.plan.lefttree); + COPY_NODE_FIELD(scan.plan.righttree); + COPY_NODE_FIELD(scan.plan.initPlan); + COPY_BITMAPSET_FIELD(scan.plan.extParam); + COPY_BITMAPSET_FIELD(scan.plan.allParam); + COPY_SCALAR_FIELD(scan.scanrelid); + COPY_SCALAR_FIELD(flags); + COPY_NODE_FIELD(custom_plans); + COPY_NODE_FIELD(custom_exprs); + COPY_NODE_FIELD(custom_private); + COPY_NODE_FIELD(custom_scan_tlist); + COPY_BITMAPSET_FIELD(custom_relids); + COPY_SCALAR_FIELD(methods); + + return newnode; +} + +static NestLoop * +_copyNestLoop(const NestLoop *from) +{ + NestLoop *newnode = makeNode(NestLoop); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_NODE_FIELD(nestParams); + + return newnode; +} + +static NestLoopParam * +_copyNestLoopParam(const NestLoopParam *from) +{ + NestLoopParam *newnode = makeNode(NestLoopParam); + + COPY_SCALAR_FIELD(paramno); + COPY_NODE_FIELD(paramval); + + return newnode; +} + +static MergeJoin * +_copyMergeJoin(const MergeJoin *from) +{ + MergeJoin *newnode = makeNode(MergeJoin); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_SCALAR_FIELD(skip_mark_restore); + COPY_NODE_FIELD(mergeclauses); + COPY_POINTER_FIELD(mergeFamilies, list_length(from->mergeclauses) * sizeof(Oid)); + COPY_POINTER_FIELD(mergeCollations, list_length(from->mergeclauses) * sizeof(Oid)); + COPY_POINTER_FIELD(mergeStrategies, list_length(from->mergeclauses) * sizeof(int)); + COPY_POINTER_FIELD(mergeNullsFirst, list_length(from->mergeclauses) * sizeof(bool)); + + return newnode; +} + +static HashJoin * +_copyHashJoin(const HashJoin *from) +{ + HashJoin *newnode = makeNode(HashJoin); + + COPY_SCALAR_FIELD(join.plan.startup_cost); + COPY_SCALAR_FIELD(join.plan.total_cost); + COPY_SCALAR_FIELD(join.plan.plan_rows); + COPY_SCALAR_FIELD(join.plan.plan_width); + COPY_SCALAR_FIELD(join.plan.parallel_aware); + COPY_SCALAR_FIELD(join.plan.parallel_safe); + COPY_SCALAR_FIELD(join.plan.async_capable); + COPY_SCALAR_FIELD(join.plan.plan_node_id); + COPY_NODE_FIELD(join.plan.targetlist); + COPY_NODE_FIELD(join.plan.qual); + COPY_NODE_FIELD(join.plan.lefttree); + COPY_NODE_FIELD(join.plan.righttree); + COPY_NODE_FIELD(join.plan.initPlan); + COPY_BITMAPSET_FIELD(join.plan.extParam); + COPY_BITMAPSET_FIELD(join.plan.allParam); + COPY_SCALAR_FIELD(join.jointype); + COPY_SCALAR_FIELD(join.inner_unique); + COPY_NODE_FIELD(join.joinqual); + COPY_NODE_FIELD(hashclauses); + COPY_NODE_FIELD(hashoperators); + COPY_NODE_FIELD(hashcollations); + COPY_NODE_FIELD(hashkeys); + + return newnode; +} + +static Material * +_copyMaterial(const Material *from) +{ + Material *newnode = makeNode(Material); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + + return newnode; +} + +static Memoize * +_copyMemoize(const Memoize *from) +{ + Memoize *newnode = makeNode(Memoize); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numKeys); + COPY_POINTER_FIELD(hashOperators, from->numKeys * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numKeys * sizeof(Oid)); + COPY_NODE_FIELD(param_exprs); + COPY_SCALAR_FIELD(singlerow); + COPY_SCALAR_FIELD(binary_mode); + COPY_SCALAR_FIELD(est_entries); + COPY_BITMAPSET_FIELD(keyparamids); + + return newnode; +} + +static Sort * +_copySort(const Sort *from) +{ + Sort *newnode = makeNode(Sort); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + + return newnode; +} + +static IncrementalSort * +_copyIncrementalSort(const IncrementalSort *from) +{ + IncrementalSort *newnode = makeNode(IncrementalSort); + + COPY_SCALAR_FIELD(sort.plan.startup_cost); + COPY_SCALAR_FIELD(sort.plan.total_cost); + COPY_SCALAR_FIELD(sort.plan.plan_rows); + COPY_SCALAR_FIELD(sort.plan.plan_width); + COPY_SCALAR_FIELD(sort.plan.parallel_aware); + COPY_SCALAR_FIELD(sort.plan.parallel_safe); + COPY_SCALAR_FIELD(sort.plan.async_capable); + COPY_SCALAR_FIELD(sort.plan.plan_node_id); + COPY_NODE_FIELD(sort.plan.targetlist); + COPY_NODE_FIELD(sort.plan.qual); + COPY_NODE_FIELD(sort.plan.lefttree); + COPY_NODE_FIELD(sort.plan.righttree); + COPY_NODE_FIELD(sort.plan.initPlan); + COPY_BITMAPSET_FIELD(sort.plan.extParam); + COPY_BITMAPSET_FIELD(sort.plan.allParam); + COPY_SCALAR_FIELD(sort.numCols); + COPY_POINTER_FIELD(sort.sortColIdx, from->sort.numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sort.sortOperators, from->sort.numCols * sizeof(Oid)); + COPY_POINTER_FIELD(sort.collations, from->sort.numCols * sizeof(Oid)); + COPY_POINTER_FIELD(sort.nullsFirst, from->sort.numCols * sizeof(bool)); + COPY_SCALAR_FIELD(nPresortedCols); + + return newnode; +} + +static Group * +_copyGroup(const Group *from) +{ + Group *newnode = makeNode(Group); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); + + return newnode; +} + +static Agg * +_copyAgg(const Agg *from) +{ + Agg *newnode = makeNode(Agg); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(aggstrategy); + COPY_SCALAR_FIELD(aggsplit); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(numGroups); + COPY_SCALAR_FIELD(transitionSpace); + COPY_BITMAPSET_FIELD(aggParams); + COPY_NODE_FIELD(groupingSets); + COPY_NODE_FIELD(chain); + + return newnode; +} + +static WindowAgg * +_copyWindowAgg(const WindowAgg *from) +{ + WindowAgg *newnode = makeNode(WindowAgg); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(partNumCols); + COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(ordNumCols); + COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_NODE_FIELD(runCondition); + COPY_NODE_FIELD(runConditionOrig); + COPY_SCALAR_FIELD(startInRangeFunc); + COPY_SCALAR_FIELD(endInRangeFunc); + COPY_SCALAR_FIELD(inRangeColl); + COPY_SCALAR_FIELD(inRangeAsc); + COPY_SCALAR_FIELD(inRangeNullsFirst); + COPY_SCALAR_FIELD(topWindow); + + return newnode; +} + +static Unique * +_copyUnique(const Unique *from) +{ + Unique *newnode = makeNode(Unique); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(uniqColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(uniqOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(uniqCollations, from->numCols * sizeof(Oid)); + + return newnode; +} + +static Gather * +_copyGather(const Gather *from) +{ + Gather *newnode = makeNode(Gather); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(num_workers); + COPY_SCALAR_FIELD(rescan_param); + COPY_SCALAR_FIELD(single_copy); + COPY_SCALAR_FIELD(invisible); + COPY_BITMAPSET_FIELD(initParam); + + return newnode; +} + +static GatherMerge * +_copyGatherMerge(const GatherMerge *from) +{ + GatherMerge *newnode = makeNode(GatherMerge); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(num_workers); + COPY_SCALAR_FIELD(rescan_param); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool)); + COPY_BITMAPSET_FIELD(initParam); + + return newnode; +} + +static Hash * +_copyHash(const Hash *from) +{ + Hash *newnode = makeNode(Hash); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(hashkeys); + COPY_SCALAR_FIELD(skewTable); + COPY_SCALAR_FIELD(skewColumn); + COPY_SCALAR_FIELD(skewInherit); + COPY_SCALAR_FIELD(rows_total); + + return newnode; +} + +static SetOp * +_copySetOp(const SetOp *from) +{ + SetOp *newnode = makeNode(SetOp); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_SCALAR_FIELD(cmd); + COPY_SCALAR_FIELD(strategy); + COPY_SCALAR_FIELD(numCols); + COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid)); + COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid)); + COPY_SCALAR_FIELD(flagColIdx); + COPY_SCALAR_FIELD(firstFlag); + COPY_SCALAR_FIELD(numGroups); + + return newnode; +} + +static LockRows * +_copyLockRows(const LockRows *from) +{ + LockRows *newnode = makeNode(LockRows); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(rowMarks); + COPY_SCALAR_FIELD(epqParam); + + return newnode; +} + +static Limit * +_copyLimit(const Limit *from) +{ + Limit *newnode = makeNode(Limit); + + COPY_SCALAR_FIELD(plan.startup_cost); + COPY_SCALAR_FIELD(plan.total_cost); + COPY_SCALAR_FIELD(plan.plan_rows); + COPY_SCALAR_FIELD(plan.plan_width); + COPY_SCALAR_FIELD(plan.parallel_aware); + COPY_SCALAR_FIELD(plan.parallel_safe); + COPY_SCALAR_FIELD(plan.async_capable); + COPY_SCALAR_FIELD(plan.plan_node_id); + COPY_NODE_FIELD(plan.targetlist); + COPY_NODE_FIELD(plan.qual); + COPY_NODE_FIELD(plan.lefttree); + COPY_NODE_FIELD(plan.righttree); + COPY_NODE_FIELD(plan.initPlan); + COPY_BITMAPSET_FIELD(plan.extParam); + COPY_BITMAPSET_FIELD(plan.allParam); + COPY_NODE_FIELD(limitOffset); + COPY_NODE_FIELD(limitCount); + COPY_SCALAR_FIELD(limitOption); + COPY_SCALAR_FIELD(uniqNumCols); + COPY_POINTER_FIELD(uniqColIdx, from->uniqNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(uniqOperators, from->uniqNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(uniqCollations, from->uniqNumCols * sizeof(Oid)); + + return newnode; +} + +static PlanRowMark * +_copyPlanRowMark(const PlanRowMark *from) +{ + PlanRowMark *newnode = makeNode(PlanRowMark); + + COPY_SCALAR_FIELD(rti); + COPY_SCALAR_FIELD(prti); + COPY_SCALAR_FIELD(rowmarkId); + COPY_SCALAR_FIELD(markType); + COPY_SCALAR_FIELD(allMarkTypes); + COPY_SCALAR_FIELD(strength); + COPY_SCALAR_FIELD(waitPolicy); + COPY_SCALAR_FIELD(isParent); + + return newnode; +} + +static PartitionPruneInfo * +_copyPartitionPruneInfo(const PartitionPruneInfo *from) +{ + PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo); + + COPY_NODE_FIELD(prune_infos); + COPY_BITMAPSET_FIELD(other_subplans); + + return newnode; +} + +static PartitionedRelPruneInfo * +_copyPartitionedRelPruneInfo(const PartitionedRelPruneInfo *from) +{ + PartitionedRelPruneInfo *newnode = makeNode(PartitionedRelPruneInfo); + + COPY_SCALAR_FIELD(rtindex); + COPY_BITMAPSET_FIELD(present_parts); + COPY_SCALAR_FIELD(nparts); + COPY_POINTER_FIELD(subplan_map, from->nparts * sizeof(int)); + COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int)); + COPY_POINTER_FIELD(relid_map, from->nparts * sizeof(Oid)); + COPY_NODE_FIELD(initial_pruning_steps); + COPY_NODE_FIELD(exec_pruning_steps); + COPY_BITMAPSET_FIELD(execparamids); + + return newnode; +} + +static PartitionPruneStepOp * +_copyPartitionPruneStepOp(const PartitionPruneStepOp *from) +{ + PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp); + + COPY_SCALAR_FIELD(step.step_id); + COPY_SCALAR_FIELD(opstrategy); + COPY_NODE_FIELD(exprs); + COPY_NODE_FIELD(cmpfns); + COPY_BITMAPSET_FIELD(nullkeys); + + return newnode; +} + +static PartitionPruneStepCombine * +_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from) +{ + PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine); + + COPY_SCALAR_FIELD(step.step_id); + COPY_SCALAR_FIELD(combineOp); + COPY_NODE_FIELD(source_stepids); + + return newnode; +} + +static PlanInvalItem * +_copyPlanInvalItem(const PlanInvalItem *from) +{ + PlanInvalItem *newnode = makeNode(PlanInvalItem); + + COPY_SCALAR_FIELD(cacheId); + COPY_SCALAR_FIELD(hashValue); + + return newnode; +} + +static Integer * +_copyInteger(const Integer *from) +{ + Integer *newnode = makeNode(Integer); + + COPY_SCALAR_FIELD(ival); + + return newnode; +} + +static Float * +_copyFloat(const Float *from) +{ + Float *newnode = makeNode(Float); + + COPY_STRING_FIELD(fval); + + return newnode; +} + +static Boolean * +_copyBoolean(const Boolean *from) +{ + Boolean *newnode = makeNode(Boolean); + + COPY_SCALAR_FIELD(boolval); + + return newnode; +} + +static String * +_copyString(const String *from) +{ + String *newnode = makeNode(String); + + COPY_STRING_FIELD(sval); + + return newnode; +} + +static BitString * +_copyBitString(const BitString *from) +{ + BitString *newnode = makeNode(BitString); + + COPY_STRING_FIELD(bsval); + + return newnode; +} + +static ForeignKeyCacheInfo * +_copyForeignKeyCacheInfo(const ForeignKeyCacheInfo *from) +{ + ForeignKeyCacheInfo *newnode = makeNode(ForeignKeyCacheInfo); + + COPY_SCALAR_FIELD(conoid); + COPY_SCALAR_FIELD(conrelid); + COPY_SCALAR_FIELD(confrelid); + COPY_SCALAR_FIELD(nkeys); + COPY_ARRAY_FIELD(conkey); + COPY_ARRAY_FIELD(confkey); + COPY_ARRAY_FIELD(conpfeqop); + + return newnode; +} diff --git a/src/postgres/src_backend_nodes_equalfuncs.c b/src/postgres/src_backend_nodes_equalfuncs.c index f387ad12..e8a10f98 100644 --- a/src/postgres/src_backend_nodes_equalfuncs.c +++ b/src/postgres/src_backend_nodes_equalfuncs.c @@ -1,247 +1,11 @@ /*-------------------------------------------------------------------- * Symbols referenced in this file: * - equal - * - _equalAlias - * - _equalRangeVar - * - _equalTableFunc - * - _equalIntoClause - * - _equalVar * - _equalConst - * - _equalParam - * - _equalAggref - * - _equalGroupingFunc - * - _equalWindowFunc - * - _equalSubscriptingRef - * - _equalFuncExpr - * - _equalNamedArgExpr - * - _equalOpExpr - * - _equalDistinctExpr - * - _equalNullIfExpr - * - _equalScalarArrayOpExpr - * - _equalBoolExpr - * - _equalSubLink - * - _equalSubPlan - * - _equalAlternativeSubPlan - * - _equalFieldSelect - * - _equalFieldStore - * - _equalRelabelType - * - _equalCoerceViaIO - * - _equalArrayCoerceExpr - * - _equalConvertRowtypeExpr - * - _equalCollateExpr - * - _equalCaseExpr - * - _equalCaseWhen - * - _equalCaseTestExpr - * - _equalArrayExpr - * - _equalRowExpr - * - _equalRowCompareExpr - * - _equalCoalesceExpr - * - _equalMinMaxExpr - * - _equalSQLValueFunction - * - _equalXmlExpr - * - _equalNullTest - * - _equalBooleanTest - * - _equalCoerceToDomain - * - _equalCoerceToDomainValue - * - _equalSetToDefault - * - _equalCurrentOfExpr - * - _equalNextValueExpr - * - _equalInferenceElem - * - _equalTargetEntry - * - _equalRangeTblRef - * - _equalFromExpr - * - _equalOnConflictExpr - * - _equalJoinExpr - * - _equalPathKey - * - _equalRestrictInfo - * - _equalPlaceHolderVar - * - _equalSpecialJoinInfo - * - _equalAppendRelInfo - * - _equalPlaceHolderInfo - * - _equalList - * - _equalInteger - * - _equalFloat - * - _equalBoolean - * - _equalString - * - _equalBitString - * - _equalExtensibleNode - * - _equalQuery - * - _equalRawStmt - * - _equalInsertStmt - * - _equalDeleteStmt - * - _equalUpdateStmt - * - _equalMergeStmt - * - _equalSelectStmt - * - _equalSetOperationStmt - * - _equalReturnStmt - * - _equalPLAssignStmt - * - _equalAlterTableStmt - * - _equalAlterTableCmd - * - _equalAlterCollationStmt - * - _equalAlterDomainStmt - * - _equalGrantStmt - * - _equalGrantRoleStmt - * - _equalAlterDefaultPrivilegesStmt - * - _equalDeclareCursorStmt - * - _equalClosePortalStmt - * - _equalCallStmt - * - _equalClusterStmt - * - _equalCopyStmt - * - _equalCreateStmt - * - _equalTableLikeClause - * - _equalDefineStmt - * - _equalDropStmt - * - _equalTruncateStmt - * - _equalCommentStmt - * - _equalSecLabelStmt - * - _equalFetchStmt - * - _equalIndexStmt - * - _equalCreateStatsStmt - * - _equalAlterStatsStmt - * - _equalCreateFunctionStmt - * - _equalFunctionParameter - * - _equalAlterFunctionStmt - * - _equalDoStmt - * - _equalRenameStmt - * - _equalAlterObjectDependsStmt - * - _equalAlterObjectSchemaStmt - * - _equalAlterOwnerStmt - * - _equalAlterOperatorStmt - * - _equalAlterTypeStmt - * - _equalRuleStmt - * - _equalNotifyStmt - * - _equalListenStmt - * - _equalUnlistenStmt - * - _equalTransactionStmt - * - _equalCompositeTypeStmt - * - _equalCreateEnumStmt - * - _equalCreateRangeStmt - * - _equalAlterEnumStmt - * - _equalViewStmt - * - _equalLoadStmt - * - _equalCreateDomainStmt - * - _equalCreateOpClassStmt - * - _equalCreateOpClassItem - * - _equalCreateOpFamilyStmt - * - _equalAlterOpFamilyStmt - * - _equalCreatedbStmt - * - _equalAlterDatabaseStmt - * - _equalAlterDatabaseRefreshCollStmt - * - _equalAlterDatabaseSetStmt - * - _equalDropdbStmt - * - _equalVacuumStmt - * - _equalVacuumRelation - * - _equalExplainStmt - * - _equalCreateTableAsStmt - * - _equalRefreshMatViewStmt - * - _equalReplicaIdentityStmt - * - _equalAlterSystemStmt - * - _equalCreateSeqStmt - * - _equalAlterSeqStmt - * - _equalVariableSetStmt - * - _equalVariableShowStmt - * - _equalDiscardStmt - * - _equalCreateTableSpaceStmt - * - _equalDropTableSpaceStmt - * - _equalAlterTableSpaceOptionsStmt - * - _equalAlterTableMoveAllStmt - * - _equalCreateExtensionStmt - * - _equalAlterExtensionStmt - * - _equalAlterExtensionContentsStmt - * - _equalCreateFdwStmt - * - _equalAlterFdwStmt - * - _equalCreateForeignServerStmt - * - _equalAlterForeignServerStmt - * - _equalCreateUserMappingStmt - * - _equalAlterUserMappingStmt - * - _equalDropUserMappingStmt - * - _equalCreateForeignTableStmt - * - _equalImportForeignSchemaStmt - * - _equalCreateTransformStmt - * - _equalCreateAmStmt - * - _equalCreateTrigStmt - * - _equalCreateEventTrigStmt - * - _equalAlterEventTrigStmt - * - _equalCreatePLangStmt - * - _equalCreateRoleStmt - * - _equalAlterRoleStmt - * - _equalAlterRoleSetStmt - * - _equalDropRoleStmt - * - _equalLockStmt - * - _equalConstraintsSetStmt - * - _equalReindexStmt - * - _equalCreateSchemaStmt - * - _equalCreateConversionStmt - * - _equalCreateCastStmt - * - _equalPrepareStmt - * - _equalExecuteStmt - * - _equalDeallocateStmt - * - _equalDropOwnedStmt - * - _equalReassignOwnedStmt - * - _equalAlterTSDictionaryStmt - * - _equalAlterTSConfigurationStmt - * - _equalCreatePolicyStmt - * - _equalAlterPolicyStmt - * - _equalCreatePublicationStmt - * - _equalAlterPublicationStmt - * - _equalCreateSubscriptionStmt - * - _equalAlterSubscriptionStmt - * - _equalDropSubscriptionStmt - * - _equalA_Expr - * - _equalColumnRef - * - _equalParamRef * - _equalA_Const - * - _equalFuncCall - * - _equalA_Star - * - _equalA_Indices - * - _equalA_Indirection - * - _equalA_ArrayExpr - * - _equalResTarget - * - _equalMultiAssignRef - * - _equalTypeCast - * - _equalCollateClause - * - _equalSortBy - * - _equalWindowDef - * - _equalRangeSubselect - * - _equalRangeFunction - * - _equalRangeTableSample - * - _equalRangeTableFunc - * - _equalRangeTableFuncCol - * - _equalTypeName - * - _equalIndexElem - * - _equalStatsElem - * - _equalColumnDef - * - _equalConstraint - * - _equalDefElem - * - _equalLockingClause - * - _equalRangeTblEntry - * - _equalRangeTblFunction - * - _equalTableSampleClause - * - _equalWithCheckOption - * - _equalSortGroupClause - * - _equalGroupingSet - * - _equalWindowClause - * - _equalRowMarkClause - * - _equalWithClause - * - _equalInferClause - * - _equalOnConflictClause - * - _equalCTESearchClause - * - _equalCTECycleClause - * - _equalCommonTableExpr - * - _equalMergeWhenClause - * - _equalMergeAction - * - _equalObjectWithArgs - * - _equalAccessPriv - * - _equalXmlSerialize - * - _equalRoleSpec - * - _equalTriggerTransition - * - _equalPartitionElem - * - _equalPartitionSpec - * - _equalPartitionBoundSpec - * - _equalPartitionRangeDatum - * - _equalPartitionCmd - * - _equalPublicationObject - * - _equalPublicationTable + * - _equalBitmapset + * - _equalExtensibleNode + * - _equalList *-------------------------------------------------------------------- */ @@ -250,22 +14,12 @@ * equalfuncs.c * Equality functions to compare node trees. * - * NOTE: we currently support comparing all node types found in parse - * trees. We do not support comparing executor state trees; there - * is no need for that, and no point in maintaining all the code that - * would be needed. We also do not support comparing Path trees, mainly - * because the circular linkages between RelOptInfo and Path nodes can't - * be handled easily in a simple depth-first traversal. - * - * Currently, in fact, equal() doesn't know how to compare Plan trees - * either. This might need to be fixed someday. - * * NOTE: it is intentional that parse location fields (in nodes that have * one) are not compared. This is because we want, for example, a variable * "x" to be considered equal() to another reference to "x" in the query. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -277,8 +31,6 @@ #include "postgres.h" #include "miscadmin.h" -#include "nodes/extensible.h" -#include "nodes/pathnodes.h" #include "utils/datum.h" @@ -344,95 +96,13 @@ ((void) 0) -/* - * Stuff from primnodes.h - */ - -static bool -_equalAlias(const Alias *a, const Alias *b) -{ - COMPARE_STRING_FIELD(aliasname); - COMPARE_NODE_FIELD(colnames); - - return true; -} - -static bool -_equalRangeVar(const RangeVar *a, const RangeVar *b) -{ - COMPARE_STRING_FIELD(catalogname); - COMPARE_STRING_FIELD(schemaname); - COMPARE_STRING_FIELD(relname); - COMPARE_SCALAR_FIELD(inh); - COMPARE_SCALAR_FIELD(relpersistence); - COMPARE_NODE_FIELD(alias); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalTableFunc(const TableFunc *a, const TableFunc *b) -{ - COMPARE_NODE_FIELD(ns_uris); - COMPARE_NODE_FIELD(ns_names); - COMPARE_NODE_FIELD(docexpr); - COMPARE_NODE_FIELD(rowexpr); - COMPARE_NODE_FIELD(colnames); - COMPARE_NODE_FIELD(coltypes); - COMPARE_NODE_FIELD(coltypmods); - COMPARE_NODE_FIELD(colcollations); - COMPARE_NODE_FIELD(colexprs); - COMPARE_NODE_FIELD(coldefexprs); - COMPARE_BITMAPSET_FIELD(notnulls); - COMPARE_SCALAR_FIELD(ordinalitycol); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalIntoClause(const IntoClause *a, const IntoClause *b) -{ - COMPARE_NODE_FIELD(rel); - COMPARE_NODE_FIELD(colNames); - COMPARE_STRING_FIELD(accessMethod); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(onCommit); - COMPARE_STRING_FIELD(tableSpaceName); - COMPARE_NODE_FIELD(viewQuery); - COMPARE_SCALAR_FIELD(skipData); +#include "equalfuncs.funcs.c" - return true; -} /* - * We don't need an _equalExpr because Expr is an abstract supertype which - * should never actually get instantiated. Also, since it has no common - * fields except NodeTag, there's no need for a helper routine to factor - * out comparing the common fields... + * Support functions for nodes with custom_copy_equal attribute */ -static bool -_equalVar(const Var *a, const Var *b) -{ - COMPARE_SCALAR_FIELD(varno); - COMPARE_SCALAR_FIELD(varattno); - COMPARE_SCALAR_FIELD(vartype); - COMPARE_SCALAR_FIELD(vartypmod); - COMPARE_SCALAR_FIELD(varcollid); - COMPARE_SCALAR_FIELD(varlevelsup); - - /* - * varnosyn/varattnosyn are intentionally ignored here, because Vars with - * different syntactic identifiers are semantically the same as long as - * their varno/varattno match. - */ - COMPARE_LOCATION_FIELD(location); - - return true; -} - static bool _equalConst(const Const *a, const Const *b) { @@ -455,3788 +125,145 @@ _equalConst(const Const *a, const Const *b) } static bool -_equalParam(const Param *a, const Param *b) -{ - COMPARE_SCALAR_FIELD(paramkind); - COMPARE_SCALAR_FIELD(paramid); - COMPARE_SCALAR_FIELD(paramtype); - COMPARE_SCALAR_FIELD(paramtypmod); - COMPARE_SCALAR_FIELD(paramcollid); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalAggref(const Aggref *a, const Aggref *b) -{ - COMPARE_SCALAR_FIELD(aggfnoid); - COMPARE_SCALAR_FIELD(aggtype); - COMPARE_SCALAR_FIELD(aggcollid); - COMPARE_SCALAR_FIELD(inputcollid); - /* ignore aggtranstype since it might not be set yet */ - COMPARE_NODE_FIELD(aggargtypes); - COMPARE_NODE_FIELD(aggdirectargs); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(aggorder); - COMPARE_NODE_FIELD(aggdistinct); - COMPARE_NODE_FIELD(aggfilter); - COMPARE_SCALAR_FIELD(aggstar); - COMPARE_SCALAR_FIELD(aggvariadic); - COMPARE_SCALAR_FIELD(aggkind); - COMPARE_SCALAR_FIELD(agglevelsup); - COMPARE_SCALAR_FIELD(aggsplit); - COMPARE_SCALAR_FIELD(aggno); - COMPARE_SCALAR_FIELD(aggtransno); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalGroupingFunc(const GroupingFunc *a, const GroupingFunc *b) +_equalExtensibleNode(const ExtensibleNode *a, const ExtensibleNode *b) { - COMPARE_NODE_FIELD(args); - - /* - * We must not compare the refs or cols field - */ - - COMPARE_SCALAR_FIELD(agglevelsup); - COMPARE_LOCATION_FIELD(location); - - return true; -} + const ExtensibleNodeMethods *methods; -static bool -_equalWindowFunc(const WindowFunc *a, const WindowFunc *b) -{ - COMPARE_SCALAR_FIELD(winfnoid); - COMPARE_SCALAR_FIELD(wintype); - COMPARE_SCALAR_FIELD(wincollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(aggfilter); - COMPARE_SCALAR_FIELD(winref); - COMPARE_SCALAR_FIELD(winstar); - COMPARE_SCALAR_FIELD(winagg); - COMPARE_LOCATION_FIELD(location); + COMPARE_STRING_FIELD(extnodename); - return true; -} + /* At this point, we know extnodename is the same for both nodes. */ + methods = GetExtensibleNodeMethods(a->extnodename, false); -static bool -_equalSubscriptingRef(const SubscriptingRef *a, const SubscriptingRef *b) -{ - COMPARE_SCALAR_FIELD(refcontainertype); - COMPARE_SCALAR_FIELD(refelemtype); - COMPARE_SCALAR_FIELD(refrestype); - COMPARE_SCALAR_FIELD(reftypmod); - COMPARE_SCALAR_FIELD(refcollid); - COMPARE_NODE_FIELD(refupperindexpr); - COMPARE_NODE_FIELD(reflowerindexpr); - COMPARE_NODE_FIELD(refexpr); - COMPARE_NODE_FIELD(refassgnexpr); + /* compare the private fields */ + if (!methods->nodeEqual(a, b)) + return false; return true; } static bool -_equalFuncExpr(const FuncExpr *a, const FuncExpr *b) +_equalA_Const(const A_Const *a, const A_Const *b) { - COMPARE_SCALAR_FIELD(funcid); - COMPARE_SCALAR_FIELD(funcresulttype); - COMPARE_SCALAR_FIELD(funcretset); - COMPARE_SCALAR_FIELD(funcvariadic); - COMPARE_COERCIONFORM_FIELD(funcformat); - COMPARE_SCALAR_FIELD(funccollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(isnull); + /* Hack for in-line val field. Also val is not valid if isnull is true */ + if (!a->isnull && + !equal(&a->val, &b->val)) + return false; COMPARE_LOCATION_FIELD(location); return true; } static bool -_equalNamedArgExpr(const NamedArgExpr *a, const NamedArgExpr *b) +_equalBitmapset(const Bitmapset *a, const Bitmapset *b) { - COMPARE_NODE_FIELD(arg); - COMPARE_STRING_FIELD(name); - COMPARE_SCALAR_FIELD(argnumber); - COMPARE_LOCATION_FIELD(location); - - return true; + return bms_equal(a, b); } +/* + * Lists are handled specially + */ static bool -_equalOpExpr(const OpExpr *a, const OpExpr *b) +_equalList(const List *a, const List *b) { - COMPARE_SCALAR_FIELD(opno); + const ListCell *item_a; + const ListCell *item_b; /* - * Special-case opfuncid: it is allowable for it to differ if one node - * contains zero and the other doesn't. This just means that the one node - * isn't as far along in the parse/plan pipeline and hasn't had the - * opfuncid cache filled yet. + * Try to reject by simple scalar checks before grovelling through all the + * list elements... */ - if (a->opfuncid != b->opfuncid && - a->opfuncid != 0 && - b->opfuncid != 0) - return false; - - COMPARE_SCALAR_FIELD(opresulttype); - COMPARE_SCALAR_FIELD(opretset); - COMPARE_SCALAR_FIELD(opcollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalDistinctExpr(const DistinctExpr *a, const DistinctExpr *b) -{ - COMPARE_SCALAR_FIELD(opno); + COMPARE_SCALAR_FIELD(type); + COMPARE_SCALAR_FIELD(length); /* - * Special-case opfuncid: it is allowable for it to differ if one node - * contains zero and the other doesn't. This just means that the one node - * isn't as far along in the parse/plan pipeline and hasn't had the - * opfuncid cache filled yet. + * We place the switch outside the loop for the sake of efficiency; this + * may not be worth doing... */ - if (a->opfuncid != b->opfuncid && - a->opfuncid != 0 && - b->opfuncid != 0) - return false; - - COMPARE_SCALAR_FIELD(opresulttype); - COMPARE_SCALAR_FIELD(opretset); - COMPARE_SCALAR_FIELD(opcollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalNullIfExpr(const NullIfExpr *a, const NullIfExpr *b) -{ - COMPARE_SCALAR_FIELD(opno); + switch (a->type) + { + case T_List: + forboth(item_a, a, item_b, b) + { + if (!equal(lfirst(item_a), lfirst(item_b))) + return false; + } + break; + case T_IntList: + forboth(item_a, a, item_b, b) + { + if (lfirst_int(item_a) != lfirst_int(item_b)) + return false; + } + break; + case T_OidList: + forboth(item_a, a, item_b, b) + { + if (lfirst_oid(item_a) != lfirst_oid(item_b)) + return false; + } + break; + case T_XidList: + forboth(item_a, a, item_b, b) + { + if (lfirst_xid(item_a) != lfirst_xid(item_b)) + return false; + } + break; + default: + elog(ERROR, "unrecognized list node type: %d", + (int) a->type); + return false; /* keep compiler quiet */ + } /* - * Special-case opfuncid: it is allowable for it to differ if one node - * contains zero and the other doesn't. This just means that the one node - * isn't as far along in the parse/plan pipeline and hasn't had the - * opfuncid cache filled yet. + * If we got here, we should have run out of elements of both lists */ - if (a->opfuncid != b->opfuncid && - a->opfuncid != 0 && - b->opfuncid != 0) - return false; - - COMPARE_SCALAR_FIELD(opresulttype); - COMPARE_SCALAR_FIELD(opretset); - COMPARE_SCALAR_FIELD(opcollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); + Assert(item_a == NULL); + Assert(item_b == NULL); return true; } -static bool -_equalScalarArrayOpExpr(const ScalarArrayOpExpr *a, const ScalarArrayOpExpr *b) + +/* + * equal + * returns whether two nodes are equal + */ +bool +equal(const void *a, const void *b) { - COMPARE_SCALAR_FIELD(opno); + bool retval; + + if (a == b) + return true; /* - * Special-case opfuncid: it is allowable for it to differ if one node - * contains zero and the other doesn't. This just means that the one node - * isn't as far along in the parse/plan pipeline and hasn't had the - * opfuncid cache filled yet. + * note that a!=b, so only one of them can be NULL */ - if (a->opfuncid != b->opfuncid && - a->opfuncid != 0 && - b->opfuncid != 0) - return false; - - /* As above, hashfuncid may differ too */ - if (a->hashfuncid != b->hashfuncid && - a->hashfuncid != 0 && - b->hashfuncid != 0) + if (a == NULL || b == NULL) return false; - /* Likewise for the negfuncid */ - if (a->negfuncid != b->negfuncid && - a->negfuncid != 0 && - b->negfuncid != 0) + /* + * are they the same type of nodes? + */ + if (nodeTag(a) != nodeTag(b)) return false; - COMPARE_SCALAR_FIELD(useOr); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalBoolExpr(const BoolExpr *a, const BoolExpr *b) -{ - COMPARE_SCALAR_FIELD(boolop); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalSubLink(const SubLink *a, const SubLink *b) -{ - COMPARE_SCALAR_FIELD(subLinkType); - COMPARE_SCALAR_FIELD(subLinkId); - COMPARE_NODE_FIELD(testexpr); - COMPARE_NODE_FIELD(operName); - COMPARE_NODE_FIELD(subselect); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalSubPlan(const SubPlan *a, const SubPlan *b) -{ - COMPARE_SCALAR_FIELD(subLinkType); - COMPARE_NODE_FIELD(testexpr); - COMPARE_NODE_FIELD(paramIds); - COMPARE_SCALAR_FIELD(plan_id); - COMPARE_STRING_FIELD(plan_name); - COMPARE_SCALAR_FIELD(firstColType); - COMPARE_SCALAR_FIELD(firstColTypmod); - COMPARE_SCALAR_FIELD(firstColCollation); - COMPARE_SCALAR_FIELD(useHashTable); - COMPARE_SCALAR_FIELD(unknownEqFalse); - COMPARE_SCALAR_FIELD(parallel_safe); - COMPARE_NODE_FIELD(setParam); - COMPARE_NODE_FIELD(parParam); - COMPARE_NODE_FIELD(args); - COMPARE_SCALAR_FIELD(startup_cost); - COMPARE_SCALAR_FIELD(per_call_cost); - - return true; -} - -static bool -_equalAlternativeSubPlan(const AlternativeSubPlan *a, const AlternativeSubPlan *b) -{ - COMPARE_NODE_FIELD(subplans); - - return true; -} - -static bool -_equalFieldSelect(const FieldSelect *a, const FieldSelect *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(fieldnum); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_SCALAR_FIELD(resulttypmod); - COMPARE_SCALAR_FIELD(resultcollid); - - return true; -} - -static bool -_equalFieldStore(const FieldStore *a, const FieldStore *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(newvals); - COMPARE_NODE_FIELD(fieldnums); - COMPARE_SCALAR_FIELD(resulttype); - - return true; -} - -static bool -_equalRelabelType(const RelabelType *a, const RelabelType *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_SCALAR_FIELD(resulttypmod); - COMPARE_SCALAR_FIELD(resultcollid); - COMPARE_COERCIONFORM_FIELD(relabelformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCoerceViaIO(const CoerceViaIO *a, const CoerceViaIO *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_SCALAR_FIELD(resultcollid); - COMPARE_COERCIONFORM_FIELD(coerceformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalArrayCoerceExpr(const ArrayCoerceExpr *a, const ArrayCoerceExpr *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(elemexpr); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_SCALAR_FIELD(resulttypmod); - COMPARE_SCALAR_FIELD(resultcollid); - COMPARE_COERCIONFORM_FIELD(coerceformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalConvertRowtypeExpr(const ConvertRowtypeExpr *a, const ConvertRowtypeExpr *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_COERCIONFORM_FIELD(convertformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCollateExpr(const CollateExpr *a, const CollateExpr *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(collOid); - COMPARE_LOCATION_FIELD(location); + /* Guard against stack overflow due to overly complex expressions */ + check_stack_depth(); - return true; -} - -static bool -_equalCaseExpr(const CaseExpr *a, const CaseExpr *b) -{ - COMPARE_SCALAR_FIELD(casetype); - COMPARE_SCALAR_FIELD(casecollid); - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(defresult); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCaseWhen(const CaseWhen *a, const CaseWhen *b) -{ - COMPARE_NODE_FIELD(expr); - COMPARE_NODE_FIELD(result); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCaseTestExpr(const CaseTestExpr *a, const CaseTestExpr *b) -{ - COMPARE_SCALAR_FIELD(typeId); - COMPARE_SCALAR_FIELD(typeMod); - COMPARE_SCALAR_FIELD(collation); - - return true; -} - -static bool -_equalArrayExpr(const ArrayExpr *a, const ArrayExpr *b) -{ - COMPARE_SCALAR_FIELD(array_typeid); - COMPARE_SCALAR_FIELD(array_collid); - COMPARE_SCALAR_FIELD(element_typeid); - COMPARE_NODE_FIELD(elements); - COMPARE_SCALAR_FIELD(multidims); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRowExpr(const RowExpr *a, const RowExpr *b) -{ - COMPARE_NODE_FIELD(args); - COMPARE_SCALAR_FIELD(row_typeid); - COMPARE_COERCIONFORM_FIELD(row_format); - COMPARE_NODE_FIELD(colnames); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRowCompareExpr(const RowCompareExpr *a, const RowCompareExpr *b) -{ - COMPARE_SCALAR_FIELD(rctype); - COMPARE_NODE_FIELD(opnos); - COMPARE_NODE_FIELD(opfamilies); - COMPARE_NODE_FIELD(inputcollids); - COMPARE_NODE_FIELD(largs); - COMPARE_NODE_FIELD(rargs); - - return true; -} - -static bool -_equalCoalesceExpr(const CoalesceExpr *a, const CoalesceExpr *b) -{ - COMPARE_SCALAR_FIELD(coalescetype); - COMPARE_SCALAR_FIELD(coalescecollid); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalMinMaxExpr(const MinMaxExpr *a, const MinMaxExpr *b) -{ - COMPARE_SCALAR_FIELD(minmaxtype); - COMPARE_SCALAR_FIELD(minmaxcollid); - COMPARE_SCALAR_FIELD(inputcollid); - COMPARE_SCALAR_FIELD(op); - COMPARE_NODE_FIELD(args); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalSQLValueFunction(const SQLValueFunction *a, const SQLValueFunction *b) -{ - COMPARE_SCALAR_FIELD(op); - COMPARE_SCALAR_FIELD(type); - COMPARE_SCALAR_FIELD(typmod); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalXmlExpr(const XmlExpr *a, const XmlExpr *b) -{ - COMPARE_SCALAR_FIELD(op); - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(named_args); - COMPARE_NODE_FIELD(arg_names); - COMPARE_NODE_FIELD(args); - COMPARE_SCALAR_FIELD(xmloption); - COMPARE_SCALAR_FIELD(type); - COMPARE_SCALAR_FIELD(typmod); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalNullTest(const NullTest *a, const NullTest *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(nulltesttype); - COMPARE_SCALAR_FIELD(argisrow); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalBooleanTest(const BooleanTest *a, const BooleanTest *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(booltesttype); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCoerceToDomain(const CoerceToDomain *a, const CoerceToDomain *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(resulttype); - COMPARE_SCALAR_FIELD(resulttypmod); - COMPARE_SCALAR_FIELD(resultcollid); - COMPARE_COERCIONFORM_FIELD(coercionformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCoerceToDomainValue(const CoerceToDomainValue *a, const CoerceToDomainValue *b) -{ - COMPARE_SCALAR_FIELD(typeId); - COMPARE_SCALAR_FIELD(typeMod); - COMPARE_SCALAR_FIELD(collation); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalSetToDefault(const SetToDefault *a, const SetToDefault *b) -{ - COMPARE_SCALAR_FIELD(typeId); - COMPARE_SCALAR_FIELD(typeMod); - COMPARE_SCALAR_FIELD(collation); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCurrentOfExpr(const CurrentOfExpr *a, const CurrentOfExpr *b) -{ - COMPARE_SCALAR_FIELD(cvarno); - COMPARE_STRING_FIELD(cursor_name); - COMPARE_SCALAR_FIELD(cursor_param); - - return true; -} - -static bool -_equalNextValueExpr(const NextValueExpr *a, const NextValueExpr *b) -{ - COMPARE_SCALAR_FIELD(seqid); - COMPARE_SCALAR_FIELD(typeId); - - return true; -} - -static bool -_equalInferenceElem(const InferenceElem *a, const InferenceElem *b) -{ - COMPARE_NODE_FIELD(expr); - COMPARE_SCALAR_FIELD(infercollid); - COMPARE_SCALAR_FIELD(inferopclass); - - return true; -} - -static bool -_equalTargetEntry(const TargetEntry *a, const TargetEntry *b) -{ - COMPARE_NODE_FIELD(expr); - COMPARE_SCALAR_FIELD(resno); - COMPARE_STRING_FIELD(resname); - COMPARE_SCALAR_FIELD(ressortgroupref); - COMPARE_SCALAR_FIELD(resorigtbl); - COMPARE_SCALAR_FIELD(resorigcol); - COMPARE_SCALAR_FIELD(resjunk); - - return true; -} - -static bool -_equalRangeTblRef(const RangeTblRef *a, const RangeTblRef *b) -{ - COMPARE_SCALAR_FIELD(rtindex); - - return true; -} - -static bool -_equalJoinExpr(const JoinExpr *a, const JoinExpr *b) -{ - COMPARE_SCALAR_FIELD(jointype); - COMPARE_SCALAR_FIELD(isNatural); - COMPARE_NODE_FIELD(larg); - COMPARE_NODE_FIELD(rarg); - COMPARE_NODE_FIELD(usingClause); - COMPARE_NODE_FIELD(join_using_alias); - COMPARE_NODE_FIELD(quals); - COMPARE_NODE_FIELD(alias); - COMPARE_SCALAR_FIELD(rtindex); - - return true; -} - -static bool -_equalFromExpr(const FromExpr *a, const FromExpr *b) -{ - COMPARE_NODE_FIELD(fromlist); - COMPARE_NODE_FIELD(quals); - - return true; -} - -static bool -_equalOnConflictExpr(const OnConflictExpr *a, const OnConflictExpr *b) -{ - COMPARE_SCALAR_FIELD(action); - COMPARE_NODE_FIELD(arbiterElems); - COMPARE_NODE_FIELD(arbiterWhere); - COMPARE_SCALAR_FIELD(constraint); - COMPARE_NODE_FIELD(onConflictSet); - COMPARE_NODE_FIELD(onConflictWhere); - COMPARE_SCALAR_FIELD(exclRelIndex); - COMPARE_NODE_FIELD(exclRelTlist); - - return true; -} - -/* - * Stuff from pathnodes.h - */ - -static bool -_equalPathKey(const PathKey *a, const PathKey *b) -{ - /* We assume pointer equality is sufficient to compare the eclasses */ - COMPARE_SCALAR_FIELD(pk_eclass); - COMPARE_SCALAR_FIELD(pk_opfamily); - COMPARE_SCALAR_FIELD(pk_strategy); - COMPARE_SCALAR_FIELD(pk_nulls_first); - - return true; -} - -static bool -_equalRestrictInfo(const RestrictInfo *a, const RestrictInfo *b) -{ - COMPARE_NODE_FIELD(clause); - COMPARE_SCALAR_FIELD(is_pushed_down); - COMPARE_SCALAR_FIELD(outerjoin_delayed); - COMPARE_SCALAR_FIELD(security_level); - COMPARE_BITMAPSET_FIELD(required_relids); - COMPARE_BITMAPSET_FIELD(outer_relids); - COMPARE_BITMAPSET_FIELD(nullable_relids); - - /* - * We ignore all the remaining fields, since they may not be set yet, and - * should be derivable from the clause anyway. - */ - - return true; -} - -static bool -_equalPlaceHolderVar(const PlaceHolderVar *a, const PlaceHolderVar *b) -{ - /* - * We intentionally do not compare phexpr. Two PlaceHolderVars with the - * same ID and levelsup should be considered equal even if the contained - * expressions have managed to mutate to different states. This will - * happen during final plan construction when there are nested PHVs, since - * the inner PHV will get replaced by a Param in some copies of the outer - * PHV. Another way in which it can happen is that initplan sublinks - * could get replaced by differently-numbered Params when sublink folding - * is done. (The end result of such a situation would be some - * unreferenced initplans, which is annoying but not really a problem.) On - * the same reasoning, there is no need to examine phrels. - * - * COMPARE_NODE_FIELD(phexpr); - * - * COMPARE_BITMAPSET_FIELD(phrels); - */ - COMPARE_SCALAR_FIELD(phid); - COMPARE_SCALAR_FIELD(phlevelsup); - - return true; -} - -static bool -_equalSpecialJoinInfo(const SpecialJoinInfo *a, const SpecialJoinInfo *b) -{ - COMPARE_BITMAPSET_FIELD(min_lefthand); - COMPARE_BITMAPSET_FIELD(min_righthand); - COMPARE_BITMAPSET_FIELD(syn_lefthand); - COMPARE_BITMAPSET_FIELD(syn_righthand); - COMPARE_SCALAR_FIELD(jointype); - COMPARE_SCALAR_FIELD(lhs_strict); - COMPARE_SCALAR_FIELD(delay_upper_joins); - COMPARE_SCALAR_FIELD(semi_can_btree); - COMPARE_SCALAR_FIELD(semi_can_hash); - COMPARE_NODE_FIELD(semi_operators); - COMPARE_NODE_FIELD(semi_rhs_exprs); - - return true; -} - -static bool -_equalAppendRelInfo(const AppendRelInfo *a, const AppendRelInfo *b) -{ - COMPARE_SCALAR_FIELD(parent_relid); - COMPARE_SCALAR_FIELD(child_relid); - COMPARE_SCALAR_FIELD(parent_reltype); - COMPARE_SCALAR_FIELD(child_reltype); - COMPARE_NODE_FIELD(translated_vars); - COMPARE_SCALAR_FIELD(num_child_cols); - COMPARE_POINTER_FIELD(parent_colnos, a->num_child_cols * sizeof(AttrNumber)); - COMPARE_SCALAR_FIELD(parent_reloid); - - return true; -} - -static bool -_equalPlaceHolderInfo(const PlaceHolderInfo *a, const PlaceHolderInfo *b) -{ - COMPARE_SCALAR_FIELD(phid); - COMPARE_NODE_FIELD(ph_var); /* should be redundant */ - COMPARE_BITMAPSET_FIELD(ph_eval_at); - COMPARE_BITMAPSET_FIELD(ph_lateral); - COMPARE_BITMAPSET_FIELD(ph_needed); - COMPARE_SCALAR_FIELD(ph_width); - - return true; -} - -/* - * Stuff from extensible.h - */ -static bool -_equalExtensibleNode(const ExtensibleNode *a, const ExtensibleNode *b) -{ - const ExtensibleNodeMethods *methods; - - COMPARE_STRING_FIELD(extnodename); - - /* At this point, we know extnodename is the same for both nodes. */ - methods = GetExtensibleNodeMethods(a->extnodename, false); - - /* compare the private fields */ - if (!methods->nodeEqual(a, b)) - return false; - - return true; -} - -/* - * Stuff from parsenodes.h - */ - -static bool -_equalQuery(const Query *a, const Query *b) -{ - COMPARE_SCALAR_FIELD(commandType); - COMPARE_SCALAR_FIELD(querySource); - /* we intentionally ignore queryId, since it might not be set */ - COMPARE_SCALAR_FIELD(canSetTag); - COMPARE_NODE_FIELD(utilityStmt); - COMPARE_SCALAR_FIELD(resultRelation); - COMPARE_SCALAR_FIELD(hasAggs); - COMPARE_SCALAR_FIELD(hasWindowFuncs); - COMPARE_SCALAR_FIELD(hasTargetSRFs); - COMPARE_SCALAR_FIELD(hasSubLinks); - COMPARE_SCALAR_FIELD(hasDistinctOn); - COMPARE_SCALAR_FIELD(hasRecursive); - COMPARE_SCALAR_FIELD(hasModifyingCTE); - COMPARE_SCALAR_FIELD(hasForUpdate); - COMPARE_SCALAR_FIELD(hasRowSecurity); - COMPARE_SCALAR_FIELD(isReturn); - COMPARE_NODE_FIELD(cteList); - COMPARE_NODE_FIELD(rtable); - COMPARE_NODE_FIELD(jointree); - COMPARE_NODE_FIELD(targetList); - COMPARE_SCALAR_FIELD(override); - COMPARE_NODE_FIELD(onConflict); - COMPARE_NODE_FIELD(returningList); - COMPARE_NODE_FIELD(groupClause); - COMPARE_SCALAR_FIELD(groupDistinct); - COMPARE_NODE_FIELD(groupingSets); - COMPARE_NODE_FIELD(havingQual); - COMPARE_NODE_FIELD(windowClause); - COMPARE_NODE_FIELD(distinctClause); - COMPARE_NODE_FIELD(sortClause); - COMPARE_NODE_FIELD(limitOffset); - COMPARE_NODE_FIELD(limitCount); - COMPARE_SCALAR_FIELD(limitOption); - COMPARE_NODE_FIELD(rowMarks); - COMPARE_NODE_FIELD(setOperations); - COMPARE_NODE_FIELD(constraintDeps); - COMPARE_NODE_FIELD(withCheckOptions); - COMPARE_NODE_FIELD(mergeActionList); - COMPARE_SCALAR_FIELD(mergeUseOuterJoin); - COMPARE_LOCATION_FIELD(stmt_location); - COMPARE_SCALAR_FIELD(stmt_len); - - return true; -} - -static bool -_equalRawStmt(const RawStmt *a, const RawStmt *b) -{ - COMPARE_NODE_FIELD(stmt); - COMPARE_LOCATION_FIELD(stmt_location); - COMPARE_SCALAR_FIELD(stmt_len); - - return true; -} - -static bool -_equalInsertStmt(const InsertStmt *a, const InsertStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(cols); - COMPARE_NODE_FIELD(selectStmt); - COMPARE_NODE_FIELD(onConflictClause); - COMPARE_NODE_FIELD(returningList); - COMPARE_NODE_FIELD(withClause); - COMPARE_SCALAR_FIELD(override); - - return true; -} - -static bool -_equalDeleteStmt(const DeleteStmt *a, const DeleteStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(usingClause); - COMPARE_NODE_FIELD(whereClause); - COMPARE_NODE_FIELD(returningList); - COMPARE_NODE_FIELD(withClause); - - return true; -} - -static bool -_equalUpdateStmt(const UpdateStmt *a, const UpdateStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(whereClause); - COMPARE_NODE_FIELD(fromClause); - COMPARE_NODE_FIELD(returningList); - COMPARE_NODE_FIELD(withClause); - - return true; -} - -static bool -_equalMergeStmt(const MergeStmt *a, const MergeStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(sourceRelation); - COMPARE_NODE_FIELD(joinCondition); - COMPARE_NODE_FIELD(mergeWhenClauses); - COMPARE_NODE_FIELD(withClause); - - return true; -} - -static bool -_equalSelectStmt(const SelectStmt *a, const SelectStmt *b) -{ - COMPARE_NODE_FIELD(distinctClause); - COMPARE_NODE_FIELD(intoClause); - COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(fromClause); - COMPARE_NODE_FIELD(whereClause); - COMPARE_NODE_FIELD(groupClause); - COMPARE_SCALAR_FIELD(groupDistinct); - COMPARE_NODE_FIELD(havingClause); - COMPARE_NODE_FIELD(windowClause); - COMPARE_NODE_FIELD(valuesLists); - COMPARE_NODE_FIELD(sortClause); - COMPARE_NODE_FIELD(limitOffset); - COMPARE_NODE_FIELD(limitCount); - COMPARE_SCALAR_FIELD(limitOption); - COMPARE_NODE_FIELD(lockingClause); - COMPARE_NODE_FIELD(withClause); - COMPARE_SCALAR_FIELD(op); - COMPARE_SCALAR_FIELD(all); - COMPARE_NODE_FIELD(larg); - COMPARE_NODE_FIELD(rarg); - - return true; -} - -static bool -_equalSetOperationStmt(const SetOperationStmt *a, const SetOperationStmt *b) -{ - COMPARE_SCALAR_FIELD(op); - COMPARE_SCALAR_FIELD(all); - COMPARE_NODE_FIELD(larg); - COMPARE_NODE_FIELD(rarg); - COMPARE_NODE_FIELD(colTypes); - COMPARE_NODE_FIELD(colTypmods); - COMPARE_NODE_FIELD(colCollations); - COMPARE_NODE_FIELD(groupClauses); - - return true; -} - -static bool -_equalReturnStmt(const ReturnStmt *a, const ReturnStmt *b) -{ - COMPARE_NODE_FIELD(returnval); - - return true; -} - -static bool -_equalPLAssignStmt(const PLAssignStmt *a, const PLAssignStmt *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(indirection); - COMPARE_SCALAR_FIELD(nnames); - COMPARE_NODE_FIELD(val); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalAlterTableStmt(const AlterTableStmt *a, const AlterTableStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(cmds); - COMPARE_SCALAR_FIELD(objtype); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalAlterTableCmd(const AlterTableCmd *a, const AlterTableCmd *b) -{ - COMPARE_SCALAR_FIELD(subtype); - COMPARE_STRING_FIELD(name); - COMPARE_SCALAR_FIELD(num); - COMPARE_NODE_FIELD(newowner); - COMPARE_NODE_FIELD(def); - COMPARE_SCALAR_FIELD(behavior); - COMPARE_SCALAR_FIELD(missing_ok); - COMPARE_SCALAR_FIELD(recurse); - - return true; -} - -static bool -_equalAlterCollationStmt(const AlterCollationStmt *a, const AlterCollationStmt *b) -{ - COMPARE_NODE_FIELD(collname); - - return true; -} - -static bool -_equalAlterDomainStmt(const AlterDomainStmt *a, const AlterDomainStmt *b) -{ - COMPARE_SCALAR_FIELD(subtype); - COMPARE_NODE_FIELD(typeName); - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(def); - COMPARE_SCALAR_FIELD(behavior); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalGrantStmt(const GrantStmt *a, const GrantStmt *b) -{ - COMPARE_SCALAR_FIELD(is_grant); - COMPARE_SCALAR_FIELD(targtype); - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(objects); - COMPARE_NODE_FIELD(privileges); - COMPARE_NODE_FIELD(grantees); - COMPARE_SCALAR_FIELD(grant_option); - COMPARE_NODE_FIELD(grantor); - COMPARE_SCALAR_FIELD(behavior); - - return true; -} - -static bool -_equalObjectWithArgs(const ObjectWithArgs *a, const ObjectWithArgs *b) -{ - COMPARE_NODE_FIELD(objname); - COMPARE_NODE_FIELD(objargs); - COMPARE_NODE_FIELD(objfuncargs); - COMPARE_SCALAR_FIELD(args_unspecified); - - return true; -} - -static bool -_equalAccessPriv(const AccessPriv *a, const AccessPriv *b) -{ - COMPARE_STRING_FIELD(priv_name); - COMPARE_NODE_FIELD(cols); - - return true; -} - -static bool -_equalGrantRoleStmt(const GrantRoleStmt *a, const GrantRoleStmt *b) -{ - COMPARE_NODE_FIELD(granted_roles); - COMPARE_NODE_FIELD(grantee_roles); - COMPARE_SCALAR_FIELD(is_grant); - COMPARE_SCALAR_FIELD(admin_opt); - COMPARE_NODE_FIELD(grantor); - COMPARE_SCALAR_FIELD(behavior); - - return true; -} - -static bool -_equalAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *a, const AlterDefaultPrivilegesStmt *b) -{ - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(action); - - return true; -} - -static bool -_equalDeclareCursorStmt(const DeclareCursorStmt *a, const DeclareCursorStmt *b) -{ - COMPARE_STRING_FIELD(portalname); - COMPARE_SCALAR_FIELD(options); - COMPARE_NODE_FIELD(query); - - return true; -} - -static bool -_equalClosePortalStmt(const ClosePortalStmt *a, const ClosePortalStmt *b) -{ - COMPARE_STRING_FIELD(portalname); - - return true; -} - -static bool -_equalCallStmt(const CallStmt *a, const CallStmt *b) -{ - COMPARE_NODE_FIELD(funccall); - COMPARE_NODE_FIELD(funcexpr); - COMPARE_NODE_FIELD(outargs); - - return true; -} - -static bool -_equalClusterStmt(const ClusterStmt *a, const ClusterStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_STRING_FIELD(indexname); - COMPARE_NODE_FIELD(params); - - return true; -} - -static bool -_equalCopyStmt(const CopyStmt *a, const CopyStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(query); - COMPARE_NODE_FIELD(attlist); - COMPARE_SCALAR_FIELD(is_from); - COMPARE_SCALAR_FIELD(is_program); - COMPARE_STRING_FIELD(filename); - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(whereClause); - - return true; -} - -static bool -_equalCreateStmt(const CreateStmt *a, const CreateStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(tableElts); - COMPARE_NODE_FIELD(inhRelations); - COMPARE_NODE_FIELD(partbound); - COMPARE_NODE_FIELD(partspec); - COMPARE_NODE_FIELD(ofTypename); - COMPARE_NODE_FIELD(constraints); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(oncommit); - COMPARE_STRING_FIELD(tablespacename); - COMPARE_STRING_FIELD(accessMethod); - COMPARE_SCALAR_FIELD(if_not_exists); - - return true; -} - -static bool -_equalTableLikeClause(const TableLikeClause *a, const TableLikeClause *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_SCALAR_FIELD(options); - COMPARE_SCALAR_FIELD(relationOid); - - return true; -} - -static bool -_equalDefineStmt(const DefineStmt *a, const DefineStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_SCALAR_FIELD(oldstyle); - COMPARE_NODE_FIELD(defnames); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(definition); - COMPARE_SCALAR_FIELD(if_not_exists); - COMPARE_SCALAR_FIELD(replace); - - return true; -} - -static bool -_equalDropStmt(const DropStmt *a, const DropStmt *b) -{ - COMPARE_NODE_FIELD(objects); - COMPARE_SCALAR_FIELD(removeType); - COMPARE_SCALAR_FIELD(behavior); - COMPARE_SCALAR_FIELD(missing_ok); - COMPARE_SCALAR_FIELD(concurrent); - - return true; -} - -static bool -_equalTruncateStmt(const TruncateStmt *a, const TruncateStmt *b) -{ - COMPARE_NODE_FIELD(relations); - COMPARE_SCALAR_FIELD(restart_seqs); - COMPARE_SCALAR_FIELD(behavior); - - return true; -} - -static bool -_equalCommentStmt(const CommentStmt *a, const CommentStmt *b) -{ - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(object); - COMPARE_STRING_FIELD(comment); - - return true; -} - -static bool -_equalSecLabelStmt(const SecLabelStmt *a, const SecLabelStmt *b) -{ - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(object); - COMPARE_STRING_FIELD(provider); - COMPARE_STRING_FIELD(label); - - return true; -} - -static bool -_equalFetchStmt(const FetchStmt *a, const FetchStmt *b) -{ - COMPARE_SCALAR_FIELD(direction); - COMPARE_SCALAR_FIELD(howMany); - COMPARE_STRING_FIELD(portalname); - COMPARE_SCALAR_FIELD(ismove); - - return true; -} - -static bool -_equalIndexStmt(const IndexStmt *a, const IndexStmt *b) -{ - COMPARE_STRING_FIELD(idxname); - COMPARE_NODE_FIELD(relation); - COMPARE_STRING_FIELD(accessMethod); - COMPARE_STRING_FIELD(tableSpace); - COMPARE_NODE_FIELD(indexParams); - COMPARE_NODE_FIELD(indexIncludingParams); - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(whereClause); - COMPARE_NODE_FIELD(excludeOpNames); - COMPARE_STRING_FIELD(idxcomment); - COMPARE_SCALAR_FIELD(indexOid); - COMPARE_SCALAR_FIELD(oldNode); - COMPARE_SCALAR_FIELD(oldCreateSubid); - COMPARE_SCALAR_FIELD(oldFirstRelfilenodeSubid); - COMPARE_SCALAR_FIELD(unique); - COMPARE_SCALAR_FIELD(nulls_not_distinct); - COMPARE_SCALAR_FIELD(primary); - COMPARE_SCALAR_FIELD(isconstraint); - COMPARE_SCALAR_FIELD(deferrable); - COMPARE_SCALAR_FIELD(initdeferred); - COMPARE_SCALAR_FIELD(transformed); - COMPARE_SCALAR_FIELD(concurrent); - COMPARE_SCALAR_FIELD(if_not_exists); - COMPARE_SCALAR_FIELD(reset_default_tblspc); - - return true; -} - -static bool -_equalCreateStatsStmt(const CreateStatsStmt *a, const CreateStatsStmt *b) -{ - COMPARE_NODE_FIELD(defnames); - COMPARE_NODE_FIELD(stat_types); - COMPARE_NODE_FIELD(exprs); - COMPARE_NODE_FIELD(relations); - COMPARE_STRING_FIELD(stxcomment); - COMPARE_SCALAR_FIELD(transformed); - COMPARE_SCALAR_FIELD(if_not_exists); - - return true; -} - -static bool -_equalAlterStatsStmt(const AlterStatsStmt *a, const AlterStatsStmt *b) -{ - COMPARE_NODE_FIELD(defnames); - COMPARE_SCALAR_FIELD(stxstattarget); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalCreateFunctionStmt(const CreateFunctionStmt *a, const CreateFunctionStmt *b) -{ - COMPARE_SCALAR_FIELD(is_procedure); - COMPARE_SCALAR_FIELD(replace); - COMPARE_NODE_FIELD(funcname); - COMPARE_NODE_FIELD(parameters); - COMPARE_NODE_FIELD(returnType); - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(sql_body); - - return true; -} - -static bool -_equalFunctionParameter(const FunctionParameter *a, const FunctionParameter *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(argType); - COMPARE_SCALAR_FIELD(mode); - COMPARE_NODE_FIELD(defexpr); - - return true; -} - -static bool -_equalAlterFunctionStmt(const AlterFunctionStmt *a, const AlterFunctionStmt *b) -{ - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(func); - COMPARE_NODE_FIELD(actions); - - return true; -} - -static bool -_equalDoStmt(const DoStmt *a, const DoStmt *b) -{ - COMPARE_NODE_FIELD(args); - - return true; -} - -static bool -_equalRenameStmt(const RenameStmt *a, const RenameStmt *b) -{ - COMPARE_SCALAR_FIELD(renameType); - COMPARE_SCALAR_FIELD(relationType); - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(object); - COMPARE_STRING_FIELD(subname); - COMPARE_STRING_FIELD(newname); - COMPARE_SCALAR_FIELD(behavior); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalAlterObjectDependsStmt(const AlterObjectDependsStmt *a, const AlterObjectDependsStmt *b) -{ - COMPARE_SCALAR_FIELD(objectType); - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(object); - COMPARE_NODE_FIELD(extname); - COMPARE_SCALAR_FIELD(remove); - - return true; -} - -static bool -_equalAlterObjectSchemaStmt(const AlterObjectSchemaStmt *a, const AlterObjectSchemaStmt *b) -{ - COMPARE_SCALAR_FIELD(objectType); - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(object); - COMPARE_STRING_FIELD(newschema); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalAlterOwnerStmt(const AlterOwnerStmt *a, const AlterOwnerStmt *b) -{ - COMPARE_SCALAR_FIELD(objectType); - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(object); - COMPARE_NODE_FIELD(newowner); - - return true; -} - -static bool -_equalAlterOperatorStmt(const AlterOperatorStmt *a, const AlterOperatorStmt *b) -{ - COMPARE_NODE_FIELD(opername); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterTypeStmt(const AlterTypeStmt *a, const AlterTypeStmt *b) -{ - COMPARE_NODE_FIELD(typeName); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalRuleStmt(const RuleStmt *a, const RuleStmt *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_STRING_FIELD(rulename); - COMPARE_NODE_FIELD(whereClause); - COMPARE_SCALAR_FIELD(event); - COMPARE_SCALAR_FIELD(instead); - COMPARE_NODE_FIELD(actions); - COMPARE_SCALAR_FIELD(replace); - - return true; -} - -static bool -_equalNotifyStmt(const NotifyStmt *a, const NotifyStmt *b) -{ - COMPARE_STRING_FIELD(conditionname); - COMPARE_STRING_FIELD(payload); - - return true; -} - -static bool -_equalListenStmt(const ListenStmt *a, const ListenStmt *b) -{ - COMPARE_STRING_FIELD(conditionname); - - return true; -} - -static bool -_equalUnlistenStmt(const UnlistenStmt *a, const UnlistenStmt *b) -{ - COMPARE_STRING_FIELD(conditionname); - - return true; -} - -static bool -_equalTransactionStmt(const TransactionStmt *a, const TransactionStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(options); - COMPARE_STRING_FIELD(savepoint_name); - COMPARE_STRING_FIELD(gid); - COMPARE_SCALAR_FIELD(chain); - - return true; -} - -static bool -_equalCompositeTypeStmt(const CompositeTypeStmt *a, const CompositeTypeStmt *b) -{ - COMPARE_NODE_FIELD(typevar); - COMPARE_NODE_FIELD(coldeflist); - - return true; -} - -static bool -_equalCreateEnumStmt(const CreateEnumStmt *a, const CreateEnumStmt *b) -{ - COMPARE_NODE_FIELD(typeName); - COMPARE_NODE_FIELD(vals); - - return true; -} - -static bool -_equalCreateRangeStmt(const CreateRangeStmt *a, const CreateRangeStmt *b) -{ - COMPARE_NODE_FIELD(typeName); - COMPARE_NODE_FIELD(params); - - return true; -} - -static bool -_equalAlterEnumStmt(const AlterEnumStmt *a, const AlterEnumStmt *b) -{ - COMPARE_NODE_FIELD(typeName); - COMPARE_STRING_FIELD(oldVal); - COMPARE_STRING_FIELD(newVal); - COMPARE_STRING_FIELD(newValNeighbor); - COMPARE_SCALAR_FIELD(newValIsAfter); - COMPARE_SCALAR_FIELD(skipIfNewValExists); - - return true; -} - -static bool -_equalViewStmt(const ViewStmt *a, const ViewStmt *b) -{ - COMPARE_NODE_FIELD(view); - COMPARE_NODE_FIELD(aliases); - COMPARE_NODE_FIELD(query); - COMPARE_SCALAR_FIELD(replace); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(withCheckOption); - - return true; -} - -static bool -_equalLoadStmt(const LoadStmt *a, const LoadStmt *b) -{ - COMPARE_STRING_FIELD(filename); - - return true; -} - -static bool -_equalCreateDomainStmt(const CreateDomainStmt *a, const CreateDomainStmt *b) -{ - COMPARE_NODE_FIELD(domainname); - COMPARE_NODE_FIELD(typeName); - COMPARE_NODE_FIELD(collClause); - COMPARE_NODE_FIELD(constraints); - - return true; -} - -static bool -_equalCreateOpClassStmt(const CreateOpClassStmt *a, const CreateOpClassStmt *b) -{ - COMPARE_NODE_FIELD(opclassname); - COMPARE_NODE_FIELD(opfamilyname); - COMPARE_STRING_FIELD(amname); - COMPARE_NODE_FIELD(datatype); - COMPARE_NODE_FIELD(items); - COMPARE_SCALAR_FIELD(isDefault); - - return true; -} - -static bool -_equalCreateOpClassItem(const CreateOpClassItem *a, const CreateOpClassItem *b) -{ - COMPARE_SCALAR_FIELD(itemtype); - COMPARE_NODE_FIELD(name); - COMPARE_SCALAR_FIELD(number); - COMPARE_NODE_FIELD(order_family); - COMPARE_NODE_FIELD(class_args); - COMPARE_NODE_FIELD(storedtype); - - return true; -} - -static bool -_equalCreateOpFamilyStmt(const CreateOpFamilyStmt *a, const CreateOpFamilyStmt *b) -{ - COMPARE_NODE_FIELD(opfamilyname); - COMPARE_STRING_FIELD(amname); - - return true; -} - -static bool -_equalAlterOpFamilyStmt(const AlterOpFamilyStmt *a, const AlterOpFamilyStmt *b) -{ - COMPARE_NODE_FIELD(opfamilyname); - COMPARE_STRING_FIELD(amname); - COMPARE_SCALAR_FIELD(isDrop); - COMPARE_NODE_FIELD(items); - - return true; -} - -static bool -_equalCreatedbStmt(const CreatedbStmt *a, const CreatedbStmt *b) -{ - COMPARE_STRING_FIELD(dbname); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterDatabaseStmt(const AlterDatabaseStmt *a, const AlterDatabaseStmt *b) -{ - COMPARE_STRING_FIELD(dbname); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *a, const AlterDatabaseRefreshCollStmt *b) -{ - COMPARE_STRING_FIELD(dbname); - - return true; -} - -static bool -_equalAlterDatabaseSetStmt(const AlterDatabaseSetStmt *a, const AlterDatabaseSetStmt *b) -{ - COMPARE_STRING_FIELD(dbname); - COMPARE_NODE_FIELD(setstmt); - - return true; -} - -static bool -_equalDropdbStmt(const DropdbStmt *a, const DropdbStmt *b) -{ - COMPARE_STRING_FIELD(dbname); - COMPARE_SCALAR_FIELD(missing_ok); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalVacuumStmt(const VacuumStmt *a, const VacuumStmt *b) -{ - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(rels); - COMPARE_SCALAR_FIELD(is_vacuumcmd); - - return true; -} - -static bool -_equalVacuumRelation(const VacuumRelation *a, const VacuumRelation *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_SCALAR_FIELD(oid); - COMPARE_NODE_FIELD(va_cols); - - return true; -} - -static bool -_equalExplainStmt(const ExplainStmt *a, const ExplainStmt *b) -{ - COMPARE_NODE_FIELD(query); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalCreateTableAsStmt(const CreateTableAsStmt *a, const CreateTableAsStmt *b) -{ - COMPARE_NODE_FIELD(query); - COMPARE_NODE_FIELD(into); - COMPARE_SCALAR_FIELD(objtype); - COMPARE_SCALAR_FIELD(is_select_into); - COMPARE_SCALAR_FIELD(if_not_exists); - - return true; -} - -static bool -_equalRefreshMatViewStmt(const RefreshMatViewStmt *a, const RefreshMatViewStmt *b) -{ - COMPARE_SCALAR_FIELD(concurrent); - COMPARE_SCALAR_FIELD(skipData); - COMPARE_NODE_FIELD(relation); - - return true; -} - -static bool -_equalReplicaIdentityStmt(const ReplicaIdentityStmt *a, const ReplicaIdentityStmt *b) -{ - COMPARE_SCALAR_FIELD(identity_type); - COMPARE_STRING_FIELD(name); - - return true; -} - -static bool -_equalAlterSystemStmt(const AlterSystemStmt *a, const AlterSystemStmt *b) -{ - COMPARE_NODE_FIELD(setstmt); - - return true; -} - - -static bool -_equalCreateSeqStmt(const CreateSeqStmt *a, const CreateSeqStmt *b) -{ - COMPARE_NODE_FIELD(sequence); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(ownerId); - COMPARE_SCALAR_FIELD(for_identity); - COMPARE_SCALAR_FIELD(if_not_exists); - - return true; -} - -static bool -_equalAlterSeqStmt(const AlterSeqStmt *a, const AlterSeqStmt *b) -{ - COMPARE_NODE_FIELD(sequence); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(for_identity); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalVariableSetStmt(const VariableSetStmt *a, const VariableSetStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(args); - COMPARE_SCALAR_FIELD(is_local); - - return true; -} - -static bool -_equalVariableShowStmt(const VariableShowStmt *a, const VariableShowStmt *b) -{ - COMPARE_STRING_FIELD(name); - - return true; -} - -static bool -_equalDiscardStmt(const DiscardStmt *a, const DiscardStmt *b) -{ - COMPARE_SCALAR_FIELD(target); - - return true; -} - -static bool -_equalCreateTableSpaceStmt(const CreateTableSpaceStmt *a, const CreateTableSpaceStmt *b) -{ - COMPARE_STRING_FIELD(tablespacename); - COMPARE_NODE_FIELD(owner); - COMPARE_STRING_FIELD(location); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalDropTableSpaceStmt(const DropTableSpaceStmt *a, const DropTableSpaceStmt *b) -{ - COMPARE_STRING_FIELD(tablespacename); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *a, - const AlterTableSpaceOptionsStmt *b) -{ - COMPARE_STRING_FIELD(tablespacename); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(isReset); - - return true; -} - -static bool -_equalAlterTableMoveAllStmt(const AlterTableMoveAllStmt *a, - const AlterTableMoveAllStmt *b) -{ - COMPARE_STRING_FIELD(orig_tablespacename); - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(roles); - COMPARE_STRING_FIELD(new_tablespacename); - COMPARE_SCALAR_FIELD(nowait); - - return true; -} - -static bool -_equalCreateExtensionStmt(const CreateExtensionStmt *a, const CreateExtensionStmt *b) -{ - COMPARE_STRING_FIELD(extname); - COMPARE_SCALAR_FIELD(if_not_exists); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterExtensionStmt(const AlterExtensionStmt *a, const AlterExtensionStmt *b) -{ - COMPARE_STRING_FIELD(extname); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterExtensionContentsStmt(const AlterExtensionContentsStmt *a, const AlterExtensionContentsStmt *b) -{ - COMPARE_STRING_FIELD(extname); - COMPARE_SCALAR_FIELD(action); - COMPARE_SCALAR_FIELD(objtype); - COMPARE_NODE_FIELD(object); - - return true; -} - -static bool -_equalCreateFdwStmt(const CreateFdwStmt *a, const CreateFdwStmt *b) -{ - COMPARE_STRING_FIELD(fdwname); - COMPARE_NODE_FIELD(func_options); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterFdwStmt(const AlterFdwStmt *a, const AlterFdwStmt *b) -{ - COMPARE_STRING_FIELD(fdwname); - COMPARE_NODE_FIELD(func_options); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalCreateForeignServerStmt(const CreateForeignServerStmt *a, const CreateForeignServerStmt *b) -{ - COMPARE_STRING_FIELD(servername); - COMPARE_STRING_FIELD(servertype); - COMPARE_STRING_FIELD(version); - COMPARE_STRING_FIELD(fdwname); - COMPARE_SCALAR_FIELD(if_not_exists); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterForeignServerStmt(const AlterForeignServerStmt *a, const AlterForeignServerStmt *b) -{ - COMPARE_STRING_FIELD(servername); - COMPARE_STRING_FIELD(version); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(has_version); - - return true; -} - -static bool -_equalCreateUserMappingStmt(const CreateUserMappingStmt *a, const CreateUserMappingStmt *b) -{ - COMPARE_NODE_FIELD(user); - COMPARE_STRING_FIELD(servername); - COMPARE_SCALAR_FIELD(if_not_exists); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterUserMappingStmt(const AlterUserMappingStmt *a, const AlterUserMappingStmt *b) -{ - COMPARE_NODE_FIELD(user); - COMPARE_STRING_FIELD(servername); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalDropUserMappingStmt(const DropUserMappingStmt *a, const DropUserMappingStmt *b) -{ - COMPARE_NODE_FIELD(user); - COMPARE_STRING_FIELD(servername); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalCreateForeignTableStmt(const CreateForeignTableStmt *a, const CreateForeignTableStmt *b) -{ - if (!_equalCreateStmt(&a->base, &b->base)) - return false; - - COMPARE_STRING_FIELD(servername); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalImportForeignSchemaStmt(const ImportForeignSchemaStmt *a, const ImportForeignSchemaStmt *b) -{ - COMPARE_STRING_FIELD(server_name); - COMPARE_STRING_FIELD(remote_schema); - COMPARE_STRING_FIELD(local_schema); - COMPARE_SCALAR_FIELD(list_type); - COMPARE_NODE_FIELD(table_list); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalCreateTransformStmt(const CreateTransformStmt *a, const CreateTransformStmt *b) -{ - COMPARE_SCALAR_FIELD(replace); - COMPARE_NODE_FIELD(type_name); - COMPARE_STRING_FIELD(lang); - COMPARE_NODE_FIELD(fromsql); - COMPARE_NODE_FIELD(tosql); - - return true; -} - -static bool -_equalCreateAmStmt(const CreateAmStmt *a, const CreateAmStmt *b) -{ - COMPARE_STRING_FIELD(amname); - COMPARE_NODE_FIELD(handler_name); - COMPARE_SCALAR_FIELD(amtype); - - return true; -} - -static bool -_equalCreateTrigStmt(const CreateTrigStmt *a, const CreateTrigStmt *b) -{ - COMPARE_SCALAR_FIELD(replace); - COMPARE_SCALAR_FIELD(isconstraint); - COMPARE_STRING_FIELD(trigname); - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(funcname); - COMPARE_NODE_FIELD(args); - COMPARE_SCALAR_FIELD(row); - COMPARE_SCALAR_FIELD(timing); - COMPARE_SCALAR_FIELD(events); - COMPARE_NODE_FIELD(columns); - COMPARE_NODE_FIELD(whenClause); - COMPARE_NODE_FIELD(transitionRels); - COMPARE_SCALAR_FIELD(deferrable); - COMPARE_SCALAR_FIELD(initdeferred); - COMPARE_NODE_FIELD(constrrel); - - return true; -} - -static bool -_equalCreateEventTrigStmt(const CreateEventTrigStmt *a, const CreateEventTrigStmt *b) -{ - COMPARE_STRING_FIELD(trigname); - COMPARE_STRING_FIELD(eventname); - COMPARE_NODE_FIELD(whenclause); - COMPARE_NODE_FIELD(funcname); - - return true; -} - -static bool -_equalAlterEventTrigStmt(const AlterEventTrigStmt *a, const AlterEventTrigStmt *b) -{ - COMPARE_STRING_FIELD(trigname); - COMPARE_SCALAR_FIELD(tgenabled); - - return true; -} - -static bool -_equalCreatePLangStmt(const CreatePLangStmt *a, const CreatePLangStmt *b) -{ - COMPARE_SCALAR_FIELD(replace); - COMPARE_STRING_FIELD(plname); - COMPARE_NODE_FIELD(plhandler); - COMPARE_NODE_FIELD(plinline); - COMPARE_NODE_FIELD(plvalidator); - COMPARE_SCALAR_FIELD(pltrusted); - - return true; -} - -static bool -_equalCreateRoleStmt(const CreateRoleStmt *a, const CreateRoleStmt *b) -{ - COMPARE_SCALAR_FIELD(stmt_type); - COMPARE_STRING_FIELD(role); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterRoleStmt(const AlterRoleStmt *a, const AlterRoleStmt *b) -{ - COMPARE_NODE_FIELD(role); - COMPARE_NODE_FIELD(options); - COMPARE_SCALAR_FIELD(action); - - return true; -} - -static bool -_equalAlterRoleSetStmt(const AlterRoleSetStmt *a, const AlterRoleSetStmt *b) -{ - COMPARE_NODE_FIELD(role); - COMPARE_STRING_FIELD(database); - COMPARE_NODE_FIELD(setstmt); - - return true; -} - -static bool -_equalDropRoleStmt(const DropRoleStmt *a, const DropRoleStmt *b) -{ - COMPARE_NODE_FIELD(roles); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalLockStmt(const LockStmt *a, const LockStmt *b) -{ - COMPARE_NODE_FIELD(relations); - COMPARE_SCALAR_FIELD(mode); - COMPARE_SCALAR_FIELD(nowait); - - return true; -} - -static bool -_equalConstraintsSetStmt(const ConstraintsSetStmt *a, const ConstraintsSetStmt *b) -{ - COMPARE_NODE_FIELD(constraints); - COMPARE_SCALAR_FIELD(deferred); - - return true; -} - -static bool -_equalReindexStmt(const ReindexStmt *a, const ReindexStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(relation); - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(params); - - return true; -} - -static bool -_equalCreateSchemaStmt(const CreateSchemaStmt *a, const CreateSchemaStmt *b) -{ - COMPARE_STRING_FIELD(schemaname); - COMPARE_NODE_FIELD(authrole); - COMPARE_NODE_FIELD(schemaElts); - COMPARE_SCALAR_FIELD(if_not_exists); - - return true; -} - -static bool -_equalCreateConversionStmt(const CreateConversionStmt *a, const CreateConversionStmt *b) -{ - COMPARE_NODE_FIELD(conversion_name); - COMPARE_STRING_FIELD(for_encoding_name); - COMPARE_STRING_FIELD(to_encoding_name); - COMPARE_NODE_FIELD(func_name); - COMPARE_SCALAR_FIELD(def); - - return true; -} - -static bool -_equalCreateCastStmt(const CreateCastStmt *a, const CreateCastStmt *b) -{ - COMPARE_NODE_FIELD(sourcetype); - COMPARE_NODE_FIELD(targettype); - COMPARE_NODE_FIELD(func); - COMPARE_SCALAR_FIELD(context); - COMPARE_SCALAR_FIELD(inout); - - return true; -} - -static bool -_equalPrepareStmt(const PrepareStmt *a, const PrepareStmt *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(argtypes); - COMPARE_NODE_FIELD(query); - - return true; -} - -static bool -_equalExecuteStmt(const ExecuteStmt *a, const ExecuteStmt *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(params); - - return true; -} - -static bool -_equalDeallocateStmt(const DeallocateStmt *a, const DeallocateStmt *b) -{ - COMPARE_STRING_FIELD(name); - - return true; -} - -static bool -_equalDropOwnedStmt(const DropOwnedStmt *a, const DropOwnedStmt *b) -{ - COMPARE_NODE_FIELD(roles); - COMPARE_SCALAR_FIELD(behavior); - - return true; -} - -static bool -_equalReassignOwnedStmt(const ReassignOwnedStmt *a, const ReassignOwnedStmt *b) -{ - COMPARE_NODE_FIELD(roles); - COMPARE_NODE_FIELD(newrole); - - return true; -} - -static bool -_equalAlterTSDictionaryStmt(const AlterTSDictionaryStmt *a, const AlterTSDictionaryStmt *b) -{ - COMPARE_NODE_FIELD(dictname); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterTSConfigurationStmt(const AlterTSConfigurationStmt *a, - const AlterTSConfigurationStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(cfgname); - COMPARE_NODE_FIELD(tokentype); - COMPARE_NODE_FIELD(dicts); - COMPARE_SCALAR_FIELD(override); - COMPARE_SCALAR_FIELD(replace); - COMPARE_SCALAR_FIELD(missing_ok); - - return true; -} - -static bool -_equalPublicationObject(const PublicationObjSpec *a, - const PublicationObjSpec *b) -{ - COMPARE_SCALAR_FIELD(pubobjtype); - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(pubtable); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalPublicationTable(const PublicationTable *a, const PublicationTable *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(whereClause); - COMPARE_NODE_FIELD(columns); - - return true; -} - -static bool -_equalCreatePublicationStmt(const CreatePublicationStmt *a, - const CreatePublicationStmt *b) -{ - COMPARE_STRING_FIELD(pubname); - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(pubobjects); - COMPARE_SCALAR_FIELD(for_all_tables); - - return true; -} - -static bool -_equalAlterPublicationStmt(const AlterPublicationStmt *a, - const AlterPublicationStmt *b) -{ - COMPARE_STRING_FIELD(pubname); - COMPARE_NODE_FIELD(options); - COMPARE_NODE_FIELD(pubobjects); - COMPARE_SCALAR_FIELD(for_all_tables); - COMPARE_SCALAR_FIELD(action); - - return true; -} - -static bool -_equalCreateSubscriptionStmt(const CreateSubscriptionStmt *a, - const CreateSubscriptionStmt *b) -{ - COMPARE_STRING_FIELD(subname); - COMPARE_STRING_FIELD(conninfo); - COMPARE_NODE_FIELD(publication); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalAlterSubscriptionStmt(const AlterSubscriptionStmt *a, - const AlterSubscriptionStmt *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_STRING_FIELD(subname); - COMPARE_STRING_FIELD(conninfo); - COMPARE_NODE_FIELD(publication); - COMPARE_NODE_FIELD(options); - - return true; -} - -static bool -_equalDropSubscriptionStmt(const DropSubscriptionStmt *a, - const DropSubscriptionStmt *b) -{ - COMPARE_STRING_FIELD(subname); - COMPARE_SCALAR_FIELD(missing_ok); - COMPARE_SCALAR_FIELD(behavior); - - return true; -} - -static bool -_equalCreatePolicyStmt(const CreatePolicyStmt *a, const CreatePolicyStmt *b) -{ - COMPARE_STRING_FIELD(policy_name); - COMPARE_NODE_FIELD(table); - COMPARE_STRING_FIELD(cmd_name); - COMPARE_SCALAR_FIELD(permissive); - COMPARE_NODE_FIELD(roles); - COMPARE_NODE_FIELD(qual); - COMPARE_NODE_FIELD(with_check); - - return true; -} - -static bool -_equalAlterPolicyStmt(const AlterPolicyStmt *a, const AlterPolicyStmt *b) -{ - COMPARE_STRING_FIELD(policy_name); - COMPARE_NODE_FIELD(table); - COMPARE_NODE_FIELD(roles); - COMPARE_NODE_FIELD(qual); - COMPARE_NODE_FIELD(with_check); - - return true; -} - -static bool -_equalA_Expr(const A_Expr *a, const A_Expr *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(name); - COMPARE_NODE_FIELD(lexpr); - COMPARE_NODE_FIELD(rexpr); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalColumnRef(const ColumnRef *a, const ColumnRef *b) -{ - COMPARE_NODE_FIELD(fields); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalParamRef(const ParamRef *a, const ParamRef *b) -{ - COMPARE_SCALAR_FIELD(number); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalA_Const(const A_Const *a, const A_Const *b) -{ - /* - * Hack for in-line val field. Also val is not valid is isnull is true. - */ - if (!a->isnull && !b->isnull && - !equal(&a->val, &b->val)) - return false; - COMPARE_SCALAR_FIELD(isnull); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalFuncCall(const FuncCall *a, const FuncCall *b) -{ - COMPARE_NODE_FIELD(funcname); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(agg_order); - COMPARE_NODE_FIELD(agg_filter); - COMPARE_NODE_FIELD(over); - COMPARE_SCALAR_FIELD(agg_within_group); - COMPARE_SCALAR_FIELD(agg_star); - COMPARE_SCALAR_FIELD(agg_distinct); - COMPARE_SCALAR_FIELD(func_variadic); - COMPARE_COERCIONFORM_FIELD(funcformat); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalA_Star(const A_Star *a, const A_Star *b) -{ - return true; -} - -static bool -_equalA_Indices(const A_Indices *a, const A_Indices *b) -{ - COMPARE_SCALAR_FIELD(is_slice); - COMPARE_NODE_FIELD(lidx); - COMPARE_NODE_FIELD(uidx); - - return true; -} - -static bool -_equalA_Indirection(const A_Indirection *a, const A_Indirection *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(indirection); - - return true; -} - -static bool -_equalA_ArrayExpr(const A_ArrayExpr *a, const A_ArrayExpr *b) -{ - COMPARE_NODE_FIELD(elements); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalResTarget(const ResTarget *a, const ResTarget *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(indirection); - COMPARE_NODE_FIELD(val); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalMultiAssignRef(const MultiAssignRef *a, const MultiAssignRef *b) -{ - COMPARE_NODE_FIELD(source); - COMPARE_SCALAR_FIELD(colno); - COMPARE_SCALAR_FIELD(ncolumns); - - return true; -} - -static bool -_equalTypeName(const TypeName *a, const TypeName *b) -{ - COMPARE_NODE_FIELD(names); - COMPARE_SCALAR_FIELD(typeOid); - COMPARE_SCALAR_FIELD(setof); - COMPARE_SCALAR_FIELD(pct_type); - COMPARE_NODE_FIELD(typmods); - COMPARE_SCALAR_FIELD(typemod); - COMPARE_NODE_FIELD(arrayBounds); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalTypeCast(const TypeCast *a, const TypeCast *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(typeName); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCollateClause(const CollateClause *a, const CollateClause *b) -{ - COMPARE_NODE_FIELD(arg); - COMPARE_NODE_FIELD(collname); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalSortBy(const SortBy *a, const SortBy *b) -{ - COMPARE_NODE_FIELD(node); - COMPARE_SCALAR_FIELD(sortby_dir); - COMPARE_SCALAR_FIELD(sortby_nulls); - COMPARE_NODE_FIELD(useOp); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalWindowDef(const WindowDef *a, const WindowDef *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_STRING_FIELD(refname); - COMPARE_NODE_FIELD(partitionClause); - COMPARE_NODE_FIELD(orderClause); - COMPARE_SCALAR_FIELD(frameOptions); - COMPARE_NODE_FIELD(startOffset); - COMPARE_NODE_FIELD(endOffset); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRangeSubselect(const RangeSubselect *a, const RangeSubselect *b) -{ - COMPARE_SCALAR_FIELD(lateral); - COMPARE_NODE_FIELD(subquery); - COMPARE_NODE_FIELD(alias); - - return true; -} - -static bool -_equalRangeFunction(const RangeFunction *a, const RangeFunction *b) -{ - COMPARE_SCALAR_FIELD(lateral); - COMPARE_SCALAR_FIELD(ordinality); - COMPARE_SCALAR_FIELD(is_rowsfrom); - COMPARE_NODE_FIELD(functions); - COMPARE_NODE_FIELD(alias); - COMPARE_NODE_FIELD(coldeflist); - - return true; -} - -static bool -_equalRangeTableSample(const RangeTableSample *a, const RangeTableSample *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_NODE_FIELD(method); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(repeatable); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRangeTableFunc(const RangeTableFunc *a, const RangeTableFunc *b) -{ - COMPARE_SCALAR_FIELD(lateral); - COMPARE_NODE_FIELD(docexpr); - COMPARE_NODE_FIELD(rowexpr); - COMPARE_NODE_FIELD(namespaces); - COMPARE_NODE_FIELD(columns); - COMPARE_NODE_FIELD(alias); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRangeTableFuncCol(const RangeTableFuncCol *a, const RangeTableFuncCol *b) -{ - COMPARE_STRING_FIELD(colname); - COMPARE_NODE_FIELD(typeName); - COMPARE_SCALAR_FIELD(for_ordinality); - COMPARE_SCALAR_FIELD(is_not_null); - COMPARE_NODE_FIELD(colexpr); - COMPARE_NODE_FIELD(coldefexpr); - COMPARE_LOCATION_FIELD(location); - - return true; -} - - -static bool -_equalIndexElem(const IndexElem *a, const IndexElem *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(expr); - COMPARE_STRING_FIELD(indexcolname); - COMPARE_NODE_FIELD(collation); - COMPARE_NODE_FIELD(opclass); - COMPARE_NODE_FIELD(opclassopts); - COMPARE_SCALAR_FIELD(ordering); - COMPARE_SCALAR_FIELD(nulls_ordering); - - return true; -} - - -static bool -_equalStatsElem(const StatsElem *a, const StatsElem *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(expr); - - return true; -} - -static bool -_equalColumnDef(const ColumnDef *a, const ColumnDef *b) -{ - COMPARE_STRING_FIELD(colname); - COMPARE_NODE_FIELD(typeName); - COMPARE_STRING_FIELD(compression); - COMPARE_SCALAR_FIELD(inhcount); - COMPARE_SCALAR_FIELD(is_local); - COMPARE_SCALAR_FIELD(is_not_null); - COMPARE_SCALAR_FIELD(is_from_type); - COMPARE_SCALAR_FIELD(storage); - COMPARE_NODE_FIELD(raw_default); - COMPARE_NODE_FIELD(cooked_default); - COMPARE_SCALAR_FIELD(identity); - COMPARE_NODE_FIELD(identitySequence); - COMPARE_SCALAR_FIELD(generated); - COMPARE_NODE_FIELD(collClause); - COMPARE_SCALAR_FIELD(collOid); - COMPARE_NODE_FIELD(constraints); - COMPARE_NODE_FIELD(fdwoptions); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalConstraint(const Constraint *a, const Constraint *b) -{ - COMPARE_SCALAR_FIELD(contype); - COMPARE_STRING_FIELD(conname); - COMPARE_SCALAR_FIELD(deferrable); - COMPARE_SCALAR_FIELD(initdeferred); - COMPARE_LOCATION_FIELD(location); - COMPARE_SCALAR_FIELD(is_no_inherit); - COMPARE_NODE_FIELD(raw_expr); - COMPARE_STRING_FIELD(cooked_expr); - COMPARE_SCALAR_FIELD(generated_when); - COMPARE_SCALAR_FIELD(nulls_not_distinct); - COMPARE_NODE_FIELD(keys); - COMPARE_NODE_FIELD(including); - COMPARE_NODE_FIELD(exclusions); - COMPARE_NODE_FIELD(options); - COMPARE_STRING_FIELD(indexname); - COMPARE_STRING_FIELD(indexspace); - COMPARE_SCALAR_FIELD(reset_default_tblspc); - COMPARE_STRING_FIELD(access_method); - COMPARE_NODE_FIELD(where_clause); - COMPARE_NODE_FIELD(pktable); - COMPARE_NODE_FIELD(fk_attrs); - COMPARE_NODE_FIELD(pk_attrs); - COMPARE_SCALAR_FIELD(fk_matchtype); - COMPARE_SCALAR_FIELD(fk_upd_action); - COMPARE_SCALAR_FIELD(fk_del_action); - COMPARE_NODE_FIELD(fk_del_set_cols); - COMPARE_NODE_FIELD(old_conpfeqop); - COMPARE_SCALAR_FIELD(old_pktable_oid); - COMPARE_SCALAR_FIELD(skip_validation); - COMPARE_SCALAR_FIELD(initially_valid); - - return true; -} - -static bool -_equalDefElem(const DefElem *a, const DefElem *b) -{ - COMPARE_STRING_FIELD(defnamespace); - COMPARE_STRING_FIELD(defname); - COMPARE_NODE_FIELD(arg); - COMPARE_SCALAR_FIELD(defaction); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalLockingClause(const LockingClause *a, const LockingClause *b) -{ - COMPARE_NODE_FIELD(lockedRels); - COMPARE_SCALAR_FIELD(strength); - COMPARE_SCALAR_FIELD(waitPolicy); - - return true; -} - -static bool -_equalRangeTblEntry(const RangeTblEntry *a, const RangeTblEntry *b) -{ - COMPARE_SCALAR_FIELD(rtekind); - COMPARE_SCALAR_FIELD(relid); - COMPARE_SCALAR_FIELD(relkind); - COMPARE_SCALAR_FIELD(rellockmode); - COMPARE_NODE_FIELD(tablesample); - COMPARE_NODE_FIELD(subquery); - COMPARE_SCALAR_FIELD(security_barrier); - COMPARE_SCALAR_FIELD(jointype); - COMPARE_SCALAR_FIELD(joinmergedcols); - COMPARE_NODE_FIELD(joinaliasvars); - COMPARE_NODE_FIELD(joinleftcols); - COMPARE_NODE_FIELD(joinrightcols); - COMPARE_NODE_FIELD(join_using_alias); - COMPARE_NODE_FIELD(functions); - COMPARE_SCALAR_FIELD(funcordinality); - COMPARE_NODE_FIELD(tablefunc); - COMPARE_NODE_FIELD(values_lists); - COMPARE_STRING_FIELD(ctename); - COMPARE_SCALAR_FIELD(ctelevelsup); - COMPARE_SCALAR_FIELD(self_reference); - COMPARE_NODE_FIELD(coltypes); - COMPARE_NODE_FIELD(coltypmods); - COMPARE_NODE_FIELD(colcollations); - COMPARE_STRING_FIELD(enrname); - COMPARE_SCALAR_FIELD(enrtuples); - COMPARE_NODE_FIELD(alias); - COMPARE_NODE_FIELD(eref); - COMPARE_SCALAR_FIELD(lateral); - COMPARE_SCALAR_FIELD(inh); - COMPARE_SCALAR_FIELD(inFromCl); - COMPARE_SCALAR_FIELD(requiredPerms); - COMPARE_SCALAR_FIELD(checkAsUser); - COMPARE_BITMAPSET_FIELD(selectedCols); - COMPARE_BITMAPSET_FIELD(insertedCols); - COMPARE_BITMAPSET_FIELD(updatedCols); - COMPARE_BITMAPSET_FIELD(extraUpdatedCols); - COMPARE_NODE_FIELD(securityQuals); - - return true; -} - -static bool -_equalRangeTblFunction(const RangeTblFunction *a, const RangeTblFunction *b) -{ - COMPARE_NODE_FIELD(funcexpr); - COMPARE_SCALAR_FIELD(funccolcount); - COMPARE_NODE_FIELD(funccolnames); - COMPARE_NODE_FIELD(funccoltypes); - COMPARE_NODE_FIELD(funccoltypmods); - COMPARE_NODE_FIELD(funccolcollations); - COMPARE_BITMAPSET_FIELD(funcparams); - - return true; -} - -static bool -_equalTableSampleClause(const TableSampleClause *a, const TableSampleClause *b) -{ - COMPARE_SCALAR_FIELD(tsmhandler); - COMPARE_NODE_FIELD(args); - COMPARE_NODE_FIELD(repeatable); - - return true; -} - -static bool -_equalWithCheckOption(const WithCheckOption *a, const WithCheckOption *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_STRING_FIELD(relname); - COMPARE_STRING_FIELD(polname); - COMPARE_NODE_FIELD(qual); - COMPARE_SCALAR_FIELD(cascaded); - - return true; -} - -static bool -_equalSortGroupClause(const SortGroupClause *a, const SortGroupClause *b) -{ - COMPARE_SCALAR_FIELD(tleSortGroupRef); - COMPARE_SCALAR_FIELD(eqop); - COMPARE_SCALAR_FIELD(sortop); - COMPARE_SCALAR_FIELD(nulls_first); - COMPARE_SCALAR_FIELD(hashable); - - return true; -} - -static bool -_equalGroupingSet(const GroupingSet *a, const GroupingSet *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(content); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalWindowClause(const WindowClause *a, const WindowClause *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_STRING_FIELD(refname); - COMPARE_NODE_FIELD(partitionClause); - COMPARE_NODE_FIELD(orderClause); - COMPARE_SCALAR_FIELD(frameOptions); - COMPARE_NODE_FIELD(startOffset); - COMPARE_NODE_FIELD(endOffset); - COMPARE_NODE_FIELD(runCondition); - COMPARE_SCALAR_FIELD(startInRangeFunc); - COMPARE_SCALAR_FIELD(endInRangeFunc); - COMPARE_SCALAR_FIELD(inRangeColl); - COMPARE_SCALAR_FIELD(inRangeAsc); - COMPARE_SCALAR_FIELD(inRangeNullsFirst); - COMPARE_SCALAR_FIELD(winref); - COMPARE_SCALAR_FIELD(copiedOrder); - - return true; -} - -static bool -_equalRowMarkClause(const RowMarkClause *a, const RowMarkClause *b) -{ - COMPARE_SCALAR_FIELD(rti); - COMPARE_SCALAR_FIELD(strength); - COMPARE_SCALAR_FIELD(waitPolicy); - COMPARE_SCALAR_FIELD(pushedDown); - - return true; -} - -static bool -_equalWithClause(const WithClause *a, const WithClause *b) -{ - COMPARE_NODE_FIELD(ctes); - COMPARE_SCALAR_FIELD(recursive); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalInferClause(const InferClause *a, const InferClause *b) -{ - COMPARE_NODE_FIELD(indexElems); - COMPARE_NODE_FIELD(whereClause); - COMPARE_STRING_FIELD(conname); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalOnConflictClause(const OnConflictClause *a, const OnConflictClause *b) -{ - COMPARE_SCALAR_FIELD(action); - COMPARE_NODE_FIELD(infer); - COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(whereClause); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCTESearchClause(const CTESearchClause *a, const CTESearchClause *b) -{ - COMPARE_NODE_FIELD(search_col_list); - COMPARE_SCALAR_FIELD(search_breadth_first); - COMPARE_STRING_FIELD(search_seq_column); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalCTECycleClause(const CTECycleClause *a, const CTECycleClause *b) -{ - COMPARE_NODE_FIELD(cycle_col_list); - COMPARE_STRING_FIELD(cycle_mark_column); - COMPARE_NODE_FIELD(cycle_mark_value); - COMPARE_NODE_FIELD(cycle_mark_default); - COMPARE_STRING_FIELD(cycle_path_column); - COMPARE_LOCATION_FIELD(location); - COMPARE_SCALAR_FIELD(cycle_mark_type); - COMPARE_SCALAR_FIELD(cycle_mark_typmod); - COMPARE_SCALAR_FIELD(cycle_mark_collation); - COMPARE_SCALAR_FIELD(cycle_mark_neop); - - return true; -} - -static bool -_equalCommonTableExpr(const CommonTableExpr *a, const CommonTableExpr *b) -{ - COMPARE_STRING_FIELD(ctename); - COMPARE_NODE_FIELD(aliascolnames); - COMPARE_SCALAR_FIELD(ctematerialized); - COMPARE_NODE_FIELD(ctequery); - COMPARE_NODE_FIELD(search_clause); - COMPARE_NODE_FIELD(cycle_clause); - COMPARE_LOCATION_FIELD(location); - COMPARE_SCALAR_FIELD(cterecursive); - COMPARE_SCALAR_FIELD(cterefcount); - COMPARE_NODE_FIELD(ctecolnames); - COMPARE_NODE_FIELD(ctecoltypes); - COMPARE_NODE_FIELD(ctecoltypmods); - COMPARE_NODE_FIELD(ctecolcollations); - - return true; -} - -static bool -_equalMergeWhenClause(const MergeWhenClause *a, const MergeWhenClause *b) -{ - COMPARE_SCALAR_FIELD(matched); - COMPARE_SCALAR_FIELD(commandType); - COMPARE_SCALAR_FIELD(override); - COMPARE_NODE_FIELD(condition); - COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(values); - - return true; -} - -static bool -_equalMergeAction(const MergeAction *a, const MergeAction *b) -{ - COMPARE_SCALAR_FIELD(matched); - COMPARE_SCALAR_FIELD(commandType); - COMPARE_SCALAR_FIELD(override); - COMPARE_NODE_FIELD(qual); - COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(updateColnos); - - return true; -} - -static bool -_equalXmlSerialize(const XmlSerialize *a, const XmlSerialize *b) -{ - COMPARE_SCALAR_FIELD(xmloption); - COMPARE_NODE_FIELD(expr); - COMPARE_NODE_FIELD(typeName); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalRoleSpec(const RoleSpec *a, const RoleSpec *b) -{ - COMPARE_SCALAR_FIELD(roletype); - COMPARE_STRING_FIELD(rolename); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalTriggerTransition(const TriggerTransition *a, const TriggerTransition *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_SCALAR_FIELD(isNew); - COMPARE_SCALAR_FIELD(isTable); - - return true; -} - -static bool -_equalPartitionElem(const PartitionElem *a, const PartitionElem *b) -{ - COMPARE_STRING_FIELD(name); - COMPARE_NODE_FIELD(expr); - COMPARE_NODE_FIELD(collation); - COMPARE_NODE_FIELD(opclass); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalPartitionSpec(const PartitionSpec *a, const PartitionSpec *b) -{ - COMPARE_STRING_FIELD(strategy); - COMPARE_NODE_FIELD(partParams); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalPartitionBoundSpec(const PartitionBoundSpec *a, const PartitionBoundSpec *b) -{ - COMPARE_SCALAR_FIELD(strategy); - COMPARE_SCALAR_FIELD(is_default); - COMPARE_SCALAR_FIELD(modulus); - COMPARE_SCALAR_FIELD(remainder); - COMPARE_NODE_FIELD(listdatums); - COMPARE_NODE_FIELD(lowerdatums); - COMPARE_NODE_FIELD(upperdatums); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalPartitionRangeDatum(const PartitionRangeDatum *a, const PartitionRangeDatum *b) -{ - COMPARE_SCALAR_FIELD(kind); - COMPARE_NODE_FIELD(value); - COMPARE_LOCATION_FIELD(location); - - return true; -} - -static bool -_equalPartitionCmd(const PartitionCmd *a, const PartitionCmd *b) -{ - COMPARE_NODE_FIELD(name); - COMPARE_NODE_FIELD(bound); - COMPARE_SCALAR_FIELD(concurrent); - - return true; -} - -/* - * Stuff from pg_list.h - */ - -static bool -_equalList(const List *a, const List *b) -{ - const ListCell *item_a; - const ListCell *item_b; - - /* - * Try to reject by simple scalar checks before grovelling through all the - * list elements... - */ - COMPARE_SCALAR_FIELD(type); - COMPARE_SCALAR_FIELD(length); - - /* - * We place the switch outside the loop for the sake of efficiency; this - * may not be worth doing... - */ - switch (a->type) - { - case T_List: - forboth(item_a, a, item_b, b) - { - if (!equal(lfirst(item_a), lfirst(item_b))) - return false; - } - break; - case T_IntList: - forboth(item_a, a, item_b, b) - { - if (lfirst_int(item_a) != lfirst_int(item_b)) - return false; - } - break; - case T_OidList: - forboth(item_a, a, item_b, b) - { - if (lfirst_oid(item_a) != lfirst_oid(item_b)) - return false; - } - break; - default: - elog(ERROR, "unrecognized list node type: %d", - (int) a->type); - return false; /* keep compiler quiet */ - } - - /* - * If we got here, we should have run out of elements of both lists - */ - Assert(item_a == NULL); - Assert(item_b == NULL); - - return true; -} - -/* - * Stuff from value.h - */ - -static bool -_equalInteger(const Integer *a, const Integer *b) -{ - COMPARE_SCALAR_FIELD(ival); - - return true; -} - -static bool -_equalFloat(const Float *a, const Float *b) -{ - COMPARE_STRING_FIELD(fval); - - return true; -} - -static bool -_equalBoolean(const Boolean *a, const Boolean *b) -{ - COMPARE_SCALAR_FIELD(boolval); - - return true; -} - -static bool -_equalString(const String *a, const String *b) -{ - COMPARE_STRING_FIELD(sval); - - return true; -} - -static bool -_equalBitString(const BitString *a, const BitString *b) -{ - COMPARE_STRING_FIELD(bsval); - - return true; -} - -/* - * equal - * returns whether two nodes are equal - */ -bool -equal(const void *a, const void *b) -{ - bool retval; - - if (a == b) - return true; - - /* - * note that a!=b, so only one of them can be NULL - */ - if (a == NULL || b == NULL) - return false; - - /* - * are they the same type of nodes? - */ - if (nodeTag(a) != nodeTag(b)) - return false; - - /* Guard against stack overflow due to overly complex expressions */ - check_stack_depth(); - - switch (nodeTag(a)) - { - /* - * PRIMITIVE NODES - */ - case T_Alias: - retval = _equalAlias(a, b); - break; - case T_RangeVar: - retval = _equalRangeVar(a, b); - break; - case T_TableFunc: - retval = _equalTableFunc(a, b); - break; - case T_IntoClause: - retval = _equalIntoClause(a, b); - break; - case T_Var: - retval = _equalVar(a, b); - break; - case T_Const: - retval = _equalConst(a, b); - break; - case T_Param: - retval = _equalParam(a, b); - break; - case T_Aggref: - retval = _equalAggref(a, b); - break; - case T_GroupingFunc: - retval = _equalGroupingFunc(a, b); - break; - case T_WindowFunc: - retval = _equalWindowFunc(a, b); - break; - case T_SubscriptingRef: - retval = _equalSubscriptingRef(a, b); - break; - case T_FuncExpr: - retval = _equalFuncExpr(a, b); - break; - case T_NamedArgExpr: - retval = _equalNamedArgExpr(a, b); - break; - case T_OpExpr: - retval = _equalOpExpr(a, b); - break; - case T_DistinctExpr: - retval = _equalDistinctExpr(a, b); - break; - case T_NullIfExpr: - retval = _equalNullIfExpr(a, b); - break; - case T_ScalarArrayOpExpr: - retval = _equalScalarArrayOpExpr(a, b); - break; - case T_BoolExpr: - retval = _equalBoolExpr(a, b); - break; - case T_SubLink: - retval = _equalSubLink(a, b); - break; - case T_SubPlan: - retval = _equalSubPlan(a, b); - break; - case T_AlternativeSubPlan: - retval = _equalAlternativeSubPlan(a, b); - break; - case T_FieldSelect: - retval = _equalFieldSelect(a, b); - break; - case T_FieldStore: - retval = _equalFieldStore(a, b); - break; - case T_RelabelType: - retval = _equalRelabelType(a, b); - break; - case T_CoerceViaIO: - retval = _equalCoerceViaIO(a, b); - break; - case T_ArrayCoerceExpr: - retval = _equalArrayCoerceExpr(a, b); - break; - case T_ConvertRowtypeExpr: - retval = _equalConvertRowtypeExpr(a, b); - break; - case T_CollateExpr: - retval = _equalCollateExpr(a, b); - break; - case T_CaseExpr: - retval = _equalCaseExpr(a, b); - break; - case T_CaseWhen: - retval = _equalCaseWhen(a, b); - break; - case T_CaseTestExpr: - retval = _equalCaseTestExpr(a, b); - break; - case T_ArrayExpr: - retval = _equalArrayExpr(a, b); - break; - case T_RowExpr: - retval = _equalRowExpr(a, b); - break; - case T_RowCompareExpr: - retval = _equalRowCompareExpr(a, b); - break; - case T_CoalesceExpr: - retval = _equalCoalesceExpr(a, b); - break; - case T_MinMaxExpr: - retval = _equalMinMaxExpr(a, b); - break; - case T_SQLValueFunction: - retval = _equalSQLValueFunction(a, b); - break; - case T_XmlExpr: - retval = _equalXmlExpr(a, b); - break; - case T_NullTest: - retval = _equalNullTest(a, b); - break; - case T_BooleanTest: - retval = _equalBooleanTest(a, b); - break; - case T_CoerceToDomain: - retval = _equalCoerceToDomain(a, b); - break; - case T_CoerceToDomainValue: - retval = _equalCoerceToDomainValue(a, b); - break; - case T_SetToDefault: - retval = _equalSetToDefault(a, b); - break; - case T_CurrentOfExpr: - retval = _equalCurrentOfExpr(a, b); - break; - case T_NextValueExpr: - retval = _equalNextValueExpr(a, b); - break; - case T_InferenceElem: - retval = _equalInferenceElem(a, b); - break; - case T_TargetEntry: - retval = _equalTargetEntry(a, b); - break; - case T_RangeTblRef: - retval = _equalRangeTblRef(a, b); - break; - case T_FromExpr: - retval = _equalFromExpr(a, b); - break; - case T_OnConflictExpr: - retval = _equalOnConflictExpr(a, b); - break; - case T_JoinExpr: - retval = _equalJoinExpr(a, b); - break; - - /* - * RELATION NODES - */ - case T_PathKey: - retval = _equalPathKey(a, b); - break; - case T_RestrictInfo: - retval = _equalRestrictInfo(a, b); - break; - case T_PlaceHolderVar: - retval = _equalPlaceHolderVar(a, b); - break; - case T_SpecialJoinInfo: - retval = _equalSpecialJoinInfo(a, b); - break; - case T_AppendRelInfo: - retval = _equalAppendRelInfo(a, b); - break; - case T_PlaceHolderInfo: - retval = _equalPlaceHolderInfo(a, b); - break; + switch (nodeTag(a)) + { +#include "equalfuncs.switch.c" case T_List: case T_IntList: case T_OidList: + case T_XidList: retval = _equalList(a, b); break; - case T_Integer: - retval = _equalInteger(a, b); - break; - case T_Float: - retval = _equalFloat(a, b); - break; - case T_Boolean: - retval = _equalBoolean(a, b); - break; - case T_String: - retval = _equalString(a, b); - break; - case T_BitString: - retval = _equalBitString(a, b); - break; - - /* - * EXTENSIBLE NODES - */ - case T_ExtensibleNode: - retval = _equalExtensibleNode(a, b); - break; - - /* - * PARSE NODES - */ - case T_Query: - retval = _equalQuery(a, b); - break; - case T_RawStmt: - retval = _equalRawStmt(a, b); - break; - case T_InsertStmt: - retval = _equalInsertStmt(a, b); - break; - case T_DeleteStmt: - retval = _equalDeleteStmt(a, b); - break; - case T_UpdateStmt: - retval = _equalUpdateStmt(a, b); - break; - case T_MergeStmt: - retval = _equalMergeStmt(a, b); - break; - case T_SelectStmt: - retval = _equalSelectStmt(a, b); - break; - case T_SetOperationStmt: - retval = _equalSetOperationStmt(a, b); - break; - case T_ReturnStmt: - retval = _equalReturnStmt(a, b); - break; - case T_PLAssignStmt: - retval = _equalPLAssignStmt(a, b); - break; - case T_AlterTableStmt: - retval = _equalAlterTableStmt(a, b); - break; - case T_AlterTableCmd: - retval = _equalAlterTableCmd(a, b); - break; - case T_AlterCollationStmt: - retval = _equalAlterCollationStmt(a, b); - break; - case T_AlterDomainStmt: - retval = _equalAlterDomainStmt(a, b); - break; - case T_GrantStmt: - retval = _equalGrantStmt(a, b); - break; - case T_GrantRoleStmt: - retval = _equalGrantRoleStmt(a, b); - break; - case T_AlterDefaultPrivilegesStmt: - retval = _equalAlterDefaultPrivilegesStmt(a, b); - break; - case T_DeclareCursorStmt: - retval = _equalDeclareCursorStmt(a, b); - break; - case T_ClosePortalStmt: - retval = _equalClosePortalStmt(a, b); - break; - case T_CallStmt: - retval = _equalCallStmt(a, b); - break; - case T_ClusterStmt: - retval = _equalClusterStmt(a, b); - break; - case T_CopyStmt: - retval = _equalCopyStmt(a, b); - break; - case T_CreateStmt: - retval = _equalCreateStmt(a, b); - break; - case T_TableLikeClause: - retval = _equalTableLikeClause(a, b); - break; - case T_DefineStmt: - retval = _equalDefineStmt(a, b); - break; - case T_DropStmt: - retval = _equalDropStmt(a, b); - break; - case T_TruncateStmt: - retval = _equalTruncateStmt(a, b); - break; - case T_CommentStmt: - retval = _equalCommentStmt(a, b); - break; - case T_SecLabelStmt: - retval = _equalSecLabelStmt(a, b); - break; - case T_FetchStmt: - retval = _equalFetchStmt(a, b); - break; - case T_IndexStmt: - retval = _equalIndexStmt(a, b); - break; - case T_CreateStatsStmt: - retval = _equalCreateStatsStmt(a, b); - break; - case T_AlterStatsStmt: - retval = _equalAlterStatsStmt(a, b); - break; - case T_CreateFunctionStmt: - retval = _equalCreateFunctionStmt(a, b); - break; - case T_FunctionParameter: - retval = _equalFunctionParameter(a, b); - break; - case T_AlterFunctionStmt: - retval = _equalAlterFunctionStmt(a, b); - break; - case T_DoStmt: - retval = _equalDoStmt(a, b); - break; - case T_RenameStmt: - retval = _equalRenameStmt(a, b); - break; - case T_AlterObjectDependsStmt: - retval = _equalAlterObjectDependsStmt(a, b); - break; - case T_AlterObjectSchemaStmt: - retval = _equalAlterObjectSchemaStmt(a, b); - break; - case T_AlterOwnerStmt: - retval = _equalAlterOwnerStmt(a, b); - break; - case T_AlterOperatorStmt: - retval = _equalAlterOperatorStmt(a, b); - break; - case T_AlterTypeStmt: - retval = _equalAlterTypeStmt(a, b); - break; - case T_RuleStmt: - retval = _equalRuleStmt(a, b); - break; - case T_NotifyStmt: - retval = _equalNotifyStmt(a, b); - break; - case T_ListenStmt: - retval = _equalListenStmt(a, b); - break; - case T_UnlistenStmt: - retval = _equalUnlistenStmt(a, b); - break; - case T_TransactionStmt: - retval = _equalTransactionStmt(a, b); - break; - case T_CompositeTypeStmt: - retval = _equalCompositeTypeStmt(a, b); - break; - case T_CreateEnumStmt: - retval = _equalCreateEnumStmt(a, b); - break; - case T_CreateRangeStmt: - retval = _equalCreateRangeStmt(a, b); - break; - case T_AlterEnumStmt: - retval = _equalAlterEnumStmt(a, b); - break; - case T_ViewStmt: - retval = _equalViewStmt(a, b); - break; - case T_LoadStmt: - retval = _equalLoadStmt(a, b); - break; - case T_CreateDomainStmt: - retval = _equalCreateDomainStmt(a, b); - break; - case T_CreateOpClassStmt: - retval = _equalCreateOpClassStmt(a, b); - break; - case T_CreateOpClassItem: - retval = _equalCreateOpClassItem(a, b); - break; - case T_CreateOpFamilyStmt: - retval = _equalCreateOpFamilyStmt(a, b); - break; - case T_AlterOpFamilyStmt: - retval = _equalAlterOpFamilyStmt(a, b); - break; - case T_CreatedbStmt: - retval = _equalCreatedbStmt(a, b); - break; - case T_AlterDatabaseStmt: - retval = _equalAlterDatabaseStmt(a, b); - break; - case T_AlterDatabaseRefreshCollStmt: - retval = _equalAlterDatabaseRefreshCollStmt(a, b); - break; - case T_AlterDatabaseSetStmt: - retval = _equalAlterDatabaseSetStmt(a, b); - break; - case T_DropdbStmt: - retval = _equalDropdbStmt(a, b); - break; - case T_VacuumStmt: - retval = _equalVacuumStmt(a, b); - break; - case T_VacuumRelation: - retval = _equalVacuumRelation(a, b); - break; - case T_ExplainStmt: - retval = _equalExplainStmt(a, b); - break; - case T_CreateTableAsStmt: - retval = _equalCreateTableAsStmt(a, b); - break; - case T_RefreshMatViewStmt: - retval = _equalRefreshMatViewStmt(a, b); - break; - case T_ReplicaIdentityStmt: - retval = _equalReplicaIdentityStmt(a, b); - break; - case T_AlterSystemStmt: - retval = _equalAlterSystemStmt(a, b); - break; - case T_CreateSeqStmt: - retval = _equalCreateSeqStmt(a, b); - break; - case T_AlterSeqStmt: - retval = _equalAlterSeqStmt(a, b); - break; - case T_VariableSetStmt: - retval = _equalVariableSetStmt(a, b); - break; - case T_VariableShowStmt: - retval = _equalVariableShowStmt(a, b); - break; - case T_DiscardStmt: - retval = _equalDiscardStmt(a, b); - break; - case T_CreateTableSpaceStmt: - retval = _equalCreateTableSpaceStmt(a, b); - break; - case T_DropTableSpaceStmt: - retval = _equalDropTableSpaceStmt(a, b); - break; - case T_AlterTableSpaceOptionsStmt: - retval = _equalAlterTableSpaceOptionsStmt(a, b); - break; - case T_AlterTableMoveAllStmt: - retval = _equalAlterTableMoveAllStmt(a, b); - break; - case T_CreateExtensionStmt: - retval = _equalCreateExtensionStmt(a, b); - break; - case T_AlterExtensionStmt: - retval = _equalAlterExtensionStmt(a, b); - break; - case T_AlterExtensionContentsStmt: - retval = _equalAlterExtensionContentsStmt(a, b); - break; - case T_CreateFdwStmt: - retval = _equalCreateFdwStmt(a, b); - break; - case T_AlterFdwStmt: - retval = _equalAlterFdwStmt(a, b); - break; - case T_CreateForeignServerStmt: - retval = _equalCreateForeignServerStmt(a, b); - break; - case T_AlterForeignServerStmt: - retval = _equalAlterForeignServerStmt(a, b); - break; - case T_CreateUserMappingStmt: - retval = _equalCreateUserMappingStmt(a, b); - break; - case T_AlterUserMappingStmt: - retval = _equalAlterUserMappingStmt(a, b); - break; - case T_DropUserMappingStmt: - retval = _equalDropUserMappingStmt(a, b); - break; - case T_CreateForeignTableStmt: - retval = _equalCreateForeignTableStmt(a, b); - break; - case T_ImportForeignSchemaStmt: - retval = _equalImportForeignSchemaStmt(a, b); - break; - case T_CreateTransformStmt: - retval = _equalCreateTransformStmt(a, b); - break; - case T_CreateAmStmt: - retval = _equalCreateAmStmt(a, b); - break; - case T_CreateTrigStmt: - retval = _equalCreateTrigStmt(a, b); - break; - case T_CreateEventTrigStmt: - retval = _equalCreateEventTrigStmt(a, b); - break; - case T_AlterEventTrigStmt: - retval = _equalAlterEventTrigStmt(a, b); - break; - case T_CreatePLangStmt: - retval = _equalCreatePLangStmt(a, b); - break; - case T_CreateRoleStmt: - retval = _equalCreateRoleStmt(a, b); - break; - case T_AlterRoleStmt: - retval = _equalAlterRoleStmt(a, b); - break; - case T_AlterRoleSetStmt: - retval = _equalAlterRoleSetStmt(a, b); - break; - case T_DropRoleStmt: - retval = _equalDropRoleStmt(a, b); - break; - case T_LockStmt: - retval = _equalLockStmt(a, b); - break; - case T_ConstraintsSetStmt: - retval = _equalConstraintsSetStmt(a, b); - break; - case T_ReindexStmt: - retval = _equalReindexStmt(a, b); - break; - case T_CheckPointStmt: - retval = true; - break; - case T_CreateSchemaStmt: - retval = _equalCreateSchemaStmt(a, b); - break; - case T_CreateConversionStmt: - retval = _equalCreateConversionStmt(a, b); - break; - case T_CreateCastStmt: - retval = _equalCreateCastStmt(a, b); - break; - case T_PrepareStmt: - retval = _equalPrepareStmt(a, b); - break; - case T_ExecuteStmt: - retval = _equalExecuteStmt(a, b); - break; - case T_DeallocateStmt: - retval = _equalDeallocateStmt(a, b); - break; - case T_DropOwnedStmt: - retval = _equalDropOwnedStmt(a, b); - break; - case T_ReassignOwnedStmt: - retval = _equalReassignOwnedStmt(a, b); - break; - case T_AlterTSDictionaryStmt: - retval = _equalAlterTSDictionaryStmt(a, b); - break; - case T_AlterTSConfigurationStmt: - retval = _equalAlterTSConfigurationStmt(a, b); - break; - case T_CreatePolicyStmt: - retval = _equalCreatePolicyStmt(a, b); - break; - case T_AlterPolicyStmt: - retval = _equalAlterPolicyStmt(a, b); - break; - case T_CreatePublicationStmt: - retval = _equalCreatePublicationStmt(a, b); - break; - case T_AlterPublicationStmt: - retval = _equalAlterPublicationStmt(a, b); - break; - case T_CreateSubscriptionStmt: - retval = _equalCreateSubscriptionStmt(a, b); - break; - case T_AlterSubscriptionStmt: - retval = _equalAlterSubscriptionStmt(a, b); - break; - case T_DropSubscriptionStmt: - retval = _equalDropSubscriptionStmt(a, b); - break; - case T_A_Expr: - retval = _equalA_Expr(a, b); - break; - case T_ColumnRef: - retval = _equalColumnRef(a, b); - break; - case T_ParamRef: - retval = _equalParamRef(a, b); - break; - case T_A_Const: - retval = _equalA_Const(a, b); - break; - case T_FuncCall: - retval = _equalFuncCall(a, b); - break; - case T_A_Star: - retval = _equalA_Star(a, b); - break; - case T_A_Indices: - retval = _equalA_Indices(a, b); - break; - case T_A_Indirection: - retval = _equalA_Indirection(a, b); - break; - case T_A_ArrayExpr: - retval = _equalA_ArrayExpr(a, b); - break; - case T_ResTarget: - retval = _equalResTarget(a, b); - break; - case T_MultiAssignRef: - retval = _equalMultiAssignRef(a, b); - break; - case T_TypeCast: - retval = _equalTypeCast(a, b); - break; - case T_CollateClause: - retval = _equalCollateClause(a, b); - break; - case T_SortBy: - retval = _equalSortBy(a, b); - break; - case T_WindowDef: - retval = _equalWindowDef(a, b); - break; - case T_RangeSubselect: - retval = _equalRangeSubselect(a, b); - break; - case T_RangeFunction: - retval = _equalRangeFunction(a, b); - break; - case T_RangeTableSample: - retval = _equalRangeTableSample(a, b); - break; - case T_RangeTableFunc: - retval = _equalRangeTableFunc(a, b); - break; - case T_RangeTableFuncCol: - retval = _equalRangeTableFuncCol(a, b); - break; - case T_TypeName: - retval = _equalTypeName(a, b); - break; - case T_IndexElem: - retval = _equalIndexElem(a, b); - break; - case T_StatsElem: - retval = _equalStatsElem(a, b); - break; - case T_ColumnDef: - retval = _equalColumnDef(a, b); - break; - case T_Constraint: - retval = _equalConstraint(a, b); - break; - case T_DefElem: - retval = _equalDefElem(a, b); - break; - case T_LockingClause: - retval = _equalLockingClause(a, b); - break; - case T_RangeTblEntry: - retval = _equalRangeTblEntry(a, b); - break; - case T_RangeTblFunction: - retval = _equalRangeTblFunction(a, b); - break; - case T_TableSampleClause: - retval = _equalTableSampleClause(a, b); - break; - case T_WithCheckOption: - retval = _equalWithCheckOption(a, b); - break; - case T_SortGroupClause: - retval = _equalSortGroupClause(a, b); - break; - case T_GroupingSet: - retval = _equalGroupingSet(a, b); - break; - case T_WindowClause: - retval = _equalWindowClause(a, b); - break; - case T_RowMarkClause: - retval = _equalRowMarkClause(a, b); - break; - case T_WithClause: - retval = _equalWithClause(a, b); - break; - case T_InferClause: - retval = _equalInferClause(a, b); - break; - case T_OnConflictClause: - retval = _equalOnConflictClause(a, b); - break; - case T_CTESearchClause: - retval = _equalCTESearchClause(a, b); - break; - case T_CTECycleClause: - retval = _equalCTECycleClause(a, b); - break; - case T_CommonTableExpr: - retval = _equalCommonTableExpr(a, b); - break; - case T_MergeWhenClause: - retval = _equalMergeWhenClause(a, b); - break; - case T_MergeAction: - retval = _equalMergeAction(a, b); - break; - case T_ObjectWithArgs: - retval = _equalObjectWithArgs(a, b); - break; - case T_AccessPriv: - retval = _equalAccessPriv(a, b); - break; - case T_XmlSerialize: - retval = _equalXmlSerialize(a, b); - break; - case T_RoleSpec: - retval = _equalRoleSpec(a, b); - break; - case T_TriggerTransition: - retval = _equalTriggerTransition(a, b); - break; - case T_PartitionElem: - retval = _equalPartitionElem(a, b); - break; - case T_PartitionSpec: - retval = _equalPartitionSpec(a, b); - break; - case T_PartitionBoundSpec: - retval = _equalPartitionBoundSpec(a, b); - break; - case T_PartitionRangeDatum: - retval = _equalPartitionRangeDatum(a, b); - break; - case T_PartitionCmd: - retval = _equalPartitionCmd(a, b); - break; - case T_PublicationObjSpec: - retval = _equalPublicationObject(a, b); - break; - case T_PublicationTable: - retval = _equalPublicationTable(a, b); - break; - default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(a)); diff --git a/src/postgres/src_backend_nodes_equalfuncs.funcs.c b/src/postgres/src_backend_nodes_equalfuncs.funcs.c new file mode 100644 index 00000000..f0fdb85f --- /dev/null +++ b/src/postgres/src_backend_nodes_equalfuncs.funcs.c @@ -0,0 +1,3354 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - _equalAlias + * - _equalRangeVar + * - _equalTableFunc + * - _equalIntoClause + * - _equalVar + * - _equalParam + * - _equalAggref + * - _equalGroupingFunc + * - _equalWindowFunc + * - _equalSubscriptingRef + * - _equalFuncExpr + * - _equalNamedArgExpr + * - _equalOpExpr + * - _equalDistinctExpr + * - _equalNullIfExpr + * - _equalScalarArrayOpExpr + * - _equalBoolExpr + * - _equalSubLink + * - _equalSubPlan + * - _equalAlternativeSubPlan + * - _equalFieldSelect + * - _equalFieldStore + * - _equalRelabelType + * - _equalCoerceViaIO + * - _equalArrayCoerceExpr + * - _equalConvertRowtypeExpr + * - _equalCollateExpr + * - _equalCaseExpr + * - _equalCaseWhen + * - _equalCaseTestExpr + * - _equalArrayExpr + * - _equalRowExpr + * - _equalRowCompareExpr + * - _equalCoalesceExpr + * - _equalMinMaxExpr + * - _equalSQLValueFunction + * - _equalXmlExpr + * - _equalJsonFormat + * - _equalJsonReturning + * - _equalJsonValueExpr + * - _equalJsonConstructorExpr + * - _equalJsonIsPredicate + * - _equalNullTest + * - _equalBooleanTest + * - _equalCoerceToDomain + * - _equalCoerceToDomainValue + * - _equalSetToDefault + * - _equalCurrentOfExpr + * - _equalNextValueExpr + * - _equalInferenceElem + * - _equalTargetEntry + * - _equalRangeTblRef + * - _equalJoinExpr + * - _equalFromExpr + * - _equalOnConflictExpr + * - _equalQuery + * - _equalTypeName + * - _equalColumnRef + * - _equalParamRef + * - _equalA_Expr + * - _equalTypeCast + * - _equalCollateClause + * - _equalRoleSpec + * - _equalFuncCall + * - _equalA_Star + * - _equalA_Indices + * - _equalA_Indirection + * - _equalA_ArrayExpr + * - _equalResTarget + * - _equalMultiAssignRef + * - _equalSortBy + * - _equalWindowDef + * - _equalRangeSubselect + * - _equalRangeFunction + * - _equalRangeTableFunc + * - _equalRangeTableFuncCol + * - _equalRangeTableSample + * - _equalColumnDef + * - _equalTableLikeClause + * - _equalIndexElem + * - _equalDefElem + * - _equalLockingClause + * - _equalXmlSerialize + * - _equalPartitionElem + * - _equalPartitionSpec + * - _equalPartitionBoundSpec + * - _equalPartitionRangeDatum + * - _equalPartitionCmd + * - _equalRangeTblEntry + * - _equalRTEPermissionInfo + * - _equalRangeTblFunction + * - _equalTableSampleClause + * - _equalWithCheckOption + * - _equalSortGroupClause + * - _equalGroupingSet + * - _equalWindowClause + * - _equalRowMarkClause + * - _equalWithClause + * - _equalInferClause + * - _equalOnConflictClause + * - _equalCTESearchClause + * - _equalCTECycleClause + * - _equalCommonTableExpr + * - _equalMergeWhenClause + * - _equalMergeAction + * - _equalTriggerTransition + * - _equalJsonOutput + * - _equalJsonKeyValue + * - _equalJsonObjectConstructor + * - _equalJsonArrayConstructor + * - _equalJsonArrayQueryConstructor + * - _equalJsonAggConstructor + * - _equalJsonObjectAgg + * - _equalJsonArrayAgg + * - _equalRawStmt + * - _equalInsertStmt + * - _equalDeleteStmt + * - _equalUpdateStmt + * - _equalMergeStmt + * - _equalSelectStmt + * - _equalSetOperationStmt + * - _equalReturnStmt + * - _equalPLAssignStmt + * - _equalCreateSchemaStmt + * - _equalAlterTableStmt + * - _equalReplicaIdentityStmt + * - _equalAlterTableCmd + * - _equalAlterCollationStmt + * - _equalAlterDomainStmt + * - _equalGrantStmt + * - _equalObjectWithArgs + * - _equalAccessPriv + * - _equalGrantRoleStmt + * - _equalAlterDefaultPrivilegesStmt + * - _equalCopyStmt + * - _equalVariableSetStmt + * - _equalVariableShowStmt + * - _equalCreateStmt + * - _equalConstraint + * - _equalCreateTableSpaceStmt + * - _equalDropTableSpaceStmt + * - _equalAlterTableSpaceOptionsStmt + * - _equalAlterTableMoveAllStmt + * - _equalCreateExtensionStmt + * - _equalAlterExtensionStmt + * - _equalAlterExtensionContentsStmt + * - _equalCreateFdwStmt + * - _equalAlterFdwStmt + * - _equalCreateForeignServerStmt + * - _equalAlterForeignServerStmt + * - _equalCreateForeignTableStmt + * - _equalCreateUserMappingStmt + * - _equalAlterUserMappingStmt + * - _equalDropUserMappingStmt + * - _equalImportForeignSchemaStmt + * - _equalCreatePolicyStmt + * - _equalAlterPolicyStmt + * - _equalCreateAmStmt + * - _equalCreateTrigStmt + * - _equalCreateEventTrigStmt + * - _equalAlterEventTrigStmt + * - _equalCreatePLangStmt + * - _equalCreateRoleStmt + * - _equalAlterRoleStmt + * - _equalAlterRoleSetStmt + * - _equalDropRoleStmt + * - _equalCreateSeqStmt + * - _equalAlterSeqStmt + * - _equalDefineStmt + * - _equalCreateDomainStmt + * - _equalCreateOpClassStmt + * - _equalCreateOpClassItem + * - _equalCreateOpFamilyStmt + * - _equalAlterOpFamilyStmt + * - _equalDropStmt + * - _equalTruncateStmt + * - _equalCommentStmt + * - _equalSecLabelStmt + * - _equalDeclareCursorStmt + * - _equalClosePortalStmt + * - _equalFetchStmt + * - _equalIndexStmt + * - _equalCreateStatsStmt + * - _equalStatsElem + * - _equalAlterStatsStmt + * - _equalCreateFunctionStmt + * - _equalFunctionParameter + * - _equalAlterFunctionStmt + * - _equalDoStmt + * - _equalCallStmt + * - _equalRenameStmt + * - _equalAlterObjectDependsStmt + * - _equalAlterObjectSchemaStmt + * - _equalAlterOwnerStmt + * - _equalAlterOperatorStmt + * - _equalAlterTypeStmt + * - _equalRuleStmt + * - _equalNotifyStmt + * - _equalListenStmt + * - _equalUnlistenStmt + * - _equalTransactionStmt + * - _equalCompositeTypeStmt + * - _equalCreateEnumStmt + * - _equalCreateRangeStmt + * - _equalAlterEnumStmt + * - _equalViewStmt + * - _equalLoadStmt + * - _equalCreatedbStmt + * - _equalAlterDatabaseStmt + * - _equalAlterDatabaseRefreshCollStmt + * - _equalAlterDatabaseSetStmt + * - _equalDropdbStmt + * - _equalAlterSystemStmt + * - _equalClusterStmt + * - _equalVacuumStmt + * - _equalVacuumRelation + * - _equalExplainStmt + * - _equalCreateTableAsStmt + * - _equalRefreshMatViewStmt + * - _equalCheckPointStmt + * - _equalDiscardStmt + * - _equalLockStmt + * - _equalConstraintsSetStmt + * - _equalReindexStmt + * - _equalCreateConversionStmt + * - _equalCreateCastStmt + * - _equalCreateTransformStmt + * - _equalPrepareStmt + * - _equalExecuteStmt + * - _equalDeallocateStmt + * - _equalDropOwnedStmt + * - _equalReassignOwnedStmt + * - _equalAlterTSDictionaryStmt + * - _equalAlterTSConfigurationStmt + * - _equalPublicationTable + * - _equalPublicationObjSpec + * - _equalCreatePublicationStmt + * - _equalAlterPublicationStmt + * - _equalCreateSubscriptionStmt + * - _equalAlterSubscriptionStmt + * - _equalDropSubscriptionStmt + * - _equalPathKey + * - _equalRestrictInfo + * - _equalPlaceHolderVar + * - _equalSpecialJoinInfo + * - _equalAppendRelInfo + * - _equalPlaceHolderInfo + * - _equalInteger + * - _equalFloat + * - _equalBoolean + * - _equalString + * - _equalBitString + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * equalfuncs.funcs.c + * Generated node infrastructure code + * + * Portions Copyright (c) 1996-2023, 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/backend/nodes/gen_node_support.pl + * + *------------------------------------------------------------------------- + */ +#include "access/amapi.h" +#include "access/sdir.h" +#include "access/tableam.h" +#include "access/tsmapi.h" +#include "commands/event_trigger.h" +#include "commands/trigger.h" +#include "executor/tuptable.h" +#include "foreign/fdwapi.h" +#include "nodes/bitmapset.h" +#include "nodes/execnodes.h" +#include "nodes/extensible.h" +#include "nodes/lockoptions.h" +#include "nodes/miscnodes.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pathnodes.h" +#include "nodes/plannodes.h" +#include "nodes/primnodes.h" +#include "nodes/replnodes.h" +#include "nodes/supportnodes.h" +#include "nodes/value.h" +#include "utils/rel.h" + +static bool +_equalAlias(const Alias *a, const Alias *b) +{ + COMPARE_STRING_FIELD(aliasname); + COMPARE_NODE_FIELD(colnames); + + return true; +} + +static bool +_equalRangeVar(const RangeVar *a, const RangeVar *b) +{ + COMPARE_STRING_FIELD(catalogname); + COMPARE_STRING_FIELD(schemaname); + COMPARE_STRING_FIELD(relname); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(relpersistence); + COMPARE_NODE_FIELD(alias); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTableFunc(const TableFunc *a, const TableFunc *b) +{ + COMPARE_NODE_FIELD(ns_uris); + COMPARE_NODE_FIELD(ns_names); + COMPARE_NODE_FIELD(docexpr); + COMPARE_NODE_FIELD(rowexpr); + COMPARE_NODE_FIELD(colnames); + COMPARE_NODE_FIELD(coltypes); + COMPARE_NODE_FIELD(coltypmods); + COMPARE_NODE_FIELD(colcollations); + COMPARE_NODE_FIELD(colexprs); + COMPARE_NODE_FIELD(coldefexprs); + COMPARE_BITMAPSET_FIELD(notnulls); + COMPARE_SCALAR_FIELD(ordinalitycol); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalIntoClause(const IntoClause *a, const IntoClause *b) +{ + COMPARE_NODE_FIELD(rel); + COMPARE_NODE_FIELD(colNames); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(onCommit); + COMPARE_STRING_FIELD(tableSpaceName); + COMPARE_NODE_FIELD(viewQuery); + COMPARE_SCALAR_FIELD(skipData); + + return true; +} + +static bool +_equalVar(const Var *a, const Var *b) +{ + COMPARE_SCALAR_FIELD(varno); + COMPARE_SCALAR_FIELD(varattno); + COMPARE_SCALAR_FIELD(vartype); + COMPARE_SCALAR_FIELD(vartypmod); + COMPARE_SCALAR_FIELD(varcollid); + COMPARE_BITMAPSET_FIELD(varnullingrels); + COMPARE_SCALAR_FIELD(varlevelsup); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalParam(const Param *a, const Param *b) +{ + COMPARE_SCALAR_FIELD(paramkind); + COMPARE_SCALAR_FIELD(paramid); + COMPARE_SCALAR_FIELD(paramtype); + COMPARE_SCALAR_FIELD(paramtypmod); + COMPARE_SCALAR_FIELD(paramcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalAggref(const Aggref *a, const Aggref *b) +{ + COMPARE_SCALAR_FIELD(aggfnoid); + COMPARE_SCALAR_FIELD(aggtype); + COMPARE_SCALAR_FIELD(aggcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(aggargtypes); + COMPARE_NODE_FIELD(aggdirectargs); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(aggorder); + COMPARE_NODE_FIELD(aggdistinct); + COMPARE_NODE_FIELD(aggfilter); + COMPARE_SCALAR_FIELD(aggstar); + COMPARE_SCALAR_FIELD(aggvariadic); + COMPARE_SCALAR_FIELD(aggkind); + COMPARE_SCALAR_FIELD(agglevelsup); + COMPARE_SCALAR_FIELD(aggsplit); + COMPARE_SCALAR_FIELD(aggno); + COMPARE_SCALAR_FIELD(aggtransno); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalGroupingFunc(const GroupingFunc *a, const GroupingFunc *b) +{ + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(agglevelsup); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowFunc(const WindowFunc *a, const WindowFunc *b) +{ + COMPARE_SCALAR_FIELD(winfnoid); + COMPARE_SCALAR_FIELD(wintype); + COMPARE_SCALAR_FIELD(wincollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(aggfilter); + COMPARE_SCALAR_FIELD(winref); + COMPARE_SCALAR_FIELD(winstar); + COMPARE_SCALAR_FIELD(winagg); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubscriptingRef(const SubscriptingRef *a, const SubscriptingRef *b) +{ + COMPARE_SCALAR_FIELD(refcontainertype); + COMPARE_SCALAR_FIELD(refelemtype); + COMPARE_SCALAR_FIELD(refrestype); + COMPARE_SCALAR_FIELD(reftypmod); + COMPARE_SCALAR_FIELD(refcollid); + COMPARE_NODE_FIELD(refupperindexpr); + COMPARE_NODE_FIELD(reflowerindexpr); + COMPARE_NODE_FIELD(refexpr); + COMPARE_NODE_FIELD(refassgnexpr); + + return true; +} + +static bool +_equalFuncExpr(const FuncExpr *a, const FuncExpr *b) +{ + COMPARE_SCALAR_FIELD(funcid); + COMPARE_SCALAR_FIELD(funcresulttype); + COMPARE_SCALAR_FIELD(funcretset); + COMPARE_SCALAR_FIELD(funcvariadic); + COMPARE_SCALAR_FIELD(funccollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNamedArgExpr(const NamedArgExpr *a, const NamedArgExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(argnumber); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalOpExpr(const OpExpr *a, const OpExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalDistinctExpr(const DistinctExpr *a, const DistinctExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNullIfExpr(const NullIfExpr *a, const NullIfExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(opresulttype); + COMPARE_SCALAR_FIELD(opretset); + COMPARE_SCALAR_FIELD(opcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalScalarArrayOpExpr(const ScalarArrayOpExpr *a, const ScalarArrayOpExpr *b) +{ + COMPARE_SCALAR_FIELD(opno); + if (a->opfuncid != b->opfuncid && a->opfuncid != 0 && b->opfuncid != 0) + return false; + if (a->hashfuncid != b->hashfuncid && a->hashfuncid != 0 && b->hashfuncid != 0) + return false; + if (a->negfuncid != b->negfuncid && a->negfuncid != 0 && b->negfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(useOr); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalBoolExpr(const BoolExpr *a, const BoolExpr *b) +{ + COMPARE_SCALAR_FIELD(boolop); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubLink(const SubLink *a, const SubLink *b) +{ + COMPARE_SCALAR_FIELD(subLinkType); + COMPARE_SCALAR_FIELD(subLinkId); + COMPARE_NODE_FIELD(testexpr); + COMPARE_NODE_FIELD(operName); + COMPARE_NODE_FIELD(subselect); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSubPlan(const SubPlan *a, const SubPlan *b) +{ + COMPARE_SCALAR_FIELD(subLinkType); + COMPARE_NODE_FIELD(testexpr); + COMPARE_NODE_FIELD(paramIds); + COMPARE_SCALAR_FIELD(plan_id); + COMPARE_STRING_FIELD(plan_name); + COMPARE_SCALAR_FIELD(firstColType); + COMPARE_SCALAR_FIELD(firstColTypmod); + COMPARE_SCALAR_FIELD(firstColCollation); + COMPARE_SCALAR_FIELD(useHashTable); + COMPARE_SCALAR_FIELD(unknownEqFalse); + COMPARE_SCALAR_FIELD(parallel_safe); + COMPARE_NODE_FIELD(setParam); + COMPARE_NODE_FIELD(parParam); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(startup_cost); + COMPARE_SCALAR_FIELD(per_call_cost); + + return true; +} + +static bool +_equalAlternativeSubPlan(const AlternativeSubPlan *a, const AlternativeSubPlan *b) +{ + COMPARE_NODE_FIELD(subplans); + + return true; +} + +static bool +_equalFieldSelect(const FieldSelect *a, const FieldSelect *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(fieldnum); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + + return true; +} + +static bool +_equalFieldStore(const FieldStore *a, const FieldStore *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(newvals); + COMPARE_NODE_FIELD(fieldnums); + COMPARE_SCALAR_FIELD(resulttype); + + return true; +} + +static bool +_equalRelabelType(const RelabelType *a, const RelabelType *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceViaIO(const CoerceViaIO *a, const CoerceViaIO *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalArrayCoerceExpr(const ArrayCoerceExpr *a, const ArrayCoerceExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(elemexpr); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalConvertRowtypeExpr(const ConvertRowtypeExpr *a, const ConvertRowtypeExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCollateExpr(const CollateExpr *a, const CollateExpr *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(collOid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseExpr(const CaseExpr *a, const CaseExpr *b) +{ + COMPARE_SCALAR_FIELD(casetype); + COMPARE_SCALAR_FIELD(casecollid); + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(defresult); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseWhen(const CaseWhen *a, const CaseWhen *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(result); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCaseTestExpr(const CaseTestExpr *a, const CaseTestExpr *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + + return true; +} + +static bool +_equalArrayExpr(const ArrayExpr *a, const ArrayExpr *b) +{ + COMPARE_SCALAR_FIELD(array_typeid); + COMPARE_SCALAR_FIELD(array_collid); + COMPARE_SCALAR_FIELD(element_typeid); + COMPARE_NODE_FIELD(elements); + COMPARE_SCALAR_FIELD(multidims); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRowExpr(const RowExpr *a, const RowExpr *b) +{ + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(row_typeid); + COMPARE_NODE_FIELD(colnames); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRowCompareExpr(const RowCompareExpr *a, const RowCompareExpr *b) +{ + COMPARE_SCALAR_FIELD(rctype); + COMPARE_NODE_FIELD(opnos); + COMPARE_NODE_FIELD(opfamilies); + COMPARE_NODE_FIELD(inputcollids); + COMPARE_NODE_FIELD(largs); + COMPARE_NODE_FIELD(rargs); + + return true; +} + +static bool +_equalCoalesceExpr(const CoalesceExpr *a, const CoalesceExpr *b) +{ + COMPARE_SCALAR_FIELD(coalescetype); + COMPARE_SCALAR_FIELD(coalescecollid); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalMinMaxExpr(const MinMaxExpr *a, const MinMaxExpr *b) +{ + COMPARE_SCALAR_FIELD(minmaxtype); + COMPARE_SCALAR_FIELD(minmaxcollid); + COMPARE_SCALAR_FIELD(inputcollid); + COMPARE_SCALAR_FIELD(op); + COMPARE_NODE_FIELD(args); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSQLValueFunction(const SQLValueFunction *a, const SQLValueFunction *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(type); + COMPARE_SCALAR_FIELD(typmod); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalXmlExpr(const XmlExpr *a, const XmlExpr *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(named_args); + COMPARE_NODE_FIELD(arg_names); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(xmloption); + COMPARE_SCALAR_FIELD(indent); + COMPARE_SCALAR_FIELD(type); + COMPARE_SCALAR_FIELD(typmod); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonFormat(const JsonFormat *a, const JsonFormat *b) +{ + COMPARE_SCALAR_FIELD(format_type); + COMPARE_SCALAR_FIELD(encoding); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonReturning(const JsonReturning *a, const JsonReturning *b) +{ + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(typid); + COMPARE_SCALAR_FIELD(typmod); + + return true; +} + +static bool +_equalJsonValueExpr(const JsonValueExpr *a, const JsonValueExpr *b) +{ + COMPARE_NODE_FIELD(raw_expr); + COMPARE_NODE_FIELD(formatted_expr); + COMPARE_NODE_FIELD(format); + + return true; +} + +static bool +_equalJsonConstructorExpr(const JsonConstructorExpr *a, const JsonConstructorExpr *b) +{ + COMPARE_SCALAR_FIELD(type); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(func); + COMPARE_NODE_FIELD(coercion); + COMPARE_NODE_FIELD(returning); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonIsPredicate(const JsonIsPredicate *a, const JsonIsPredicate *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(item_type); + COMPARE_SCALAR_FIELD(unique_keys); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalNullTest(const NullTest *a, const NullTest *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(nulltesttype); + COMPARE_SCALAR_FIELD(argisrow); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalBooleanTest(const BooleanTest *a, const BooleanTest *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(booltesttype); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceToDomain(const CoerceToDomain *a, const CoerceToDomain *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(resulttype); + COMPARE_SCALAR_FIELD(resulttypmod); + COMPARE_SCALAR_FIELD(resultcollid); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCoerceToDomainValue(const CoerceToDomainValue *a, const CoerceToDomainValue *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalSetToDefault(const SetToDefault *a, const SetToDefault *b) +{ + COMPARE_SCALAR_FIELD(typeId); + COMPARE_SCALAR_FIELD(typeMod); + COMPARE_SCALAR_FIELD(collation); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCurrentOfExpr(const CurrentOfExpr *a, const CurrentOfExpr *b) +{ + COMPARE_SCALAR_FIELD(cvarno); + COMPARE_STRING_FIELD(cursor_name); + COMPARE_SCALAR_FIELD(cursor_param); + + return true; +} + +static bool +_equalNextValueExpr(const NextValueExpr *a, const NextValueExpr *b) +{ + COMPARE_SCALAR_FIELD(seqid); + COMPARE_SCALAR_FIELD(typeId); + + return true; +} + +static bool +_equalInferenceElem(const InferenceElem *a, const InferenceElem *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_SCALAR_FIELD(infercollid); + COMPARE_SCALAR_FIELD(inferopclass); + + return true; +} + +static bool +_equalTargetEntry(const TargetEntry *a, const TargetEntry *b) +{ + COMPARE_NODE_FIELD(expr); + COMPARE_SCALAR_FIELD(resno); + COMPARE_STRING_FIELD(resname); + COMPARE_SCALAR_FIELD(ressortgroupref); + COMPARE_SCALAR_FIELD(resorigtbl); + COMPARE_SCALAR_FIELD(resorigcol); + COMPARE_SCALAR_FIELD(resjunk); + + return true; +} + +static bool +_equalRangeTblRef(const RangeTblRef *a, const RangeTblRef *b) +{ + COMPARE_SCALAR_FIELD(rtindex); + + return true; +} + +static bool +_equalJoinExpr(const JoinExpr *a, const JoinExpr *b) +{ + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(isNatural); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + COMPARE_NODE_FIELD(usingClause); + COMPARE_NODE_FIELD(join_using_alias); + COMPARE_NODE_FIELD(quals); + COMPARE_NODE_FIELD(alias); + COMPARE_SCALAR_FIELD(rtindex); + + return true; +} + +static bool +_equalFromExpr(const FromExpr *a, const FromExpr *b) +{ + COMPARE_NODE_FIELD(fromlist); + COMPARE_NODE_FIELD(quals); + + return true; +} + +static bool +_equalOnConflictExpr(const OnConflictExpr *a, const OnConflictExpr *b) +{ + COMPARE_SCALAR_FIELD(action); + COMPARE_NODE_FIELD(arbiterElems); + COMPARE_NODE_FIELD(arbiterWhere); + COMPARE_SCALAR_FIELD(constraint); + COMPARE_NODE_FIELD(onConflictSet); + COMPARE_NODE_FIELD(onConflictWhere); + COMPARE_SCALAR_FIELD(exclRelIndex); + COMPARE_NODE_FIELD(exclRelTlist); + + return true; +} + +static bool +_equalQuery(const Query *a, const Query *b) +{ + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(querySource); + COMPARE_SCALAR_FIELD(canSetTag); + COMPARE_NODE_FIELD(utilityStmt); + COMPARE_SCALAR_FIELD(resultRelation); + COMPARE_SCALAR_FIELD(hasAggs); + COMPARE_SCALAR_FIELD(hasWindowFuncs); + COMPARE_SCALAR_FIELD(hasTargetSRFs); + COMPARE_SCALAR_FIELD(hasSubLinks); + COMPARE_SCALAR_FIELD(hasDistinctOn); + COMPARE_SCALAR_FIELD(hasRecursive); + COMPARE_SCALAR_FIELD(hasModifyingCTE); + COMPARE_SCALAR_FIELD(hasForUpdate); + COMPARE_SCALAR_FIELD(hasRowSecurity); + COMPARE_SCALAR_FIELD(isReturn); + COMPARE_NODE_FIELD(cteList); + COMPARE_NODE_FIELD(rtable); + COMPARE_NODE_FIELD(rteperminfos); + COMPARE_NODE_FIELD(jointree); + COMPARE_NODE_FIELD(mergeActionList); + COMPARE_SCALAR_FIELD(mergeUseOuterJoin); + COMPARE_NODE_FIELD(targetList); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(onConflict); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(groupClause); + COMPARE_SCALAR_FIELD(groupDistinct); + COMPARE_NODE_FIELD(groupingSets); + COMPARE_NODE_FIELD(havingQual); + COMPARE_NODE_FIELD(windowClause); + COMPARE_NODE_FIELD(distinctClause); + COMPARE_NODE_FIELD(sortClause); + COMPARE_NODE_FIELD(limitOffset); + COMPARE_NODE_FIELD(limitCount); + COMPARE_SCALAR_FIELD(limitOption); + COMPARE_NODE_FIELD(rowMarks); + COMPARE_NODE_FIELD(setOperations); + COMPARE_NODE_FIELD(constraintDeps); + COMPARE_NODE_FIELD(withCheckOptions); + COMPARE_LOCATION_FIELD(stmt_location); + COMPARE_SCALAR_FIELD(stmt_len); + + return true; +} + +static bool +_equalTypeName(const TypeName *a, const TypeName *b) +{ + COMPARE_NODE_FIELD(names); + COMPARE_SCALAR_FIELD(typeOid); + COMPARE_SCALAR_FIELD(setof); + COMPARE_SCALAR_FIELD(pct_type); + COMPARE_NODE_FIELD(typmods); + COMPARE_SCALAR_FIELD(typemod); + COMPARE_NODE_FIELD(arrayBounds); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalColumnRef(const ColumnRef *a, const ColumnRef *b) +{ + COMPARE_NODE_FIELD(fields); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalParamRef(const ParamRef *a, const ParamRef *b) +{ + COMPARE_SCALAR_FIELD(number); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalA_Expr(const A_Expr *a, const A_Expr *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(name); + COMPARE_NODE_FIELD(lexpr); + COMPARE_NODE_FIELD(rexpr); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTypeCast(const TypeCast *a, const TypeCast *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(typeName); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCollateClause(const CollateClause *a, const CollateClause *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(collname); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRoleSpec(const RoleSpec *a, const RoleSpec *b) +{ + COMPARE_SCALAR_FIELD(roletype); + COMPARE_STRING_FIELD(rolename); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalFuncCall(const FuncCall *a, const FuncCall *b) +{ + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(agg_order); + COMPARE_NODE_FIELD(agg_filter); + COMPARE_NODE_FIELD(over); + COMPARE_SCALAR_FIELD(agg_within_group); + COMPARE_SCALAR_FIELD(agg_star); + COMPARE_SCALAR_FIELD(agg_distinct); + COMPARE_SCALAR_FIELD(func_variadic); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalA_Star(const A_Star *a, const A_Star *b) +{ + + return true; +} + +static bool +_equalA_Indices(const A_Indices *a, const A_Indices *b) +{ + COMPARE_SCALAR_FIELD(is_slice); + COMPARE_NODE_FIELD(lidx); + COMPARE_NODE_FIELD(uidx); + + return true; +} + +static bool +_equalA_Indirection(const A_Indirection *a, const A_Indirection *b) +{ + COMPARE_NODE_FIELD(arg); + COMPARE_NODE_FIELD(indirection); + + return true; +} + +static bool +_equalA_ArrayExpr(const A_ArrayExpr *a, const A_ArrayExpr *b) +{ + COMPARE_NODE_FIELD(elements); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalResTarget(const ResTarget *a, const ResTarget *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(indirection); + COMPARE_NODE_FIELD(val); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalMultiAssignRef(const MultiAssignRef *a, const MultiAssignRef *b) +{ + COMPARE_NODE_FIELD(source); + COMPARE_SCALAR_FIELD(colno); + COMPARE_SCALAR_FIELD(ncolumns); + + return true; +} + +static bool +_equalSortBy(const SortBy *a, const SortBy *b) +{ + COMPARE_NODE_FIELD(node); + COMPARE_SCALAR_FIELD(sortby_dir); + COMPARE_SCALAR_FIELD(sortby_nulls); + COMPARE_NODE_FIELD(useOp); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowDef(const WindowDef *a, const WindowDef *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_STRING_FIELD(refname); + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_SCALAR_FIELD(frameOptions); + COMPARE_NODE_FIELD(startOffset); + COMPARE_NODE_FIELD(endOffset); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeSubselect(const RangeSubselect *a, const RangeSubselect *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_NODE_FIELD(subquery); + COMPARE_NODE_FIELD(alias); + + return true; +} + +static bool +_equalRangeFunction(const RangeFunction *a, const RangeFunction *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_SCALAR_FIELD(ordinality); + COMPARE_SCALAR_FIELD(is_rowsfrom); + COMPARE_NODE_FIELD(functions); + COMPARE_NODE_FIELD(alias); + COMPARE_NODE_FIELD(coldeflist); + + return true; +} + +static bool +_equalRangeTableFunc(const RangeTableFunc *a, const RangeTableFunc *b) +{ + COMPARE_SCALAR_FIELD(lateral); + COMPARE_NODE_FIELD(docexpr); + COMPARE_NODE_FIELD(rowexpr); + COMPARE_NODE_FIELD(namespaces); + COMPARE_NODE_FIELD(columns); + COMPARE_NODE_FIELD(alias); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeTableFuncCol(const RangeTableFuncCol *a, const RangeTableFuncCol *b) +{ + COMPARE_STRING_FIELD(colname); + COMPARE_NODE_FIELD(typeName); + COMPARE_SCALAR_FIELD(for_ordinality); + COMPARE_SCALAR_FIELD(is_not_null); + COMPARE_NODE_FIELD(colexpr); + COMPARE_NODE_FIELD(coldefexpr); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalRangeTableSample(const RangeTableSample *a, const RangeTableSample *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(method); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalColumnDef(const ColumnDef *a, const ColumnDef *b) +{ + COMPARE_STRING_FIELD(colname); + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(compression); + COMPARE_SCALAR_FIELD(inhcount); + COMPARE_SCALAR_FIELD(is_local); + COMPARE_SCALAR_FIELD(is_not_null); + COMPARE_SCALAR_FIELD(is_from_type); + COMPARE_SCALAR_FIELD(storage); + COMPARE_STRING_FIELD(storage_name); + COMPARE_NODE_FIELD(raw_default); + COMPARE_NODE_FIELD(cooked_default); + COMPARE_SCALAR_FIELD(identity); + COMPARE_NODE_FIELD(identitySequence); + COMPARE_SCALAR_FIELD(generated); + COMPARE_NODE_FIELD(collClause); + COMPARE_SCALAR_FIELD(collOid); + COMPARE_NODE_FIELD(constraints); + COMPARE_NODE_FIELD(fdwoptions); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalTableLikeClause(const TableLikeClause *a, const TableLikeClause *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_SCALAR_FIELD(options); + COMPARE_SCALAR_FIELD(relationOid); + + return true; +} + +static bool +_equalIndexElem(const IndexElem *a, const IndexElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + COMPARE_STRING_FIELD(indexcolname); + COMPARE_NODE_FIELD(collation); + COMPARE_NODE_FIELD(opclass); + COMPARE_NODE_FIELD(opclassopts); + COMPARE_SCALAR_FIELD(ordering); + COMPARE_SCALAR_FIELD(nulls_ordering); + + return true; +} + +static bool +_equalDefElem(const DefElem *a, const DefElem *b) +{ + COMPARE_STRING_FIELD(defnamespace); + COMPARE_STRING_FIELD(defname); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(defaction); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalLockingClause(const LockingClause *a, const LockingClause *b) +{ + COMPARE_NODE_FIELD(lockedRels); + COMPARE_SCALAR_FIELD(strength); + COMPARE_SCALAR_FIELD(waitPolicy); + + return true; +} + +static bool +_equalXmlSerialize(const XmlSerialize *a, const XmlSerialize *b) +{ + COMPARE_SCALAR_FIELD(xmloption); + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(typeName); + COMPARE_SCALAR_FIELD(indent); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionElem(const PartitionElem *a, const PartitionElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + COMPARE_NODE_FIELD(collation); + COMPARE_NODE_FIELD(opclass); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionSpec(const PartitionSpec *a, const PartitionSpec *b) +{ + COMPARE_SCALAR_FIELD(strategy); + COMPARE_NODE_FIELD(partParams); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionBoundSpec(const PartitionBoundSpec *a, const PartitionBoundSpec *b) +{ + COMPARE_SCALAR_FIELD(strategy); + COMPARE_SCALAR_FIELD(is_default); + COMPARE_SCALAR_FIELD(modulus); + COMPARE_SCALAR_FIELD(remainder); + COMPARE_NODE_FIELD(listdatums); + COMPARE_NODE_FIELD(lowerdatums); + COMPARE_NODE_FIELD(upperdatums); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionRangeDatum(const PartitionRangeDatum *a, const PartitionRangeDatum *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(value); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalPartitionCmd(const PartitionCmd *a, const PartitionCmd *b) +{ + COMPARE_NODE_FIELD(name); + COMPARE_NODE_FIELD(bound); + COMPARE_SCALAR_FIELD(concurrent); + + return true; +} + +static bool +_equalRangeTblEntry(const RangeTblEntry *a, const RangeTblEntry *b) +{ + COMPARE_SCALAR_FIELD(rtekind); + COMPARE_SCALAR_FIELD(relid); + COMPARE_SCALAR_FIELD(relkind); + COMPARE_SCALAR_FIELD(rellockmode); + COMPARE_NODE_FIELD(tablesample); + COMPARE_SCALAR_FIELD(perminfoindex); + COMPARE_NODE_FIELD(subquery); + COMPARE_SCALAR_FIELD(security_barrier); + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(joinmergedcols); + COMPARE_NODE_FIELD(joinaliasvars); + COMPARE_NODE_FIELD(joinleftcols); + COMPARE_NODE_FIELD(joinrightcols); + COMPARE_NODE_FIELD(join_using_alias); + COMPARE_NODE_FIELD(functions); + COMPARE_SCALAR_FIELD(funcordinality); + COMPARE_NODE_FIELD(tablefunc); + COMPARE_NODE_FIELD(values_lists); + COMPARE_STRING_FIELD(ctename); + COMPARE_SCALAR_FIELD(ctelevelsup); + COMPARE_SCALAR_FIELD(self_reference); + COMPARE_NODE_FIELD(coltypes); + COMPARE_NODE_FIELD(coltypmods); + COMPARE_NODE_FIELD(colcollations); + COMPARE_STRING_FIELD(enrname); + COMPARE_SCALAR_FIELD(enrtuples); + COMPARE_NODE_FIELD(alias); + COMPARE_NODE_FIELD(eref); + COMPARE_SCALAR_FIELD(lateral); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(inFromCl); + COMPARE_NODE_FIELD(securityQuals); + + return true; +} + +static bool +_equalRTEPermissionInfo(const RTEPermissionInfo *a, const RTEPermissionInfo *b) +{ + COMPARE_SCALAR_FIELD(relid); + COMPARE_SCALAR_FIELD(inh); + COMPARE_SCALAR_FIELD(requiredPerms); + COMPARE_SCALAR_FIELD(checkAsUser); + COMPARE_BITMAPSET_FIELD(selectedCols); + COMPARE_BITMAPSET_FIELD(insertedCols); + COMPARE_BITMAPSET_FIELD(updatedCols); + + return true; +} + +static bool +_equalRangeTblFunction(const RangeTblFunction *a, const RangeTblFunction *b) +{ + COMPARE_NODE_FIELD(funcexpr); + COMPARE_SCALAR_FIELD(funccolcount); + COMPARE_NODE_FIELD(funccolnames); + COMPARE_NODE_FIELD(funccoltypes); + COMPARE_NODE_FIELD(funccoltypmods); + COMPARE_NODE_FIELD(funccolcollations); + COMPARE_BITMAPSET_FIELD(funcparams); + + return true; +} + +static bool +_equalTableSampleClause(const TableSampleClause *a, const TableSampleClause *b) +{ + COMPARE_SCALAR_FIELD(tsmhandler); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + + return true; +} + +static bool +_equalWithCheckOption(const WithCheckOption *a, const WithCheckOption *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(relname); + COMPARE_STRING_FIELD(polname); + COMPARE_NODE_FIELD(qual); + COMPARE_SCALAR_FIELD(cascaded); + + return true; +} + +static bool +_equalSortGroupClause(const SortGroupClause *a, const SortGroupClause *b) +{ + COMPARE_SCALAR_FIELD(tleSortGroupRef); + COMPARE_SCALAR_FIELD(eqop); + COMPARE_SCALAR_FIELD(sortop); + COMPARE_SCALAR_FIELD(nulls_first); + COMPARE_SCALAR_FIELD(hashable); + + return true; +} + +static bool +_equalGroupingSet(const GroupingSet *a, const GroupingSet *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(content); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalWindowClause(const WindowClause *a, const WindowClause *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_STRING_FIELD(refname); + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_SCALAR_FIELD(frameOptions); + COMPARE_NODE_FIELD(startOffset); + COMPARE_NODE_FIELD(endOffset); + COMPARE_NODE_FIELD(runCondition); + COMPARE_SCALAR_FIELD(startInRangeFunc); + COMPARE_SCALAR_FIELD(endInRangeFunc); + COMPARE_SCALAR_FIELD(inRangeColl); + COMPARE_SCALAR_FIELD(inRangeAsc); + COMPARE_SCALAR_FIELD(inRangeNullsFirst); + COMPARE_SCALAR_FIELD(winref); + COMPARE_SCALAR_FIELD(copiedOrder); + + return true; +} + +static bool +_equalRowMarkClause(const RowMarkClause *a, const RowMarkClause *b) +{ + COMPARE_SCALAR_FIELD(rti); + COMPARE_SCALAR_FIELD(strength); + COMPARE_SCALAR_FIELD(waitPolicy); + COMPARE_SCALAR_FIELD(pushedDown); + + return true; +} + +static bool +_equalWithClause(const WithClause *a, const WithClause *b) +{ + COMPARE_NODE_FIELD(ctes); + COMPARE_SCALAR_FIELD(recursive); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalInferClause(const InferClause *a, const InferClause *b) +{ + COMPARE_NODE_FIELD(indexElems); + COMPARE_NODE_FIELD(whereClause); + COMPARE_STRING_FIELD(conname); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalOnConflictClause(const OnConflictClause *a, const OnConflictClause *b) +{ + COMPARE_SCALAR_FIELD(action); + COMPARE_NODE_FIELD(infer); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(whereClause); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCTESearchClause(const CTESearchClause *a, const CTESearchClause *b) +{ + COMPARE_NODE_FIELD(search_col_list); + COMPARE_SCALAR_FIELD(search_breadth_first); + COMPARE_STRING_FIELD(search_seq_column); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCTECycleClause(const CTECycleClause *a, const CTECycleClause *b) +{ + COMPARE_NODE_FIELD(cycle_col_list); + COMPARE_STRING_FIELD(cycle_mark_column); + COMPARE_NODE_FIELD(cycle_mark_value); + COMPARE_NODE_FIELD(cycle_mark_default); + COMPARE_STRING_FIELD(cycle_path_column); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(cycle_mark_type); + COMPARE_SCALAR_FIELD(cycle_mark_typmod); + COMPARE_SCALAR_FIELD(cycle_mark_collation); + COMPARE_SCALAR_FIELD(cycle_mark_neop); + + return true; +} + +static bool +_equalCommonTableExpr(const CommonTableExpr *a, const CommonTableExpr *b) +{ + COMPARE_STRING_FIELD(ctename); + COMPARE_NODE_FIELD(aliascolnames); + COMPARE_SCALAR_FIELD(ctematerialized); + COMPARE_NODE_FIELD(ctequery); + COMPARE_NODE_FIELD(search_clause); + COMPARE_NODE_FIELD(cycle_clause); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(cterecursive); + COMPARE_SCALAR_FIELD(cterefcount); + COMPARE_NODE_FIELD(ctecolnames); + COMPARE_NODE_FIELD(ctecoltypes); + COMPARE_NODE_FIELD(ctecoltypmods); + COMPARE_NODE_FIELD(ctecolcollations); + + return true; +} + +static bool +_equalMergeWhenClause(const MergeWhenClause *a, const MergeWhenClause *b) +{ + COMPARE_SCALAR_FIELD(matched); + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(condition); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(values); + + return true; +} + +static bool +_equalMergeAction(const MergeAction *a, const MergeAction *b) +{ + COMPARE_SCALAR_FIELD(matched); + COMPARE_SCALAR_FIELD(commandType); + COMPARE_SCALAR_FIELD(override); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(updateColnos); + + return true; +} + +static bool +_equalTriggerTransition(const TriggerTransition *a, const TriggerTransition *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(isNew); + COMPARE_SCALAR_FIELD(isTable); + + return true; +} + +static bool +_equalJsonOutput(const JsonOutput *a, const JsonOutput *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(returning); + + return true; +} + +static bool +_equalJsonKeyValue(const JsonKeyValue *a, const JsonKeyValue *b) +{ + COMPARE_NODE_FIELD(key); + COMPARE_NODE_FIELD(value); + + return true; +} + +static bool +_equalJsonObjectConstructor(const JsonObjectConstructor *a, const JsonObjectConstructor *b) +{ + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(output); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonArrayConstructor(const JsonArrayConstructor *a, const JsonArrayConstructor *b) +{ + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(output); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonArrayQueryConstructor(const JsonArrayQueryConstructor *a, const JsonArrayQueryConstructor *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(output); + COMPARE_NODE_FIELD(format); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonAggConstructor(const JsonAggConstructor *a, const JsonAggConstructor *b) +{ + COMPARE_NODE_FIELD(output); + COMPARE_NODE_FIELD(agg_filter); + COMPARE_NODE_FIELD(agg_order); + COMPARE_NODE_FIELD(over); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalJsonObjectAgg(const JsonObjectAgg *a, const JsonObjectAgg *b) +{ + COMPARE_NODE_FIELD(constructor); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(absent_on_null); + COMPARE_SCALAR_FIELD(unique); + + return true; +} + +static bool +_equalJsonArrayAgg(const JsonArrayAgg *a, const JsonArrayAgg *b) +{ + COMPARE_NODE_FIELD(constructor); + COMPARE_NODE_FIELD(arg); + COMPARE_SCALAR_FIELD(absent_on_null); + + return true; +} + +static bool +_equalRawStmt(const RawStmt *a, const RawStmt *b) +{ + COMPARE_NODE_FIELD(stmt); + COMPARE_LOCATION_FIELD(stmt_location); + COMPARE_SCALAR_FIELD(stmt_len); + + return true; +} + +static bool +_equalInsertStmt(const InsertStmt *a, const InsertStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(cols); + COMPARE_NODE_FIELD(selectStmt); + COMPARE_NODE_FIELD(onConflictClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + COMPARE_SCALAR_FIELD(override); + + return true; +} + +static bool +_equalDeleteStmt(const DeleteStmt *a, const DeleteStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(usingClause); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalUpdateStmt(const UpdateStmt *a, const UpdateStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(fromClause); + COMPARE_NODE_FIELD(returningList); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalMergeStmt(const MergeStmt *a, const MergeStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(sourceRelation); + COMPARE_NODE_FIELD(joinCondition); + COMPARE_NODE_FIELD(mergeWhenClauses); + COMPARE_NODE_FIELD(withClause); + + return true; +} + +static bool +_equalSelectStmt(const SelectStmt *a, const SelectStmt *b) +{ + COMPARE_NODE_FIELD(distinctClause); + COMPARE_NODE_FIELD(intoClause); + COMPARE_NODE_FIELD(targetList); + COMPARE_NODE_FIELD(fromClause); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(groupClause); + COMPARE_SCALAR_FIELD(groupDistinct); + COMPARE_NODE_FIELD(havingClause); + COMPARE_NODE_FIELD(windowClause); + COMPARE_NODE_FIELD(valuesLists); + COMPARE_NODE_FIELD(sortClause); + COMPARE_NODE_FIELD(limitOffset); + COMPARE_NODE_FIELD(limitCount); + COMPARE_SCALAR_FIELD(limitOption); + COMPARE_NODE_FIELD(lockingClause); + COMPARE_NODE_FIELD(withClause); + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(all); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + + return true; +} + +static bool +_equalSetOperationStmt(const SetOperationStmt *a, const SetOperationStmt *b) +{ + COMPARE_SCALAR_FIELD(op); + COMPARE_SCALAR_FIELD(all); + COMPARE_NODE_FIELD(larg); + COMPARE_NODE_FIELD(rarg); + COMPARE_NODE_FIELD(colTypes); + COMPARE_NODE_FIELD(colTypmods); + COMPARE_NODE_FIELD(colCollations); + COMPARE_NODE_FIELD(groupClauses); + + return true; +} + +static bool +_equalReturnStmt(const ReturnStmt *a, const ReturnStmt *b) +{ + COMPARE_NODE_FIELD(returnval); + + return true; +} + +static bool +_equalPLAssignStmt(const PLAssignStmt *a, const PLAssignStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(indirection); + COMPARE_SCALAR_FIELD(nnames); + COMPARE_NODE_FIELD(val); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCreateSchemaStmt(const CreateSchemaStmt *a, const CreateSchemaStmt *b) +{ + COMPARE_STRING_FIELD(schemaname); + COMPARE_NODE_FIELD(authrole); + COMPARE_NODE_FIELD(schemaElts); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalAlterTableStmt(const AlterTableStmt *a, const AlterTableStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(cmds); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalReplicaIdentityStmt(const ReplicaIdentityStmt *a, const ReplicaIdentityStmt *b) +{ + COMPARE_SCALAR_FIELD(identity_type); + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalAlterTableCmd(const AlterTableCmd *a, const AlterTableCmd *b) +{ + COMPARE_SCALAR_FIELD(subtype); + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(num); + COMPARE_NODE_FIELD(newowner); + COMPARE_NODE_FIELD(def); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(recurse); + + return true; +} + +static bool +_equalAlterCollationStmt(const AlterCollationStmt *a, const AlterCollationStmt *b) +{ + COMPARE_NODE_FIELD(collname); + + return true; +} + +static bool +_equalAlterDomainStmt(const AlterDomainStmt *a, const AlterDomainStmt *b) +{ + COMPARE_SCALAR_FIELD(subtype); + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(def); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalGrantStmt(const GrantStmt *a, const GrantStmt *b) +{ + COMPARE_SCALAR_FIELD(is_grant); + COMPARE_SCALAR_FIELD(targtype); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(objects); + COMPARE_NODE_FIELD(privileges); + COMPARE_NODE_FIELD(grantees); + COMPARE_SCALAR_FIELD(grant_option); + COMPARE_NODE_FIELD(grantor); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalObjectWithArgs(const ObjectWithArgs *a, const ObjectWithArgs *b) +{ + COMPARE_NODE_FIELD(objname); + COMPARE_NODE_FIELD(objargs); + COMPARE_NODE_FIELD(objfuncargs); + COMPARE_SCALAR_FIELD(args_unspecified); + + return true; +} + +static bool +_equalAccessPriv(const AccessPriv *a, const AccessPriv *b) +{ + COMPARE_STRING_FIELD(priv_name); + COMPARE_NODE_FIELD(cols); + + return true; +} + +static bool +_equalGrantRoleStmt(const GrantRoleStmt *a, const GrantRoleStmt *b) +{ + COMPARE_NODE_FIELD(granted_roles); + COMPARE_NODE_FIELD(grantee_roles); + COMPARE_SCALAR_FIELD(is_grant); + COMPARE_NODE_FIELD(opt); + COMPARE_NODE_FIELD(grantor); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *a, const AlterDefaultPrivilegesStmt *b) +{ + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(action); + + return true; +} + +static bool +_equalCopyStmt(const CopyStmt *a, const CopyStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(attlist); + COMPARE_SCALAR_FIELD(is_from); + COMPARE_SCALAR_FIELD(is_program); + COMPARE_STRING_FIELD(filename); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(whereClause); + + return true; +} + +static bool +_equalVariableSetStmt(const VariableSetStmt *a, const VariableSetStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(is_local); + + return true; +} + +static bool +_equalVariableShowStmt(const VariableShowStmt *a, const VariableShowStmt *b) +{ + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalCreateStmt(const CreateStmt *a, const CreateStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(tableElts); + COMPARE_NODE_FIELD(inhRelations); + COMPARE_NODE_FIELD(partbound); + COMPARE_NODE_FIELD(partspec); + COMPARE_NODE_FIELD(ofTypename); + COMPARE_NODE_FIELD(constraints); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(oncommit); + COMPARE_STRING_FIELD(tablespacename); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalConstraint(const Constraint *a, const Constraint *b) +{ + COMPARE_SCALAR_FIELD(contype); + COMPARE_STRING_FIELD(conname); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_LOCATION_FIELD(location); + COMPARE_SCALAR_FIELD(is_no_inherit); + COMPARE_NODE_FIELD(raw_expr); + COMPARE_STRING_FIELD(cooked_expr); + COMPARE_SCALAR_FIELD(generated_when); + COMPARE_SCALAR_FIELD(nulls_not_distinct); + COMPARE_NODE_FIELD(keys); + COMPARE_NODE_FIELD(including); + COMPARE_NODE_FIELD(exclusions); + COMPARE_NODE_FIELD(options); + COMPARE_STRING_FIELD(indexname); + COMPARE_STRING_FIELD(indexspace); + COMPARE_SCALAR_FIELD(reset_default_tblspc); + COMPARE_STRING_FIELD(access_method); + COMPARE_NODE_FIELD(where_clause); + COMPARE_NODE_FIELD(pktable); + COMPARE_NODE_FIELD(fk_attrs); + COMPARE_NODE_FIELD(pk_attrs); + COMPARE_SCALAR_FIELD(fk_matchtype); + COMPARE_SCALAR_FIELD(fk_upd_action); + COMPARE_SCALAR_FIELD(fk_del_action); + COMPARE_NODE_FIELD(fk_del_set_cols); + COMPARE_NODE_FIELD(old_conpfeqop); + COMPARE_SCALAR_FIELD(old_pktable_oid); + COMPARE_SCALAR_FIELD(skip_validation); + COMPARE_SCALAR_FIELD(initially_valid); + + return true; +} + +static bool +_equalCreateTableSpaceStmt(const CreateTableSpaceStmt *a, const CreateTableSpaceStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_NODE_FIELD(owner); + COMPARE_STRING_FIELD(location); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropTableSpaceStmt(const DropTableSpaceStmt *a, const DropTableSpaceStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *a, const AlterTableSpaceOptionsStmt *b) +{ + COMPARE_STRING_FIELD(tablespacename); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(isReset); + + return true; +} + +static bool +_equalAlterTableMoveAllStmt(const AlterTableMoveAllStmt *a, const AlterTableMoveAllStmt *b) +{ + COMPARE_STRING_FIELD(orig_tablespacename); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(roles); + COMPARE_STRING_FIELD(new_tablespacename); + COMPARE_SCALAR_FIELD(nowait); + + return true; +} + +static bool +_equalCreateExtensionStmt(const CreateExtensionStmt *a, const CreateExtensionStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterExtensionStmt(const AlterExtensionStmt *a, const AlterExtensionStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterExtensionContentsStmt(const AlterExtensionContentsStmt *a, const AlterExtensionContentsStmt *b) +{ + COMPARE_STRING_FIELD(extname); + COMPARE_SCALAR_FIELD(action); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + + return true; +} + +static bool +_equalCreateFdwStmt(const CreateFdwStmt *a, const CreateFdwStmt *b) +{ + COMPARE_STRING_FIELD(fdwname); + COMPARE_NODE_FIELD(func_options); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterFdwStmt(const AlterFdwStmt *a, const AlterFdwStmt *b) +{ + COMPARE_STRING_FIELD(fdwname); + COMPARE_NODE_FIELD(func_options); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateForeignServerStmt(const CreateForeignServerStmt *a, const CreateForeignServerStmt *b) +{ + COMPARE_STRING_FIELD(servername); + COMPARE_STRING_FIELD(servertype); + COMPARE_STRING_FIELD(version); + COMPARE_STRING_FIELD(fdwname); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterForeignServerStmt(const AlterForeignServerStmt *a, const AlterForeignServerStmt *b) +{ + COMPARE_STRING_FIELD(servername); + COMPARE_STRING_FIELD(version); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(has_version); + + return true; +} + +static bool +_equalCreateForeignTableStmt(const CreateForeignTableStmt *a, const CreateForeignTableStmt *b) +{ + COMPARE_NODE_FIELD(base.relation); + COMPARE_NODE_FIELD(base.tableElts); + COMPARE_NODE_FIELD(base.inhRelations); + COMPARE_NODE_FIELD(base.partbound); + COMPARE_NODE_FIELD(base.partspec); + COMPARE_NODE_FIELD(base.ofTypename); + COMPARE_NODE_FIELD(base.constraints); + COMPARE_NODE_FIELD(base.options); + COMPARE_SCALAR_FIELD(base.oncommit); + COMPARE_STRING_FIELD(base.tablespacename); + COMPARE_STRING_FIELD(base.accessMethod); + COMPARE_SCALAR_FIELD(base.if_not_exists); + COMPARE_STRING_FIELD(servername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateUserMappingStmt(const CreateUserMappingStmt *a, const CreateUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterUserMappingStmt(const AlterUserMappingStmt *a, const AlterUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropUserMappingStmt(const DropUserMappingStmt *a, const DropUserMappingStmt *b) +{ + COMPARE_NODE_FIELD(user); + COMPARE_STRING_FIELD(servername); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalImportForeignSchemaStmt(const ImportForeignSchemaStmt *a, const ImportForeignSchemaStmt *b) +{ + COMPARE_STRING_FIELD(server_name); + COMPARE_STRING_FIELD(remote_schema); + COMPARE_STRING_FIELD(local_schema); + COMPARE_SCALAR_FIELD(list_type); + COMPARE_NODE_FIELD(table_list); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreatePolicyStmt(const CreatePolicyStmt *a, const CreatePolicyStmt *b) +{ + COMPARE_STRING_FIELD(policy_name); + COMPARE_NODE_FIELD(table); + COMPARE_STRING_FIELD(cmd_name); + COMPARE_SCALAR_FIELD(permissive); + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(with_check); + + return true; +} + +static bool +_equalAlterPolicyStmt(const AlterPolicyStmt *a, const AlterPolicyStmt *b) +{ + COMPARE_STRING_FIELD(policy_name); + COMPARE_NODE_FIELD(table); + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(qual); + COMPARE_NODE_FIELD(with_check); + + return true; +} + +static bool +_equalCreateAmStmt(const CreateAmStmt *a, const CreateAmStmt *b) +{ + COMPARE_STRING_FIELD(amname); + COMPARE_NODE_FIELD(handler_name); + COMPARE_SCALAR_FIELD(amtype); + + return true; +} + +static bool +_equalCreateTrigStmt(const CreateTrigStmt *a, const CreateTrigStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_SCALAR_FIELD(isconstraint); + COMPARE_STRING_FIELD(trigname); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(row); + COMPARE_SCALAR_FIELD(timing); + COMPARE_SCALAR_FIELD(events); + COMPARE_NODE_FIELD(columns); + COMPARE_NODE_FIELD(whenClause); + COMPARE_NODE_FIELD(transitionRels); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_NODE_FIELD(constrrel); + + return true; +} + +static bool +_equalCreateEventTrigStmt(const CreateEventTrigStmt *a, const CreateEventTrigStmt *b) +{ + COMPARE_STRING_FIELD(trigname); + COMPARE_STRING_FIELD(eventname); + COMPARE_NODE_FIELD(whenclause); + COMPARE_NODE_FIELD(funcname); + + return true; +} + +static bool +_equalAlterEventTrigStmt(const AlterEventTrigStmt *a, const AlterEventTrigStmt *b) +{ + COMPARE_STRING_FIELD(trigname); + COMPARE_SCALAR_FIELD(tgenabled); + + return true; +} + +static bool +_equalCreatePLangStmt(const CreatePLangStmt *a, const CreatePLangStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_STRING_FIELD(plname); + COMPARE_NODE_FIELD(plhandler); + COMPARE_NODE_FIELD(plinline); + COMPARE_NODE_FIELD(plvalidator); + COMPARE_SCALAR_FIELD(pltrusted); + + return true; +} + +static bool +_equalCreateRoleStmt(const CreateRoleStmt *a, const CreateRoleStmt *b) +{ + COMPARE_SCALAR_FIELD(stmt_type); + COMPARE_STRING_FIELD(role); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterRoleStmt(const AlterRoleStmt *a, const AlterRoleStmt *b) +{ + COMPARE_NODE_FIELD(role); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(action); + + return true; +} + +static bool +_equalAlterRoleSetStmt(const AlterRoleSetStmt *a, const AlterRoleSetStmt *b) +{ + COMPARE_NODE_FIELD(role); + COMPARE_STRING_FIELD(database); + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalDropRoleStmt(const DropRoleStmt *a, const DropRoleStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalCreateSeqStmt(const CreateSeqStmt *a, const CreateSeqStmt *b) +{ + COMPARE_NODE_FIELD(sequence); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(ownerId); + COMPARE_SCALAR_FIELD(for_identity); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalAlterSeqStmt(const AlterSeqStmt *a, const AlterSeqStmt *b) +{ + COMPARE_NODE_FIELD(sequence); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(for_identity); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalDefineStmt(const DefineStmt *a, const DefineStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_SCALAR_FIELD(oldstyle); + COMPARE_NODE_FIELD(defnames); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(definition); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_SCALAR_FIELD(replace); + + return true; +} + +static bool +_equalCreateDomainStmt(const CreateDomainStmt *a, const CreateDomainStmt *b) +{ + COMPARE_NODE_FIELD(domainname); + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(collClause); + COMPARE_NODE_FIELD(constraints); + + return true; +} + +static bool +_equalCreateOpClassStmt(const CreateOpClassStmt *a, const CreateOpClassStmt *b) +{ + COMPARE_NODE_FIELD(opclassname); + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + COMPARE_NODE_FIELD(datatype); + COMPARE_NODE_FIELD(items); + COMPARE_SCALAR_FIELD(isDefault); + + return true; +} + +static bool +_equalCreateOpClassItem(const CreateOpClassItem *a, const CreateOpClassItem *b) +{ + COMPARE_SCALAR_FIELD(itemtype); + COMPARE_NODE_FIELD(name); + COMPARE_SCALAR_FIELD(number); + COMPARE_NODE_FIELD(order_family); + COMPARE_NODE_FIELD(class_args); + COMPARE_NODE_FIELD(storedtype); + + return true; +} + +static bool +_equalCreateOpFamilyStmt(const CreateOpFamilyStmt *a, const CreateOpFamilyStmt *b) +{ + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + + return true; +} + +static bool +_equalAlterOpFamilyStmt(const AlterOpFamilyStmt *a, const AlterOpFamilyStmt *b) +{ + COMPARE_NODE_FIELD(opfamilyname); + COMPARE_STRING_FIELD(amname); + COMPARE_SCALAR_FIELD(isDrop); + COMPARE_NODE_FIELD(items); + + return true; +} + +static bool +_equalDropStmt(const DropStmt *a, const DropStmt *b) +{ + COMPARE_NODE_FIELD(objects); + COMPARE_SCALAR_FIELD(removeType); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(concurrent); + + return true; +} + +static bool +_equalTruncateStmt(const TruncateStmt *a, const TruncateStmt *b) +{ + COMPARE_NODE_FIELD(relations); + COMPARE_SCALAR_FIELD(restart_seqs); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalCommentStmt(const CommentStmt *a, const CommentStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(comment); + + return true; +} + +static bool +_equalSecLabelStmt(const SecLabelStmt *a, const SecLabelStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(provider); + COMPARE_STRING_FIELD(label); + + return true; +} + +static bool +_equalDeclareCursorStmt(const DeclareCursorStmt *a, const DeclareCursorStmt *b) +{ + COMPARE_STRING_FIELD(portalname); + COMPARE_SCALAR_FIELD(options); + COMPARE_NODE_FIELD(query); + + return true; +} + +static bool +_equalClosePortalStmt(const ClosePortalStmt *a, const ClosePortalStmt *b) +{ + COMPARE_STRING_FIELD(portalname); + + return true; +} + +static bool +_equalFetchStmt(const FetchStmt *a, const FetchStmt *b) +{ + COMPARE_SCALAR_FIELD(direction); + COMPARE_SCALAR_FIELD(howMany); + COMPARE_STRING_FIELD(portalname); + COMPARE_SCALAR_FIELD(ismove); + + return true; +} + +static bool +_equalIndexStmt(const IndexStmt *a, const IndexStmt *b) +{ + COMPARE_STRING_FIELD(idxname); + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(accessMethod); + COMPARE_STRING_FIELD(tableSpace); + COMPARE_NODE_FIELD(indexParams); + COMPARE_NODE_FIELD(indexIncludingParams); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(excludeOpNames); + COMPARE_STRING_FIELD(idxcomment); + COMPARE_SCALAR_FIELD(indexOid); + COMPARE_SCALAR_FIELD(oldNumber); + COMPARE_SCALAR_FIELD(oldCreateSubid); + COMPARE_SCALAR_FIELD(oldFirstRelfilelocatorSubid); + COMPARE_SCALAR_FIELD(unique); + COMPARE_SCALAR_FIELD(nulls_not_distinct); + COMPARE_SCALAR_FIELD(primary); + COMPARE_SCALAR_FIELD(isconstraint); + COMPARE_SCALAR_FIELD(deferrable); + COMPARE_SCALAR_FIELD(initdeferred); + COMPARE_SCALAR_FIELD(transformed); + COMPARE_SCALAR_FIELD(concurrent); + COMPARE_SCALAR_FIELD(if_not_exists); + COMPARE_SCALAR_FIELD(reset_default_tblspc); + + return true; +} + +static bool +_equalCreateStatsStmt(const CreateStatsStmt *a, const CreateStatsStmt *b) +{ + COMPARE_NODE_FIELD(defnames); + COMPARE_NODE_FIELD(stat_types); + COMPARE_NODE_FIELD(exprs); + COMPARE_NODE_FIELD(relations); + COMPARE_STRING_FIELD(stxcomment); + COMPARE_SCALAR_FIELD(transformed); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalStatsElem(const StatsElem *a, const StatsElem *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(expr); + + return true; +} + +static bool +_equalAlterStatsStmt(const AlterStatsStmt *a, const AlterStatsStmt *b) +{ + COMPARE_NODE_FIELD(defnames); + COMPARE_SCALAR_FIELD(stxstattarget); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalCreateFunctionStmt(const CreateFunctionStmt *a, const CreateFunctionStmt *b) +{ + COMPARE_SCALAR_FIELD(is_procedure); + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(funcname); + COMPARE_NODE_FIELD(parameters); + COMPARE_NODE_FIELD(returnType); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(sql_body); + + return true; +} + +static bool +_equalFunctionParameter(const FunctionParameter *a, const FunctionParameter *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(argType); + COMPARE_SCALAR_FIELD(mode); + COMPARE_NODE_FIELD(defexpr); + + return true; +} + +static bool +_equalAlterFunctionStmt(const AlterFunctionStmt *a, const AlterFunctionStmt *b) +{ + COMPARE_SCALAR_FIELD(objtype); + COMPARE_NODE_FIELD(func); + COMPARE_NODE_FIELD(actions); + + return true; +} + +static bool +_equalDoStmt(const DoStmt *a, const DoStmt *b) +{ + COMPARE_NODE_FIELD(args); + + return true; +} + +static bool +_equalCallStmt(const CallStmt *a, const CallStmt *b) +{ + COMPARE_NODE_FIELD(funccall); + COMPARE_NODE_FIELD(funcexpr); + COMPARE_NODE_FIELD(outargs); + + return true; +} + +static bool +_equalRenameStmt(const RenameStmt *a, const RenameStmt *b) +{ + COMPARE_SCALAR_FIELD(renameType); + COMPARE_SCALAR_FIELD(relationType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(newname); + COMPARE_SCALAR_FIELD(behavior); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterObjectDependsStmt(const AlterObjectDependsStmt *a, const AlterObjectDependsStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_NODE_FIELD(extname); + COMPARE_SCALAR_FIELD(remove); + + return true; +} + +static bool +_equalAlterObjectSchemaStmt(const AlterObjectSchemaStmt *a, const AlterObjectSchemaStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_STRING_FIELD(newschema); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalAlterOwnerStmt(const AlterOwnerStmt *a, const AlterOwnerStmt *b) +{ + COMPARE_SCALAR_FIELD(objectType); + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(object); + COMPARE_NODE_FIELD(newowner); + + return true; +} + +static bool +_equalAlterOperatorStmt(const AlterOperatorStmt *a, const AlterOperatorStmt *b) +{ + COMPARE_NODE_FIELD(opername); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterTypeStmt(const AlterTypeStmt *a, const AlterTypeStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalRuleStmt(const RuleStmt *a, const RuleStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(rulename); + COMPARE_NODE_FIELD(whereClause); + COMPARE_SCALAR_FIELD(event); + COMPARE_SCALAR_FIELD(instead); + COMPARE_NODE_FIELD(actions); + COMPARE_SCALAR_FIELD(replace); + + return true; +} + +static bool +_equalNotifyStmt(const NotifyStmt *a, const NotifyStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + COMPARE_STRING_FIELD(payload); + + return true; +} + +static bool +_equalListenStmt(const ListenStmt *a, const ListenStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + + return true; +} + +static bool +_equalUnlistenStmt(const UnlistenStmt *a, const UnlistenStmt *b) +{ + COMPARE_STRING_FIELD(conditionname); + + return true; +} + +static bool +_equalTransactionStmt(const TransactionStmt *a, const TransactionStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(options); + COMPARE_STRING_FIELD(savepoint_name); + COMPARE_STRING_FIELD(gid); + COMPARE_SCALAR_FIELD(chain); + + return true; +} + +static bool +_equalCompositeTypeStmt(const CompositeTypeStmt *a, const CompositeTypeStmt *b) +{ + COMPARE_NODE_FIELD(typevar); + COMPARE_NODE_FIELD(coldeflist); + + return true; +} + +static bool +_equalCreateEnumStmt(const CreateEnumStmt *a, const CreateEnumStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(vals); + + return true; +} + +static bool +_equalCreateRangeStmt(const CreateRangeStmt *a, const CreateRangeStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalAlterEnumStmt(const AlterEnumStmt *a, const AlterEnumStmt *b) +{ + COMPARE_NODE_FIELD(typeName); + COMPARE_STRING_FIELD(oldVal); + COMPARE_STRING_FIELD(newVal); + COMPARE_STRING_FIELD(newValNeighbor); + COMPARE_SCALAR_FIELD(newValIsAfter); + COMPARE_SCALAR_FIELD(skipIfNewValExists); + + return true; +} + +static bool +_equalViewStmt(const ViewStmt *a, const ViewStmt *b) +{ + COMPARE_NODE_FIELD(view); + COMPARE_NODE_FIELD(aliases); + COMPARE_NODE_FIELD(query); + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(options); + COMPARE_SCALAR_FIELD(withCheckOption); + + return true; +} + +static bool +_equalLoadStmt(const LoadStmt *a, const LoadStmt *b) +{ + COMPARE_STRING_FIELD(filename); + + return true; +} + +static bool +_equalCreatedbStmt(const CreatedbStmt *a, const CreatedbStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterDatabaseStmt(const AlterDatabaseStmt *a, const AlterDatabaseStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *a, const AlterDatabaseRefreshCollStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + + return true; +} + +static bool +_equalAlterDatabaseSetStmt(const AlterDatabaseSetStmt *a, const AlterDatabaseSetStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalDropdbStmt(const DropdbStmt *a, const DropdbStmt *b) +{ + COMPARE_STRING_FIELD(dbname); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterSystemStmt(const AlterSystemStmt *a, const AlterSystemStmt *b) +{ + COMPARE_NODE_FIELD(setstmt); + + return true; +} + +static bool +_equalClusterStmt(const ClusterStmt *a, const ClusterStmt *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(indexname); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalVacuumStmt(const VacuumStmt *a, const VacuumStmt *b) +{ + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(rels); + COMPARE_SCALAR_FIELD(is_vacuumcmd); + + return true; +} + +static bool +_equalVacuumRelation(const VacuumRelation *a, const VacuumRelation *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_SCALAR_FIELD(oid); + COMPARE_NODE_FIELD(va_cols); + + return true; +} + +static bool +_equalExplainStmt(const ExplainStmt *a, const ExplainStmt *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalCreateTableAsStmt(const CreateTableAsStmt *a, const CreateTableAsStmt *b) +{ + COMPARE_NODE_FIELD(query); + COMPARE_NODE_FIELD(into); + COMPARE_SCALAR_FIELD(objtype); + COMPARE_SCALAR_FIELD(is_select_into); + COMPARE_SCALAR_FIELD(if_not_exists); + + return true; +} + +static bool +_equalRefreshMatViewStmt(const RefreshMatViewStmt *a, const RefreshMatViewStmt *b) +{ + COMPARE_SCALAR_FIELD(concurrent); + COMPARE_SCALAR_FIELD(skipData); + COMPARE_NODE_FIELD(relation); + + return true; +} + +static bool +_equalCheckPointStmt(const CheckPointStmt *a, const CheckPointStmt *b) +{ + + return true; +} + +static bool +_equalDiscardStmt(const DiscardStmt *a, const DiscardStmt *b) +{ + COMPARE_SCALAR_FIELD(target); + + return true; +} + +static bool +_equalLockStmt(const LockStmt *a, const LockStmt *b) +{ + COMPARE_NODE_FIELD(relations); + COMPARE_SCALAR_FIELD(mode); + COMPARE_SCALAR_FIELD(nowait); + + return true; +} + +static bool +_equalConstraintsSetStmt(const ConstraintsSetStmt *a, const ConstraintsSetStmt *b) +{ + COMPARE_NODE_FIELD(constraints); + COMPARE_SCALAR_FIELD(deferred); + + return true; +} + +static bool +_equalReindexStmt(const ReindexStmt *a, const ReindexStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(relation); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalCreateConversionStmt(const CreateConversionStmt *a, const CreateConversionStmt *b) +{ + COMPARE_NODE_FIELD(conversion_name); + COMPARE_STRING_FIELD(for_encoding_name); + COMPARE_STRING_FIELD(to_encoding_name); + COMPARE_NODE_FIELD(func_name); + COMPARE_SCALAR_FIELD(def); + + return true; +} + +static bool +_equalCreateCastStmt(const CreateCastStmt *a, const CreateCastStmt *b) +{ + COMPARE_NODE_FIELD(sourcetype); + COMPARE_NODE_FIELD(targettype); + COMPARE_NODE_FIELD(func); + COMPARE_SCALAR_FIELD(context); + COMPARE_SCALAR_FIELD(inout); + + return true; +} + +static bool +_equalCreateTransformStmt(const CreateTransformStmt *a, const CreateTransformStmt *b) +{ + COMPARE_SCALAR_FIELD(replace); + COMPARE_NODE_FIELD(type_name); + COMPARE_STRING_FIELD(lang); + COMPARE_NODE_FIELD(fromsql); + COMPARE_NODE_FIELD(tosql); + + return true; +} + +static bool +_equalPrepareStmt(const PrepareStmt *a, const PrepareStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(argtypes); + COMPARE_NODE_FIELD(query); + + return true; +} + +static bool +_equalExecuteStmt(const ExecuteStmt *a, const ExecuteStmt *b) +{ + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(params); + + return true; +} + +static bool +_equalDeallocateStmt(const DeallocateStmt *a, const DeallocateStmt *b) +{ + COMPARE_STRING_FIELD(name); + + return true; +} + +static bool +_equalDropOwnedStmt(const DropOwnedStmt *a, const DropOwnedStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalReassignOwnedStmt(const ReassignOwnedStmt *a, const ReassignOwnedStmt *b) +{ + COMPARE_NODE_FIELD(roles); + COMPARE_NODE_FIELD(newrole); + + return true; +} + +static bool +_equalAlterTSDictionaryStmt(const AlterTSDictionaryStmt *a, const AlterTSDictionaryStmt *b) +{ + COMPARE_NODE_FIELD(dictname); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterTSConfigurationStmt(const AlterTSConfigurationStmt *a, const AlterTSConfigurationStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_NODE_FIELD(cfgname); + COMPARE_NODE_FIELD(tokentype); + COMPARE_NODE_FIELD(dicts); + COMPARE_SCALAR_FIELD(override); + COMPARE_SCALAR_FIELD(replace); + COMPARE_SCALAR_FIELD(missing_ok); + + return true; +} + +static bool +_equalPublicationTable(const PublicationTable *a, const PublicationTable *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(whereClause); + COMPARE_NODE_FIELD(columns); + + return true; +} + +static bool +_equalPublicationObjSpec(const PublicationObjSpec *a, const PublicationObjSpec *b) +{ + COMPARE_SCALAR_FIELD(pubobjtype); + COMPARE_STRING_FIELD(name); + COMPARE_NODE_FIELD(pubtable); + COMPARE_LOCATION_FIELD(location); + + return true; +} + +static bool +_equalCreatePublicationStmt(const CreatePublicationStmt *a, const CreatePublicationStmt *b) +{ + COMPARE_STRING_FIELD(pubname); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(pubobjects); + COMPARE_SCALAR_FIELD(for_all_tables); + + return true; +} + +static bool +_equalAlterPublicationStmt(const AlterPublicationStmt *a, const AlterPublicationStmt *b) +{ + COMPARE_STRING_FIELD(pubname); + COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(pubobjects); + COMPARE_SCALAR_FIELD(for_all_tables); + COMPARE_SCALAR_FIELD(action); + + return true; +} + +static bool +_equalCreateSubscriptionStmt(const CreateSubscriptionStmt *a, const CreateSubscriptionStmt *b) +{ + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(conninfo); + COMPARE_NODE_FIELD(publication); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalAlterSubscriptionStmt(const AlterSubscriptionStmt *a, const AlterSubscriptionStmt *b) +{ + COMPARE_SCALAR_FIELD(kind); + COMPARE_STRING_FIELD(subname); + COMPARE_STRING_FIELD(conninfo); + COMPARE_NODE_FIELD(publication); + COMPARE_NODE_FIELD(options); + + return true; +} + +static bool +_equalDropSubscriptionStmt(const DropSubscriptionStmt *a, const DropSubscriptionStmt *b) +{ + COMPARE_STRING_FIELD(subname); + COMPARE_SCALAR_FIELD(missing_ok); + COMPARE_SCALAR_FIELD(behavior); + + return true; +} + +static bool +_equalPathKey(const PathKey *a, const PathKey *b) +{ + COMPARE_SCALAR_FIELD(pk_eclass); + COMPARE_SCALAR_FIELD(pk_opfamily); + COMPARE_SCALAR_FIELD(pk_strategy); + COMPARE_SCALAR_FIELD(pk_nulls_first); + + return true; +} + +static bool +_equalRestrictInfo(const RestrictInfo *a, const RestrictInfo *b) +{ + COMPARE_NODE_FIELD(clause); + COMPARE_SCALAR_FIELD(is_pushed_down); + COMPARE_SCALAR_FIELD(has_clone); + COMPARE_SCALAR_FIELD(is_clone); + COMPARE_SCALAR_FIELD(security_level); + COMPARE_BITMAPSET_FIELD(required_relids); + COMPARE_BITMAPSET_FIELD(incompatible_relids); + COMPARE_BITMAPSET_FIELD(outer_relids); + COMPARE_SCALAR_FIELD(rinfo_serial); + + return true; +} + +static bool +_equalPlaceHolderVar(const PlaceHolderVar *a, const PlaceHolderVar *b) +{ + COMPARE_BITMAPSET_FIELD(phnullingrels); + COMPARE_SCALAR_FIELD(phid); + COMPARE_SCALAR_FIELD(phlevelsup); + + return true; +} + +static bool +_equalSpecialJoinInfo(const SpecialJoinInfo *a, const SpecialJoinInfo *b) +{ + COMPARE_BITMAPSET_FIELD(min_lefthand); + COMPARE_BITMAPSET_FIELD(min_righthand); + COMPARE_BITMAPSET_FIELD(syn_lefthand); + COMPARE_BITMAPSET_FIELD(syn_righthand); + COMPARE_SCALAR_FIELD(jointype); + COMPARE_SCALAR_FIELD(ojrelid); + COMPARE_BITMAPSET_FIELD(commute_above_l); + COMPARE_BITMAPSET_FIELD(commute_above_r); + COMPARE_BITMAPSET_FIELD(commute_below_l); + COMPARE_BITMAPSET_FIELD(commute_below_r); + COMPARE_SCALAR_FIELD(lhs_strict); + COMPARE_SCALAR_FIELD(semi_can_btree); + COMPARE_SCALAR_FIELD(semi_can_hash); + COMPARE_NODE_FIELD(semi_operators); + COMPARE_NODE_FIELD(semi_rhs_exprs); + + return true; +} + +static bool +_equalAppendRelInfo(const AppendRelInfo *a, const AppendRelInfo *b) +{ + COMPARE_SCALAR_FIELD(parent_relid); + COMPARE_SCALAR_FIELD(child_relid); + COMPARE_SCALAR_FIELD(parent_reltype); + COMPARE_SCALAR_FIELD(child_reltype); + COMPARE_NODE_FIELD(translated_vars); + COMPARE_SCALAR_FIELD(num_child_cols); + COMPARE_POINTER_FIELD(parent_colnos, a->num_child_cols * sizeof(AttrNumber)); + COMPARE_SCALAR_FIELD(parent_reloid); + + return true; +} + +static bool +_equalPlaceHolderInfo(const PlaceHolderInfo *a, const PlaceHolderInfo *b) +{ + COMPARE_SCALAR_FIELD(phid); + COMPARE_NODE_FIELD(ph_var); + COMPARE_BITMAPSET_FIELD(ph_eval_at); + COMPARE_BITMAPSET_FIELD(ph_lateral); + COMPARE_BITMAPSET_FIELD(ph_needed); + COMPARE_SCALAR_FIELD(ph_width); + + return true; +} + +static bool +_equalInteger(const Integer *a, const Integer *b) +{ + COMPARE_SCALAR_FIELD(ival); + + return true; +} + +static bool +_equalFloat(const Float *a, const Float *b) +{ + COMPARE_STRING_FIELD(fval); + + return true; +} + +static bool +_equalBoolean(const Boolean *a, const Boolean *b) +{ + COMPARE_SCALAR_FIELD(boolval); + + return true; +} + +static bool +_equalString(const String *a, const String *b) +{ + COMPARE_STRING_FIELD(sval); + + return true; +} + +static bool +_equalBitString(const BitString *a, const BitString *b) +{ + COMPARE_STRING_FIELD(bsval); + + return true; +} diff --git a/src/postgres/src_backend_nodes_extensible.c b/src/postgres/src_backend_nodes_extensible.c index e08fd155..cd8bb59a 100644 --- a/src/postgres/src_backend_nodes_extensible.c +++ b/src/postgres/src_backend_nodes_extensible.c @@ -1,8 +1,6 @@ /*-------------------------------------------------------------------- * Symbols referenced in this file: * - GetExtensibleNodeMethods - * - GetExtensibleNodeEntry - * - extensible_node_methods *-------------------------------------------------------------------- */ @@ -18,7 +16,7 @@ * and GetExtensibleNodeMethods to get information about a previously * registered type of extensible node. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -31,7 +29,6 @@ #include "nodes/extensible.h" #include "utils/hsearch.h" -static __thread HTAB *extensible_node_methods = NULL; @@ -59,40 +56,20 @@ typedef struct /* * An internal routine to get an ExtensibleNodeEntry by the given identifier */ -static const void * -GetExtensibleNodeEntry(HTAB *htable, const char *extnodename, bool missing_ok) -{ - ExtensibleNodeEntry *entry = NULL; - - if (htable != NULL) - entry = (ExtensibleNodeEntry *) hash_search(htable, - extnodename, - HASH_FIND, NULL); - if (!entry) - { - if (missing_ok) - return NULL; - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("ExtensibleNodeMethods \"%s\" was not registered", - extnodename))); - } - - return entry->extnodemethods; -} + /* * Get the methods for a given type of extensible node. */ + const ExtensibleNodeMethods * GetExtensibleNodeMethods(const char *extnodename, bool missing_ok) { - return (const ExtensibleNodeMethods *) - GetExtensibleNodeEntry(extensible_node_methods, - extnodename, - missing_ok); + return NULL; } + + /* * Get the methods for a given name of CustomScanMethods */ diff --git a/src/postgres/src_backend_nodes_list.c b/src/postgres/src_backend_nodes_list.c index 7c53c40c..c8a7a12a 100644 --- a/src/postgres/src_backend_nodes_list.c +++ b/src/postgres/src_backend_nodes_list.c @@ -31,7 +31,7 @@ * See comments in pg_list.h. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -79,6 +79,7 @@ #define IsPointerList(l) ((l) == NIL || IsA((l), List)) #define IsIntegerList(l) ((l) == NIL || IsA((l), IntList)) #define IsOidList(l) ((l) == NIL || IsA((l), OidList)) +#define IsXidList(l) ((l) == NIL || IsA((l), XidList)) #ifdef USE_ASSERT_CHECKING /* @@ -96,7 +97,8 @@ check_list_invariants(const List *list) Assert(list->type == T_List || list->type == T_IntList || - list->type == T_OidList); + list->type == T_OidList || + list->type == T_XidList); } #else #define check_list_invariants(l) ((void) 0) @@ -369,6 +371,11 @@ lappend(List *list, void *datum) */ +/* + * Append a TransactionId to the specified list. See lappend() + */ + + /* * Make room for a new cell at position 'pos' (measured from 0). * The data in the cell is left undefined, and must be filled in by the @@ -541,6 +548,11 @@ list_truncate(List *list, int new_size) */ +/* + * Return true iff the TransactionId 'datum' is a member of the list. + */ + + /* * Delete the n'th cell (counting from 0) in list. * diff --git a/src/postgres/src_backend_nodes_makefuncs.c b/src/postgres/src_backend_nodes_makefuncs.c index c52bef36..b2f1a2e1 100644 --- a/src/postgres/src_backend_nodes_makefuncs.c +++ b/src/postgres/src_backend_nodes_makefuncs.c @@ -11,6 +11,11 @@ * - makeTypeName * - makeFuncCall * - makeA_Expr + * - makeJsonFormat + * - makeJsonIsPredicate + * - makeJsonValueExpr + * - makeJsonEncoding + * - makeJsonKeyValue * - makeBoolExpr *-------------------------------------------------------------------- */ @@ -21,7 +26,7 @@ * creator functions for various nodes. The functions here are for the * most frequently created nodes. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -36,6 +41,7 @@ #include "catalog/pg_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" +#include "utils/errcodes.h" #include "utils/lsyscache.h" @@ -416,3 +422,91 @@ makeVacuumRelation(RangeVar *relation, Oid oid, List *va_cols) v->va_cols = va_cols; return v; } + +/* + * makeJsonFormat - + * creates a JsonFormat node + */ +JsonFormat * +makeJsonFormat(JsonFormatType type, JsonEncoding encoding, int location) +{ + JsonFormat *jf = makeNode(JsonFormat); + + jf->format_type = type; + jf->encoding = encoding; + jf->location = location; + + return jf; +} + +/* + * makeJsonValueExpr - + * creates a JsonValueExpr node + */ +JsonValueExpr * +makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr, + JsonFormat *format) +{ + JsonValueExpr *jve = makeNode(JsonValueExpr); + + jve->raw_expr = raw_expr; + jve->formatted_expr = formatted_expr; + jve->format = format; + + return jve; +} + +/* + * makeJsonEncoding - + * converts JSON encoding name to enum JsonEncoding + */ +JsonEncoding +makeJsonEncoding(char *name) +{ + if (!pg_strcasecmp(name, "utf8")) + return JS_ENC_UTF8; + if (!pg_strcasecmp(name, "utf16")) + return JS_ENC_UTF16; + if (!pg_strcasecmp(name, "utf32")) + return JS_ENC_UTF32; + + ereport(ERROR, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("unrecognized JSON encoding: %s", name)); + + return JS_ENC_DEFAULT; +} + +/* + * makeJsonKeyValue - + * creates a JsonKeyValue node + */ +Node * +makeJsonKeyValue(Node *key, Node *value) +{ + JsonKeyValue *n = makeNode(JsonKeyValue); + + n->key = (Expr *) key; + n->value = castNode(JsonValueExpr, value); + + return (Node *) n; +} + +/* + * makeJsonIsPredicate - + * creates a JsonIsPredicate node + */ +Node * +makeJsonIsPredicate(Node *expr, JsonFormat *format, JsonValueType item_type, + bool unique_keys, int location) +{ + JsonIsPredicate *n = makeNode(JsonIsPredicate); + + n->expr = expr; + n->format = format; + n->item_type = item_type; + n->unique_keys = unique_keys; + n->location = location; + + return (Node *) n; +} diff --git a/src/postgres/src_backend_nodes_nodeFuncs.c b/src/postgres/src_backend_nodes_nodeFuncs.c index 2129609e..49a4c9e7 100644 --- a/src/postgres/src_backend_nodes_nodeFuncs.c +++ b/src/postgres/src_backend_nodes_nodeFuncs.c @@ -2,7 +2,7 @@ * Symbols referenced in this file: * - exprLocation * - leftmostLoc - * - raw_expression_tree_walker + * - raw_expression_tree_walker_impl *-------------------------------------------------------------------- */ @@ -11,7 +11,7 @@ * nodeFuncs.c * Various general-purpose manipulations of Node trees * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -35,10 +35,12 @@ static bool expression_returns_set_walker(Node *node, void *context); static int leftmostLoc(int loc1, int loc2); static bool fix_opfuncids_walker(Node *node, void *context); -static bool planstate_walk_subplans(List *plans, bool (*walker) (), +static bool planstate_walk_subplans(List *plans, + planstate_tree_walker_callback walker, void *context); static bool planstate_walk_members(PlanState **planstates, int nplans, - bool (*walker) (), void *context); + planstate_tree_walker_callback walker, + void *context); /* @@ -372,6 +374,18 @@ exprLocation(const Node *expr) exprLocation((Node *) xexpr->args)); } break; + case T_JsonFormat: + loc = ((const JsonFormat *) expr)->location; + break; + case T_JsonValueExpr: + loc = exprLocation((Node *) ((const JsonValueExpr *) expr)->raw_expr); + break; + case T_JsonConstructorExpr: + loc = ((const JsonConstructorExpr *) expr)->location; + break; + case T_JsonIsPredicate: + loc = ((const JsonIsPredicate *) expr)->location; + break; case T_NullTest: { const NullTest *nexpr = (const NullTest *) expr; @@ -532,6 +546,28 @@ exprLocation(const Node *expr) case T_CommonTableExpr: loc = ((const CommonTableExpr *) expr)->location; break; + case T_JsonKeyValue: + /* just use the key's location */ + loc = exprLocation((Node *) ((const JsonKeyValue *) expr)->key); + break; + case T_JsonObjectConstructor: + loc = ((const JsonObjectConstructor *) expr)->location; + break; + case T_JsonArrayConstructor: + loc = ((const JsonArrayConstructor *) expr)->location; + break; + case T_JsonArrayQueryConstructor: + loc = ((const JsonArrayQueryConstructor *) expr)->location; + break; + case T_JsonAggConstructor: + loc = ((const JsonAggConstructor *) expr)->location; + break; + case T_JsonObjectAgg: + loc = exprLocation((Node *) ((const JsonObjectAgg *) expr)->constructor); + break; + case T_JsonArrayAgg: + loc = exprLocation((Node *) ((const JsonArrayAgg *) expr)->constructor); + break; case T_PlaceHolderVar: /* just use argument's location */ loc = exprLocation((Node *) ((const PlaceHolderVar *) expr)->phexpr); @@ -721,7 +757,9 @@ leftmostLoc(int loc1, int loc2) * uses, but may need to be revisited in future. */ - +#define WALK(n) walker((Node *) (n), context) +#define LIST_WALK(l) expression_tree_walker_impl((Node *) (l), walker, context) +#undef LIST_WALK /* * query_tree_walker --- initiate a walk of a Query's expressions @@ -887,9 +925,9 @@ leftmostLoc(int loc1, int loc2) * statements can appear in CTEs. */ bool -raw_expression_tree_walker(Node *node, - bool (*walker) (), - void *context) +raw_expression_tree_walker_impl(Node *node, + tree_walker_callback walker, + void *context) { ListCell *temp; @@ -905,6 +943,7 @@ raw_expression_tree_walker(Node *node, switch (nodeTag(node)) { + case T_JsonFormat: case T_SetToDefault: case T_CurrentOfExpr: case T_SQLValueFunction: @@ -922,17 +961,17 @@ raw_expression_tree_walker(Node *node, /* we assume the colnames list isn't interesting */ break; case T_RangeVar: - return walker(((RangeVar *) node)->alias, context); + return WALK(((RangeVar *) node)->alias); case T_GroupingFunc: - return walker(((GroupingFunc *) node)->args, context); + return WALK(((GroupingFunc *) node)->args); case T_SubLink: { SubLink *sublink = (SubLink *) node; - if (walker(sublink->testexpr, context)) + if (WALK(sublink->testexpr)) return true; /* we assume the operName is not interesting */ - if (walker(sublink->subselect, context)) + if (WALK(sublink->subselect)) return true; } break; @@ -940,55 +979,85 @@ raw_expression_tree_walker(Node *node, { CaseExpr *caseexpr = (CaseExpr *) node; - if (walker(caseexpr->arg, context)) + if (WALK(caseexpr->arg)) return true; /* we assume walker doesn't care about CaseWhens, either */ foreach(temp, caseexpr->args) { CaseWhen *when = lfirst_node(CaseWhen, temp); - if (walker(when->expr, context)) + if (WALK(when->expr)) return true; - if (walker(when->result, context)) + if (WALK(when->result)) return true; } - if (walker(caseexpr->defresult, context)) + if (WALK(caseexpr->defresult)) return true; } break; case T_RowExpr: /* Assume colnames isn't interesting */ - return walker(((RowExpr *) node)->args, context); + return WALK(((RowExpr *) node)->args); case T_CoalesceExpr: - return walker(((CoalesceExpr *) node)->args, context); + return WALK(((CoalesceExpr *) node)->args); case T_MinMaxExpr: - return walker(((MinMaxExpr *) node)->args, context); + return WALK(((MinMaxExpr *) node)->args); case T_XmlExpr: { XmlExpr *xexpr = (XmlExpr *) node; - if (walker(xexpr->named_args, context)) + if (WALK(xexpr->named_args)) return true; /* we assume walker doesn't care about arg_names */ - if (walker(xexpr->args, context)) + if (WALK(xexpr->args)) + return true; + } + break; + case T_JsonReturning: + return WALK(((JsonReturning *) node)->format); + case T_JsonValueExpr: + { + JsonValueExpr *jve = (JsonValueExpr *) node; + + if (WALK(jve->raw_expr)) + return true; + if (WALK(jve->formatted_expr)) + return true; + if (WALK(jve->format)) + return true; + } + break; + case T_JsonConstructorExpr: + { + JsonConstructorExpr *ctor = (JsonConstructorExpr *) node; + + if (WALK(ctor->args)) + return true; + if (WALK(ctor->func)) + return true; + if (WALK(ctor->coercion)) + return true; + if (WALK(ctor->returning)) return true; } break; + case T_JsonIsPredicate: + return WALK(((JsonIsPredicate *) node)->expr); case T_NullTest: - return walker(((NullTest *) node)->arg, context); + return WALK(((NullTest *) node)->arg); case T_BooleanTest: - return walker(((BooleanTest *) node)->arg, context); + return WALK(((BooleanTest *) node)->arg); case T_JoinExpr: { JoinExpr *join = (JoinExpr *) node; - if (walker(join->larg, context)) + if (WALK(join->larg)) return true; - if (walker(join->rarg, context)) + if (WALK(join->rarg)) return true; - if (walker(join->quals, context)) + if (WALK(join->quals)) return true; - if (walker(join->alias, context)) + if (WALK(join->alias)) return true; /* using list is deemed uninteresting */ } @@ -997,18 +1066,18 @@ raw_expression_tree_walker(Node *node, { IntoClause *into = (IntoClause *) node; - if (walker(into->rel, context)) + if (WALK(into->rel)) return true; /* colNames, options are deemed uninteresting */ /* viewQuery should be null in raw parsetree, but check it */ - if (walker(into->viewQuery, context)) + if (WALK(into->viewQuery)) return true; } break; case T_List: foreach(temp, (List *) node) { - if (walker((Node *) lfirst(temp), context)) + if (WALK((Node *) lfirst(temp))) return true; } break; @@ -1016,17 +1085,17 @@ raw_expression_tree_walker(Node *node, { InsertStmt *stmt = (InsertStmt *) node; - if (walker(stmt->relation, context)) + if (WALK(stmt->relation)) return true; - if (walker(stmt->cols, context)) + if (WALK(stmt->cols)) return true; - if (walker(stmt->selectStmt, context)) + if (WALK(stmt->selectStmt)) return true; - if (walker(stmt->onConflictClause, context)) + if (WALK(stmt->onConflictClause)) return true; - if (walker(stmt->returningList, context)) + if (WALK(stmt->returningList)) return true; - if (walker(stmt->withClause, context)) + if (WALK(stmt->withClause)) return true; } break; @@ -1034,15 +1103,15 @@ raw_expression_tree_walker(Node *node, { DeleteStmt *stmt = (DeleteStmt *) node; - if (walker(stmt->relation, context)) + if (WALK(stmt->relation)) return true; - if (walker(stmt->usingClause, context)) + if (WALK(stmt->usingClause)) return true; - if (walker(stmt->whereClause, context)) + if (WALK(stmt->whereClause)) return true; - if (walker(stmt->returningList, context)) + if (WALK(stmt->returningList)) return true; - if (walker(stmt->withClause, context)) + if (WALK(stmt->withClause)) return true; } break; @@ -1050,17 +1119,17 @@ raw_expression_tree_walker(Node *node, { UpdateStmt *stmt = (UpdateStmt *) node; - if (walker(stmt->relation, context)) + if (WALK(stmt->relation)) return true; - if (walker(stmt->targetList, context)) + if (WALK(stmt->targetList)) return true; - if (walker(stmt->whereClause, context)) + if (WALK(stmt->whereClause)) return true; - if (walker(stmt->fromClause, context)) + if (WALK(stmt->fromClause)) return true; - if (walker(stmt->returningList, context)) + if (WALK(stmt->returningList)) return true; - if (walker(stmt->withClause, context)) + if (WALK(stmt->withClause)) return true; } break; @@ -1068,15 +1137,15 @@ raw_expression_tree_walker(Node *node, { MergeStmt *stmt = (MergeStmt *) node; - if (walker(stmt->relation, context)) + if (WALK(stmt->relation)) return true; - if (walker(stmt->sourceRelation, context)) + if (WALK(stmt->sourceRelation)) return true; - if (walker(stmt->joinCondition, context)) + if (WALK(stmt->joinCondition)) return true; - if (walker(stmt->mergeWhenClauses, context)) + if (WALK(stmt->mergeWhenClauses)) return true; - if (walker(stmt->withClause, context)) + if (WALK(stmt->withClause)) return true; } break; @@ -1084,11 +1153,11 @@ raw_expression_tree_walker(Node *node, { MergeWhenClause *mergeWhenClause = (MergeWhenClause *) node; - if (walker(mergeWhenClause->condition, context)) + if (WALK(mergeWhenClause->condition)) return true; - if (walker(mergeWhenClause->targetList, context)) + if (WALK(mergeWhenClause->targetList)) return true; - if (walker(mergeWhenClause->values, context)) + if (WALK(mergeWhenClause->values)) return true; } break; @@ -1096,37 +1165,37 @@ raw_expression_tree_walker(Node *node, { SelectStmt *stmt = (SelectStmt *) node; - if (walker(stmt->distinctClause, context)) + if (WALK(stmt->distinctClause)) return true; - if (walker(stmt->intoClause, context)) + if (WALK(stmt->intoClause)) return true; - if (walker(stmt->targetList, context)) + if (WALK(stmt->targetList)) return true; - if (walker(stmt->fromClause, context)) + if (WALK(stmt->fromClause)) return true; - if (walker(stmt->whereClause, context)) + if (WALK(stmt->whereClause)) return true; - if (walker(stmt->groupClause, context)) + if (WALK(stmt->groupClause)) return true; - if (walker(stmt->havingClause, context)) + if (WALK(stmt->havingClause)) return true; - if (walker(stmt->windowClause, context)) + if (WALK(stmt->windowClause)) return true; - if (walker(stmt->valuesLists, context)) + if (WALK(stmt->valuesLists)) return true; - if (walker(stmt->sortClause, context)) + if (WALK(stmt->sortClause)) return true; - if (walker(stmt->limitOffset, context)) + if (WALK(stmt->limitOffset)) return true; - if (walker(stmt->limitCount, context)) + if (WALK(stmt->limitCount)) return true; - if (walker(stmt->lockingClause, context)) + if (WALK(stmt->lockingClause)) return true; - if (walker(stmt->withClause, context)) + if (WALK(stmt->withClause)) return true; - if (walker(stmt->larg, context)) + if (WALK(stmt->larg)) return true; - if (walker(stmt->rarg, context)) + if (WALK(stmt->rarg)) return true; } break; @@ -1134,9 +1203,9 @@ raw_expression_tree_walker(Node *node, { PLAssignStmt *stmt = (PLAssignStmt *) node; - if (walker(stmt->indirection, context)) + if (WALK(stmt->indirection)) return true; - if (walker(stmt->val, context)) + if (WALK(stmt->val)) return true; } break; @@ -1144,9 +1213,9 @@ raw_expression_tree_walker(Node *node, { A_Expr *expr = (A_Expr *) node; - if (walker(expr->lexpr, context)) + if (WALK(expr->lexpr)) return true; - if (walker(expr->rexpr, context)) + if (WALK(expr->rexpr)) return true; /* operator name is deemed uninteresting */ } @@ -1155,7 +1224,7 @@ raw_expression_tree_walker(Node *node, { BoolExpr *expr = (BoolExpr *) node; - if (walker(expr->args, context)) + if (WALK(expr->args)) return true; } break; @@ -1166,26 +1235,26 @@ raw_expression_tree_walker(Node *node, { FuncCall *fcall = (FuncCall *) node; - if (walker(fcall->args, context)) + if (WALK(fcall->args)) return true; - if (walker(fcall->agg_order, context)) + if (WALK(fcall->agg_order)) return true; - if (walker(fcall->agg_filter, context)) + if (WALK(fcall->agg_filter)) return true; - if (walker(fcall->over, context)) + if (WALK(fcall->over)) return true; /* function name is deemed uninteresting */ } break; case T_NamedArgExpr: - return walker(((NamedArgExpr *) node)->arg, context); + return WALK(((NamedArgExpr *) node)->arg); case T_A_Indices: { A_Indices *indices = (A_Indices *) node; - if (walker(indices->lidx, context)) + if (WALK(indices->lidx)) return true; - if (walker(indices->uidx, context)) + if (WALK(indices->uidx)) return true; } break; @@ -1193,51 +1262,51 @@ raw_expression_tree_walker(Node *node, { A_Indirection *indir = (A_Indirection *) node; - if (walker(indir->arg, context)) + if (WALK(indir->arg)) return true; - if (walker(indir->indirection, context)) + if (WALK(indir->indirection)) return true; } break; case T_A_ArrayExpr: - return walker(((A_ArrayExpr *) node)->elements, context); + return WALK(((A_ArrayExpr *) node)->elements); case T_ResTarget: { ResTarget *rt = (ResTarget *) node; - if (walker(rt->indirection, context)) + if (WALK(rt->indirection)) return true; - if (walker(rt->val, context)) + if (WALK(rt->val)) return true; } break; case T_MultiAssignRef: - return walker(((MultiAssignRef *) node)->source, context); + return WALK(((MultiAssignRef *) node)->source); case T_TypeCast: { TypeCast *tc = (TypeCast *) node; - if (walker(tc->arg, context)) + if (WALK(tc->arg)) return true; - if (walker(tc->typeName, context)) + if (WALK(tc->typeName)) return true; } break; case T_CollateClause: - return walker(((CollateClause *) node)->arg, context); + return WALK(((CollateClause *) node)->arg); case T_SortBy: - return walker(((SortBy *) node)->node, context); + return WALK(((SortBy *) node)->node); case T_WindowDef: { WindowDef *wd = (WindowDef *) node; - if (walker(wd->partitionClause, context)) + if (WALK(wd->partitionClause)) return true; - if (walker(wd->orderClause, context)) + if (WALK(wd->orderClause)) return true; - if (walker(wd->startOffset, context)) + if (WALK(wd->startOffset)) return true; - if (walker(wd->endOffset, context)) + if (WALK(wd->endOffset)) return true; } break; @@ -1245,9 +1314,9 @@ raw_expression_tree_walker(Node *node, { RangeSubselect *rs = (RangeSubselect *) node; - if (walker(rs->subquery, context)) + if (WALK(rs->subquery)) return true; - if (walker(rs->alias, context)) + if (WALK(rs->alias)) return true; } break; @@ -1255,11 +1324,11 @@ raw_expression_tree_walker(Node *node, { RangeFunction *rf = (RangeFunction *) node; - if (walker(rf->functions, context)) + if (WALK(rf->functions)) return true; - if (walker(rf->alias, context)) + if (WALK(rf->alias)) return true; - if (walker(rf->coldeflist, context)) + if (WALK(rf->coldeflist)) return true; } break; @@ -1267,12 +1336,12 @@ raw_expression_tree_walker(Node *node, { RangeTableSample *rts = (RangeTableSample *) node; - if (walker(rts->relation, context)) + if (WALK(rts->relation)) return true; /* method name is deemed uninteresting */ - if (walker(rts->args, context)) + if (WALK(rts->args)) return true; - if (walker(rts->repeatable, context)) + if (WALK(rts->repeatable)) return true; } break; @@ -1280,15 +1349,15 @@ raw_expression_tree_walker(Node *node, { RangeTableFunc *rtf = (RangeTableFunc *) node; - if (walker(rtf->docexpr, context)) + if (WALK(rtf->docexpr)) return true; - if (walker(rtf->rowexpr, context)) + if (WALK(rtf->rowexpr)) return true; - if (walker(rtf->namespaces, context)) + if (WALK(rtf->namespaces)) return true; - if (walker(rtf->columns, context)) + if (WALK(rtf->columns)) return true; - if (walker(rtf->alias, context)) + if (WALK(rtf->alias)) return true; } break; @@ -1296,9 +1365,9 @@ raw_expression_tree_walker(Node *node, { RangeTableFuncCol *rtfc = (RangeTableFuncCol *) node; - if (walker(rtfc->colexpr, context)) + if (WALK(rtfc->colexpr)) return true; - if (walker(rtfc->coldefexpr, context)) + if (WALK(rtfc->coldefexpr)) return true; } break; @@ -1306,9 +1375,9 @@ raw_expression_tree_walker(Node *node, { TypeName *tn = (TypeName *) node; - if (walker(tn->typmods, context)) + if (WALK(tn->typmods)) return true; - if (walker(tn->arrayBounds, context)) + if (WALK(tn->arrayBounds)) return true; /* type name itself is deemed uninteresting */ } @@ -1317,13 +1386,11 @@ raw_expression_tree_walker(Node *node, { ColumnDef *coldef = (ColumnDef *) node; - if (walker(coldef->typeName, context)) - return true; - if (walker(coldef->compression, context)) + if (WALK(coldef->typeName)) return true; - if (walker(coldef->raw_default, context)) + if (WALK(coldef->raw_default)) return true; - if (walker(coldef->collClause, context)) + if (WALK(coldef->collClause)) return true; /* for now, constraints are ignored */ } @@ -1332,34 +1399,34 @@ raw_expression_tree_walker(Node *node, { IndexElem *indelem = (IndexElem *) node; - if (walker(indelem->expr, context)) + if (WALK(indelem->expr)) return true; /* collation and opclass names are deemed uninteresting */ } break; case T_GroupingSet: - return walker(((GroupingSet *) node)->content, context); + return WALK(((GroupingSet *) node)->content); case T_LockingClause: - return walker(((LockingClause *) node)->lockedRels, context); + return WALK(((LockingClause *) node)->lockedRels); case T_XmlSerialize: { XmlSerialize *xs = (XmlSerialize *) node; - if (walker(xs->expr, context)) + if (WALK(xs->expr)) return true; - if (walker(xs->typeName, context)) + if (WALK(xs->typeName)) return true; } break; case T_WithClause: - return walker(((WithClause *) node)->ctes, context); + return WALK(((WithClause *) node)->ctes); case T_InferClause: { InferClause *stmt = (InferClause *) node; - if (walker(stmt->indexElems, context)) + if (WALK(stmt->indexElems)) return true; - if (walker(stmt->whereClause, context)) + if (WALK(stmt->whereClause)) return true; } break; @@ -1367,17 +1434,101 @@ raw_expression_tree_walker(Node *node, { OnConflictClause *stmt = (OnConflictClause *) node; - if (walker(stmt->infer, context)) + if (WALK(stmt->infer)) return true; - if (walker(stmt->targetList, context)) + if (WALK(stmt->targetList)) return true; - if (walker(stmt->whereClause, context)) + if (WALK(stmt->whereClause)) return true; } break; case T_CommonTableExpr: /* search_clause and cycle_clause are not interesting here */ - return walker(((CommonTableExpr *) node)->ctequery, context); + return WALK(((CommonTableExpr *) node)->ctequery); + case T_JsonOutput: + { + JsonOutput *out = (JsonOutput *) node; + + if (WALK(out->typeName)) + return true; + if (WALK(out->returning)) + return true; + } + break; + case T_JsonKeyValue: + { + JsonKeyValue *jkv = (JsonKeyValue *) node; + + if (WALK(jkv->key)) + return true; + if (WALK(jkv->value)) + return true; + } + break; + case T_JsonObjectConstructor: + { + JsonObjectConstructor *joc = (JsonObjectConstructor *) node; + + if (WALK(joc->output)) + return true; + if (WALK(joc->exprs)) + return true; + } + break; + case T_JsonArrayConstructor: + { + JsonArrayConstructor *jac = (JsonArrayConstructor *) node; + + if (WALK(jac->output)) + return true; + if (WALK(jac->exprs)) + return true; + } + break; + case T_JsonAggConstructor: + { + JsonAggConstructor *ctor = (JsonAggConstructor *) node; + + if (WALK(ctor->output)) + return true; + if (WALK(ctor->agg_order)) + return true; + if (WALK(ctor->agg_filter)) + return true; + if (WALK(ctor->over)) + return true; + } + break; + case T_JsonObjectAgg: + { + JsonObjectAgg *joa = (JsonObjectAgg *) node; + + if (WALK(joa->constructor)) + return true; + if (WALK(joa->arg)) + return true; + } + break; + case T_JsonArrayAgg: + { + JsonArrayAgg *jaa = (JsonArrayAgg *) node; + + if (WALK(jaa->constructor)) + return true; + if (WALK(jaa->arg)) + return true; + } + break; + case T_JsonArrayQueryConstructor: + { + JsonArrayQueryConstructor *jaqc = (JsonArrayQueryConstructor *) node; + + if (WALK(jaqc->output)) + return true; + if (WALK(jaqc->query)) + return true; + } + break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); @@ -1392,7 +1543,7 @@ raw_expression_tree_walker(Node *node, * The walker has already visited the current node, and so we need only * recurse into any sub-nodes it has. */ - +#define PSWALK(n) walker(n, context) /* * Walk a list of SubPlans (or initPlans, which also use SubPlan nodes). diff --git a/src/postgres/src_backend_nodes_value.c b/src/postgres/src_backend_nodes_value.c index 662b3d2b..5a972455 100644 --- a/src/postgres/src_backend_nodes_value.c +++ b/src/postgres/src_backend_nodes_value.c @@ -14,7 +14,7 @@ * implementation of value nodes * * - * Copyright (c) 2003-2022, PostgreSQL Global Development Group + * Copyright (c) 2003-2023, PostgreSQL Global Development Group * * * IDENTIFICATION diff --git a/src/postgres/src_backend_parser_gram.c b/src/postgres/src_backend_parser_gram.c index 41f1050e..8770b665 100644 --- a/src/postgres/src_backend_parser_gram.c +++ b/src/postgres/src_backend_parser_gram.c @@ -20,6 +20,7 @@ * - processCASbits * - makeRangeVarFromAnyName * - SplitColQualList + * - parsePartitionStrategy * - doNegateFloat * - makeRoleSpec * - mergeTableFuncParameters @@ -154,474 +155,487 @@ SQL_COMMENT = 275, C_COMMENT = 276, ABORT_P = 277, - ABSOLUTE_P = 278, - ACCESS = 279, - ACTION = 280, - ADD_P = 281, - ADMIN = 282, - AFTER = 283, - AGGREGATE = 284, - ALL = 285, - ALSO = 286, - ALTER = 287, - ALWAYS = 288, - ANALYSE = 289, - ANALYZE = 290, - AND = 291, - ANY = 292, - ARRAY = 293, - AS = 294, - ASC = 295, - ASENSITIVE = 296, - ASSERTION = 297, - ASSIGNMENT = 298, - ASYMMETRIC = 299, - ATOMIC = 300, - AT = 301, - ATTACH = 302, - ATTRIBUTE = 303, - AUTHORIZATION = 304, - BACKWARD = 305, - BEFORE = 306, - BEGIN_P = 307, - BETWEEN = 308, - BIGINT = 309, - BINARY = 310, - BIT = 311, - BOOLEAN_P = 312, - BOTH = 313, - BREADTH = 314, - BY = 315, - CACHE = 316, - CALL = 317, - CALLED = 318, - CASCADE = 319, - CASCADED = 320, - CASE = 321, - CAST = 322, - CATALOG_P = 323, - CHAIN = 324, - CHAR_P = 325, - CHARACTER = 326, - CHARACTERISTICS = 327, - CHECK = 328, - CHECKPOINT = 329, - CLASS = 330, - CLOSE = 331, - CLUSTER = 332, - COALESCE = 333, - COLLATE = 334, - COLLATION = 335, - COLUMN = 336, - COLUMNS = 337, - COMMENT = 338, - COMMENTS = 339, - COMMIT = 340, - COMMITTED = 341, - COMPRESSION = 342, - CONCURRENTLY = 343, - CONFIGURATION = 344, - CONFLICT = 345, - CONNECTION = 346, - CONSTRAINT = 347, - CONSTRAINTS = 348, - CONTENT_P = 349, - CONTINUE_P = 350, - CONVERSION_P = 351, - COPY = 352, - COST = 353, - CREATE = 354, - CROSS = 355, - CSV = 356, - CUBE = 357, - CURRENT_P = 358, - CURRENT_CATALOG = 359, - CURRENT_DATE = 360, - CURRENT_ROLE = 361, - CURRENT_SCHEMA = 362, - CURRENT_TIME = 363, - CURRENT_TIMESTAMP = 364, - CURRENT_USER = 365, - CURSOR = 366, - CYCLE = 367, - DATA_P = 368, - DATABASE = 369, - DAY_P = 370, - DEALLOCATE = 371, - DEC = 372, - DECIMAL_P = 373, - DECLARE = 374, - DEFAULT = 375, - DEFAULTS = 376, - DEFERRABLE = 377, - DEFERRED = 378, - DEFINER = 379, - DELETE_P = 380, - DELIMITER = 381, - DELIMITERS = 382, - DEPENDS = 383, - DEPTH = 384, - DESC = 385, - DETACH = 386, - DICTIONARY = 387, - DISABLE_P = 388, - DISCARD = 389, - DISTINCT = 390, - DO = 391, - DOCUMENT_P = 392, - DOMAIN_P = 393, - DOUBLE_P = 394, - DROP = 395, - EACH = 396, - ELSE = 397, - ENABLE_P = 398, - ENCODING = 399, - ENCRYPTED = 400, - END_P = 401, - ENUM_P = 402, - ESCAPE = 403, - EVENT = 404, - EXCEPT = 405, - EXCLUDE = 406, - EXCLUDING = 407, - EXCLUSIVE = 408, - EXECUTE = 409, - EXISTS = 410, - EXPLAIN = 411, - EXPRESSION = 412, - EXTENSION = 413, - EXTERNAL = 414, - EXTRACT = 415, - FALSE_P = 416, - FAMILY = 417, - FETCH = 418, - FILTER = 419, - FINALIZE = 420, - FIRST_P = 421, - FLOAT_P = 422, - FOLLOWING = 423, - FOR = 424, - FORCE = 425, - FOREIGN = 426, - FORWARD = 427, - FREEZE = 428, - FROM = 429, - FULL = 430, - FUNCTION = 431, - FUNCTIONS = 432, - GENERATED = 433, - GLOBAL = 434, - GRANT = 435, - GRANTED = 436, - GREATEST = 437, - GROUP_P = 438, - GROUPING = 439, - GROUPS = 440, - HANDLER = 441, - HAVING = 442, - HEADER_P = 443, - HOLD = 444, - HOUR_P = 445, - IDENTITY_P = 446, - IF_P = 447, - ILIKE = 448, - IMMEDIATE = 449, - IMMUTABLE = 450, - IMPLICIT_P = 451, - IMPORT_P = 452, - IN_P = 453, - INCLUDE = 454, - INCLUDING = 455, - INCREMENT = 456, - INDEX = 457, - INDEXES = 458, - INHERIT = 459, - INHERITS = 460, - INITIALLY = 461, - INLINE_P = 462, - INNER_P = 463, - INOUT = 464, - INPUT_P = 465, - INSENSITIVE = 466, - INSERT = 467, - INSTEAD = 468, - INT_P = 469, - INTEGER = 470, - INTERSECT = 471, - INTERVAL = 472, - INTO = 473, - INVOKER = 474, - IS = 475, - ISNULL = 476, - ISOLATION = 477, - JOIN = 478, - KEY = 479, - LABEL = 480, - LANGUAGE = 481, - LARGE_P = 482, - LAST_P = 483, - LATERAL_P = 484, - LEADING = 485, - LEAKPROOF = 486, - LEAST = 487, - LEFT = 488, - LEVEL = 489, - LIKE = 490, - LIMIT = 491, - LISTEN = 492, - LOAD = 493, - LOCAL = 494, - LOCALTIME = 495, - LOCALTIMESTAMP = 496, - LOCATION = 497, - LOCK_P = 498, - LOCKED = 499, - LOGGED = 500, - MAPPING = 501, - MATCH = 502, - MATCHED = 503, - MATERIALIZED = 504, - MAXVALUE = 505, - MERGE = 506, - METHOD = 507, - MINUTE_P = 508, - MINVALUE = 509, - MODE = 510, - MONTH_P = 511, - MOVE = 512, - NAME_P = 513, - NAMES = 514, - NATIONAL = 515, - NATURAL = 516, - NCHAR = 517, - NEW = 518, - NEXT = 519, - NFC = 520, - NFD = 521, - NFKC = 522, - NFKD = 523, - NO = 524, - NONE = 525, - NORMALIZE = 526, - NORMALIZED = 527, - NOT = 528, - NOTHING = 529, - NOTIFY = 530, - NOTNULL = 531, - NOWAIT = 532, - NULL_P = 533, - NULLIF = 534, - NULLS_P = 535, - NUMERIC = 536, - OBJECT_P = 537, - OF = 538, - OFF = 539, - OFFSET = 540, - OIDS = 541, - OLD = 542, - ON = 543, - ONLY = 544, - OPERATOR = 545, - OPTION = 546, - OPTIONS = 547, - OR = 548, - ORDER = 549, - ORDINALITY = 550, - OTHERS = 551, - OUT_P = 552, - OUTER_P = 553, - OVER = 554, - OVERLAPS = 555, - OVERLAY = 556, - OVERRIDING = 557, - OWNED = 558, - OWNER = 559, - PARALLEL = 560, - PARAMETER = 561, - PARSER = 562, - PARTIAL = 563, - PARTITION = 564, - PASSING = 565, - PASSWORD = 566, - PLACING = 567, - PLANS = 568, - POLICY = 569, - POSITION = 570, - PRECEDING = 571, - PRECISION = 572, - PRESERVE = 573, - PREPARE = 574, - PREPARED = 575, - PRIMARY = 576, - PRIOR = 577, - PRIVILEGES = 578, - PROCEDURAL = 579, - PROCEDURE = 580, - PROCEDURES = 581, - PROGRAM = 582, - PUBLICATION = 583, - QUOTE = 584, - RANGE = 585, - READ = 586, - REAL = 587, - REASSIGN = 588, - RECHECK = 589, - RECURSIVE = 590, - REF_P = 591, - REFERENCES = 592, - REFERENCING = 593, - REFRESH = 594, - REINDEX = 595, - RELATIVE_P = 596, - RELEASE = 597, - RENAME = 598, - REPEATABLE = 599, - REPLACE = 600, - REPLICA = 601, - RESET = 602, - RESTART = 603, - RESTRICT = 604, - RETURN = 605, - RETURNING = 606, - RETURNS = 607, - REVOKE = 608, - RIGHT = 609, - ROLE = 610, - ROLLBACK = 611, - ROLLUP = 612, - ROUTINE = 613, - ROUTINES = 614, - ROW = 615, - ROWS = 616, - RULE = 617, - SAVEPOINT = 618, - SCHEMA = 619, - SCHEMAS = 620, - SCROLL = 621, - SEARCH = 622, - SECOND_P = 623, - SECURITY = 624, - SELECT = 625, - SEQUENCE = 626, - SEQUENCES = 627, - SERIALIZABLE = 628, - SERVER = 629, - SESSION = 630, - SESSION_USER = 631, - SET = 632, - SETS = 633, - SETOF = 634, - SHARE = 635, - SHOW = 636, - SIMILAR = 637, - SIMPLE = 638, - SKIP = 639, - SMALLINT = 640, - SNAPSHOT = 641, - SOME = 642, - SQL_P = 643, - STABLE = 644, - STANDALONE_P = 645, - START = 646, - STATEMENT = 647, - STATISTICS = 648, - STDIN = 649, - STDOUT = 650, - STORAGE = 651, - STORED = 652, - STRICT_P = 653, - STRIP_P = 654, - SUBSCRIPTION = 655, - SUBSTRING = 656, - SUPPORT = 657, - SYMMETRIC = 658, - SYSID = 659, - SYSTEM_P = 660, - TABLE = 661, - TABLES = 662, - TABLESAMPLE = 663, - TABLESPACE = 664, - TEMP = 665, - TEMPLATE = 666, - TEMPORARY = 667, - TEXT_P = 668, - THEN = 669, - TIES = 670, - TIME = 671, - TIMESTAMP = 672, - TO = 673, - TRAILING = 674, - TRANSACTION = 675, - TRANSFORM = 676, - TREAT = 677, - TRIGGER = 678, - TRIM = 679, - TRUE_P = 680, - TRUNCATE = 681, - TRUSTED = 682, - TYPE_P = 683, - TYPES_P = 684, - UESCAPE = 685, - UNBOUNDED = 686, - UNCOMMITTED = 687, - UNENCRYPTED = 688, - UNION = 689, - UNIQUE = 690, - UNKNOWN = 691, - UNLISTEN = 692, - UNLOGGED = 693, - UNTIL = 694, - UPDATE = 695, - USER = 696, - USING = 697, - VACUUM = 698, - VALID = 699, - VALIDATE = 700, - VALIDATOR = 701, - VALUE_P = 702, - VALUES = 703, - VARCHAR = 704, - VARIADIC = 705, - VARYING = 706, - VERBOSE = 707, - VERSION_P = 708, - VIEW = 709, - VIEWS = 710, - VOLATILE = 711, - WHEN = 712, - WHERE = 713, - WHITESPACE_P = 714, - WINDOW = 715, - WITH = 716, - WITHIN = 717, - WITHOUT = 718, - WORK = 719, - WRAPPER = 720, - WRITE = 721, - XML_P = 722, - XMLATTRIBUTES = 723, - XMLCONCAT = 724, - XMLELEMENT = 725, - XMLEXISTS = 726, - XMLFOREST = 727, - XMLNAMESPACES = 728, - XMLPARSE = 729, - XMLPI = 730, - XMLROOT = 731, - XMLSERIALIZE = 732, - XMLTABLE = 733, - YEAR_P = 734, - YES_P = 735, - ZONE = 736, - NOT_LA = 737, - NULLS_LA = 738, - WITH_LA = 739, - MODE_TYPE_NAME = 740, - MODE_PLPGSQL_EXPR = 741, - MODE_PLPGSQL_ASSIGN1 = 742, - MODE_PLPGSQL_ASSIGN2 = 743, - MODE_PLPGSQL_ASSIGN3 = 744, - UMINUS = 745 + ABSENT = 278, + ABSOLUTE_P = 279, + ACCESS = 280, + ACTION = 281, + ADD_P = 282, + ADMIN = 283, + AFTER = 284, + AGGREGATE = 285, + ALL = 286, + ALSO = 287, + ALTER = 288, + ALWAYS = 289, + ANALYSE = 290, + ANALYZE = 291, + AND = 292, + ANY = 293, + ARRAY = 294, + AS = 295, + ASC = 296, + ASENSITIVE = 297, + ASSERTION = 298, + ASSIGNMENT = 299, + ASYMMETRIC = 300, + ATOMIC = 301, + AT = 302, + ATTACH = 303, + ATTRIBUTE = 304, + AUTHORIZATION = 305, + BACKWARD = 306, + BEFORE = 307, + BEGIN_P = 308, + BETWEEN = 309, + BIGINT = 310, + BINARY = 311, + BIT = 312, + BOOLEAN_P = 313, + BOTH = 314, + BREADTH = 315, + BY = 316, + CACHE = 317, + CALL = 318, + CALLED = 319, + CASCADE = 320, + CASCADED = 321, + CASE = 322, + CAST = 323, + CATALOG_P = 324, + CHAIN = 325, + CHAR_P = 326, + CHARACTER = 327, + CHARACTERISTICS = 328, + CHECK = 329, + CHECKPOINT = 330, + CLASS = 331, + CLOSE = 332, + CLUSTER = 333, + COALESCE = 334, + COLLATE = 335, + COLLATION = 336, + COLUMN = 337, + COLUMNS = 338, + COMMENT = 339, + COMMENTS = 340, + COMMIT = 341, + COMMITTED = 342, + COMPRESSION = 343, + CONCURRENTLY = 344, + CONFIGURATION = 345, + CONFLICT = 346, + CONNECTION = 347, + CONSTRAINT = 348, + CONSTRAINTS = 349, + CONTENT_P = 350, + CONTINUE_P = 351, + CONVERSION_P = 352, + COPY = 353, + COST = 354, + CREATE = 355, + CROSS = 356, + CSV = 357, + CUBE = 358, + CURRENT_P = 359, + CURRENT_CATALOG = 360, + CURRENT_DATE = 361, + CURRENT_ROLE = 362, + CURRENT_SCHEMA = 363, + CURRENT_TIME = 364, + CURRENT_TIMESTAMP = 365, + CURRENT_USER = 366, + CURSOR = 367, + CYCLE = 368, + DATA_P = 369, + DATABASE = 370, + DAY_P = 371, + DEALLOCATE = 372, + DEC = 373, + DECIMAL_P = 374, + DECLARE = 375, + DEFAULT = 376, + DEFAULTS = 377, + DEFERRABLE = 378, + DEFERRED = 379, + DEFINER = 380, + DELETE_P = 381, + DELIMITER = 382, + DELIMITERS = 383, + DEPENDS = 384, + DEPTH = 385, + DESC = 386, + DETACH = 387, + DICTIONARY = 388, + DISABLE_P = 389, + DISCARD = 390, + DISTINCT = 391, + DO = 392, + DOCUMENT_P = 393, + DOMAIN_P = 394, + DOUBLE_P = 395, + DROP = 396, + EACH = 397, + ELSE = 398, + ENABLE_P = 399, + ENCODING = 400, + ENCRYPTED = 401, + END_P = 402, + ENUM_P = 403, + ESCAPE = 404, + EVENT = 405, + EXCEPT = 406, + EXCLUDE = 407, + EXCLUDING = 408, + EXCLUSIVE = 409, + EXECUTE = 410, + EXISTS = 411, + EXPLAIN = 412, + EXPRESSION = 413, + EXTENSION = 414, + EXTERNAL = 415, + EXTRACT = 416, + FALSE_P = 417, + FAMILY = 418, + FETCH = 419, + FILTER = 420, + FINALIZE = 421, + FIRST_P = 422, + FLOAT_P = 423, + FOLLOWING = 424, + FOR = 425, + FORCE = 426, + FOREIGN = 427, + FORMAT = 428, + FORWARD = 429, + FREEZE = 430, + FROM = 431, + FULL = 432, + FUNCTION = 433, + FUNCTIONS = 434, + GENERATED = 435, + GLOBAL = 436, + GRANT = 437, + GRANTED = 438, + GREATEST = 439, + GROUP_P = 440, + GROUPING = 441, + GROUPS = 442, + HANDLER = 443, + HAVING = 444, + HEADER_P = 445, + HOLD = 446, + HOUR_P = 447, + IDENTITY_P = 448, + IF_P = 449, + ILIKE = 450, + IMMEDIATE = 451, + IMMUTABLE = 452, + IMPLICIT_P = 453, + IMPORT_P = 454, + IN_P = 455, + INCLUDE = 456, + INCLUDING = 457, + INCREMENT = 458, + INDENT = 459, + INDEX = 460, + INDEXES = 461, + INHERIT = 462, + INHERITS = 463, + INITIALLY = 464, + INLINE_P = 465, + INNER_P = 466, + INOUT = 467, + INPUT_P = 468, + INSENSITIVE = 469, + INSERT = 470, + INSTEAD = 471, + INT_P = 472, + INTEGER = 473, + INTERSECT = 474, + INTERVAL = 475, + INTO = 476, + INVOKER = 477, + IS = 478, + ISNULL = 479, + ISOLATION = 480, + JOIN = 481, + JSON = 482, + JSON_ARRAY = 483, + JSON_ARRAYAGG = 484, + JSON_OBJECT = 485, + JSON_OBJECTAGG = 486, + KEY = 487, + KEYS = 488, + LABEL = 489, + LANGUAGE = 490, + LARGE_P = 491, + LAST_P = 492, + LATERAL_P = 493, + LEADING = 494, + LEAKPROOF = 495, + LEAST = 496, + LEFT = 497, + LEVEL = 498, + LIKE = 499, + LIMIT = 500, + LISTEN = 501, + LOAD = 502, + LOCAL = 503, + LOCALTIME = 504, + LOCALTIMESTAMP = 505, + LOCATION = 506, + LOCK_P = 507, + LOCKED = 508, + LOGGED = 509, + MAPPING = 510, + MATCH = 511, + MATCHED = 512, + MATERIALIZED = 513, + MAXVALUE = 514, + MERGE = 515, + METHOD = 516, + MINUTE_P = 517, + MINVALUE = 518, + MODE = 519, + MONTH_P = 520, + MOVE = 521, + NAME_P = 522, + NAMES = 523, + NATIONAL = 524, + NATURAL = 525, + NCHAR = 526, + NEW = 527, + NEXT = 528, + NFC = 529, + NFD = 530, + NFKC = 531, + NFKD = 532, + NO = 533, + NONE = 534, + NORMALIZE = 535, + NORMALIZED = 536, + NOT = 537, + NOTHING = 538, + NOTIFY = 539, + NOTNULL = 540, + NOWAIT = 541, + NULL_P = 542, + NULLIF = 543, + NULLS_P = 544, + NUMERIC = 545, + OBJECT_P = 546, + OF = 547, + OFF = 548, + OFFSET = 549, + OIDS = 550, + OLD = 551, + ON = 552, + ONLY = 553, + OPERATOR = 554, + OPTION = 555, + OPTIONS = 556, + OR = 557, + ORDER = 558, + ORDINALITY = 559, + OTHERS = 560, + OUT_P = 561, + OUTER_P = 562, + OVER = 563, + OVERLAPS = 564, + OVERLAY = 565, + OVERRIDING = 566, + OWNED = 567, + OWNER = 568, + PARALLEL = 569, + PARAMETER = 570, + PARSER = 571, + PARTIAL = 572, + PARTITION = 573, + PASSING = 574, + PASSWORD = 575, + PLACING = 576, + PLANS = 577, + POLICY = 578, + POSITION = 579, + PRECEDING = 580, + PRECISION = 581, + PRESERVE = 582, + PREPARE = 583, + PREPARED = 584, + PRIMARY = 585, + PRIOR = 586, + PRIVILEGES = 587, + PROCEDURAL = 588, + PROCEDURE = 589, + PROCEDURES = 590, + PROGRAM = 591, + PUBLICATION = 592, + QUOTE = 593, + RANGE = 594, + READ = 595, + REAL = 596, + REASSIGN = 597, + RECHECK = 598, + RECURSIVE = 599, + REF_P = 600, + REFERENCES = 601, + REFERENCING = 602, + REFRESH = 603, + REINDEX = 604, + RELATIVE_P = 605, + RELEASE = 606, + RENAME = 607, + REPEATABLE = 608, + REPLACE = 609, + REPLICA = 610, + RESET = 611, + RESTART = 612, + RESTRICT = 613, + RETURN = 614, + RETURNING = 615, + RETURNS = 616, + REVOKE = 617, + RIGHT = 618, + ROLE = 619, + ROLLBACK = 620, + ROLLUP = 621, + ROUTINE = 622, + ROUTINES = 623, + ROW = 624, + ROWS = 625, + RULE = 626, + SAVEPOINT = 627, + SCALAR = 628, + SCHEMA = 629, + SCHEMAS = 630, + SCROLL = 631, + SEARCH = 632, + SECOND_P = 633, + SECURITY = 634, + SELECT = 635, + SEQUENCE = 636, + SEQUENCES = 637, + SERIALIZABLE = 638, + SERVER = 639, + SESSION = 640, + SESSION_USER = 641, + SET = 642, + SETS = 643, + SETOF = 644, + SHARE = 645, + SHOW = 646, + SIMILAR = 647, + SIMPLE = 648, + SKIP = 649, + SMALLINT = 650, + SNAPSHOT = 651, + SOME = 652, + SQL_P = 653, + STABLE = 654, + STANDALONE_P = 655, + START = 656, + STATEMENT = 657, + STATISTICS = 658, + STDIN = 659, + STDOUT = 660, + STORAGE = 661, + STORED = 662, + STRICT_P = 663, + STRIP_P = 664, + SUBSCRIPTION = 665, + SUBSTRING = 666, + SUPPORT = 667, + SYMMETRIC = 668, + SYSID = 669, + SYSTEM_P = 670, + SYSTEM_USER = 671, + TABLE = 672, + TABLES = 673, + TABLESAMPLE = 674, + TABLESPACE = 675, + TEMP = 676, + TEMPLATE = 677, + TEMPORARY = 678, + TEXT_P = 679, + THEN = 680, + TIES = 681, + TIME = 682, + TIMESTAMP = 683, + TO = 684, + TRAILING = 685, + TRANSACTION = 686, + TRANSFORM = 687, + TREAT = 688, + TRIGGER = 689, + TRIM = 690, + TRUE_P = 691, + TRUNCATE = 692, + TRUSTED = 693, + TYPE_P = 694, + TYPES_P = 695, + UESCAPE = 696, + UNBOUNDED = 697, + UNCOMMITTED = 698, + UNENCRYPTED = 699, + UNION = 700, + UNIQUE = 701, + UNKNOWN = 702, + UNLISTEN = 703, + UNLOGGED = 704, + UNTIL = 705, + UPDATE = 706, + USER = 707, + USING = 708, + VACUUM = 709, + VALID = 710, + VALIDATE = 711, + VALIDATOR = 712, + VALUE_P = 713, + VALUES = 714, + VARCHAR = 715, + VARIADIC = 716, + VARYING = 717, + VERBOSE = 718, + VERSION_P = 719, + VIEW = 720, + VIEWS = 721, + VOLATILE = 722, + WHEN = 723, + WHERE = 724, + WHITESPACE_P = 725, + WINDOW = 726, + WITH = 727, + WITHIN = 728, + WITHOUT = 729, + WORK = 730, + WRAPPER = 731, + WRITE = 732, + XML_P = 733, + XMLATTRIBUTES = 734, + XMLCONCAT = 735, + XMLELEMENT = 736, + XMLEXISTS = 737, + XMLFOREST = 738, + XMLNAMESPACES = 739, + XMLPARSE = 740, + XMLPI = 741, + XMLROOT = 742, + XMLSERIALIZE = 743, + XMLTABLE = 744, + YEAR_P = 745, + YES_P = 746, + ZONE = 747, + FORMAT_LA = 748, + NOT_LA = 749, + NULLS_LA = 750, + WITH_LA = 751, + WITHOUT_LA = 752, + MODE_TYPE_NAME = 753, + MODE_PLPGSQL_EXPR = 754, + MODE_PLPGSQL_ASSIGN1 = 755, + MODE_PLPGSQL_ASSIGN2 = 756, + MODE_PLPGSQL_ASSIGN3 = 757, + UMINUS = 758 }; #endif /* Tokens. */ @@ -645,474 +659,487 @@ #define SQL_COMMENT 275 #define C_COMMENT 276 #define ABORT_P 277 -#define ABSOLUTE_P 278 -#define ACCESS 279 -#define ACTION 280 -#define ADD_P 281 -#define ADMIN 282 -#define AFTER 283 -#define AGGREGATE 284 -#define ALL 285 -#define ALSO 286 -#define ALTER 287 -#define ALWAYS 288 -#define ANALYSE 289 -#define ANALYZE 290 -#define AND 291 -#define ANY 292 -#define ARRAY 293 -#define AS 294 -#define ASC 295 -#define ASENSITIVE 296 -#define ASSERTION 297 -#define ASSIGNMENT 298 -#define ASYMMETRIC 299 -#define ATOMIC 300 -#define AT 301 -#define ATTACH 302 -#define ATTRIBUTE 303 -#define AUTHORIZATION 304 -#define BACKWARD 305 -#define BEFORE 306 -#define BEGIN_P 307 -#define BETWEEN 308 -#define BIGINT 309 -#define BINARY 310 -#define BIT 311 -#define BOOLEAN_P 312 -#define BOTH 313 -#define BREADTH 314 -#define BY 315 -#define CACHE 316 -#define CALL 317 -#define CALLED 318 -#define CASCADE 319 -#define CASCADED 320 -#define CASE 321 -#define CAST 322 -#define CATALOG_P 323 -#define CHAIN 324 -#define CHAR_P 325 -#define CHARACTER 326 -#define CHARACTERISTICS 327 -#define CHECK 328 -#define CHECKPOINT 329 -#define CLASS 330 -#define CLOSE 331 -#define CLUSTER 332 -#define COALESCE 333 -#define COLLATE 334 -#define COLLATION 335 -#define COLUMN 336 -#define COLUMNS 337 -#define COMMENT 338 -#define COMMENTS 339 -#define COMMIT 340 -#define COMMITTED 341 -#define COMPRESSION 342 -#define CONCURRENTLY 343 -#define CONFIGURATION 344 -#define CONFLICT 345 -#define CONNECTION 346 -#define CONSTRAINT 347 -#define CONSTRAINTS 348 -#define CONTENT_P 349 -#define CONTINUE_P 350 -#define CONVERSION_P 351 -#define COPY 352 -#define COST 353 -#define CREATE 354 -#define CROSS 355 -#define CSV 356 -#define CUBE 357 -#define CURRENT_P 358 -#define CURRENT_CATALOG 359 -#define CURRENT_DATE 360 -#define CURRENT_ROLE 361 -#define CURRENT_SCHEMA 362 -#define CURRENT_TIME 363 -#define CURRENT_TIMESTAMP 364 -#define CURRENT_USER 365 -#define CURSOR 366 -#define CYCLE 367 -#define DATA_P 368 -#define DATABASE 369 -#define DAY_P 370 -#define DEALLOCATE 371 -#define DEC 372 -#define DECIMAL_P 373 -#define DECLARE 374 -#define DEFAULT 375 -#define DEFAULTS 376 -#define DEFERRABLE 377 -#define DEFERRED 378 -#define DEFINER 379 -#define DELETE_P 380 -#define DELIMITER 381 -#define DELIMITERS 382 -#define DEPENDS 383 -#define DEPTH 384 -#define DESC 385 -#define DETACH 386 -#define DICTIONARY 387 -#define DISABLE_P 388 -#define DISCARD 389 -#define DISTINCT 390 -#define DO 391 -#define DOCUMENT_P 392 -#define DOMAIN_P 393 -#define DOUBLE_P 394 -#define DROP 395 -#define EACH 396 -#define ELSE 397 -#define ENABLE_P 398 -#define ENCODING 399 -#define ENCRYPTED 400 -#define END_P 401 -#define ENUM_P 402 -#define ESCAPE 403 -#define EVENT 404 -#define EXCEPT 405 -#define EXCLUDE 406 -#define EXCLUDING 407 -#define EXCLUSIVE 408 -#define EXECUTE 409 -#define EXISTS 410 -#define EXPLAIN 411 -#define EXPRESSION 412 -#define EXTENSION 413 -#define EXTERNAL 414 -#define EXTRACT 415 -#define FALSE_P 416 -#define FAMILY 417 -#define FETCH 418 -#define FILTER 419 -#define FINALIZE 420 -#define FIRST_P 421 -#define FLOAT_P 422 -#define FOLLOWING 423 -#define FOR 424 -#define FORCE 425 -#define FOREIGN 426 -#define FORWARD 427 -#define FREEZE 428 -#define FROM 429 -#define FULL 430 -#define FUNCTION 431 -#define FUNCTIONS 432 -#define GENERATED 433 -#define GLOBAL 434 -#define GRANT 435 -#define GRANTED 436 -#define GREATEST 437 -#define GROUP_P 438 -#define GROUPING 439 -#define GROUPS 440 -#define HANDLER 441 -#define HAVING 442 -#define HEADER_P 443 -#define HOLD 444 -#define HOUR_P 445 -#define IDENTITY_P 446 -#define IF_P 447 -#define ILIKE 448 -#define IMMEDIATE 449 -#define IMMUTABLE 450 -#define IMPLICIT_P 451 -#define IMPORT_P 452 -#define IN_P 453 -#define INCLUDE 454 -#define INCLUDING 455 -#define INCREMENT 456 -#define INDEX 457 -#define INDEXES 458 -#define INHERIT 459 -#define INHERITS 460 -#define INITIALLY 461 -#define INLINE_P 462 -#define INNER_P 463 -#define INOUT 464 -#define INPUT_P 465 -#define INSENSITIVE 466 -#define INSERT 467 -#define INSTEAD 468 -#define INT_P 469 -#define INTEGER 470 -#define INTERSECT 471 -#define INTERVAL 472 -#define INTO 473 -#define INVOKER 474 -#define IS 475 -#define ISNULL 476 -#define ISOLATION 477 -#define JOIN 478 -#define KEY 479 -#define LABEL 480 -#define LANGUAGE 481 -#define LARGE_P 482 -#define LAST_P 483 -#define LATERAL_P 484 -#define LEADING 485 -#define LEAKPROOF 486 -#define LEAST 487 -#define LEFT 488 -#define LEVEL 489 -#define LIKE 490 -#define LIMIT 491 -#define LISTEN 492 -#define LOAD 493 -#define LOCAL 494 -#define LOCALTIME 495 -#define LOCALTIMESTAMP 496 -#define LOCATION 497 -#define LOCK_P 498 -#define LOCKED 499 -#define LOGGED 500 -#define MAPPING 501 -#define MATCH 502 -#define MATCHED 503 -#define MATERIALIZED 504 -#define MAXVALUE 505 -#define MERGE 506 -#define METHOD 507 -#define MINUTE_P 508 -#define MINVALUE 509 -#define MODE 510 -#define MONTH_P 511 -#define MOVE 512 -#define NAME_P 513 -#define NAMES 514 -#define NATIONAL 515 -#define NATURAL 516 -#define NCHAR 517 -#define NEW 518 -#define NEXT 519 -#define NFC 520 -#define NFD 521 -#define NFKC 522 -#define NFKD 523 -#define NO 524 -#define NONE 525 -#define NORMALIZE 526 -#define NORMALIZED 527 -#define NOT 528 -#define NOTHING 529 -#define NOTIFY 530 -#define NOTNULL 531 -#define NOWAIT 532 -#define NULL_P 533 -#define NULLIF 534 -#define NULLS_P 535 -#define NUMERIC 536 -#define OBJECT_P 537 -#define OF 538 -#define OFF 539 -#define OFFSET 540 -#define OIDS 541 -#define OLD 542 -#define ON 543 -#define ONLY 544 -#define OPERATOR 545 -#define OPTION 546 -#define OPTIONS 547 -#define OR 548 -#define ORDER 549 -#define ORDINALITY 550 -#define OTHERS 551 -#define OUT_P 552 -#define OUTER_P 553 -#define OVER 554 -#define OVERLAPS 555 -#define OVERLAY 556 -#define OVERRIDING 557 -#define OWNED 558 -#define OWNER 559 -#define PARALLEL 560 -#define PARAMETER 561 -#define PARSER 562 -#define PARTIAL 563 -#define PARTITION 564 -#define PASSING 565 -#define PASSWORD 566 -#define PLACING 567 -#define PLANS 568 -#define POLICY 569 -#define POSITION 570 -#define PRECEDING 571 -#define PRECISION 572 -#define PRESERVE 573 -#define PREPARE 574 -#define PREPARED 575 -#define PRIMARY 576 -#define PRIOR 577 -#define PRIVILEGES 578 -#define PROCEDURAL 579 -#define PROCEDURE 580 -#define PROCEDURES 581 -#define PROGRAM 582 -#define PUBLICATION 583 -#define QUOTE 584 -#define RANGE 585 -#define READ 586 -#define REAL 587 -#define REASSIGN 588 -#define RECHECK 589 -#define RECURSIVE 590 -#define REF_P 591 -#define REFERENCES 592 -#define REFERENCING 593 -#define REFRESH 594 -#define REINDEX 595 -#define RELATIVE_P 596 -#define RELEASE 597 -#define RENAME 598 -#define REPEATABLE 599 -#define REPLACE 600 -#define REPLICA 601 -#define RESET 602 -#define RESTART 603 -#define RESTRICT 604 -#define RETURN 605 -#define RETURNING 606 -#define RETURNS 607 -#define REVOKE 608 -#define RIGHT 609 -#define ROLE 610 -#define ROLLBACK 611 -#define ROLLUP 612 -#define ROUTINE 613 -#define ROUTINES 614 -#define ROW 615 -#define ROWS 616 -#define RULE 617 -#define SAVEPOINT 618 -#define SCHEMA 619 -#define SCHEMAS 620 -#define SCROLL 621 -#define SEARCH 622 -#define SECOND_P 623 -#define SECURITY 624 -#define SELECT 625 -#define SEQUENCE 626 -#define SEQUENCES 627 -#define SERIALIZABLE 628 -#define SERVER 629 -#define SESSION 630 -#define SESSION_USER 631 -#define SET 632 -#define SETS 633 -#define SETOF 634 -#define SHARE 635 -#define SHOW 636 -#define SIMILAR 637 -#define SIMPLE 638 -#define SKIP 639 -#define SMALLINT 640 -#define SNAPSHOT 641 -#define SOME 642 -#define SQL_P 643 -#define STABLE 644 -#define STANDALONE_P 645 -#define START 646 -#define STATEMENT 647 -#define STATISTICS 648 -#define STDIN 649 -#define STDOUT 650 -#define STORAGE 651 -#define STORED 652 -#define STRICT_P 653 -#define STRIP_P 654 -#define SUBSCRIPTION 655 -#define SUBSTRING 656 -#define SUPPORT 657 -#define SYMMETRIC 658 -#define SYSID 659 -#define SYSTEM_P 660 -#define TABLE 661 -#define TABLES 662 -#define TABLESAMPLE 663 -#define TABLESPACE 664 -#define TEMP 665 -#define TEMPLATE 666 -#define TEMPORARY 667 -#define TEXT_P 668 -#define THEN 669 -#define TIES 670 -#define TIME 671 -#define TIMESTAMP 672 -#define TO 673 -#define TRAILING 674 -#define TRANSACTION 675 -#define TRANSFORM 676 -#define TREAT 677 -#define TRIGGER 678 -#define TRIM 679 -#define TRUE_P 680 -#define TRUNCATE 681 -#define TRUSTED 682 -#define TYPE_P 683 -#define TYPES_P 684 -#define UESCAPE 685 -#define UNBOUNDED 686 -#define UNCOMMITTED 687 -#define UNENCRYPTED 688 -#define UNION 689 -#define UNIQUE 690 -#define UNKNOWN 691 -#define UNLISTEN 692 -#define UNLOGGED 693 -#define UNTIL 694 -#define UPDATE 695 -#define USER 696 -#define USING 697 -#define VACUUM 698 -#define VALID 699 -#define VALIDATE 700 -#define VALIDATOR 701 -#define VALUE_P 702 -#define VALUES 703 -#define VARCHAR 704 -#define VARIADIC 705 -#define VARYING 706 -#define VERBOSE 707 -#define VERSION_P 708 -#define VIEW 709 -#define VIEWS 710 -#define VOLATILE 711 -#define WHEN 712 -#define WHERE 713 -#define WHITESPACE_P 714 -#define WINDOW 715 -#define WITH 716 -#define WITHIN 717 -#define WITHOUT 718 -#define WORK 719 -#define WRAPPER 720 -#define WRITE 721 -#define XML_P 722 -#define XMLATTRIBUTES 723 -#define XMLCONCAT 724 -#define XMLELEMENT 725 -#define XMLEXISTS 726 -#define XMLFOREST 727 -#define XMLNAMESPACES 728 -#define XMLPARSE 729 -#define XMLPI 730 -#define XMLROOT 731 -#define XMLSERIALIZE 732 -#define XMLTABLE 733 -#define YEAR_P 734 -#define YES_P 735 -#define ZONE 736 -#define NOT_LA 737 -#define NULLS_LA 738 -#define WITH_LA 739 -#define MODE_TYPE_NAME 740 -#define MODE_PLPGSQL_EXPR 741 -#define MODE_PLPGSQL_ASSIGN1 742 -#define MODE_PLPGSQL_ASSIGN2 743 -#define MODE_PLPGSQL_ASSIGN3 744 -#define UMINUS 745 +#define ABSENT 278 +#define ABSOLUTE_P 279 +#define ACCESS 280 +#define ACTION 281 +#define ADD_P 282 +#define ADMIN 283 +#define AFTER 284 +#define AGGREGATE 285 +#define ALL 286 +#define ALSO 287 +#define ALTER 288 +#define ALWAYS 289 +#define ANALYSE 290 +#define ANALYZE 291 +#define AND 292 +#define ANY 293 +#define ARRAY 294 +#define AS 295 +#define ASC 296 +#define ASENSITIVE 297 +#define ASSERTION 298 +#define ASSIGNMENT 299 +#define ASYMMETRIC 300 +#define ATOMIC 301 +#define AT 302 +#define ATTACH 303 +#define ATTRIBUTE 304 +#define AUTHORIZATION 305 +#define BACKWARD 306 +#define BEFORE 307 +#define BEGIN_P 308 +#define BETWEEN 309 +#define BIGINT 310 +#define BINARY 311 +#define BIT 312 +#define BOOLEAN_P 313 +#define BOTH 314 +#define BREADTH 315 +#define BY 316 +#define CACHE 317 +#define CALL 318 +#define CALLED 319 +#define CASCADE 320 +#define CASCADED 321 +#define CASE 322 +#define CAST 323 +#define CATALOG_P 324 +#define CHAIN 325 +#define CHAR_P 326 +#define CHARACTER 327 +#define CHARACTERISTICS 328 +#define CHECK 329 +#define CHECKPOINT 330 +#define CLASS 331 +#define CLOSE 332 +#define CLUSTER 333 +#define COALESCE 334 +#define COLLATE 335 +#define COLLATION 336 +#define COLUMN 337 +#define COLUMNS 338 +#define COMMENT 339 +#define COMMENTS 340 +#define COMMIT 341 +#define COMMITTED 342 +#define COMPRESSION 343 +#define CONCURRENTLY 344 +#define CONFIGURATION 345 +#define CONFLICT 346 +#define CONNECTION 347 +#define CONSTRAINT 348 +#define CONSTRAINTS 349 +#define CONTENT_P 350 +#define CONTINUE_P 351 +#define CONVERSION_P 352 +#define COPY 353 +#define COST 354 +#define CREATE 355 +#define CROSS 356 +#define CSV 357 +#define CUBE 358 +#define CURRENT_P 359 +#define CURRENT_CATALOG 360 +#define CURRENT_DATE 361 +#define CURRENT_ROLE 362 +#define CURRENT_SCHEMA 363 +#define CURRENT_TIME 364 +#define CURRENT_TIMESTAMP 365 +#define CURRENT_USER 366 +#define CURSOR 367 +#define CYCLE 368 +#define DATA_P 369 +#define DATABASE 370 +#define DAY_P 371 +#define DEALLOCATE 372 +#define DEC 373 +#define DECIMAL_P 374 +#define DECLARE 375 +#define DEFAULT 376 +#define DEFAULTS 377 +#define DEFERRABLE 378 +#define DEFERRED 379 +#define DEFINER 380 +#define DELETE_P 381 +#define DELIMITER 382 +#define DELIMITERS 383 +#define DEPENDS 384 +#define DEPTH 385 +#define DESC 386 +#define DETACH 387 +#define DICTIONARY 388 +#define DISABLE_P 389 +#define DISCARD 390 +#define DISTINCT 391 +#define DO 392 +#define DOCUMENT_P 393 +#define DOMAIN_P 394 +#define DOUBLE_P 395 +#define DROP 396 +#define EACH 397 +#define ELSE 398 +#define ENABLE_P 399 +#define ENCODING 400 +#define ENCRYPTED 401 +#define END_P 402 +#define ENUM_P 403 +#define ESCAPE 404 +#define EVENT 405 +#define EXCEPT 406 +#define EXCLUDE 407 +#define EXCLUDING 408 +#define EXCLUSIVE 409 +#define EXECUTE 410 +#define EXISTS 411 +#define EXPLAIN 412 +#define EXPRESSION 413 +#define EXTENSION 414 +#define EXTERNAL 415 +#define EXTRACT 416 +#define FALSE_P 417 +#define FAMILY 418 +#define FETCH 419 +#define FILTER 420 +#define FINALIZE 421 +#define FIRST_P 422 +#define FLOAT_P 423 +#define FOLLOWING 424 +#define FOR 425 +#define FORCE 426 +#define FOREIGN 427 +#define FORMAT 428 +#define FORWARD 429 +#define FREEZE 430 +#define FROM 431 +#define FULL 432 +#define FUNCTION 433 +#define FUNCTIONS 434 +#define GENERATED 435 +#define GLOBAL 436 +#define GRANT 437 +#define GRANTED 438 +#define GREATEST 439 +#define GROUP_P 440 +#define GROUPING 441 +#define GROUPS 442 +#define HANDLER 443 +#define HAVING 444 +#define HEADER_P 445 +#define HOLD 446 +#define HOUR_P 447 +#define IDENTITY_P 448 +#define IF_P 449 +#define ILIKE 450 +#define IMMEDIATE 451 +#define IMMUTABLE 452 +#define IMPLICIT_P 453 +#define IMPORT_P 454 +#define IN_P 455 +#define INCLUDE 456 +#define INCLUDING 457 +#define INCREMENT 458 +#define INDENT 459 +#define INDEX 460 +#define INDEXES 461 +#define INHERIT 462 +#define INHERITS 463 +#define INITIALLY 464 +#define INLINE_P 465 +#define INNER_P 466 +#define INOUT 467 +#define INPUT_P 468 +#define INSENSITIVE 469 +#define INSERT 470 +#define INSTEAD 471 +#define INT_P 472 +#define INTEGER 473 +#define INTERSECT 474 +#define INTERVAL 475 +#define INTO 476 +#define INVOKER 477 +#define IS 478 +#define ISNULL 479 +#define ISOLATION 480 +#define JOIN 481 +#define JSON 482 +#define JSON_ARRAY 483 +#define JSON_ARRAYAGG 484 +#define JSON_OBJECT 485 +#define JSON_OBJECTAGG 486 +#define KEY 487 +#define KEYS 488 +#define LABEL 489 +#define LANGUAGE 490 +#define LARGE_P 491 +#define LAST_P 492 +#define LATERAL_P 493 +#define LEADING 494 +#define LEAKPROOF 495 +#define LEAST 496 +#define LEFT 497 +#define LEVEL 498 +#define LIKE 499 +#define LIMIT 500 +#define LISTEN 501 +#define LOAD 502 +#define LOCAL 503 +#define LOCALTIME 504 +#define LOCALTIMESTAMP 505 +#define LOCATION 506 +#define LOCK_P 507 +#define LOCKED 508 +#define LOGGED 509 +#define MAPPING 510 +#define MATCH 511 +#define MATCHED 512 +#define MATERIALIZED 513 +#define MAXVALUE 514 +#define MERGE 515 +#define METHOD 516 +#define MINUTE_P 517 +#define MINVALUE 518 +#define MODE 519 +#define MONTH_P 520 +#define MOVE 521 +#define NAME_P 522 +#define NAMES 523 +#define NATIONAL 524 +#define NATURAL 525 +#define NCHAR 526 +#define NEW 527 +#define NEXT 528 +#define NFC 529 +#define NFD 530 +#define NFKC 531 +#define NFKD 532 +#define NO 533 +#define NONE 534 +#define NORMALIZE 535 +#define NORMALIZED 536 +#define NOT 537 +#define NOTHING 538 +#define NOTIFY 539 +#define NOTNULL 540 +#define NOWAIT 541 +#define NULL_P 542 +#define NULLIF 543 +#define NULLS_P 544 +#define NUMERIC 545 +#define OBJECT_P 546 +#define OF 547 +#define OFF 548 +#define OFFSET 549 +#define OIDS 550 +#define OLD 551 +#define ON 552 +#define ONLY 553 +#define OPERATOR 554 +#define OPTION 555 +#define OPTIONS 556 +#define OR 557 +#define ORDER 558 +#define ORDINALITY 559 +#define OTHERS 560 +#define OUT_P 561 +#define OUTER_P 562 +#define OVER 563 +#define OVERLAPS 564 +#define OVERLAY 565 +#define OVERRIDING 566 +#define OWNED 567 +#define OWNER 568 +#define PARALLEL 569 +#define PARAMETER 570 +#define PARSER 571 +#define PARTIAL 572 +#define PARTITION 573 +#define PASSING 574 +#define PASSWORD 575 +#define PLACING 576 +#define PLANS 577 +#define POLICY 578 +#define POSITION 579 +#define PRECEDING 580 +#define PRECISION 581 +#define PRESERVE 582 +#define PREPARE 583 +#define PREPARED 584 +#define PRIMARY 585 +#define PRIOR 586 +#define PRIVILEGES 587 +#define PROCEDURAL 588 +#define PROCEDURE 589 +#define PROCEDURES 590 +#define PROGRAM 591 +#define PUBLICATION 592 +#define QUOTE 593 +#define RANGE 594 +#define READ 595 +#define REAL 596 +#define REASSIGN 597 +#define RECHECK 598 +#define RECURSIVE 599 +#define REF_P 600 +#define REFERENCES 601 +#define REFERENCING 602 +#define REFRESH 603 +#define REINDEX 604 +#define RELATIVE_P 605 +#define RELEASE 606 +#define RENAME 607 +#define REPEATABLE 608 +#define REPLACE 609 +#define REPLICA 610 +#define RESET 611 +#define RESTART 612 +#define RESTRICT 613 +#define RETURN 614 +#define RETURNING 615 +#define RETURNS 616 +#define REVOKE 617 +#define RIGHT 618 +#define ROLE 619 +#define ROLLBACK 620 +#define ROLLUP 621 +#define ROUTINE 622 +#define ROUTINES 623 +#define ROW 624 +#define ROWS 625 +#define RULE 626 +#define SAVEPOINT 627 +#define SCALAR 628 +#define SCHEMA 629 +#define SCHEMAS 630 +#define SCROLL 631 +#define SEARCH 632 +#define SECOND_P 633 +#define SECURITY 634 +#define SELECT 635 +#define SEQUENCE 636 +#define SEQUENCES 637 +#define SERIALIZABLE 638 +#define SERVER 639 +#define SESSION 640 +#define SESSION_USER 641 +#define SET 642 +#define SETS 643 +#define SETOF 644 +#define SHARE 645 +#define SHOW 646 +#define SIMILAR 647 +#define SIMPLE 648 +#define SKIP 649 +#define SMALLINT 650 +#define SNAPSHOT 651 +#define SOME 652 +#define SQL_P 653 +#define STABLE 654 +#define STANDALONE_P 655 +#define START 656 +#define STATEMENT 657 +#define STATISTICS 658 +#define STDIN 659 +#define STDOUT 660 +#define STORAGE 661 +#define STORED 662 +#define STRICT_P 663 +#define STRIP_P 664 +#define SUBSCRIPTION 665 +#define SUBSTRING 666 +#define SUPPORT 667 +#define SYMMETRIC 668 +#define SYSID 669 +#define SYSTEM_P 670 +#define SYSTEM_USER 671 +#define TABLE 672 +#define TABLES 673 +#define TABLESAMPLE 674 +#define TABLESPACE 675 +#define TEMP 676 +#define TEMPLATE 677 +#define TEMPORARY 678 +#define TEXT_P 679 +#define THEN 680 +#define TIES 681 +#define TIME 682 +#define TIMESTAMP 683 +#define TO 684 +#define TRAILING 685 +#define TRANSACTION 686 +#define TRANSFORM 687 +#define TREAT 688 +#define TRIGGER 689 +#define TRIM 690 +#define TRUE_P 691 +#define TRUNCATE 692 +#define TRUSTED 693 +#define TYPE_P 694 +#define TYPES_P 695 +#define UESCAPE 696 +#define UNBOUNDED 697 +#define UNCOMMITTED 698 +#define UNENCRYPTED 699 +#define UNION 700 +#define UNIQUE 701 +#define UNKNOWN 702 +#define UNLISTEN 703 +#define UNLOGGED 704 +#define UNTIL 705 +#define UPDATE 706 +#define USER 707 +#define USING 708 +#define VACUUM 709 +#define VALID 710 +#define VALIDATE 711 +#define VALIDATOR 712 +#define VALUE_P 713 +#define VALUES 714 +#define VARCHAR 715 +#define VARIADIC 716 +#define VARYING 717 +#define VERBOSE 718 +#define VERSION_P 719 +#define VIEW 720 +#define VIEWS 721 +#define VOLATILE 722 +#define WHEN 723 +#define WHERE 724 +#define WHITESPACE_P 725 +#define WINDOW 726 +#define WITH 727 +#define WITHIN 728 +#define WITHOUT 729 +#define WORK 730 +#define WRAPPER 731 +#define WRITE 732 +#define XML_P 733 +#define XMLATTRIBUTES 734 +#define XMLCONCAT 735 +#define XMLELEMENT 736 +#define XMLEXISTS 737 +#define XMLFOREST 738 +#define XMLNAMESPACES 739 +#define XMLPARSE 740 +#define XMLPI 741 +#define XMLROOT 742 +#define XMLSERIALIZE 743 +#define XMLTABLE 744 +#define YEAR_P 745 +#define YES_P 746 +#define ZONE 747 +#define FORMAT_LA 748 +#define NOT_LA 749 +#define NULLS_LA 750 +#define WITH_LA 751 +#define WITHOUT_LA 752 +#define MODE_TYPE_NAME 753 +#define MODE_PLPGSQL_EXPR 754 +#define MODE_PLPGSQL_ASSIGN1 755 +#define MODE_PLPGSQL_ASSIGN2 756 +#define MODE_PLPGSQL_ASSIGN3 757 +#define UMINUS 758 @@ -1127,7 +1154,7 @@ * gram.y * POSTGRESQL BISON rules/actions * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -1176,9 +1203,9 @@ #include "catalog/pg_trigger.h" #include "commands/defrem.h" #include "commands/trigger.h" +#include "gramparse.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "parser/gramparse.h" #include "parser/parser.h" #include "storage/lmgr.h" #include "utils/date.h" @@ -1224,10 +1251,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree @@ -1331,8 +1355,7 @@ static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, static List *mergeTableFuncParameters(List *func_args, List *columns); static TypeName *TableFuncTypeName(List *columns); static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_t yyscanner); -static RangeVar *makeRangeVarFromQualifiedName(char *name, List *rels, - int location, +static RangeVar *makeRangeVarFromQualifiedName(char *name, List *namelist, int location, core_yyscan_t yyscanner); static void SplitColQualList(List *qualList, List **constraintList, CollateClause **collClause, @@ -1340,6 +1363,7 @@ static void SplitColQualList(List *qualList, static void processCASbits(int cas_bits, int location, const char *constrType, bool *deferrable, bool *initdeferred, bool *not_valid, bool *no_inherit, core_yyscan_t yyscanner); +static PartitionStrategy parsePartitionStrategy(char *strategy); static void preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner); static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); @@ -1366,7 +1390,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 237 "gram.y" +#line 234 "gram.y" { core_YYSTYPE core_yystype; /* these fields must match core_YYSTYPE: */ @@ -1418,7 +1442,7 @@ typedef union YYSTYPE struct KeyAction *keyaction; } /* Line 193 of yacc.c. */ -#line 1362 "gram.c" +#line 1385 "gram.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -1443,7 +1467,7 @@ typedef struct YYLTYPE /* Line 216 of yacc.c. */ -#line 1387 "gram.c" +#line 1410 "gram.c" #ifdef short # undef short @@ -1658,22 +1682,22 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 902 +#define YYFINAL 906 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 111265 +#define YYLAST 115760 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 508 +#define YYNTOKENS 521 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 688 +#define YYNNTS 706 /* YYNRULES -- Number of rules. */ -#define YYNRULES 3219 +#define YYNRULES 3296 /* YYNRULES -- Number of states. */ -#define YYNSTATES 6106 +#define YYNSTATES 6237 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 745 +#define YYMAXUTOK 758 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1684,13 +1708,13 @@ static const yytype_uint16 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, 497, 2, 2, - 502, 503, 495, 493, 506, 494, 504, 496, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 507, 505, - 490, 492, 491, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 510, 2, 2, + 515, 516, 508, 506, 519, 507, 517, 509, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 520, 518, + 503, 505, 504, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 500, 2, 501, 498, 2, 2, 2, 2, 2, + 2, 513, 2, 514, 511, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1755,7 +1779,8 @@ static const yytype_uint16 yytranslate[] = 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, 499 + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 512 }; #if YYDEBUG @@ -1776,1760 +1801,1800 @@ static const yytype_uint16 yyprhs[] = 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, - 266, 268, 270, 272, 274, 276, 278, 279, 282, 288, - 290, 292, 293, 296, 297, 300, 301, 304, 307, 310, - 314, 318, 322, 324, 328, 332, 335, 337, 339, 342, - 345, 348, 352, 356, 362, 368, 374, 375, 379, 385, - 391, 397, 403, 407, 413, 417, 423, 427, 433, 439, - 446, 448, 450, 457, 462, 472, 480, 482, 483, 486, - 487, 489, 491, 493, 495, 497, 499, 502, 506, 510, - 513, 519, 521, 525, 529, 533, 537, 539, 543, 547, - 550, 553, 556, 559, 562, 565, 569, 573, 577, 581, - 585, 587, 591, 593, 597, 599, 601, 603, 606, 609, - 612, 614, 616, 618, 620, 622, 624, 626, 628, 632, - 638, 640, 642, 644, 646, 648, 649, 651, 653, 656, - 658, 661, 665, 668, 670, 672, 675, 677, 680, 682, - 685, 689, 694, 698, 701, 706, 708, 710, 712, 714, - 716, 719, 722, 725, 728, 731, 736, 743, 748, 755, - 766, 780, 785, 792, 797, 808, 822, 827, 834, 839, - 846, 852, 860, 872, 887, 893, 901, 903, 907, 912, - 917, 922, 926, 929, 935, 939, 946, 951, 958, 965, - 971, 979, 986, 993, 999, 1005, 1012, 1018, 1028, 1033, - 1039, 1047, 1054, 1059, 1068, 1073, 1076, 1081, 1085, 1092, - 1097, 1101, 1105, 1109, 1112, 1115, 1119, 1124, 1129, 1133, - 1137, 1141, 1145, 1149, 1153, 1158, 1163, 1167, 1170, 1174, - 1177, 1180, 1184, 1189, 1193, 1196, 1199, 1203, 1208, 1213, - 1218, 1224, 1226, 1230, 1233, 1235, 1237, 1238, 1241, 1242, - 1245, 1246, 1248, 1250, 1252, 1256, 1260, 1263, 1264, 1266, - 1270, 1274, 1276, 1282, 1286, 1288, 1291, 1293, 1297, 1300, - 1304, 1311, 1318, 1329, 1331, 1334, 1336, 1340, 1345, 1347, - 1351, 1356, 1363, 1368, 1377, 1380, 1383, 1395, 1405, 1407, - 1409, 1411, 1412, 1414, 1416, 1418, 1420, 1424, 1427, 1428, - 1430, 1432, 1436, 1440, 1442, 1444, 1448, 1452, 1456, 1460, - 1465, 1469, 1472, 1474, 1475, 1479, 1480, 1482, 1483, 1485, - 1489, 1492, 1494, 1496, 1498, 1502, 1503, 1505, 1509, 1511, - 1525, 1542, 1555, 1571, 1586, 1604, 1606, 1608, 1611, 1614, - 1617, 1620, 1622, 1623, 1625, 1626, 1630, 1631, 1633, 1637, - 1639, 1643, 1645, 1647, 1649, 1651, 1653, 1659, 1662, 1667, - 1670, 1673, 1675, 1676, 1679, 1680, 1684, 1686, 1688, 1691, - 1694, 1696, 1701, 1706, 1712, 1715, 1721, 1729, 1735, 1738, - 1742, 1743, 1745, 1748, 1750, 1753, 1756, 1759, 1763, 1767, - 1771, 1772, 1774, 1776, 1778, 1780, 1782, 1784, 1786, 1788, - 1790, 1792, 1796, 1798, 1804, 1814, 1818, 1828, 1833, 1844, - 1856, 1859, 1860, 1864, 1865, 1867, 1871, 1873, 1878, 1879, - 1882, 1885, 1888, 1889, 1891, 1895, 1899, 1906, 1911, 1912, - 1914, 1916, 1919, 1922, 1923, 1927, 1931, 1934, 1936, 1938, - 1942, 1946, 1951, 1952, 1954, 1955, 1962, 1964, 1968, 1972, - 1976, 1982, 1985, 1986, 1989, 1992, 1993, 1997, 2002, 2007, - 2008, 2011, 2012, 2017, 2018, 2022, 2031, 2043, 2045, 2049, - 2051, 2053, 2057, 2064, 2073, 2081, 2092, 2099, 2102, 2106, - 2107, 2116, 2128, 2134, 2136, 2137, 2144, 2150, 2159, 2164, - 2171, 2173, 2174, 2178, 2179, 2181, 2184, 2187, 2190, 2192, - 2195, 2199, 2202, 2205, 2208, 2211, 2215, 2219, 2223, 2225, - 2229, 2231, 2232, 2234, 2237, 2240, 2242, 2244, 2248, 2255, - 2266, 2268, 2269, 2271, 2274, 2277, 2278, 2281, 2284, 2286, - 2287, 2289, 2290, 2298, 2301, 2302, 2306, 2312, 2318, 2327, - 2330, 2331, 2334, 2337, 2340, 2342, 2348, 2351, 2352, 2355, - 2362, 2369, 2376, 2387, 2394, 2401, 2408, 2418, 2428, 2435, - 2442, 2452, 2459, 2467, 2470, 2473, 2476, 2479, 2481, 2484, - 2486, 2487, 2495, 2502, 2507, 2508, 2510, 2514, 2519, 2521, - 2525, 2527, 2530, 2533, 2536, 2539, 2541, 2543, 2554, 2568, - 2571, 2572, 2575, 2578, 2580, 2581, 2587, 2592, 2597, 2609, - 2624, 2637, 2653, 2665, 2668, 2670, 2675, 2676, 2685, 2697, - 2699, 2701, 2709, 2719, 2728, 2739, 2748, 2753, 2754, 2760, - 2761, 2764, 2765, 2768, 2769, 2772, 2773, 2776, 2777, 2779, - 2781, 2783, 2785, 2787, 2796, 2798, 2800, 2818, 2840, 2842, - 2844, 2847, 2849, 2853, 2855, 2857, 2859, 2863, 2865, 2868, - 2869, 2871, 2874, 2879, 2881, 2883, 2885, 2887, 2889, 2893, - 2894, 2896, 2897, 2899, 2901, 2906, 2907, 2909, 2911, 2913, - 2917, 2918, 2920, 2922, 2924, 2926, 2929, 2930, 2931, 2934, - 2937, 2939, 2942, 2945, 2948, 2951, 2963, 2977, 2979, 2983, - 2989, 2991, 2995, 3001, 3003, 3006, 3009, 3011, 3020, 3027, - 3033, 3038, 3043, 3047, 3055, 3064, 3071, 3078, 3085, 3092, - 3099, 3104, 3112, 3118, 3127, 3131, 3133, 3137, 3141, 3143, - 3145, 3147, 3149, 3151, 3153, 3155, 3159, 3161, 3165, 3169, - 3171, 3172, 3174, 3178, 3186, 3196, 3206, 3215, 3219, 3220, - 3234, 3236, 3240, 3246, 3252, 3256, 3263, 3266, 3268, 3269, - 3272, 3273, 3276, 3281, 3282, 3284, 3285, 3292, 3301, 3310, - 3312, 3316, 3322, 3328, 3336, 3346, 3354, 3364, 3370, 3377, - 3384, 3389, 3396, 3401, 3408, 3417, 3422, 3429, 3434, 3441, - 3447, 3455, 3457, 3459, 3461, 3464, 3466, 3469, 3471, 3473, - 3475, 3479, 3483, 3487, 3491, 3493, 3495, 3497, 3499, 3501, - 3504, 3507, 3509, 3513, 3516, 3518, 3520, 3522, 3524, 3526, - 3528, 3530, 3534, 3536, 3539, 3542, 3546, 3548, 3552, 3558, - 3561, 3564, 3565, 3572, 3579, 3586, 3593, 3600, 3607, 3614, - 3621, 3630, 3640, 3649, 3656, 3663, 3673, 3683, 3693, 3701, - 3712, 3714, 3716, 3725, 3734, 3743, 3752, 3761, 3770, 3779, - 3789, 3798, 3807, 3810, 3811, 3813, 3815, 3818, 3821, 3823, - 3826, 3830, 3834, 3838, 3842, 3847, 3852, 3856, 3860, 3864, - 3869, 3874, 3878, 3883, 3888, 3890, 3892, 3894, 3895, 3904, - 3913, 3925, 3927, 3929, 3932, 3937, 3943, 3945, 3949, 3952, - 3955, 3958, 3961, 3964, 3966, 3970, 3972, 3976, 3978, 3981, - 3984, 3989, 3993, 3996, 3999, 4002, 4005, 4008, 4011, 4015, - 4018, 4021, 4024, 4027, 4033, 4039, 4045, 4051, 4057, 4059, - 4063, 4065, 4068, 4072, 4073, 4080, 4087, 4097, 4101, 4102, - 4106, 4107, 4113, 4116, 4117, 4121, 4125, 4129, 4137, 4145, - 4156, 4158, 4160, 4162, 4164, 4166, 4168, 4185, 4205, 4207, - 4208, 4210, 4211, 4213, 4214, 4217, 4218, 4220, 4224, 4229, - 4235, 4238, 4241, 4246, 4251, 4252, 4254, 4258, 4261, 4262, - 4264, 4265, 4267, 4269, 4270, 4273, 4276, 4277, 4287, 4300, - 4308, 4316, 4319, 4320, 4324, 4327, 4329, 4333, 4335, 4339, - 4342, 4344, 4346, 4349, 4353, 4356, 4358, 4362, 4366, 4370, - 4373, 4376, 4378, 4380, 4382, 4384, 4387, 4389, 4391, 4393, - 4395, 4400, 4406, 4408, 4412, 4416, 4418, 4422, 4426, 4432, - 4439, 4441, 4445, 4448, 4450, 4454, 4456, 4457, 4459, 4462, - 4467, 4473, 4475, 4477, 4479, 4481, 4485, 4489, 4492, 4495, - 4497, 4500, 4503, 4506, 4509, 4511, 4514, 4517, 4520, 4523, - 4525, 4527, 4529, 4533, 4536, 4538, 4543, 4544, 4548, 4549, - 4551, 4553, 4557, 4563, 4566, 4567, 4570, 4572, 4576, 4582, - 4588, 4594, 4596, 4599, 4601, 4602, 4607, 4614, 4619, 4626, - 4631, 4638, 4643, 4650, 4655, 4662, 4666, 4672, 4678, 4684, - 4686, 4690, 4692, 4696, 4699, 4702, 4704, 4707, 4709, 4712, - 4724, 4735, 4746, 4749, 4752, 4753, 4763, 4766, 4767, 4778, - 4790, 4802, 4808, 4814, 4823, 4828, 4833, 4841, 4849, 4851, - 4853, 4855, 4857, 4859, 4865, 4871, 4878, 4885, 4892, 4899, - 4906, 4915, 4924, 4931, 4938, 4946, 4956, 4966, 4975, 4986, - 4993, 5000, 5007, 5014, 5021, 5028, 5035, 5044, 5051, 5060, - 5067, 5076, 5084, 5094, 5101, 5110, 5118, 5128, 5137, 5148, - 5157, 5168, 5178, 5190, 5199, 5210, 5220, 5232, 5241, 5250, - 5258, 5265, 5272, 5279, 5286, 5295, 5304, 5313, 5322, 5329, - 5339, 5341, 5342, 5345, 5346, 5355, 5364, 5373, 5384, 5394, - 5403, 5405, 5406, 5413, 5420, 5427, 5434, 5441, 5448, 5455, - 5465, 5475, 5482, 5489, 5496, 5505, 5512, 5521, 5530, 5539, - 5548, 5555, 5564, 5571, 5580, 5588, 5598, 5606, 5616, 5623, - 5631, 5633, 5637, 5641, 5645, 5647, 5649, 5651, 5653, 5655, - 5663, 5670, 5677, 5684, 5691, 5698, 5705, 5713, 5721, 5728, - 5738, 5748, 5755, 5762, 5769, 5776, 5783, 5790, 5799, 5808, - 5817, 5824, 5832, 5839, 5846, 5851, 5859, 5866, 5871, 5876, - 5881, 5885, 5890, 5894, 5896, 5898, 5902, 5908, 5914, 5920, - 5926, 5935, 5941, 5947, 5954, 5962, 5970, 5978, 5983, 5988, - 5994, 5999, 6006, 6020, 6022, 6024, 6028, 6032, 6034, 6036, - 6038, 6040, 6042, 6044, 6046, 6047, 6049, 6051, 6053, 6055, - 6057, 6059, 6060, 6064, 6067, 6068, 6071, 6074, 6077, 6081, - 6085, 6089, 6093, 6096, 6100, 6103, 6109, 6114, 6118, 6122, - 6126, 6130, 6134, 6136, 6138, 6139, 6143, 6146, 6149, 6151, - 6154, 6156, 6160, 6163, 6165, 6166, 6169, 6173, 6174, 6184, - 6196, 6209, 6224, 6228, 6233, 6238, 6239, 6242, 6248, 6250, - 6251, 6253, 6256, 6260, 6264, 6268, 6270, 6273, 6275, 6277, - 6279, 6281, 6283, 6285, 6286, 6292, 6297, 6304, 6311, 6316, - 6320, 6326, 6334, 6344, 6346, 6350, 6352, 6358, 6363, 6368, - 6375, 6380, 6387, 6394, 6400, 6408, 6418, 6425, 6427, 6428, - 6435, 6447, 6459, 6471, 6485, 6495, 6507, 6509, 6511, 6522, - 6527, 6534, 6537, 6543, 6546, 6547, 6554, 6560, 6564, 6570, - 6572, 6576, 6578, 6580, 6583, 6585, 6587, 6589, 6591, 6592, - 6594, 6595, 6597, 6598, 6600, 6601, 6603, 6604, 6608, 6609, - 6612, 6614, 6618, 6620, 6621, 6624, 6629, 6633, 6639, 6641, - 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6665, - 6669, 6670, 6672, 6674, 6676, 6678, 6680, 6684, 6694, 6707, - 6711, 6712, 6715, 6719, 6722, 6726, 6734, 6736, 6740, 6742, - 6747, 6752, 6760, 6763, 6765, 6767, 6769, 6773, 6776, 6785, - 6791, 6792, 6797, 6801, 6802, 6805, 6806, 6814, 6817, 6818, - 6824, 6828, 6829, 6832, 6835, 6838, 6842, 6844, 6848, 6850, - 6853, 6855, 6856, 6858, 6861, 6862, 6871, 6873, 6877, 6881, - 6887, 6890, 6892, 6896, 6906, 6908, 6911, 6917, 6923, 6930, - 6937, 6945, 6948, 6949, 6953, 6955, 6958, 6964, 6970, 6979, - 6983, 6988, 6996, 6998, 6999, 7003, 7006, 7009, 7012, 7015, - 7016, 7019, 7022, 7024, 7026, 7030, 7034, 7036, 7039, 7044, - 7049, 7052, 7056, 7062, 7068, 7070, 7072, 7082, 7092, 7094, - 7097, 7102, 7107, 7112, 7115, 7118, 7122, 7124, 7128, 7138, - 7140, 7143, 7144, 7152, 7160, 7161, 7172, 7179, 7180, 7182, - 7183, 7186, 7187, 7191, 7195, 7200, 7205, 7210, 7215, 7219, - 7222, 7224, 7226, 7227, 7229, 7231, 7232, 7234, 7240, 7242, - 7243, 7245, 7247, 7249, 7250, 7254, 7256, 7260, 7265, 7269, - 7272, 7275, 7277, 7279, 7281, 7282, 7285, 7290, 7296, 7303, - 7308, 7314, 7317, 7321, 7323, 7325, 7327, 7329, 7332, 7335, - 7337, 7339, 7341, 7343, 7345, 7347, 7352, 7353, 7355, 7359, - 7361, 7363, 7365, 7367, 7369, 7372, 7377, 7382, 7388, 7391, - 7392, 7394, 7398, 7400, 7401, 7403, 7406, 7410, 7413, 7418, - 7421, 7425, 7428, 7429, 7434, 7440, 7443, 7444, 7446, 7450, - 7453, 7457, 7460, 7464, 7467, 7471, 7474, 7478, 7480, 7485, - 7489, 7494, 7500, 7505, 7511, 7516, 7522, 7525, 7530, 7532, - 7534, 7535, 7538, 7539, 7541, 7546, 7552, 7557, 7558, 7561, - 7564, 7567, 7569, 7571, 7572, 7578, 7581, 7583, 7585, 7588, - 7591, 7596, 7598, 7602, 7604, 7607, 7611, 7618, 7623, 7624, - 7627, 7634, 7637, 7639, 7643, 7648, 7649, 7652, 7653, 7656, - 7657, 7660, 7665, 7666, 7668, 7669, 7671, 7675, 7679, 7687, - 7700, 7702, 7706, 7709, 7713, 7717, 7719, 7722, 7725, 7728, - 7731, 7733, 7735, 7739, 7743, 7746, 7749, 7753, 7759, 7766, - 7769, 7773, 7777, 7782, 7783, 7785, 7787, 7789, 7791, 7793, - 7796, 7801, 7803, 7805, 7807, 7809, 7812, 7816, 7820, 7821, - 7823, 7825, 7827, 7829, 7831, 7834, 7837, 7840, 7843, 7846, - 7848, 7852, 7853, 7855, 7857, 7859, 7861, 7867, 7870, 7872, - 7874, 7876, 7878, 7883, 7885, 7888, 7891, 7893, 7897, 7901, - 7904, 7906, 7907, 7913, 7916, 7922, 7925, 7927, 7931, 7935, - 7936, 7938, 7940, 7942, 7944, 7946, 7948, 7952, 7956, 7960, - 7964, 7968, 7972, 7976, 7977, 7979, 7984, 7986, 7990, 7994, - 8000, 8003, 8006, 8010, 8014, 8018, 8022, 8026, 8030, 8034, - 8038, 8042, 8046, 8050, 8054, 8058, 8061, 8065, 8069, 8072, - 8075, 8079, 8085, 8090, 8097, 8101, 8107, 8112, 8119, 8124, - 8131, 8137, 8145, 8149, 8152, 8157, 8160, 8164, 8168, 8173, - 8177, 8182, 8186, 8191, 8197, 8204, 8211, 8219, 8226, 8234, - 8238, 8243, 8248, 8255, 8259, 8263, 8268, 8272, 8277, 8282, - 8288, 8290, 8292, 8296, 8299, 8302, 8306, 8310, 8314, 8318, - 8322, 8326, 8330, 8334, 8338, 8342, 8346, 8350, 8354, 8357, - 8363, 8370, 8374, 8379, 8381, 8383, 8386, 8391, 8393, 8395, - 8397, 8400, 8403, 8406, 8409, 8411, 8413, 8418, 8422, 8428, - 8435, 8444, 8451, 8458, 8463, 8468, 8470, 8472, 8474, 8480, - 8482, 8484, 8489, 8491, 8496, 8498, 8503, 8505, 8510, 8512, - 8514, 8516, 8518, 8520, 8522, 8529, 8534, 8539, 8546, 8551, - 8556, 8561, 8566, 8571, 8578, 8584, 8590, 8596, 8601, 8608, - 8613, 8618, 8623, 8628, 8634, 8642, 8650, 8660, 8666, 8671, - 8678, 8684, 8692, 8700, 8708, 8711, 8715, 8719, 8723, 8728, - 8729, 8734, 8736, 8740, 8744, 8746, 8748, 8750, 8753, 8756, - 8757, 8760, 8764, 8768, 8773, 8776, 8779, 8785, 8786, 8792, - 8793, 8796, 8797, 8799, 8803, 8807, 8810, 8813, 8814, 8821, - 8823, 8824, 8828, 8829, 8833, 8837, 8841, 8842, 8844, 8849, - 8852, 8855, 8858, 8861, 8864, 8868, 8871, 8874, 8878, 8879, - 8884, 8888, 8894, 8899, 8903, 8909, 8911, 8913, 8915, 8917, - 8919, 8921, 8923, 8925, 8927, 8929, 8931, 8933, 8935, 8937, - 8939, 8941, 8943, 8945, 8950, 8952, 8957, 8959, 8964, 8966, - 8969, 8971, 8974, 8976, 8980, 8982, 8986, 8988, 8992, 8996, - 8998, 8999, 9001, 9005, 9009, 9013, 9016, 9018, 9022, 9026, - 9030, 9032, 9034, 9036, 9038, 9040, 9042, 9044, 9046, 9048, - 9050, 9052, 9054, 9062, 9068, 9072, 9078, 9084, 9088, 9092, - 9098, 9102, 9105, 9107, 9109, 9113, 9119, 9121, 9124, 9129, - 9132, 9133, 9135, 9136, 9138, 9141, 9144, 9147, 9151, 9157, - 9159, 9160, 9162, 9165, 9166, 9169, 9171, 9172, 9174, 9175, - 9177, 9181, 9185, 9188, 9190, 9192, 9194, 9198, 9200, 9203, - 9205, 9209, 9211, 9213, 9215, 9217, 9220, 9222, 9224, 9226, - 9228, 9230, 9233, 9240, 9243, 9250, 9253, 9257, 9263, 9266, - 9270, 9276, 9278, 9280, 9282, 9284, 9286, 9288, 9291, 9294, - 9296, 9298, 9300, 9302, 9304, 9306, 9310, 9321, 9326, 9328, - 9330, 9332, 9334, 9336, 9338, 9340, 9342, 9344, 9346, 9348, - 9350, 9352, 9354, 9356, 9358, 9360, 9362, 9364, 9366, 9368, - 9370, 9372, 9374, 9376, 9378, 9380, 9382, 9384, 9386, 9388, - 9390, 9392, 9394, 9396, 9398, 9400, 9402, 9404, 9406, 9408, - 9410, 9412, 9414, 9416, 9418, 9420, 9422, 9424, 9426, 9428, - 9430, 9432, 9434, 9436, 9438, 9440, 9442, 9444, 9446, 9448, - 9450, 9452, 9454, 9456, 9458, 9460, 9462, 9464, 9466, 9468, - 9470, 9472, 9474, 9476, 9478, 9480, 9482, 9484, 9486, 9488, - 9490, 9492, 9494, 9496, 9498, 9500, 9502, 9504, 9506, 9508, - 9510, 9512, 9514, 9516, 9518, 9520, 9522, 9524, 9526, 9528, - 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, 9546, 9548, - 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, - 9570, 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, - 9590, 9592, 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, - 9610, 9612, 9614, 9616, 9618, 9620, 9622, 9624, 9626, 9628, - 9630, 9632, 9634, 9636, 9638, 9640, 9642, 9644, 9646, 9648, - 9650, 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, 9668, - 9670, 9672, 9674, 9676, 9678, 9680, 9682, 9684, 9686, 9688, - 9690, 9692, 9694, 9696, 9698, 9700, 9702, 9704, 9706, 9708, - 9710, 9712, 9714, 9716, 9718, 9720, 9722, 9724, 9726, 9728, - 9730, 9732, 9734, 9736, 9738, 9740, 9742, 9744, 9746, 9748, - 9750, 9752, 9754, 9756, 9758, 9760, 9762, 9764, 9766, 9768, - 9770, 9772, 9774, 9776, 9778, 9780, 9782, 9784, 9786, 9788, - 9790, 9792, 9794, 9796, 9798, 9800, 9802, 9804, 9806, 9808, - 9810, 9812, 9814, 9816, 9818, 9820, 9822, 9824, 9826, 9828, - 9830, 9832, 9834, 9836, 9838, 9840, 9842, 9844, 9846, 9848, - 9850, 9852, 9854, 9856, 9858, 9860, 9862, 9864, 9866, 9868, - 9870, 9872, 9874, 9876, 9878, 9880, 9882, 9884, 9886, 9888, - 9890, 9892, 9894, 9896, 9898, 9900, 9902, 9904, 9906, 9908, - 9910, 9912, 9914, 9916, 9918, 9920, 9922, 9924, 9926, 9928, - 9930, 9932, 9934, 9936, 9938, 9940, 9942, 9944, 9946, 9948, - 9950, 9952, 9954, 9956, 9958, 9960, 9962, 9964, 9966, 9968, - 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, 9986, 9988, - 9990, 9992, 9994, 9996, 9998, 10000, 10002, 10004, 10006, 10008, - 10010, 10012, 10014, 10016, 10018, 10020, 10022, 10024, 10026, 10028, - 10030, 10032, 10034, 10036, 10038, 10040, 10042, 10044, 10046, 10048, - 10050, 10052, 10054, 10056, 10058, 10060, 10062, 10064, 10066, 10068, - 10070, 10072, 10074, 10076, 10078, 10080, 10082, 10084, 10086, 10088, - 10090, 10092, 10094, 10096, 10098, 10100, 10102, 10104, 10106, 10108, - 10110, 10112, 10114, 10116, 10118, 10120, 10122, 10124, 10126, 10128, - 10130, 10132, 10134, 10136, 10138, 10140, 10142, 10144, 10146, 10148, - 10150, 10152, 10154, 10156, 10158, 10160, 10162, 10164, 10166, 10168, - 10170, 10172, 10174, 10176, 10178, 10180, 10182, 10184, 10186, 10188, - 10190, 10192, 10194, 10196, 10198, 10200, 10202, 10204, 10206, 10208, - 10210, 10212, 10214, 10216, 10218, 10220, 10222, 10224, 10226, 10228, - 10230, 10232, 10234, 10236, 10238, 10240, 10242, 10244, 10246, 10248, - 10250, 10252, 10254, 10256, 10258, 10260, 10262, 10264, 10266, 10268, - 10270, 10272, 10274, 10276, 10278, 10280, 10282, 10284, 10286, 10288, - 10290, 10292, 10294, 10296, 10298, 10300, 10302, 10304, 10306, 10308, - 10310, 10312, 10314, 10316, 10318, 10320, 10322, 10324, 10326, 10328, - 10330, 10332, 10334, 10336, 10338, 10340, 10342, 10344, 10346, 10348, - 10350, 10352, 10354, 10356, 10358, 10360, 10362, 10364, 10366, 10368, - 10370, 10372, 10374, 10376, 10378, 10380, 10382, 10384, 10386, 10388, - 10390, 10392, 10394, 10396, 10398, 10400, 10402, 10404, 10406, 10408, - 10410, 10412, 10414, 10416, 10418, 10420, 10422, 10424, 10426, 10428, - 10430, 10432, 10434, 10436, 10438, 10440, 10442, 10444, 10446, 10448, - 10450, 10452, 10454, 10456, 10458, 10460, 10462, 10464, 10466, 10468, - 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, 10488, - 10490, 10492, 10494, 10496, 10498, 10500, 10502, 10504, 10506, 10508, - 10510, 10512, 10514, 10516, 10518, 10520, 10522, 10524, 10526, 10528, - 10530, 10532, 10534, 10536, 10538, 10540, 10542, 10544, 10546, 10548, - 10550, 10552, 10554, 10556, 10558, 10560, 10562, 10564, 10566, 10568, - 10570, 10572, 10574, 10576, 10578, 10580, 10582, 10584, 10586, 10588, - 10590, 10592, 10594, 10596, 10598, 10600, 10602, 10604, 10606, 10608, - 10610, 10612, 10614, 10616, 10618, 10620, 10622, 10624, 10626, 10628, - 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, 10648, - 10650, 10652, 10654, 10656, 10658, 10660, 10662, 10664, 10666, 10668, - 10670, 10672, 10674, 10676, 10678, 10680, 10682, 10684, 10686, 10688, - 10690, 10692, 10694, 10696, 10698, 10700, 10702, 10704, 10706, 10708, - 10710, 10712, 10714, 10716, 10718, 10720, 10722, 10724, 10726, 10728, - 10730, 10732, 10734, 10736, 10738, 10740, 10742, 10744, 10746, 10748, - 10750, 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, - 10770, 10772, 10774, 10776, 10778, 10780, 10782, 10784, 10786, 10788, - 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, - 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, - 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, - 10850, 10852, 10854, 10856, 10858, 10860, 10862, 10864, 10866, 10868, - 10870, 10872, 10874, 10876, 10878, 10880, 10882, 10884, 10886, 10888, - 10890, 10892, 10894, 10896, 10898, 10900, 10902, 10904, 10906, 10908, - 10910, 10912, 10914, 10916, 10918, 10920, 10922, 10924, 10926, 10928, - 10930, 10932, 10934, 10936, 10938, 10940, 10942, 10944, 10946, 10948, - 10950, 10952, 10954, 10956, 10958, 10960, 10962, 10964, 10966, 10968, - 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, 10988, - 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, 11008, - 11010, 11012, 11014, 11016, 11018, 11020, 11022, 11024, 11026, 11028, - 11030, 11032, 11034, 11036, 11038, 11040, 11042, 11044, 11046, 11048, - 11050, 11052, 11054, 11056, 11058, 11060, 11062, 11064, 11066, 11068, - 11070, 11072, 11074, 11076, 11078, 11080, 11082, 11084, 11086, 11088, - 11090, 11092, 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, - 11110, 11112, 11114, 11116, 11118, 11120, 11122, 11124, 11126, 11128 + 266, 268, 270, 272, 274, 276, 278, 279, 281, 282, + 284, 285, 287, 288, 290, 292, 293, 296, 302, 304, + 306, 307, 310, 311, 314, 315, 318, 321, 324, 328, + 332, 336, 338, 342, 346, 349, 351, 353, 356, 359, + 362, 366, 370, 376, 382, 388, 389, 393, 399, 405, + 411, 417, 421, 427, 431, 437, 441, 447, 453, 460, + 462, 464, 471, 476, 486, 494, 497, 498, 500, 502, + 504, 506, 508, 510, 513, 517, 521, 524, 530, 532, + 536, 540, 544, 548, 550, 554, 558, 561, 564, 567, + 570, 573, 576, 580, 584, 588, 592, 596, 598, 602, + 604, 608, 610, 612, 614, 617, 620, 623, 625, 627, + 629, 631, 633, 635, 637, 639, 643, 649, 651, 653, + 655, 657, 659, 660, 662, 664, 667, 669, 672, 676, + 679, 681, 683, 686, 688, 691, 693, 696, 700, 705, + 709, 712, 717, 719, 721, 723, 725, 727, 730, 733, + 736, 739, 742, 747, 754, 759, 766, 777, 791, 796, + 803, 808, 819, 833, 838, 845, 850, 857, 863, 871, + 883, 898, 904, 912, 914, 918, 923, 928, 933, 937, + 940, 946, 950, 957, 962, 969, 976, 982, 990, 997, + 1004, 1010, 1016, 1022, 1028, 1038, 1043, 1049, 1057, 1064, + 1069, 1078, 1083, 1086, 1091, 1095, 1102, 1107, 1111, 1115, + 1119, 1122, 1125, 1129, 1134, 1139, 1143, 1147, 1151, 1155, + 1159, 1163, 1168, 1173, 1177, 1180, 1184, 1187, 1190, 1194, + 1199, 1203, 1206, 1209, 1213, 1218, 1223, 1228, 1234, 1236, + 1240, 1243, 1246, 1247, 1250, 1251, 1253, 1255, 1257, 1261, + 1265, 1268, 1269, 1271, 1275, 1279, 1281, 1287, 1291, 1293, + 1296, 1298, 1302, 1305, 1309, 1316, 1323, 1334, 1336, 1339, + 1341, 1345, 1350, 1352, 1356, 1361, 1368, 1373, 1382, 1385, + 1388, 1400, 1410, 1412, 1414, 1416, 1417, 1419, 1421, 1423, + 1425, 1429, 1432, 1433, 1435, 1437, 1441, 1445, 1447, 1449, + 1453, 1457, 1461, 1465, 1470, 1474, 1477, 1479, 1480, 1484, + 1485, 1487, 1488, 1490, 1494, 1497, 1499, 1501, 1503, 1507, + 1508, 1510, 1514, 1516, 1530, 1547, 1560, 1576, 1591, 1609, + 1611, 1613, 1616, 1619, 1622, 1625, 1627, 1628, 1630, 1631, + 1635, 1636, 1638, 1642, 1644, 1648, 1650, 1652, 1654, 1656, + 1658, 1665, 1668, 1673, 1676, 1679, 1681, 1682, 1685, 1688, + 1690, 1691, 1694, 1695, 1699, 1701, 1703, 1706, 1709, 1711, + 1716, 1721, 1727, 1730, 1736, 1744, 1750, 1753, 1757, 1758, + 1760, 1763, 1765, 1768, 1771, 1774, 1778, 1782, 1786, 1787, + 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, + 1811, 1813, 1819, 1829, 1833, 1843, 1848, 1859, 1871, 1874, + 1875, 1879, 1880, 1882, 1886, 1888, 1893, 1894, 1897, 1900, + 1903, 1904, 1906, 1910, 1914, 1921, 1926, 1927, 1929, 1931, + 1934, 1937, 1938, 1942, 1946, 1949, 1951, 1953, 1957, 1961, + 1966, 1967, 1969, 1970, 1977, 1979, 1983, 1987, 1991, 1997, + 2000, 2001, 2004, 2007, 2008, 2012, 2017, 2022, 2023, 2026, + 2027, 2032, 2033, 2037, 2046, 2058, 2060, 2064, 2066, 2068, + 2072, 2079, 2088, 2096, 2107, 2114, 2117, 2121, 2122, 2131, + 2143, 2149, 2151, 2152, 2159, 2165, 2174, 2179, 2186, 2188, + 2189, 2193, 2194, 2196, 2199, 2202, 2205, 2207, 2210, 2214, + 2217, 2220, 2223, 2226, 2230, 2234, 2238, 2240, 2244, 2246, + 2247, 2249, 2252, 2255, 2257, 2259, 2263, 2270, 2281, 2283, + 2284, 2286, 2289, 2292, 2293, 2296, 2299, 2301, 2302, 2304, + 2305, 2313, 2316, 2317, 2321, 2327, 2333, 2342, 2345, 2346, + 2349, 2352, 2355, 2357, 2363, 2366, 2367, 2370, 2377, 2384, + 2391, 2402, 2409, 2416, 2423, 2433, 2443, 2450, 2457, 2467, + 2474, 2482, 2485, 2488, 2491, 2494, 2496, 2499, 2501, 2502, + 2510, 2517, 2522, 2523, 2525, 2529, 2534, 2536, 2540, 2542, + 2545, 2548, 2551, 2554, 2556, 2558, 2569, 2583, 2586, 2587, + 2590, 2593, 2595, 2596, 2602, 2607, 2612, 2624, 2639, 2652, + 2668, 2680, 2683, 2685, 2690, 2691, 2700, 2712, 2714, 2716, + 2724, 2734, 2743, 2754, 2763, 2768, 2769, 2775, 2776, 2779, + 2780, 2783, 2784, 2787, 2788, 2791, 2792, 2794, 2796, 2798, + 2800, 2802, 2811, 2813, 2815, 2833, 2855, 2857, 2859, 2862, + 2864, 2868, 2870, 2872, 2874, 2878, 2880, 2883, 2884, 2886, + 2889, 2894, 2896, 2898, 2900, 2902, 2904, 2908, 2909, 2911, + 2912, 2914, 2916, 2921, 2922, 2924, 2926, 2928, 2932, 2933, + 2935, 2937, 2939, 2941, 2944, 2945, 2946, 2949, 2952, 2954, + 2957, 2960, 2963, 2966, 2978, 2992, 2994, 2998, 3004, 3006, + 3010, 3016, 3018, 3021, 3024, 3026, 3035, 3042, 3048, 3053, + 3058, 3062, 3070, 3079, 3086, 3093, 3100, 3107, 3114, 3119, + 3127, 3133, 3142, 3146, 3148, 3152, 3156, 3158, 3160, 3162, + 3164, 3166, 3168, 3170, 3174, 3176, 3180, 3184, 3186, 3187, + 3189, 3193, 3201, 3211, 3221, 3230, 3234, 3235, 3249, 3251, + 3255, 3261, 3267, 3271, 3278, 3281, 3283, 3284, 3287, 3288, + 3291, 3296, 3297, 3299, 3300, 3307, 3316, 3325, 3327, 3331, + 3337, 3343, 3351, 3361, 3369, 3379, 3385, 3392, 3399, 3404, + 3411, 3416, 3423, 3432, 3437, 3444, 3449, 3456, 3462, 3470, + 3472, 3474, 3476, 3479, 3481, 3484, 3486, 3488, 3490, 3494, + 3498, 3502, 3506, 3508, 3510, 3512, 3514, 3516, 3519, 3522, + 3524, 3528, 3531, 3533, 3535, 3537, 3539, 3541, 3543, 3545, + 3549, 3551, 3554, 3557, 3561, 3563, 3567, 3573, 3576, 3579, + 3580, 3587, 3594, 3601, 3608, 3615, 3622, 3629, 3636, 3645, + 3655, 3664, 3671, 3678, 3688, 3698, 3708, 3716, 3727, 3729, + 3731, 3740, 3749, 3758, 3767, 3776, 3785, 3794, 3804, 3813, + 3822, 3825, 3826, 3828, 3830, 3833, 3836, 3838, 3841, 3845, + 3849, 3853, 3857, 3862, 3867, 3871, 3875, 3879, 3884, 3889, + 3893, 3898, 3903, 3905, 3907, 3909, 3910, 3919, 3928, 3940, + 3942, 3944, 3947, 3952, 3958, 3960, 3964, 3967, 3970, 3973, + 3976, 3979, 3981, 3985, 3987, 3991, 3993, 3996, 3999, 4004, + 4008, 4011, 4014, 4017, 4020, 4023, 4026, 4030, 4033, 4036, + 4039, 4042, 4048, 4054, 4060, 4066, 4072, 4074, 4078, 4080, + 4083, 4087, 4088, 4094, 4102, 4109, 4119, 4123, 4125, 4128, + 4130, 4132, 4134, 4138, 4139, 4145, 4148, 4149, 4153, 4157, + 4161, 4169, 4177, 4188, 4190, 4192, 4194, 4196, 4198, 4200, + 4217, 4237, 4239, 4240, 4243, 4244, 4246, 4250, 4255, 4261, + 4264, 4267, 4272, 4277, 4278, 4280, 4284, 4287, 4288, 4290, + 4292, 4293, 4296, 4299, 4300, 4310, 4323, 4331, 4339, 4342, + 4343, 4347, 4350, 4352, 4356, 4358, 4362, 4365, 4367, 4369, + 4372, 4376, 4379, 4381, 4385, 4389, 4393, 4396, 4399, 4401, + 4403, 4405, 4407, 4410, 4412, 4414, 4416, 4418, 4423, 4429, + 4431, 4435, 4439, 4441, 4445, 4449, 4455, 4462, 4464, 4468, + 4471, 4473, 4477, 4479, 4480, 4482, 4485, 4490, 4496, 4498, + 4500, 4502, 4504, 4508, 4512, 4515, 4518, 4520, 4523, 4526, + 4529, 4532, 4534, 4537, 4540, 4543, 4546, 4548, 4550, 4552, + 4556, 4559, 4561, 4566, 4567, 4571, 4572, 4574, 4576, 4580, + 4586, 4589, 4590, 4593, 4595, 4599, 4605, 4611, 4617, 4619, + 4622, 4624, 4625, 4630, 4637, 4642, 4649, 4654, 4661, 4666, + 4673, 4678, 4685, 4689, 4695, 4701, 4707, 4709, 4713, 4715, + 4719, 4722, 4725, 4727, 4730, 4732, 4735, 4747, 4758, 4769, + 4772, 4775, 4776, 4786, 4789, 4790, 4801, 4813, 4825, 4831, + 4837, 4846, 4852, 4858, 4864, 4866, 4868, 4870, 4872, 4876, + 4877, 4883, 4889, 4896, 4903, 4910, 4917, 4924, 4933, 4942, + 4949, 4956, 4964, 4974, 4984, 4993, 5004, 5011, 5018, 5025, + 5032, 5039, 5046, 5053, 5062, 5069, 5078, 5085, 5094, 5102, + 5112, 5119, 5128, 5136, 5146, 5155, 5166, 5175, 5186, 5196, + 5208, 5217, 5228, 5238, 5250, 5259, 5268, 5276, 5283, 5290, + 5297, 5304, 5313, 5322, 5331, 5340, 5347, 5357, 5359, 5360, + 5363, 5364, 5373, 5382, 5391, 5402, 5412, 5421, 5423, 5424, + 5431, 5438, 5445, 5452, 5459, 5466, 5473, 5483, 5493, 5500, + 5507, 5514, 5523, 5530, 5539, 5548, 5557, 5566, 5573, 5582, + 5589, 5598, 5606, 5616, 5624, 5634, 5641, 5649, 5651, 5655, + 5659, 5663, 5665, 5667, 5669, 5671, 5673, 5681, 5688, 5695, + 5702, 5709, 5716, 5723, 5731, 5739, 5746, 5756, 5766, 5773, + 5780, 5787, 5794, 5801, 5808, 5817, 5826, 5835, 5842, 5850, + 5857, 5864, 5869, 5877, 5884, 5889, 5894, 5899, 5903, 5908, + 5912, 5914, 5916, 5920, 5926, 5932, 5938, 5944, 5953, 5959, + 5965, 5972, 5980, 5988, 5996, 6001, 6006, 6012, 6017, 6024, + 6038, 6040, 6042, 6046, 6050, 6052, 6054, 6056, 6058, 6060, + 6062, 6064, 6065, 6067, 6069, 6071, 6073, 6075, 6077, 6078, + 6082, 6085, 6086, 6089, 6092, 6095, 6099, 6103, 6107, 6111, + 6114, 6118, 6121, 6127, 6132, 6136, 6140, 6144, 6148, 6152, + 6154, 6156, 6157, 6161, 6164, 6167, 6169, 6172, 6174, 6178, + 6181, 6183, 6184, 6187, 6191, 6192, 6202, 6214, 6227, 6242, + 6246, 6251, 6256, 6257, 6260, 6266, 6268, 6269, 6271, 6274, + 6278, 6282, 6286, 6288, 6291, 6293, 6295, 6297, 6299, 6301, + 6303, 6304, 6310, 6315, 6322, 6329, 6334, 6338, 6344, 6352, + 6362, 6364, 6368, 6370, 6376, 6381, 6386, 6393, 6398, 6405, + 6412, 6418, 6426, 6436, 6443, 6445, 6446, 6453, 6465, 6477, + 6489, 6503, 6513, 6525, 6527, 6529, 6540, 6545, 6552, 6555, + 6561, 6564, 6565, 6572, 6578, 6582, 6588, 6590, 6594, 6596, + 6598, 6601, 6603, 6605, 6607, 6609, 6611, 6612, 6614, 6615, + 6617, 6618, 6620, 6621, 6623, 6624, 6628, 6629, 6632, 6634, + 6638, 6640, 6641, 6644, 6649, 6653, 6659, 6661, 6663, 6665, + 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6685, 6689, 6690, + 6692, 6694, 6696, 6698, 6700, 6704, 6714, 6727, 6731, 6732, + 6735, 6739, 6742, 6746, 6754, 6756, 6760, 6762, 6767, 6772, + 6780, 6783, 6785, 6787, 6789, 6793, 6796, 6805, 6811, 6812, + 6817, 6821, 6822, 6825, 6826, 6834, 6837, 6838, 6844, 6848, + 6849, 6852, 6855, 6858, 6862, 6864, 6868, 6870, 6873, 6875, + 6876, 6878, 6881, 6882, 6891, 6893, 6897, 6901, 6907, 6910, + 6912, 6916, 6926, 6928, 6931, 6937, 6943, 6950, 6957, 6965, + 6968, 6969, 6973, 6975, 6978, 6984, 6990, 6999, 7003, 7008, + 7016, 7018, 7019, 7023, 7026, 7029, 7032, 7035, 7036, 7039, + 7042, 7044, 7046, 7050, 7054, 7056, 7059, 7064, 7069, 7072, + 7076, 7082, 7088, 7090, 7092, 7102, 7112, 7114, 7117, 7122, + 7127, 7132, 7135, 7138, 7142, 7144, 7148, 7158, 7160, 7163, + 7164, 7172, 7180, 7181, 7192, 7199, 7200, 7202, 7203, 7206, + 7207, 7211, 7215, 7220, 7225, 7230, 7235, 7239, 7242, 7244, + 7246, 7247, 7249, 7251, 7252, 7254, 7260, 7262, 7263, 7265, + 7267, 7269, 7270, 7274, 7276, 7280, 7285, 7289, 7292, 7295, + 7297, 7299, 7301, 7302, 7305, 7310, 7316, 7323, 7328, 7334, + 7337, 7341, 7343, 7345, 7347, 7349, 7352, 7355, 7357, 7359, + 7361, 7363, 7365, 7367, 7372, 7373, 7375, 7379, 7381, 7383, + 7385, 7387, 7389, 7392, 7397, 7402, 7408, 7411, 7412, 7414, + 7418, 7420, 7421, 7423, 7426, 7430, 7433, 7438, 7441, 7445, + 7448, 7449, 7454, 7460, 7463, 7464, 7466, 7470, 7473, 7477, + 7480, 7484, 7487, 7491, 7494, 7498, 7500, 7505, 7509, 7514, + 7520, 7525, 7531, 7536, 7542, 7545, 7550, 7552, 7554, 7555, + 7558, 7559, 7561, 7566, 7572, 7577, 7578, 7581, 7584, 7587, + 7589, 7591, 7592, 7598, 7601, 7603, 7605, 7608, 7611, 7616, + 7618, 7622, 7624, 7627, 7631, 7638, 7643, 7644, 7647, 7654, + 7657, 7659, 7663, 7668, 7669, 7672, 7673, 7676, 7677, 7680, + 7685, 7686, 7688, 7689, 7691, 7695, 7699, 7707, 7720, 7722, + 7726, 7729, 7733, 7737, 7739, 7742, 7745, 7748, 7751, 7753, + 7755, 7759, 7763, 7766, 7769, 7773, 7779, 7786, 7789, 7793, + 7797, 7802, 7803, 7805, 7807, 7809, 7811, 7813, 7816, 7821, + 7823, 7825, 7827, 7829, 7832, 7836, 7840, 7841, 7843, 7845, + 7847, 7849, 7851, 7854, 7857, 7860, 7863, 7866, 7868, 7872, + 7873, 7875, 7877, 7879, 7881, 7887, 7890, 7892, 7894, 7896, + 7898, 7903, 7905, 7908, 7911, 7913, 7917, 7921, 7924, 7926, + 7927, 7933, 7936, 7942, 7945, 7947, 7951, 7955, 7956, 7958, + 7960, 7962, 7964, 7966, 7968, 7972, 7976, 7980, 7984, 7988, + 7992, 7996, 7997, 7999, 8004, 8006, 8010, 8014, 8020, 8023, + 8026, 8030, 8034, 8038, 8042, 8046, 8050, 8054, 8058, 8062, + 8066, 8070, 8074, 8078, 8081, 8085, 8089, 8092, 8095, 8099, + 8105, 8110, 8117, 8121, 8127, 8132, 8139, 8144, 8151, 8157, + 8165, 8169, 8172, 8177, 8180, 8184, 8188, 8193, 8197, 8202, + 8206, 8211, 8217, 8224, 8231, 8239, 8246, 8254, 8258, 8263, + 8268, 8275, 8279, 8283, 8288, 8292, 8297, 8302, 8308, 8313, + 8319, 8321, 8323, 8327, 8330, 8333, 8337, 8341, 8345, 8349, + 8353, 8357, 8361, 8365, 8369, 8373, 8377, 8381, 8385, 8388, + 8394, 8401, 8405, 8410, 8412, 8414, 8417, 8422, 8424, 8426, + 8428, 8431, 8434, 8437, 8440, 8442, 8444, 8449, 8453, 8459, + 8466, 8475, 8482, 8489, 8494, 8499, 8503, 8505, 8507, 8509, + 8511, 8517, 8519, 8521, 8526, 8528, 8533, 8535, 8540, 8542, + 8547, 8549, 8551, 8553, 8555, 8557, 8559, 8561, 8568, 8573, + 8578, 8585, 8590, 8595, 8600, 8605, 8610, 8617, 8623, 8629, + 8635, 8640, 8647, 8652, 8657, 8662, 8667, 8673, 8681, 8689, + 8699, 8705, 8710, 8717, 8723, 8731, 8739, 8748, 8753, 8761, + 8766, 8773, 8780, 8785, 8788, 8792, 8796, 8800, 8805, 8806, + 8811, 8813, 8817, 8821, 8823, 8825, 8827, 8829, 8832, 8833, + 8836, 8839, 8840, 8843, 8847, 8851, 8856, 8859, 8862, 8868, + 8869, 8875, 8876, 8879, 8880, 8882, 8886, 8890, 8893, 8896, + 8897, 8904, 8906, 8907, 8911, 8912, 8916, 8920, 8924, 8925, + 8927, 8932, 8935, 8938, 8941, 8944, 8947, 8951, 8954, 8957, + 8961, 8962, 8967, 8971, 8977, 8982, 8986, 8992, 8994, 8996, + 8998, 9000, 9002, 9004, 9006, 9008, 9010, 9012, 9014, 9016, + 9018, 9020, 9022, 9024, 9026, 9028, 9033, 9035, 9040, 9042, + 9047, 9049, 9052, 9054, 9057, 9059, 9063, 9065, 9069, 9071, + 9075, 9079, 9081, 9082, 9084, 9088, 9092, 9096, 9099, 9101, + 9105, 9109, 9113, 9115, 9117, 9119, 9121, 9123, 9125, 9127, + 9129, 9131, 9133, 9135, 9137, 9145, 9151, 9155, 9161, 9167, + 9171, 9175, 9181, 9185, 9188, 9190, 9192, 9196, 9202, 9204, + 9207, 9212, 9215, 9216, 9218, 9219, 9221, 9224, 9227, 9230, + 9234, 9240, 9242, 9243, 9245, 9248, 9249, 9252, 9254, 9255, + 9258, 9262, 9263, 9266, 9267, 9271, 9272, 9274, 9277, 9280, + 9283, 9286, 9290, 9293, 9297, 9300, 9301, 9303, 9307, 9311, + 9315, 9319, 9323, 9324, 9328, 9332, 9333, 9335, 9339, 9347, + 9355, 9359, 9360, 9362, 9363, 9365, 9369, 9373, 9376, 9378, + 9380, 9382, 9386, 9388, 9391, 9393, 9397, 9399, 9401, 9403, + 9405, 9408, 9410, 9412, 9414, 9416, 9418, 9421, 9428, 9431, + 9438, 9441, 9445, 9451, 9454, 9458, 9464, 9466, 9468, 9470, + 9472, 9474, 9476, 9479, 9482, 9484, 9486, 9488, 9490, 9492, + 9494, 9498, 9509, 9514, 9516, 9518, 9520, 9522, 9524, 9526, + 9528, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, 9546, + 9548, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, + 9568, 9570, 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, + 9588, 9590, 9592, 9594, 9596, 9598, 9600, 9602, 9604, 9606, + 9608, 9610, 9612, 9614, 9616, 9618, 9620, 9622, 9624, 9626, + 9628, 9630, 9632, 9634, 9636, 9638, 9640, 9642, 9644, 9646, + 9648, 9650, 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, + 9668, 9670, 9672, 9674, 9676, 9678, 9680, 9682, 9684, 9686, + 9688, 9690, 9692, 9694, 9696, 9698, 9700, 9702, 9704, 9706, + 9708, 9710, 9712, 9714, 9716, 9718, 9720, 9722, 9724, 9726, + 9728, 9730, 9732, 9734, 9736, 9738, 9740, 9742, 9744, 9746, + 9748, 9750, 9752, 9754, 9756, 9758, 9760, 9762, 9764, 9766, + 9768, 9770, 9772, 9774, 9776, 9778, 9780, 9782, 9784, 9786, + 9788, 9790, 9792, 9794, 9796, 9798, 9800, 9802, 9804, 9806, + 9808, 9810, 9812, 9814, 9816, 9818, 9820, 9822, 9824, 9826, + 9828, 9830, 9832, 9834, 9836, 9838, 9840, 9842, 9844, 9846, + 9848, 9850, 9852, 9854, 9856, 9858, 9860, 9862, 9864, 9866, + 9868, 9870, 9872, 9874, 9876, 9878, 9880, 9882, 9884, 9886, + 9888, 9890, 9892, 9894, 9896, 9898, 9900, 9902, 9904, 9906, + 9908, 9910, 9912, 9914, 9916, 9918, 9920, 9922, 9924, 9926, + 9928, 9930, 9932, 9934, 9936, 9938, 9940, 9942, 9944, 9946, + 9948, 9950, 9952, 9954, 9956, 9958, 9960, 9962, 9964, 9966, + 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, 9986, + 9988, 9990, 9992, 9994, 9996, 9998, 10000, 10002, 10004, 10006, + 10008, 10010, 10012, 10014, 10016, 10018, 10020, 10022, 10024, 10026, + 10028, 10030, 10032, 10034, 10036, 10038, 10040, 10042, 10044, 10046, + 10048, 10050, 10052, 10054, 10056, 10058, 10060, 10062, 10064, 10066, + 10068, 10070, 10072, 10074, 10076, 10078, 10080, 10082, 10084, 10086, + 10088, 10090, 10092, 10094, 10096, 10098, 10100, 10102, 10104, 10106, + 10108, 10110, 10112, 10114, 10116, 10118, 10120, 10122, 10124, 10126, + 10128, 10130, 10132, 10134, 10136, 10138, 10140, 10142, 10144, 10146, + 10148, 10150, 10152, 10154, 10156, 10158, 10160, 10162, 10164, 10166, + 10168, 10170, 10172, 10174, 10176, 10178, 10180, 10182, 10184, 10186, + 10188, 10190, 10192, 10194, 10196, 10198, 10200, 10202, 10204, 10206, + 10208, 10210, 10212, 10214, 10216, 10218, 10220, 10222, 10224, 10226, + 10228, 10230, 10232, 10234, 10236, 10238, 10240, 10242, 10244, 10246, + 10248, 10250, 10252, 10254, 10256, 10258, 10260, 10262, 10264, 10266, + 10268, 10270, 10272, 10274, 10276, 10278, 10280, 10282, 10284, 10286, + 10288, 10290, 10292, 10294, 10296, 10298, 10300, 10302, 10304, 10306, + 10308, 10310, 10312, 10314, 10316, 10318, 10320, 10322, 10324, 10326, + 10328, 10330, 10332, 10334, 10336, 10338, 10340, 10342, 10344, 10346, + 10348, 10350, 10352, 10354, 10356, 10358, 10360, 10362, 10364, 10366, + 10368, 10370, 10372, 10374, 10376, 10378, 10380, 10382, 10384, 10386, + 10388, 10390, 10392, 10394, 10396, 10398, 10400, 10402, 10404, 10406, + 10408, 10410, 10412, 10414, 10416, 10418, 10420, 10422, 10424, 10426, + 10428, 10430, 10432, 10434, 10436, 10438, 10440, 10442, 10444, 10446, + 10448, 10450, 10452, 10454, 10456, 10458, 10460, 10462, 10464, 10466, + 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, + 10488, 10490, 10492, 10494, 10496, 10498, 10500, 10502, 10504, 10506, + 10508, 10510, 10512, 10514, 10516, 10518, 10520, 10522, 10524, 10526, + 10528, 10530, 10532, 10534, 10536, 10538, 10540, 10542, 10544, 10546, + 10548, 10550, 10552, 10554, 10556, 10558, 10560, 10562, 10564, 10566, + 10568, 10570, 10572, 10574, 10576, 10578, 10580, 10582, 10584, 10586, + 10588, 10590, 10592, 10594, 10596, 10598, 10600, 10602, 10604, 10606, + 10608, 10610, 10612, 10614, 10616, 10618, 10620, 10622, 10624, 10626, + 10628, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, + 10648, 10650, 10652, 10654, 10656, 10658, 10660, 10662, 10664, 10666, + 10668, 10670, 10672, 10674, 10676, 10678, 10680, 10682, 10684, 10686, + 10688, 10690, 10692, 10694, 10696, 10698, 10700, 10702, 10704, 10706, + 10708, 10710, 10712, 10714, 10716, 10718, 10720, 10722, 10724, 10726, + 10728, 10730, 10732, 10734, 10736, 10738, 10740, 10742, 10744, 10746, + 10748, 10750, 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, + 10768, 10770, 10772, 10774, 10776, 10778, 10780, 10782, 10784, 10786, + 10788, 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, + 10808, 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, + 10828, 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, + 10848, 10850, 10852, 10854, 10856, 10858, 10860, 10862, 10864, 10866, + 10868, 10870, 10872, 10874, 10876, 10878, 10880, 10882, 10884, 10886, + 10888, 10890, 10892, 10894, 10896, 10898, 10900, 10902, 10904, 10906, + 10908, 10910, 10912, 10914, 10916, 10918, 10920, 10922, 10924, 10926, + 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 10944, 10946, + 10948, 10950, 10952, 10954, 10956, 10958, 10960, 10962, 10964, 10966, + 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, + 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, + 11008, 11010, 11012, 11014, 11016, 11018, 11020, 11022, 11024, 11026, + 11028, 11030, 11032, 11034, 11036, 11038, 11040, 11042, 11044, 11046, + 11048, 11050, 11052, 11054, 11056, 11058, 11060, 11062, 11064, 11066, + 11068, 11070, 11072, 11074, 11076, 11078, 11080, 11082, 11084, 11086, + 11088, 11090, 11092, 11094, 11096, 11098, 11100, 11102, 11104, 11106, + 11108, 11110, 11112, 11114, 11116, 11118, 11120, 11122, 11124, 11126, + 11128, 11130, 11132, 11134, 11136, 11138, 11140, 11142, 11144, 11146, + 11148, 11150, 11152, 11154, 11156, 11158, 11160, 11162, 11164, 11166, + 11168, 11170, 11172, 11174, 11176, 11178, 11180, 11182, 11184, 11186, + 11188, 11190, 11192, 11194, 11196, 11198, 11200, 11202, 11204, 11206, + 11208, 11210, 11212, 11214, 11216, 11218, 11220, 11222, 11224, 11226, + 11228, 11230, 11232, 11234, 11236, 11238, 11240, 11242, 11244, 11246, + 11248, 11250, 11252, 11254, 11256, 11258, 11260, 11262, 11264, 11266, + 11268, 11270, 11272, 11274, 11276, 11278, 11280, 11282, 11284, 11286, + 11288, 11290, 11292, 11294, 11296, 11298, 11300, 11302, 11304, 11306, + 11308, 11310, 11312, 11314, 11316, 11318, 11320, 11322, 11324, 11326, + 11328, 11330, 11332, 11334, 11336, 11338, 11340, 11342, 11344, 11346, + 11348, 11350, 11352, 11354, 11356, 11358, 11360 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 509, 0, -1, 510, -1, 485, 1078, -1, 486, 1182, - -1, 487, 1183, -1, 488, 1183, -1, 489, 1183, -1, - 510, 505, 511, -1, 511, -1, 512, -1, 909, -1, - 738, -1, 929, -1, 924, -1, 925, -1, 803, -1, - 932, -1, 751, -1, 673, -1, 676, -1, 681, -1, - 694, -1, 854, -1, 526, -1, 881, -1, 883, -1, - 889, -1, 884, -1, 888, -1, 704, -1, 652, -1, - 930, -1, 555, -1, 877, -1, 574, -1, 893, -1, - 523, -1, 521, -1, 895, -1, 643, -1, 935, -1, - 934, -1, 702, -1, 941, -1, 513, -1, 553, -1, - 577, -1, 938, -1, 779, -1, 550, -1, 578, -1, - 712, -1, 644, -1, 740, -1, 867, -1, 937, -1, - 931, -1, 670, -1, 677, -1, 690, -1, 695, -1, - 822, -1, 525, -1, 647, -1, 753, -1, 760, -1, - 890, -1, 761, -1, 703, -1, 660, -1, 528, -1, - 651, -1, 593, -1, 894, -1, 640, -1, 667, -1, - 871, -1, 714, -1, 734, -1, 514, -1, 520, -1, - 699, -1, 918, -1, 962, -1, 992, -1, 741, -1, - 972, -1, 554, -1, 864, -1, 869, -1, 764, -1, - 765, -1, 766, -1, 768, -1, 896, -1, 669, -1, - 873, -1, 524, -1, 701, -1, 926, -1, 960, -1, - 955, -1, 784, -1, 788, -1, 799, -1, 696, -1, - 808, -1, 963, -1, 906, -1, 650, -1, 917, -1, - 974, -1, 984, -1, 904, -1, 957, -1, 767, -1, - 874, -1, 858, -1, 857, -1, 859, -1, 878, -1, - 789, -1, 800, -1, 897, -1, 781, -1, 996, -1, - 908, -1, 777, -1, 907, -1, 979, -1, 940, -1, - 544, -1, 532, -1, 549, -1, 915, -1, -1, 62, - 1104, -1, 99, 355, 1179, 515, 516, -1, 461, -1, - 484, -1, -1, 516, 519, -1, -1, 517, 518, -1, - -1, 311, 1177, -1, 311, 12, -1, 311, 278, -1, - 145, 311, 1177, -1, 145, 311, 12, -1, 433, 311, - 1177, -1, 204, -1, 91, 236, 1178, -1, 444, 439, - 1177, -1, 441, 1181, -1, 3, -1, 518, -1, 404, - 1176, -1, 27, 1181, -1, 355, 1181, -1, 198, 355, - 1181, -1, 198, 183, 1181, -1, 99, 441, 1179, 515, - 516, -1, 32, 355, 1180, 515, 517, -1, 32, 441, - 1180, 515, 517, -1, -1, 198, 114, 1171, -1, 32, - 355, 1180, 522, 547, -1, 32, 355, 30, 522, 547, - -1, 32, 441, 1180, 522, 547, -1, 32, 441, 30, - 522, 547, -1, 140, 355, 1181, -1, 140, 355, 192, - 155, 1181, -1, 140, 441, 1181, -1, 140, 441, 192, - 155, 1181, -1, 140, 183, 1181, -1, 140, 183, 192, - 155, 1181, -1, 99, 183, 1179, 515, 516, -1, 32, - 183, 1180, 527, 441, 1181, -1, 26, -1, 140, -1, - 99, 364, 529, 49, 1180, 530, -1, 99, 364, 1186, - 530, -1, 99, 364, 192, 273, 155, 529, 49, 1180, - 530, -1, 99, 364, 192, 273, 155, 1186, 530, -1, - 1186, -1, -1, 530, 531, -1, -1, 593, -1, 808, - -1, 651, -1, 714, -1, 788, -1, 915, -1, 377, - 533, -1, 377, 239, 533, -1, 377, 375, 533, -1, - 420, 912, -1, 375, 72, 39, 420, 912, -1, 535, - -1, 536, 418, 537, -1, 536, 492, 537, -1, 536, - 418, 120, -1, 536, 492, 120, -1, 534, -1, 536, - 174, 103, -1, 416, 481, 541, -1, 68, 1177, -1, - 364, 1177, -1, 364, 12, -1, 259, 542, -1, 355, - 543, -1, 355, 12, -1, 375, 49, 543, -1, 375, - 49, 12, -1, 375, 49, 120, -1, 467, 291, 1113, - -1, 420, 386, 1177, -1, 1186, -1, 536, 504, 1186, - -1, 538, -1, 537, 506, 538, -1, 540, -1, 658, - -1, 12, -1, 331, 432, -1, 331, 86, -1, 344, - 331, -1, 373, -1, 425, -1, 161, -1, 288, -1, - 543, -1, 1177, -1, 12, -1, 3, -1, 1097, 1177, - 1099, -1, 1097, 502, 1176, 503, 1177, -1, 658, -1, - 120, -1, 239, -1, 1177, -1, 120, -1, -1, 1188, - -1, 1177, -1, 347, 545, -1, 546, -1, 416, 481, - -1, 420, 222, 234, -1, 375, 49, -1, 536, -1, - 30, -1, 377, 533, -1, 544, -1, 377, 535, -1, - 544, -1, 381, 536, -1, 381, 416, 481, -1, 381, - 420, 222, 234, -1, 381, 375, 49, -1, 381, 30, - -1, 377, 93, 551, 552, -1, 30, -1, 1168, -1, - 123, -1, 194, -1, 74, -1, 134, 30, -1, 134, - 410, -1, 134, 412, -1, 134, 313, -1, 134, 372, - -1, 32, 406, 1055, 556, -1, 32, 406, 192, 155, - 1055, 556, -1, 32, 406, 1055, 557, -1, 32, 406, - 192, 155, 1055, 557, -1, 32, 406, 30, 198, 409, - 1171, 377, 409, 1171, 977, -1, 32, 406, 30, 198, - 409, 1171, 303, 60, 1181, 377, 409, 1171, 977, -1, - 32, 202, 1169, 556, -1, 32, 202, 192, 155, 1169, - 556, -1, 32, 202, 1169, 558, -1, 32, 202, 30, - 198, 409, 1171, 377, 409, 1171, 977, -1, 32, 202, - 30, 198, 409, 1171, 303, 60, 1181, 377, 409, 1171, - 977, -1, 32, 371, 1169, 556, -1, 32, 371, 192, - 155, 1169, 556, -1, 32, 454, 1169, 556, -1, 32, - 454, 192, 155, 1169, 556, -1, 32, 249, 454, 1169, - 556, -1, 32, 249, 454, 192, 155, 1169, 556, -1, - 32, 249, 454, 30, 198, 409, 1171, 377, 409, 1171, - 977, -1, 32, 249, 454, 30, 198, 409, 1171, 303, - 60, 1181, 377, 409, 1171, 977, -1, 32, 171, 406, - 1055, 556, -1, 32, 171, 406, 192, 155, 1055, 556, - -1, 559, -1, 556, 506, 559, -1, 47, 309, 1169, - 571, -1, 131, 309, 1169, 810, -1, 131, 309, 1169, - 165, -1, 47, 309, 1169, -1, 26, 601, -1, 26, - 192, 273, 155, 601, -1, 26, 81, 601, -1, 26, - 81, 192, 273, 155, 601, -1, 32, 879, 1186, 560, - -1, 32, 879, 1186, 140, 273, 278, -1, 32, 879, - 1186, 377, 273, 278, -1, 32, 879, 1186, 140, 157, - -1, 32, 879, 1186, 140, 157, 192, 155, -1, 32, - 879, 1186, 377, 393, 1178, -1, 32, 879, 1176, 377, - 393, 1178, -1, 32, 879, 1186, 377, 565, -1, 32, - 879, 1186, 347, 565, -1, 32, 879, 1186, 377, 396, - 1186, -1, 32, 879, 1186, 377, 603, -1, 32, 879, - 1186, 26, 178, 609, 39, 191, 654, -1, 32, 879, - 1186, 569, -1, 32, 879, 1186, 140, 191, -1, 32, - 879, 1186, 140, 191, 192, 155, -1, 140, 879, 192, - 155, 1186, 561, -1, 140, 879, 1186, 561, -1, 32, - 879, 1186, 880, 428, 1078, 562, 563, -1, 32, 879, - 1186, 684, -1, 26, 614, -1, 32, 92, 1171, 732, - -1, 445, 92, 1171, -1, 140, 92, 192, 155, 1171, - 561, -1, 140, 92, 1171, 561, -1, 377, 463, 286, - -1, 77, 288, 1171, -1, 377, 463, 77, -1, 377, - 245, -1, 377, 438, -1, 143, 423, 1171, -1, 143, - 33, 423, 1171, -1, 143, 346, 423, 1171, -1, 143, - 423, 30, -1, 143, 423, 441, -1, 133, 423, 1171, - -1, 133, 423, 30, -1, 133, 423, 441, -1, 143, - 362, 1171, -1, 143, 33, 362, 1171, -1, 143, 346, - 362, 1171, -1, 133, 362, 1171, -1, 204, 1169, -1, - 269, 204, 1169, -1, 283, 774, -1, 273, 283, -1, - 304, 418, 1180, -1, 377, 24, 252, 1171, -1, 377, - 409, 1171, -1, 377, 565, -1, 347, 565, -1, 346, - 191, 564, -1, 143, 360, 234, 369, -1, 133, 360, - 234, 369, -1, 170, 360, 234, 369, -1, 269, 170, - 360, 234, 369, -1, 684, -1, 377, 120, 1101, -1, - 140, 120, -1, 64, -1, 349, -1, -1, 79, 774, - -1, -1, 442, 1101, -1, -1, 274, -1, 175, -1, - 120, -1, 442, 202, 1171, -1, 502, 567, 503, -1, - 461, 565, -1, -1, 568, -1, 567, 506, 568, -1, - 1189, 492, 745, -1, 1189, -1, 1189, 504, 1189, 492, - 745, -1, 1189, 504, 1189, -1, 570, -1, 569, 570, - -1, 348, -1, 348, 515, 658, -1, 377, 656, -1, - 377, 178, 609, -1, 169, 448, 461, 502, 573, 503, - -1, 169, 448, 198, 502, 1139, 503, -1, 169, 448, - 174, 502, 1139, 503, 418, 502, 1139, 503, -1, 120, - -1, 1188, 1176, -1, 572, -1, 573, 506, 572, -1, - 32, 428, 774, 575, -1, 576, -1, 575, 506, 576, - -1, 26, 48, 1070, 561, -1, 140, 48, 192, 155, - 1186, 561, -1, 140, 48, 1186, 561, -1, 32, 48, - 1186, 880, 428, 1078, 562, 561, -1, 76, 993, -1, - 76, 30, -1, 97, 585, 1169, 617, 579, 580, 581, - 586, 515, 582, 1066, -1, 97, 502, 959, 503, 418, - 580, 581, 515, 582, -1, 174, -1, 418, -1, 327, - -1, -1, 1177, -1, 394, -1, 395, -1, 583, -1, - 502, 588, 503, -1, 583, 584, -1, -1, 55, -1, - 173, -1, 126, 933, 1177, -1, 278, 933, 1177, -1, - 101, -1, 188, -1, 329, 933, 1177, -1, 148, 933, - 1177, -1, 170, 329, 618, -1, 170, 329, 495, -1, - 170, 273, 278, 618, -1, 170, 278, 618, -1, 144, - 1177, -1, 55, -1, -1, 587, 127, 1177, -1, -1, - 442, -1, -1, 589, -1, 588, 506, 589, -1, 1189, - 590, -1, 540, -1, 658, -1, 495, -1, 502, 591, - 503, -1, -1, 592, -1, 591, 506, 592, -1, 540, - -1, 99, 594, 406, 1169, 502, 595, 503, 629, 630, - 634, 635, 636, 637, -1, 99, 594, 406, 192, 273, - 155, 1169, 502, 595, 503, 629, 630, 634, 635, 636, - 637, -1, 99, 594, 406, 1169, 283, 774, 596, 630, - 634, 635, 636, 637, -1, 99, 594, 406, 192, 273, - 155, 1169, 283, 774, 596, 630, 634, 635, 636, 637, - -1, 99, 594, 406, 1169, 309, 283, 1169, 596, 571, - 630, 634, 635, 636, 637, -1, 99, 594, 406, 192, - 273, 155, 1169, 309, 283, 1169, 596, 571, 630, 634, - 635, 636, 637, -1, 412, -1, 410, -1, 239, 412, - -1, 239, 410, -1, 179, 412, -1, 179, 410, -1, - 438, -1, -1, 597, -1, -1, 502, 598, 503, -1, - -1, 599, -1, 597, 506, 599, -1, 600, -1, 598, - 506, 600, -1, 601, -1, 611, -1, 614, -1, 602, - -1, 614, -1, 1186, 1078, 604, 682, 605, -1, 1186, - 605, -1, 1186, 461, 292, 605, -1, 87, 1186, -1, - 87, 120, -1, 603, -1, -1, 605, 606, -1, -1, - 92, 1171, 607, -1, 607, -1, 610, -1, 79, 774, - -1, 273, 278, -1, 278, -1, 435, 608, 851, 638, - -1, 321, 224, 851, 638, -1, 73, 502, 1101, 503, - 616, -1, 120, 1102, -1, 178, 609, 39, 191, 654, - -1, 178, 609, 39, 502, 1101, 503, 397, -1, 337, - 1169, 617, 621, 625, -1, 280, 135, -1, 280, 273, - 135, -1, -1, 33, -1, 60, 120, -1, 122, -1, - 273, 122, -1, 206, 123, -1, 206, 194, -1, 235, - 1169, 612, -1, 612, 200, 613, -1, 612, 152, 613, - -1, -1, 84, -1, 87, -1, 93, -1, 121, -1, - 191, -1, 178, -1, 203, -1, 393, -1, 396, -1, - 30, -1, 92, 1171, 615, -1, 615, -1, 73, 502, - 1101, 503, 732, -1, 435, 608, 502, 618, 503, 620, - 851, 638, 732, -1, 435, 639, 732, -1, 321, 224, - 502, 618, 503, 620, 851, 638, 732, -1, 321, 224, - 639, 732, -1, 151, 812, 502, 622, 503, 620, 851, - 638, 624, 732, -1, 171, 224, 502, 618, 503, 337, - 1169, 617, 621, 625, 732, -1, 269, 204, -1, -1, - 502, 618, 503, -1, -1, 619, -1, 618, 506, 619, - -1, 1186, -1, 199, 502, 618, 503, -1, -1, 247, - 175, -1, 247, 308, -1, 247, 383, -1, -1, 623, - -1, 622, 506, 623, -1, 815, 461, 861, -1, 815, - 461, 290, 502, 861, 503, -1, 458, 502, 1101, 503, - -1, -1, 626, -1, 627, -1, 626, 627, -1, 627, - 626, -1, -1, 288, 440, 628, -1, 288, 125, 628, - -1, 269, 25, -1, 349, -1, 64, -1, 377, 278, - 617, -1, 377, 120, 617, -1, 205, 502, 1168, 503, - -1, -1, 631, -1, -1, 309, 60, 1186, 502, 632, - 503, -1, 633, -1, 632, 506, 633, -1, 1186, 818, - 819, -1, 1106, 818, 819, -1, 502, 1101, 503, 818, - 819, -1, 442, 1171, -1, -1, 461, 565, -1, 463, - 286, -1, -1, 288, 85, 140, -1, 288, 85, 125, - 361, -1, 288, 85, 318, 361, -1, -1, 409, 1171, - -1, -1, 442, 202, 409, 1171, -1, -1, 442, 202, - 1171, -1, 99, 393, 774, 951, 288, 641, 174, 1045, - -1, 99, 393, 192, 273, 155, 774, 951, 288, 641, - 174, 1045, -1, 642, -1, 641, 506, 642, -1, 1186, - -1, 1106, -1, 502, 1101, 503, -1, 32, 393, 774, - 377, 393, 1178, -1, 32, 393, 192, 155, 774, 377, - 393, 1178, -1, 99, 594, 406, 645, 39, 996, 646, - -1, 99, 594, 406, 192, 273, 155, 645, 39, 996, - 646, -1, 1169, 617, 634, 635, 636, 637, -1, 461, - 113, -1, 461, 269, 113, -1, -1, 99, 649, 249, - 454, 648, 39, 996, 646, -1, 99, 649, 249, 454, - 192, 273, 155, 648, 39, 996, 646, -1, 1169, 617, - 634, 566, 637, -1, 438, -1, -1, 339, 249, 454, - 810, 1169, 646, -1, 99, 594, 371, 1169, 653, -1, - 99, 594, 371, 192, 273, 155, 1169, 653, -1, 32, - 371, 1169, 655, -1, 32, 371, 192, 155, 1169, 655, - -1, 655, -1, -1, 502, 655, 503, -1, -1, 656, - -1, 655, 656, -1, 39, 1080, -1, 61, 658, -1, - 112, -1, 269, 112, -1, 201, 657, 658, -1, 250, - 658, -1, 254, 658, -1, 269, 250, -1, 269, 254, - -1, 303, 60, 774, -1, 371, 258, 774, -1, 391, - 515, 658, -1, 348, -1, 348, 515, 658, -1, 60, - -1, -1, 5, -1, 493, 5, -1, 494, 5, -1, - 1178, -1, 658, -1, 659, 506, 658, -1, 99, 823, - 661, 666, 226, 1171, -1, 99, 823, 661, 666, 226, - 1171, 186, 662, 663, 665, -1, 427, -1, -1, 1171, - -1, 1171, 775, -1, 207, 662, -1, -1, 446, 662, - -1, 269, 446, -1, 664, -1, -1, 324, -1, -1, - 99, 409, 1171, 668, 242, 1177, 566, -1, 304, 1180, - -1, -1, 140, 409, 1171, -1, 140, 409, 192, 155, - 1171, -1, 99, 158, 1171, 515, 671, -1, 99, 158, - 192, 273, 155, 1171, 515, 671, -1, 671, 672, -1, - -1, 364, 1171, -1, 453, 543, -1, 174, 543, -1, - 64, -1, 32, 158, 1171, 440, 674, -1, 674, 675, - -1, -1, 418, 543, -1, 32, 158, 1171, 527, 770, - 1171, -1, 32, 158, 1171, 527, 769, 774, -1, 32, - 158, 1171, 527, 29, 839, -1, 32, 158, 1171, 527, - 67, 502, 1078, 39, 1078, 503, -1, 32, 158, 1171, - 527, 138, 1078, -1, 32, 158, 1171, 527, 176, 827, - -1, 32, 158, 1171, 527, 290, 863, -1, 32, 158, - 1171, 527, 290, 75, 774, 442, 1171, -1, 32, 158, - 1171, 527, 290, 162, 774, 442, 1171, -1, 32, 158, - 1171, 527, 325, 827, -1, 32, 158, 1171, 527, 358, - 827, -1, 32, 158, 1171, 527, 421, 169, 1078, 226, - 1171, -1, 32, 158, 1171, 527, 428, 1078, -1, 99, - 171, 113, 465, 1171, 680, 682, -1, 186, 662, -1, - 269, 186, -1, 446, 662, -1, 269, 446, -1, 678, - -1, 679, 678, -1, 679, -1, -1, 32, 171, 113, - 465, 1171, 680, 684, -1, 32, 171, 113, 465, 1171, - 679, -1, 292, 502, 683, 503, -1, -1, 687, -1, - 683, 506, 687, -1, 292, 502, 685, 503, -1, 686, - -1, 685, 506, 686, -1, 687, -1, 377, 687, -1, - 26, 687, -1, 140, 688, -1, 688, 689, -1, 1189, - -1, 1177, -1, 99, 374, 1171, 691, 693, 171, 113, - 465, 1171, 682, -1, 99, 374, 192, 273, 155, 1171, - 691, 693, 171, 113, 465, 1171, 682, -1, 428, 1177, - -1, -1, 453, 1177, -1, 453, 278, -1, 692, -1, - -1, 32, 374, 1171, 692, 684, -1, 32, 374, 1171, - 692, -1, 32, 374, 1171, 684, -1, 99, 171, 406, - 1169, 502, 595, 503, 629, 374, 1171, 682, -1, 99, - 171, 406, 192, 273, 155, 1169, 502, 595, 503, 629, - 374, 1171, 682, -1, 99, 171, 406, 1169, 309, 283, - 1169, 596, 571, 374, 1171, 682, -1, 99, 171, 406, - 192, 273, 155, 1169, 309, 283, 1169, 596, 571, 374, - 1171, 682, -1, 197, 171, 364, 1171, 698, 174, 374, - 1171, 218, 1171, 682, -1, 236, 418, -1, 150, -1, - 697, 502, 1057, 503, -1, -1, 99, 441, 246, 169, - 700, 374, 1171, 682, -1, 99, 441, 246, 192, 273, - 155, 169, 700, 374, 1171, 682, -1, 1180, -1, 441, - -1, 140, 441, 246, 169, 700, 374, 1171, -1, 140, - 441, 246, 192, 155, 169, 700, 374, 1171, -1, 32, - 441, 246, 169, 700, 374, 1171, 684, -1, 99, 314, - 1171, 288, 1169, 709, 710, 707, 705, 706, -1, 32, - 314, 1171, 288, 1169, 708, 705, 706, -1, 442, 502, - 1101, 503, -1, -1, 461, 73, 502, 1101, 503, -1, - -1, 418, 1181, -1, -1, 418, 1181, -1, -1, 39, - 3, -1, -1, 169, 711, -1, -1, 30, -1, 370, - -1, 212, -1, 440, -1, 125, -1, 99, 24, 252, - 1171, 428, 713, 186, 662, -1, 202, -1, 406, -1, - 99, 823, 423, 1171, 715, 716, 288, 1169, 718, 724, - 727, 154, 728, 1174, 502, 729, 503, -1, 99, 823, - 92, 423, 1171, 28, 716, 288, 1169, 731, 732, 169, - 141, 360, 727, 154, 728, 1174, 502, 729, 503, -1, - 51, -1, 28, -1, 213, 283, -1, 717, -1, 716, - 293, 717, -1, 212, -1, 125, -1, 440, -1, 440, - 283, 618, -1, 426, -1, 338, 719, -1, -1, 720, - -1, 719, 720, -1, 721, 722, 933, 723, -1, 263, - -1, 287, -1, 406, -1, 360, -1, 1186, -1, 169, - 725, 726, -1, -1, 141, -1, -1, 360, -1, 392, - -1, 457, 502, 1101, 503, -1, -1, 176, -1, 325, - -1, 730, -1, 729, 506, 730, -1, -1, 1176, -1, - 5, -1, 1177, -1, 1189, -1, 174, 1169, -1, -1, - -1, 732, 733, -1, 273, 122, -1, 122, -1, 206, - 194, -1, 206, 123, -1, 273, 444, -1, 269, 204, - -1, 99, 149, 423, 1171, 288, 1189, 154, 728, 1174, - 502, 503, -1, 99, 149, 423, 1171, 288, 1189, 457, - 735, 154, 728, 1174, 502, 503, -1, 736, -1, 735, - 36, 736, -1, 1186, 198, 502, 737, 503, -1, 6, - -1, 737, 506, 6, -1, 32, 149, 423, 1171, 739, - -1, 143, -1, 143, 346, -1, 143, 33, -1, 133, - -1, 99, 42, 774, 73, 502, 1101, 503, 732, -1, - 99, 823, 29, 1174, 837, 742, -1, 99, 823, 29, - 1174, 746, -1, 99, 290, 861, 742, -1, 99, 428, - 774, 742, -1, 99, 428, 774, -1, 99, 428, 774, - 39, 502, 1068, 503, -1, 99, 428, 774, 39, 147, - 502, 749, 503, -1, 99, 428, 774, 39, 330, 742, - -1, 99, 413, 367, 307, 774, 742, -1, 99, 413, - 367, 132, 774, 742, -1, 99, 413, 367, 411, 774, - 742, -1, 99, 413, 367, 89, 774, 742, -1, 99, - 80, 774, 742, -1, 99, 80, 192, 273, 155, 774, - 742, -1, 99, 80, 774, 174, 774, -1, 99, 80, - 192, 273, 155, 774, 174, 774, -1, 502, 743, 503, - -1, 744, -1, 743, 506, 744, -1, 1189, 492, 745, - -1, 1189, -1, 834, -1, 1194, -1, 1137, -1, 658, - -1, 1177, -1, 270, -1, 502, 747, 503, -1, 748, - -1, 747, 506, 748, -1, 3, 492, 745, -1, 750, - -1, -1, 1177, -1, 750, 506, 1177, -1, 32, 428, - 774, 26, 447, 752, 1177, -1, 32, 428, 774, 26, - 447, 752, 1177, 51, 1177, -1, 32, 428, 774, 26, - 447, 752, 1177, 28, 1177, -1, 32, 428, 774, 343, - 447, 1177, 418, 1177, -1, 192, 273, 155, -1, -1, - 99, 290, 75, 774, 756, 169, 428, 1078, 442, 1171, - 757, 39, 754, -1, 755, -1, 754, 506, 755, -1, - 290, 1176, 861, 758, 759, -1, 290, 1176, 863, 758, - 759, -1, 176, 1176, 827, -1, 176, 1176, 502, 1143, - 503, 827, -1, 396, 1078, -1, 120, -1, -1, 162, - 774, -1, -1, 169, 367, -1, 169, 294, 60, 774, - -1, -1, 334, -1, -1, 99, 290, 162, 774, 442, - 1171, -1, 32, 290, 162, 774, 442, 1171, 26, 754, - -1, 32, 290, 162, 774, 442, 1171, 140, 762, -1, - 763, -1, 762, 506, 763, -1, 290, 1176, 502, 1143, - 503, -1, 176, 1176, 502, 1143, 503, -1, 140, 290, - 75, 774, 442, 1171, 561, -1, 140, 290, 75, 192, - 155, 774, 442, 1171, 561, -1, 140, 290, 162, 774, - 442, 1171, 561, -1, 140, 290, 162, 192, 155, 774, - 442, 1171, 561, -1, 140, 303, 60, 1181, 561, -1, - 333, 303, 60, 1181, 418, 1180, -1, 140, 769, 192, - 155, 773, 561, -1, 140, 769, 773, 561, -1, 140, - 771, 192, 155, 1170, 561, -1, 140, 771, 1170, 561, - -1, 140, 772, 1171, 288, 774, 561, -1, 140, 772, - 192, 155, 1171, 288, 774, 561, -1, 140, 428, 776, - 561, -1, 140, 428, 192, 155, 776, 561, -1, 140, - 138, 776, 561, -1, 140, 138, 192, 155, 776, 561, - -1, 140, 202, 88, 773, 561, -1, 140, 202, 88, - 192, 155, 773, 561, -1, 406, -1, 371, -1, 454, - -1, 249, 454, -1, 202, -1, 171, 406, -1, 80, - -1, 96, -1, 393, -1, 413, 367, 307, -1, 413, - 367, 132, -1, 413, 367, 411, -1, 413, 367, 89, - -1, 771, -1, 114, -1, 355, -1, 400, -1, 409, - -1, 24, 252, -1, 149, 423, -1, 158, -1, 171, - 113, 465, -1, 666, 226, -1, 328, -1, 364, -1, - 374, -1, 314, -1, 362, -1, 423, -1, 774, -1, - 773, 506, 774, -1, 1186, -1, 1186, 775, -1, 504, - 1172, -1, 775, 504, 1172, -1, 1078, -1, 776, 506, - 1078, -1, 426, 1010, 1057, 778, 561, -1, 95, 191, - -1, 348, 191, -1, -1, 83, 288, 769, 774, 220, - 780, -1, 83, 288, 81, 774, 220, 780, -1, 83, - 288, 770, 1171, 220, 780, -1, 83, 288, 428, 1078, - 220, 780, -1, 83, 288, 138, 1078, 220, 780, -1, - 83, 288, 29, 839, 220, 780, -1, 83, 288, 176, - 827, 220, 780, -1, 83, 288, 290, 863, 220, 780, - -1, 83, 288, 92, 1171, 288, 774, 220, 780, -1, - 83, 288, 92, 1171, 288, 138, 774, 220, 780, -1, - 83, 288, 772, 1171, 288, 774, 220, 780, -1, 83, - 288, 325, 827, 220, 780, -1, 83, 288, 358, 827, - 220, 780, -1, 83, 288, 421, 169, 1078, 226, 1171, - 220, 780, -1, 83, 288, 290, 75, 774, 442, 1171, - 220, 780, -1, 83, 288, 290, 162, 774, 442, 1171, - 220, 780, -1, 83, 288, 227, 282, 658, 220, 780, - -1, 83, 288, 67, 502, 1078, 39, 1078, 503, 220, - 780, -1, 1177, -1, 278, -1, 369, 225, 782, 288, - 769, 774, 220, 783, -1, 369, 225, 782, 288, 81, - 774, 220, 783, -1, 369, 225, 782, 288, 770, 1171, - 220, 783, -1, 369, 225, 782, 288, 428, 1078, 220, - 783, -1, 369, 225, 782, 288, 138, 1078, 220, 783, - -1, 369, 225, 782, 288, 29, 839, 220, 783, -1, - 369, 225, 782, 288, 176, 827, 220, 783, -1, 369, - 225, 782, 288, 227, 282, 658, 220, 783, -1, 369, - 225, 782, 288, 325, 827, 220, 783, -1, 369, 225, - 782, 288, 358, 827, 220, 783, -1, 169, 543, -1, - -1, 1177, -1, 278, -1, 163, 785, -1, 257, 785, - -1, 993, -1, 786, 993, -1, 264, 787, 993, -1, - 322, 787, 993, -1, 166, 787, 993, -1, 228, 787, - 993, -1, 23, 1178, 787, 993, -1, 341, 1178, 787, - 993, -1, 1178, 787, 993, -1, 30, 787, 993, -1, - 172, 787, 993, -1, 172, 1178, 787, 993, -1, 172, - 30, 787, 993, -1, 50, 787, 993, -1, 50, 1178, - 787, 993, -1, 50, 30, 787, 993, -1, 174, -1, - 198, -1, 786, -1, -1, 180, 790, 288, 795, 418, - 796, 798, 802, -1, 353, 790, 288, 795, 174, 796, - 802, 561, -1, 353, 180, 291, 169, 790, 288, 795, - 174, 796, 802, 561, -1, 791, -1, 30, -1, 30, - 323, -1, 30, 502, 618, 503, -1, 30, 323, 502, - 618, 503, -1, 792, -1, 791, 506, 792, -1, 370, - 617, -1, 337, 617, -1, 99, 617, -1, 32, 405, - -1, 1186, 617, -1, 794, -1, 793, 506, 794, -1, - 1186, -1, 794, 504, 1186, -1, 1168, -1, 406, 1168, - -1, 371, 1168, -1, 171, 113, 465, 1170, -1, 171, - 374, 1170, -1, 176, 826, -1, 325, 826, -1, 358, - 826, -1, 114, 1170, -1, 138, 773, -1, 226, 1170, - -1, 227, 282, 659, -1, 306, 793, -1, 364, 1170, - -1, 409, 1170, -1, 428, 773, -1, 30, 407, 198, - 364, 1170, -1, 30, 372, 198, 364, 1170, -1, 30, - 177, 198, 364, 1170, -1, 30, 326, 198, 364, 1170, - -1, 30, 359, 198, 364, 1170, -1, 797, -1, 796, - 506, 797, -1, 1180, -1, 183, 1180, -1, 461, 180, - 291, -1, -1, 180, 791, 418, 1181, 801, 802, -1, - 353, 791, 174, 1181, 802, 561, -1, 353, 27, 291, - 169, 791, 174, 1181, 802, 561, -1, 461, 27, 291, - -1, -1, 181, 60, 1180, -1, -1, 32, 120, 323, - 804, 806, -1, 804, 805, -1, -1, 198, 364, 1170, - -1, 169, 355, 1181, -1, 169, 441, 1181, -1, 180, - 790, 288, 807, 418, 796, 798, -1, 353, 790, 288, - 807, 174, 796, 561, -1, 353, 180, 291, 169, 790, - 288, 807, 174, 796, 561, -1, 407, -1, 177, -1, - 359, -1, 372, -1, 429, -1, 365, -1, 99, 809, - 202, 810, 811, 288, 1055, 812, 502, 813, 503, 816, - 608, 566, 637, 1066, -1, 99, 809, 202, 810, 192, - 273, 155, 1171, 288, 1055, 812, 502, 813, 503, 816, - 608, 566, 637, 1066, -1, 435, -1, -1, 88, -1, - -1, 1171, -1, -1, 442, 1171, -1, -1, 815, -1, - 813, 506, 815, -1, 818, 819, 820, 821, -1, 818, - 774, 565, 820, 821, -1, 1186, 814, -1, 1106, 814, - -1, 502, 1101, 503, 814, -1, 199, 502, 817, 503, - -1, -1, 815, -1, 817, 506, 815, -1, 79, 774, - -1, -1, 774, -1, -1, 40, -1, 130, -1, -1, - 483, 166, -1, 483, 228, -1, -1, 99, 823, 176, - 1174, 828, 352, 833, 841, 847, -1, 99, 823, 176, - 1174, 828, 352, 406, 502, 853, 503, 841, 847, -1, - 99, 823, 176, 1174, 828, 841, 847, -1, 99, 823, - 325, 1174, 828, 841, 847, -1, 293, 345, -1, -1, - 502, 825, 503, -1, 502, 503, -1, 830, -1, 825, - 506, 830, -1, 827, -1, 826, 506, 827, -1, 1174, - 824, -1, 1193, -1, 1186, -1, 1186, 1162, -1, 502, - 829, 503, -1, 502, 503, -1, 835, -1, 829, 506, - 835, -1, 831, 832, 834, -1, 832, 831, 834, -1, - 832, 834, -1, 831, 834, -1, 834, -1, 198, -1, - 297, -1, 209, -1, 198, 297, -1, 450, -1, 1187, - -1, 834, -1, 1078, -1, 1187, 775, 497, 428, -1, - 379, 1187, 775, 497, 428, -1, 830, -1, 830, 120, - 1101, -1, 830, 492, 1101, -1, 830, -1, 502, 495, - 503, -1, 502, 838, 503, -1, 502, 294, 60, 838, - 503, -1, 502, 838, 294, 60, 838, 503, -1, 836, - -1, 838, 506, 836, -1, 1174, 837, -1, 839, -1, - 840, 506, 839, -1, 842, -1, -1, 844, -1, 842, - 844, -1, 63, 288, 278, 210, -1, 352, 278, 288, - 278, 210, -1, 398, -1, 195, -1, 389, -1, 456, - -1, 159, 369, 124, -1, 159, 369, 219, -1, 369, - 124, -1, 369, 219, -1, 231, -1, 273, 231, -1, - 98, 658, -1, 361, 658, -1, 402, 774, -1, 548, - -1, 305, 1186, -1, 39, 845, -1, 226, 543, -1, - 421, 850, -1, 460, -1, 843, -1, 1177, -1, 1177, - 506, 1177, -1, 350, 1101, -1, 846, -1, 52, 45, - 848, 146, -1, -1, 848, 849, 505, -1, -1, 512, - -1, 846, -1, 169, 428, 1078, -1, 850, 506, 169, - 428, 1078, -1, 461, 742, -1, -1, 832, 834, -1, - 852, -1, 853, 506, 852, -1, 32, 176, 827, 855, - 856, -1, 32, 325, 827, 855, 856, -1, 32, 358, - 827, 855, 856, -1, 843, -1, 855, 843, -1, 349, - -1, -1, 140, 176, 826, 561, -1, 140, 176, 192, - 155, 826, 561, -1, 140, 325, 826, 561, -1, 140, - 325, 192, 155, 826, 561, -1, 140, 358, 826, 561, - -1, 140, 358, 192, 155, 826, 561, -1, 140, 29, - 840, 561, -1, 140, 29, 192, 155, 840, 561, -1, - 140, 290, 862, 561, -1, 140, 290, 192, 155, 862, - 561, -1, 502, 1078, 503, -1, 502, 1078, 506, 1078, - 503, -1, 502, 270, 506, 1078, 503, -1, 502, 1078, - 506, 270, 503, -1, 1134, -1, 1186, 504, 861, -1, - 863, -1, 862, 506, 863, -1, 861, 860, -1, 136, - 865, -1, 866, -1, 865, 866, -1, 1177, -1, 226, - 543, -1, 99, 67, 502, 1078, 39, 1078, 503, 461, - 176, 827, 868, -1, 99, 67, 502, 1078, 39, 1078, - 503, 463, 176, 868, -1, 99, 67, 502, 1078, 39, - 1078, 503, 461, 209, 868, -1, 39, 196, -1, 39, - 43, -1, -1, 140, 67, 870, 502, 1078, 39, 1078, - 503, 561, -1, 192, 155, -1, -1, 99, 823, 421, - 169, 1078, 226, 1171, 502, 872, 503, -1, 174, 388, - 461, 176, 827, 506, 418, 388, 461, 176, 827, -1, - 418, 388, 461, 176, 827, 506, 174, 388, 461, 176, - 827, -1, 174, 388, 461, 176, 827, -1, 418, 388, - 461, 176, 827, -1, 140, 421, 870, 169, 1078, 226, - 1171, 561, -1, 340, 875, 810, 1169, -1, 340, 876, - 810, 1171, -1, 340, 502, 942, 503, 875, 810, 1169, - -1, 340, 502, 942, 503, 876, 810, 1171, -1, 202, - -1, 406, -1, 364, -1, 405, -1, 114, -1, 32, - 409, 1171, 377, 565, -1, 32, 409, 1171, 347, 565, - -1, 32, 29, 839, 343, 418, 1171, -1, 32, 80, - 774, 343, 418, 1171, -1, 32, 96, 774, 343, 418, - 1171, -1, 32, 114, 1171, 343, 418, 1171, -1, 32, - 138, 774, 343, 418, 1171, -1, 32, 138, 774, 343, - 92, 1171, 418, 1171, -1, 32, 171, 113, 465, 1171, - 343, 418, 1171, -1, 32, 176, 827, 343, 418, 1171, - -1, 32, 183, 1179, 343, 418, 1179, -1, 32, 666, - 226, 1171, 343, 418, 1171, -1, 32, 290, 75, 774, - 442, 1171, 343, 418, 1171, -1, 32, 290, 162, 774, - 442, 1171, 343, 418, 1171, -1, 32, 314, 1171, 288, - 1169, 343, 418, 1171, -1, 32, 314, 192, 155, 1171, - 288, 1169, 343, 418, 1171, -1, 32, 325, 827, 343, - 418, 1171, -1, 32, 328, 1171, 343, 418, 1171, -1, - 32, 358, 827, 343, 418, 1171, -1, 32, 364, 1171, - 343, 418, 1171, -1, 32, 374, 1171, 343, 418, 1171, - -1, 32, 400, 1171, 343, 418, 1171, -1, 32, 406, - 1055, 343, 418, 1171, -1, 32, 406, 192, 155, 1055, - 343, 418, 1171, -1, 32, 371, 1169, 343, 418, 1171, - -1, 32, 371, 192, 155, 1169, 343, 418, 1171, -1, - 32, 454, 1169, 343, 418, 1171, -1, 32, 454, 192, - 155, 1169, 343, 418, 1171, -1, 32, 249, 454, 1169, - 343, 418, 1171, -1, 32, 249, 454, 192, 155, 1169, - 343, 418, 1171, -1, 32, 202, 1169, 343, 418, 1171, - -1, 32, 202, 192, 155, 1169, 343, 418, 1171, -1, - 32, 171, 406, 1055, 343, 418, 1171, -1, 32, 171, - 406, 192, 155, 1055, 343, 418, 1171, -1, 32, 406, - 1055, 343, 879, 1171, 418, 1171, -1, 32, 406, 192, - 155, 1055, 343, 879, 1171, 418, 1171, -1, 32, 454, - 1169, 343, 879, 1171, 418, 1171, -1, 32, 454, 192, - 155, 1169, 343, 879, 1171, 418, 1171, -1, 32, 249, - 454, 1169, 343, 879, 1171, 418, 1171, -1, 32, 249, - 454, 192, 155, 1169, 343, 879, 1171, 418, 1171, -1, - 32, 406, 1055, 343, 92, 1171, 418, 1171, -1, 32, - 406, 192, 155, 1055, 343, 92, 1171, 418, 1171, -1, - 32, 171, 406, 1055, 343, 879, 1171, 418, 1171, -1, - 32, 171, 406, 192, 155, 1055, 343, 879, 1171, 418, - 1171, -1, 32, 362, 1171, 288, 1169, 343, 418, 1171, - -1, 32, 423, 1171, 288, 1169, 343, 418, 1171, -1, - 32, 149, 423, 1171, 343, 418, 1171, -1, 32, 355, - 1179, 343, 418, 1179, -1, 32, 441, 1179, 343, 418, - 1179, -1, 32, 409, 1171, 343, 418, 1171, -1, 32, - 393, 774, 343, 418, 1171, -1, 32, 413, 367, 307, - 774, 343, 418, 1171, -1, 32, 413, 367, 132, 774, - 343, 418, 1171, -1, 32, 413, 367, 411, 774, 343, - 418, 1171, -1, 32, 413, 367, 89, 774, 343, 418, - 1171, -1, 32, 428, 774, 343, 418, 1171, -1, 32, - 428, 774, 343, 48, 1171, 418, 1171, 561, -1, 81, - -1, -1, 377, 113, -1, -1, 32, 176, 827, 882, - 128, 288, 158, 1171, -1, 32, 325, 827, 882, 128, - 288, 158, 1171, -1, 32, 358, 827, 882, 128, 288, - 158, 1171, -1, 32, 423, 1171, 288, 1169, 882, 128, - 288, 158, 1171, -1, 32, 249, 454, 1169, 882, 128, - 288, 158, 1171, -1, 32, 202, 1169, 882, 128, 288, - 158, 1171, -1, 269, -1, -1, 32, 29, 839, 377, - 364, 1171, -1, 32, 80, 774, 377, 364, 1171, -1, - 32, 96, 774, 377, 364, 1171, -1, 32, 138, 774, - 377, 364, 1171, -1, 32, 158, 1171, 377, 364, 1171, - -1, 32, 176, 827, 377, 364, 1171, -1, 32, 290, - 863, 377, 364, 1171, -1, 32, 290, 75, 774, 442, - 1171, 377, 364, 1171, -1, 32, 290, 162, 774, 442, - 1171, 377, 364, 1171, -1, 32, 325, 827, 377, 364, - 1171, -1, 32, 358, 827, 377, 364, 1171, -1, 32, - 406, 1055, 377, 364, 1171, -1, 32, 406, 192, 155, - 1055, 377, 364, 1171, -1, 32, 393, 774, 377, 364, - 1171, -1, 32, 413, 367, 307, 774, 377, 364, 1171, - -1, 32, 413, 367, 132, 774, 377, 364, 1171, -1, - 32, 413, 367, 411, 774, 377, 364, 1171, -1, 32, - 413, 367, 89, 774, 377, 364, 1171, -1, 32, 371, - 1169, 377, 364, 1171, -1, 32, 371, 192, 155, 1169, - 377, 364, 1171, -1, 32, 454, 1169, 377, 364, 1171, - -1, 32, 454, 192, 155, 1169, 377, 364, 1171, -1, - 32, 249, 454, 1169, 377, 364, 1171, -1, 32, 249, - 454, 192, 155, 1169, 377, 364, 1171, -1, 32, 171, - 406, 1055, 377, 364, 1171, -1, 32, 171, 406, 192, - 155, 1055, 377, 364, 1171, -1, 32, 428, 774, 377, - 364, 1171, -1, 32, 290, 863, 377, 502, 885, 503, - -1, 886, -1, 885, 506, 886, -1, 1189, 492, 270, - -1, 1189, 492, 887, -1, 834, -1, 1194, -1, 1137, - -1, 658, -1, 1177, -1, 32, 428, 774, 377, 502, - 885, 503, -1, 32, 29, 839, 304, 418, 1180, -1, - 32, 80, 774, 304, 418, 1180, -1, 32, 96, 774, - 304, 418, 1180, -1, 32, 114, 1171, 304, 418, 1180, - -1, 32, 138, 774, 304, 418, 1180, -1, 32, 176, - 827, 304, 418, 1180, -1, 32, 666, 226, 1171, 304, - 418, 1180, -1, 32, 227, 282, 658, 304, 418, 1180, - -1, 32, 290, 863, 304, 418, 1180, -1, 32, 290, - 75, 774, 442, 1171, 304, 418, 1180, -1, 32, 290, - 162, 774, 442, 1171, 304, 418, 1180, -1, 32, 325, - 827, 304, 418, 1180, -1, 32, 358, 827, 304, 418, - 1180, -1, 32, 364, 1171, 304, 418, 1180, -1, 32, - 428, 774, 304, 418, 1180, -1, 32, 409, 1171, 304, - 418, 1180, -1, 32, 393, 774, 304, 418, 1180, -1, - 32, 413, 367, 132, 774, 304, 418, 1180, -1, 32, - 413, 367, 89, 774, 304, 418, 1180, -1, 32, 171, - 113, 465, 1171, 304, 418, 1180, -1, 32, 374, 1171, - 304, 418, 1180, -1, 32, 149, 423, 1171, 304, 418, - 1180, -1, 32, 328, 1171, 304, 418, 1180, -1, 32, - 400, 1171, 304, 418, 1180, -1, 99, 328, 1171, 851, - -1, 99, 328, 1171, 169, 30, 407, 851, -1, 99, - 328, 1171, 169, 892, 851, -1, 406, 1055, 617, 624, - -1, 407, 198, 364, 1186, -1, 407, 198, 364, 107, - -1, 1186, 617, 624, -1, 1186, 1162, 617, 624, -1, - 1056, 617, 624, -1, 107, -1, 891, -1, 892, 506, - 891, -1, 32, 328, 1171, 377, 742, -1, 32, 328, - 1171, 26, 892, -1, 32, 328, 1171, 377, 892, -1, - 32, 328, 1171, 140, 892, -1, 99, 400, 1171, 91, - 1177, 328, 1170, 851, -1, 32, 400, 1171, 377, 742, - -1, 32, 400, 1171, 91, 1177, -1, 32, 400, 1171, - 339, 328, 851, -1, 32, 400, 1171, 26, 328, 1170, - 851, -1, 32, 400, 1171, 140, 328, 1170, 851, -1, - 32, 400, 1171, 377, 328, 1170, 851, -1, 32, 400, - 1171, 143, -1, 32, 400, 1171, 133, -1, 32, 400, - 1171, 384, 742, -1, 140, 400, 1171, 561, -1, 140, - 400, 192, 155, 1171, 561, -1, 99, 823, 362, 1171, - 39, 288, 902, 418, 1169, 1066, 136, 903, 898, -1, - 274, -1, 900, -1, 502, 899, 503, -1, 899, 505, - 901, -1, 901, -1, 996, -1, 963, -1, 979, -1, - 972, -1, 904, -1, 900, -1, -1, 370, -1, 440, - -1, 125, -1, 212, -1, 213, -1, 31, -1, -1, - 275, 1186, 905, -1, 506, 1177, -1, -1, 237, 1186, - -1, 437, 1186, -1, 437, 495, -1, 22, 910, 914, - -1, 391, 420, 913, -1, 85, 910, 914, -1, 356, - 910, 914, -1, 363, 1186, -1, 342, 363, 1186, -1, - 342, 1186, -1, 356, 910, 418, 363, 1186, -1, 356, - 910, 418, 1186, -1, 319, 420, 1177, -1, 85, 320, - 1177, -1, 356, 320, 1177, -1, 52, 910, 913, -1, - 146, 910, 914, -1, 464, -1, 420, -1, -1, 222, - 234, 539, -1, 331, 289, -1, 331, 466, -1, 122, - -1, 273, 122, -1, 911, -1, 912, 506, 911, -1, - 912, 911, -1, 912, -1, -1, 36, 69, -1, 36, - 269, 69, -1, -1, 99, 594, 454, 1169, 617, 566, - 39, 996, 916, -1, 99, 293, 345, 594, 454, 1169, - 617, 566, 39, 996, 916, -1, 99, 594, 335, 454, - 1169, 502, 618, 503, 566, 39, 996, 916, -1, 99, - 293, 345, 594, 335, 454, 1169, 502, 618, 503, 566, - 39, 996, 916, -1, 461, 73, 291, -1, 461, 65, - 73, 291, -1, 461, 239, 73, 291, -1, -1, 238, - 1173, -1, 99, 114, 1171, 515, 919, -1, 920, -1, - -1, 921, -1, 920, 921, -1, 922, 923, 658, -1, - 922, 923, 540, -1, 922, 923, 120, -1, 3, -1, - 91, 236, -1, 144, -1, 242, -1, 304, -1, 409, - -1, 411, -1, 492, -1, -1, 32, 114, 1171, 461, - 919, -1, 32, 114, 1171, 919, -1, 32, 114, 1171, - 377, 409, 1171, -1, 32, 114, 1171, 339, 80, 453, - -1, 32, 114, 1171, 547, -1, 140, 114, 1171, -1, - 140, 114, 192, 155, 1171, -1, 140, 114, 1171, 515, - 502, 927, 503, -1, 140, 114, 192, 155, 1171, 515, - 502, 927, 503, -1, 928, -1, 927, 506, 928, -1, - 170, -1, 32, 80, 774, 339, 453, -1, 32, 405, - 377, 534, -1, 32, 405, 347, 546, -1, 99, 138, - 774, 933, 1078, 605, -1, 32, 138, 774, 560, -1, - 32, 138, 774, 140, 273, 278, -1, 32, 138, 774, - 377, 273, 278, -1, 32, 138, 774, 26, 614, -1, - 32, 138, 774, 140, 92, 1171, 561, -1, 32, 138, - 774, 140, 92, 192, 155, 1171, 561, -1, 32, 138, - 774, 445, 92, 1171, -1, 39, -1, -1, 32, 413, - 367, 132, 774, 742, -1, 32, 413, 367, 89, 774, - 26, 246, 169, 1170, 936, 773, -1, 32, 413, 367, - 89, 774, 32, 246, 169, 1170, 936, 773, -1, 32, - 413, 367, 89, 774, 32, 246, 345, 774, 936, 774, - -1, 32, 413, 367, 89, 774, 32, 246, 169, 1170, - 345, 774, 936, 774, -1, 32, 413, 367, 89, 774, - 140, 246, 169, 1170, -1, 32, 413, 367, 89, 774, - 140, 246, 192, 155, 169, 1170, -1, 461, -1, 484, - -1, 99, 756, 96, 774, 169, 1177, 418, 1177, 174, - 774, -1, 77, 948, 1169, 939, -1, 77, 502, 942, - 503, 1169, 939, -1, 77, 948, -1, 77, 948, 1171, - 288, 1169, -1, 442, 1171, -1, -1, 443, 949, 950, - 948, 947, 954, -1, 443, 502, 942, 503, 954, -1, - 943, 948, 954, -1, 943, 502, 942, 503, 954, -1, - 944, -1, 942, 506, 944, -1, 35, -1, 34, -1, - 945, 946, -1, 1188, -1, 943, -1, 540, -1, 658, - -1, -1, 943, -1, -1, 452, -1, -1, 175, -1, - -1, 173, -1, -1, 502, 1170, 503, -1, -1, 1169, - 951, -1, 952, -1, 953, 506, 952, -1, 953, -1, - -1, 156, 956, -1, 156, 943, 948, 956, -1, 156, - 452, 956, -1, 156, 502, 942, 503, 956, -1, 996, - -1, 963, -1, 979, -1, 972, -1, 984, -1, 992, - -1, 644, -1, 647, -1, 650, -1, 960, -1, 319, - 1171, 958, 39, 959, -1, 502, 1143, 503, -1, -1, - 996, -1, 963, -1, 979, -1, 972, -1, 984, -1, - 154, 1171, 961, -1, 99, 594, 406, 645, 39, 154, - 1171, 961, 646, -1, 99, 594, 406, 192, 273, 155, - 645, 39, 154, 1171, 961, 646, -1, 502, 1139, 503, - -1, -1, 116, 1171, -1, 116, 319, 1171, -1, 116, - 30, -1, 116, 319, 30, -1, 1007, 212, 218, 964, - 965, 969, 971, -1, 1169, -1, 1169, 39, 1186, -1, - 996, -1, 302, 966, 447, 996, -1, 502, 967, 503, - 996, -1, 502, 967, 503, 302, 966, 447, 996, -1, - 120, 448, -1, 441, -1, 405, -1, 968, -1, 967, - 506, 968, -1, 1186, 1163, -1, 288, 90, 970, 136, - 440, 377, 980, 1066, -1, 288, 90, 970, 136, 274, - -1, -1, 502, 813, 503, 1066, -1, 288, 92, 1171, - -1, -1, 351, 1166, -1, -1, 1007, 125, 174, 1058, - 973, 1067, 971, -1, 442, 1045, -1, -1, 243, 1010, - 1057, 975, 977, -1, 198, 976, 255, -1, -1, 24, - 380, -1, 360, 380, -1, 360, 153, -1, 380, 440, - 153, -1, 380, -1, 380, 360, 153, -1, 153, -1, - 24, 153, -1, 277, -1, -1, 277, -1, 384, 244, - -1, -1, 1007, 440, 1058, 377, 980, 1044, 1067, 971, - -1, 981, -1, 980, 506, 981, -1, 982, 492, 1101, - -1, 502, 983, 503, 492, 1101, -1, 1186, 1163, -1, - 982, -1, 983, 506, 982, -1, 1007, 251, 218, 1058, - 442, 1046, 288, 1101, 985, -1, 986, -1, 985, 986, - -1, 457, 248, 987, 414, 988, -1, 457, 248, 987, - 414, 989, -1, 457, 273, 248, 987, 414, 990, -1, - 457, 248, 987, 414, 136, 274, -1, 457, 273, 248, - 987, 414, 136, 274, -1, 36, 1101, -1, -1, 440, - 377, 980, -1, 125, -1, 212, 991, -1, 212, 302, - 966, 447, 991, -1, 212, 502, 967, 503, 991, -1, - 212, 502, 967, 503, 302, 966, 447, 991, -1, 212, - 120, 448, -1, 448, 502, 1139, 503, -1, 119, 993, - 994, 111, 995, 169, 996, -1, 1171, -1, -1, 994, - 269, 366, -1, 994, 366, -1, 994, 55, -1, 994, - 41, -1, 994, 211, -1, -1, 461, 189, -1, 463, - 189, -1, 998, -1, 997, -1, 502, 998, 503, -1, - 502, 997, 503, -1, 1000, -1, 999, 1016, -1, 999, - 1015, 1037, 1020, -1, 999, 1015, 1019, 1038, -1, 1001, - 999, -1, 1001, 999, 1016, -1, 1001, 999, 1015, 1037, - 1020, -1, 1001, 999, 1015, 1019, 1038, -1, 1000, -1, - 997, -1, 370, 1013, 1165, 1008, 1044, 1066, 1029, 1036, - 1119, -1, 370, 1012, 1166, 1008, 1044, 1066, 1029, 1036, - 1119, -1, 1043, -1, 406, 1055, -1, 999, 434, 1011, - 999, -1, 999, 216, 1011, 999, -1, 999, 150, 1011, - 999, -1, 461, 1002, -1, 484, 1002, -1, 461, 335, - 1002, -1, 1003, -1, 1002, 506, 1003, -1, 1171, 951, - 39, 1004, 502, 959, 503, 1005, 1006, -1, 249, -1, - 273, 249, -1, -1, 367, 129, 166, 60, 618, 377, - 1186, -1, 367, 59, 166, 60, 618, 377, 1186, -1, - -1, 112, 618, 377, 1186, 418, 1175, 120, 1175, 442, - 1186, -1, 112, 618, 377, 1186, 442, 1186, -1, -1, - 1001, -1, -1, 218, 1009, -1, -1, 412, 1010, 1169, - -1, 410, 1010, 1169, -1, 239, 412, 1010, 1169, -1, - 239, 410, 1010, 1169, -1, 179, 412, 1010, 1169, -1, - 179, 410, 1010, 1169, -1, 438, 1010, 1169, -1, 406, - 1169, -1, 1169, -1, 406, -1, -1, 30, -1, 135, - -1, -1, 135, -1, 135, 288, 502, 1139, 503, -1, - 30, -1, -1, 1012, -1, 1013, -1, 1016, -1, -1, - 294, 60, 1017, -1, 1018, -1, 1017, 506, 1018, -1, - 1101, 442, 1137, 821, -1, 1101, 820, 821, -1, 1021, - 1022, -1, 1022, 1021, -1, 1021, -1, 1022, -1, 1019, - -1, -1, 236, 1023, -1, 236, 1023, 506, 1024, -1, - 163, 1028, 1025, 1027, 289, -1, 163, 1028, 1025, 1027, - 461, 415, -1, 163, 1028, 1027, 289, -1, 163, 1028, - 1027, 461, 415, -1, 285, 1024, -1, 285, 1025, 1027, - -1, 1101, -1, 30, -1, 1101, -1, 1103, -1, 493, - 1026, -1, 494, 1026, -1, 1176, -1, 5, -1, 360, - -1, 361, -1, 166, -1, 264, -1, 183, 60, 1011, - 1030, -1, -1, 1031, -1, 1030, 506, 1031, -1, 1101, - -1, 1032, -1, 1034, -1, 1033, -1, 1035, -1, 502, - 503, -1, 357, 502, 1139, 503, -1, 102, 502, 1139, - 503, -1, 184, 378, 502, 1030, 503, -1, 187, 1101, - -1, -1, 1039, -1, 169, 331, 289, -1, 1037, -1, - -1, 1040, -1, 1039, 1040, -1, 1041, 1042, 978, -1, - 169, 440, -1, 169, 269, 224, 440, -1, 169, 380, - -1, 169, 224, 380, -1, 283, 1168, -1, -1, 448, - 502, 1139, 503, -1, 1043, 506, 502, 1139, 503, -1, - 174, 1045, -1, -1, 1046, -1, 1045, 506, 1046, -1, - 1055, 1049, -1, 1055, 1049, 1059, -1, 1061, 1051, -1, - 229, 1061, 1051, -1, 1071, 1049, -1, 229, 1071, 1049, - -1, 997, 1049, -1, 229, 997, 1049, -1, 1047, -1, - 502, 1047, 503, 1048, -1, 502, 1047, 503, -1, 1046, - 100, 223, 1046, -1, 1046, 1052, 223, 1046, 1054, -1, - 1046, 223, 1046, 1054, -1, 1046, 261, 1052, 223, 1046, - -1, 1046, 261, 223, 1046, -1, 39, 1186, 502, 1170, - 503, -1, 39, 1186, -1, 1186, 502, 1170, 503, -1, - 1186, -1, 1048, -1, -1, 39, 1186, -1, -1, 1048, - -1, 39, 502, 1069, 503, -1, 39, 1186, 502, 1069, - 503, -1, 1186, 502, 1069, 503, -1, -1, 175, 1053, - -1, 233, 1053, -1, 354, 1053, -1, 208, -1, 298, - -1, -1, 442, 502, 1170, 503, 1050, -1, 288, 1101, - -1, 1169, -1, 1056, -1, 1169, 495, -1, 289, 1169, - -1, 289, 502, 1169, 503, -1, 1055, -1, 1057, 506, - 1055, -1, 1055, -1, 1055, 1186, -1, 1055, 39, 1186, - -1, 408, 1174, 502, 1139, 503, 1060, -1, 344, 502, - 1101, 503, -1, -1, 1106, 1065, -1, 361, 174, 502, - 1063, 503, 1065, -1, 1106, 1064, -1, 1062, -1, 1063, - 506, 1062, -1, 39, 502, 1069, 503, -1, -1, 484, - 295, -1, -1, 458, 1101, -1, -1, 458, 1101, -1, - 458, 103, 283, 993, -1, -1, 1069, -1, -1, 1070, - -1, 1069, 506, 1070, -1, 1186, 1078, 562, -1, 478, - 502, 1103, 1115, 82, 1072, 503, -1, 478, 502, 473, - 502, 1076, 503, 506, 1103, 1115, 82, 1072, 503, -1, - 1073, -1, 1072, 506, 1073, -1, 1186, 1078, -1, 1186, - 1078, 1074, -1, 1186, 169, 295, -1, 1075, -1, 1074, - 1075, -1, 3, 1102, -1, 120, 1102, -1, 273, 278, - -1, 278, -1, 1077, -1, 1076, 506, 1077, -1, 1102, - 39, 1189, -1, 120, 1102, -1, 1080, 1079, -1, 379, - 1080, 1079, -1, 1080, 38, 500, 1176, 501, -1, 379, - 1080, 38, 500, 1176, 501, -1, 1080, 38, -1, 379, - 1080, 38, -1, 1079, 500, 501, -1, 1079, 500, 1176, - 501, -1, -1, 1082, -1, 1084, -1, 1086, -1, 1090, - -1, 1096, -1, 1097, 1099, -1, 1097, 502, 1176, 503, - -1, 1084, -1, 1087, -1, 1091, -1, 1096, -1, 1187, - 1083, -1, 1187, 775, 1083, -1, 502, 1139, 503, -1, - -1, 214, -1, 215, -1, 385, -1, 54, -1, 332, - -1, 167, 1085, -1, 139, 317, -1, 118, 1083, -1, - 117, 1083, -1, 281, 1083, -1, 57, -1, 502, 1176, - 503, -1, -1, 1088, -1, 1089, -1, 1088, -1, 1089, - -1, 56, 1095, 502, 1139, 503, -1, 56, 1095, -1, - 1092, -1, 1093, -1, 1092, -1, 1093, -1, 1094, 502, - 1176, 503, -1, 1094, -1, 71, 1095, -1, 70, 1095, - -1, 449, -1, 260, 71, 1095, -1, 260, 70, 1095, - -1, 262, 1095, -1, 451, -1, -1, 417, 502, 1176, - 503, 1098, -1, 417, 1098, -1, 416, 502, 1176, 503, - 1098, -1, 416, 1098, -1, 217, -1, 484, 416, 481, - -1, 463, 416, 481, -1, -1, 479, -1, 256, -1, - 115, -1, 190, -1, 253, -1, 1100, -1, 479, 418, - 256, -1, 115, 418, 190, -1, 115, 418, 253, -1, - 115, 418, 1100, -1, 190, 418, 253, -1, 190, 418, - 1100, -1, 253, 418, 1100, -1, -1, 368, -1, 368, - 502, 1176, 503, -1, 1103, -1, 1101, 13, 1078, -1, - 1101, 79, 774, -1, 1101, 46, 416, 481, 1101, -1, - 493, 1101, -1, 494, 1101, -1, 1101, 493, 1101, -1, - 1101, 494, 1101, -1, 1101, 495, 1101, -1, 1101, 496, - 1101, -1, 1101, 497, 1101, -1, 1101, 498, 1101, -1, - 1101, 490, 1101, -1, 1101, 491, 1101, -1, 1101, 492, - 1101, -1, 1101, 17, 1101, -1, 1101, 18, 1101, -1, - 1101, 19, 1101, -1, 1101, 1136, 1101, -1, 1136, 1101, - -1, 1101, 36, 1101, -1, 1101, 293, 1101, -1, 273, - 1101, -1, 482, 1101, -1, 1101, 235, 1101, -1, 1101, - 235, 1101, 148, 1101, -1, 1101, 482, 235, 1101, -1, - 1101, 482, 235, 1101, 148, 1101, -1, 1101, 193, 1101, - -1, 1101, 193, 1101, 148, 1101, -1, 1101, 482, 193, - 1101, -1, 1101, 482, 193, 1101, 148, 1101, -1, 1101, - 382, 418, 1101, -1, 1101, 382, 418, 1101, 148, 1101, - -1, 1101, 482, 382, 418, 1101, -1, 1101, 482, 382, - 418, 1101, 148, 1101, -1, 1101, 220, 278, -1, 1101, - 221, -1, 1101, 220, 273, 278, -1, 1101, 276, -1, - 1130, 300, 1130, -1, 1101, 220, 425, -1, 1101, 220, - 273, 425, -1, 1101, 220, 161, -1, 1101, 220, 273, - 161, -1, 1101, 220, 436, -1, 1101, 220, 273, 436, - -1, 1101, 220, 135, 174, 1101, -1, 1101, 220, 273, - 135, 174, 1101, -1, 1101, 53, 1164, 1102, 36, 1101, - -1, 1101, 482, 53, 1164, 1102, 36, 1101, -1, 1101, - 53, 403, 1102, 36, 1101, -1, 1101, 482, 53, 403, - 1102, 36, 1101, -1, 1101, 198, 1153, -1, 1101, 482, - 198, 1153, -1, 1101, 1138, 1133, 997, -1, 1101, 1138, - 1133, 502, 1101, 503, -1, 435, 608, 997, -1, 1101, - 220, 137, -1, 1101, 220, 273, 137, -1, 1101, 220, - 272, -1, 1101, 220, 1148, 272, -1, 1101, 220, 273, - 272, -1, 1101, 220, 273, 1148, 272, -1, 120, -1, - 1103, -1, 1102, 13, 1078, -1, 493, 1102, -1, 494, - 1102, -1, 1102, 493, 1102, -1, 1102, 494, 1102, -1, - 1102, 495, 1102, -1, 1102, 496, 1102, -1, 1102, 497, - 1102, -1, 1102, 498, 1102, -1, 1102, 490, 1102, -1, - 1102, 491, 1102, -1, 1102, 492, 1102, -1, 1102, 17, - 1102, -1, 1102, 18, 1102, -1, 1102, 19, 1102, -1, - 1102, 1136, 1102, -1, 1136, 1102, -1, 1102, 220, 135, - 174, 1102, -1, 1102, 220, 273, 135, 174, 1102, -1, - 1102, 220, 137, -1, 1102, 220, 273, 137, -1, 1159, - -1, 1175, -1, 12, 1163, -1, 502, 1101, 503, 1163, - -1, 1154, -1, 1105, -1, 997, -1, 997, 1162, -1, - 155, 997, -1, 38, 997, -1, 38, 1144, -1, 1131, - -1, 1132, -1, 184, 502, 1139, 503, -1, 1174, 502, - 503, -1, 1174, 502, 1140, 1015, 503, -1, 1174, 502, - 450, 1141, 1015, 503, -1, 1174, 502, 1140, 506, 450, - 1141, 1015, 503, -1, 1174, 502, 30, 1140, 1015, 503, - -1, 1174, 502, 135, 1140, 1015, 503, -1, 1174, 502, - 495, 503, -1, 1104, 1117, 1118, 1122, -1, 1107, -1, - 1104, -1, 1107, -1, 80, 169, 502, 1101, 503, -1, - 105, -1, 108, -1, 108, 502, 1176, 503, -1, 109, - -1, 109, 502, 1176, 503, -1, 240, -1, 240, 502, - 1176, 503, -1, 241, -1, 241, 502, 1176, 503, -1, - 106, -1, 110, -1, 376, -1, 441, -1, 104, -1, - 107, -1, 67, 502, 1101, 39, 1078, 503, -1, 160, - 502, 1146, 503, -1, 271, 502, 1101, 503, -1, 271, - 502, 1101, 506, 1148, 503, -1, 301, 502, 1149, 503, - -1, 301, 502, 1142, 503, -1, 315, 502, 1150, 503, - -1, 401, 502, 1151, 503, -1, 401, 502, 1142, 503, - -1, 422, 502, 1101, 39, 1078, 503, -1, 424, 502, - 58, 1152, 503, -1, 424, 502, 230, 1152, 503, -1, - 424, 502, 419, 1152, 503, -1, 424, 502, 1152, 503, - -1, 279, 502, 1101, 506, 1101, 503, -1, 78, 502, - 1139, 503, -1, 182, 502, 1139, 503, -1, 232, 502, - 1139, 503, -1, 469, 502, 1139, 503, -1, 470, 502, - 258, 1189, 503, -1, 470, 502, 258, 1189, 506, 1110, - 503, -1, 470, 502, 258, 1189, 506, 1139, 503, -1, - 470, 502, 258, 1189, 506, 1110, 506, 1139, 503, -1, - 471, 502, 1103, 1115, 503, -1, 472, 502, 1111, 503, - -1, 474, 502, 1113, 1101, 1114, 503, -1, 475, 502, - 258, 1189, 503, -1, 475, 502, 258, 1189, 506, 1101, - 503, -1, 476, 502, 1101, 506, 1108, 1109, 503, -1, - 477, 502, 1113, 1101, 39, 1080, 503, -1, 453, 1101, - -1, 453, 269, 447, -1, 506, 390, 480, -1, 506, - 390, 269, -1, 506, 390, 269, 447, -1, -1, 468, - 502, 1111, 503, -1, 1112, -1, 1111, 506, 1112, -1, - 1101, 39, 1189, -1, 1101, -1, 137, -1, 94, -1, - 318, 459, -1, 399, 459, -1, -1, 310, 1103, -1, - 310, 1103, 1116, -1, 310, 1116, 1103, -1, 310, 1116, - 1103, 1116, -1, 60, 336, -1, 60, 447, -1, 462, - 183, 502, 1016, 503, -1, -1, 164, 502, 458, 1101, - 503, -1, -1, 460, 1120, -1, -1, 1121, -1, 1120, - 506, 1121, -1, 1186, 39, 1123, -1, 299, 1123, -1, - 299, 1186, -1, -1, 502, 1124, 1125, 1015, 1126, 503, - -1, 1186, -1, -1, 309, 60, 1139, -1, -1, 330, - 1127, 1129, -1, 361, 1127, 1129, -1, 185, 1127, 1129, - -1, -1, 1128, -1, 53, 1128, 36, 1128, -1, 431, - 316, -1, 431, 168, -1, 103, 360, -1, 1101, 316, - -1, 1101, 168, -1, 151, 103, 360, -1, 151, 183, - -1, 151, 415, -1, 151, 269, 296, -1, -1, 360, - 502, 1139, 503, -1, 360, 502, 503, -1, 502, 1139, - 506, 1101, 503, -1, 360, 502, 1139, 503, -1, 360, - 502, 503, -1, 502, 1139, 506, 1101, 503, -1, 37, - -1, 387, -1, 30, -1, 10, -1, 1135, -1, 493, - -1, 494, -1, 495, -1, 496, -1, 497, -1, 498, - -1, 490, -1, 491, -1, 492, -1, 17, -1, 18, - -1, 19, -1, 10, -1, 290, 502, 861, 503, -1, - 1134, -1, 290, 502, 861, 503, -1, 1134, -1, 290, - 502, 861, 503, -1, 235, -1, 482, 235, -1, 193, - -1, 482, 193, -1, 1101, -1, 1139, 506, 1101, -1, - 1141, -1, 1140, 506, 1141, -1, 1101, -1, 832, 15, - 1101, -1, 832, 16, 1101, -1, 1140, -1, -1, 1078, - -1, 1143, 506, 1078, -1, 500, 1139, 501, -1, 500, - 1145, 501, -1, 500, 501, -1, 1144, -1, 1145, 506, - 1144, -1, 1147, 174, 1101, -1, 12, 174, 1101, -1, - 3, -1, 479, -1, 256, -1, 115, -1, 190, -1, - 253, -1, 368, -1, 1177, -1, 265, -1, 266, -1, - 267, -1, 268, -1, 1101, 312, 1101, 174, 1101, 169, - 1101, -1, 1101, 312, 1101, 174, 1101, -1, 1102, 198, - 1102, -1, 1101, 174, 1101, 169, 1101, -1, 1101, 169, - 1101, 174, 1101, -1, 1101, 174, 1101, -1, 1101, 169, - 1101, -1, 1101, 382, 1101, 148, 1101, -1, 1101, 174, - 1139, -1, 174, 1139, -1, 1139, -1, 997, -1, 502, - 1139, 503, -1, 66, 1158, 1155, 1157, 146, -1, 1156, - -1, 1155, 1156, -1, 457, 1101, 414, 1101, -1, 142, - 1101, -1, -1, 1101, -1, -1, 1186, -1, 1186, 1162, - -1, 504, 1172, -1, 504, 495, -1, 500, 1101, 501, - -1, 500, 1161, 507, 1161, 501, -1, 1101, -1, -1, - 1160, -1, 1162, 1160, -1, -1, 1163, 1160, -1, 44, - -1, -1, 1166, -1, -1, 1167, -1, 1166, 506, 1167, - -1, 1101, 39, 1189, -1, 1101, 1190, -1, 1101, -1, - 495, -1, 1169, -1, 1168, 506, 1169, -1, 1186, -1, - 1186, 1162, -1, 1171, -1, 1170, 506, 1171, -1, 1186, - -1, 1189, -1, 1177, -1, 1187, -1, 1186, 1162, -1, - 1176, -1, 5, -1, 1177, -1, 8, -1, 9, -1, - 1174, 1177, -1, 1174, 502, 1140, 1015, 503, 1177, -1, - 1174, 12, -1, 1174, 502, 1140, 1015, 503, 12, -1, - 1081, 1177, -1, 1097, 1177, 1099, -1, 1097, 502, 1176, - 503, 1177, -1, 1081, 12, -1, 1097, 12, 1099, -1, - 1097, 502, 1176, 503, 12, -1, 425, -1, 161, -1, - 278, -1, 11, -1, 6, -1, 1176, -1, 493, 1176, - -1, 494, 1176, -1, 1180, -1, 1188, -1, 106, -1, - 110, -1, 376, -1, 1180, -1, 1181, 506, 1180, -1, - 1014, 1165, 1044, 1066, 1029, 1036, 1119, 1015, 1020, 1038, - -1, 1184, 1163, 1185, 1182, -1, 1186, -1, 12, -1, - 15, -1, 492, -1, 3, -1, 1191, -1, 1192, -1, - 3, -1, 1191, -1, 1193, -1, 3, -1, 1191, -1, - 1192, -1, 1193, -1, 3, -1, 1191, -1, 1192, -1, - 1193, -1, 1194, -1, 3, -1, 1195, -1, 22, -1, - 23, -1, 24, -1, 25, -1, 26, -1, 27, -1, - 28, -1, 29, -1, 31, -1, 32, -1, 33, -1, - 41, -1, 42, -1, 43, -1, 46, -1, 45, -1, - 47, -1, 48, -1, 50, -1, 51, -1, 52, -1, - 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, - 64, -1, 65, -1, 68, -1, 69, -1, 72, -1, - 74, -1, 75, -1, 76, -1, 77, -1, 82, -1, - 83, -1, 84, -1, 85, -1, 86, -1, 87, -1, - 89, -1, 90, -1, 91, -1, 93, -1, 94, -1, - 95, -1, 96, -1, 97, -1, 98, -1, 101, -1, - 102, -1, 103, -1, 111, -1, 112, -1, 113, -1, - 114, -1, 115, -1, 116, -1, 119, -1, 121, -1, - 123, -1, 124, -1, 125, -1, 126, -1, 127, -1, - 128, -1, 129, -1, 131, -1, 132, -1, 133, -1, - 134, -1, 137, -1, 138, -1, 139, -1, 140, -1, - 141, -1, 143, -1, 144, -1, 145, -1, 147, -1, - 148, -1, 149, -1, 151, -1, 152, -1, 153, -1, - 154, -1, 156, -1, 157, -1, 158, -1, 159, -1, - 162, -1, 164, -1, 165, -1, 166, -1, 168, -1, - 170, -1, 172, -1, 176, -1, 177, -1, 178, -1, - 179, -1, 181, -1, 185, -1, 186, -1, 188, -1, - 189, -1, 190, -1, 191, -1, 192, -1, 194, -1, - 195, -1, 196, -1, 197, -1, 199, -1, 200, -1, - 201, -1, 202, -1, 203, -1, 204, -1, 205, -1, - 207, -1, 210, -1, 211, -1, 212, -1, 213, -1, - 219, -1, 222, -1, 224, -1, 225, -1, 226, -1, - 227, -1, 228, -1, 231, -1, 234, -1, 237, -1, - 238, -1, 239, -1, 242, -1, 243, -1, 244, -1, - 245, -1, 246, -1, 247, -1, 248, -1, 249, -1, - 250, -1, 251, -1, 252, -1, 253, -1, 254, -1, + 522, 0, -1, 523, -1, 498, 1095, -1, 499, 1213, + -1, 500, 1214, -1, 501, 1214, -1, 502, 1214, -1, + 523, 518, 524, -1, 524, -1, 525, -1, 926, -1, + 755, -1, 946, -1, 941, -1, 942, -1, 822, -1, + 949, -1, 768, -1, 690, -1, 693, -1, 698, -1, + 711, -1, 870, -1, 543, -1, 898, -1, 900, -1, + 906, -1, 901, -1, 905, -1, 721, -1, 669, -1, + 947, -1, 571, -1, 894, -1, 589, -1, 910, -1, + 540, -1, 538, -1, 912, -1, 660, -1, 952, -1, + 951, -1, 719, -1, 958, -1, 530, -1, 569, -1, + 592, -1, 955, -1, 796, -1, 566, -1, 593, -1, + 729, -1, 661, -1, 757, -1, 883, -1, 954, -1, + 948, -1, 687, -1, 694, -1, 707, -1, 712, -1, + 838, -1, 542, -1, 664, -1, 770, -1, 777, -1, + 907, -1, 778, -1, 720, -1, 677, -1, 545, -1, + 668, -1, 608, -1, 911, -1, 657, -1, 684, -1, + 887, -1, 731, -1, 751, -1, 531, -1, 537, -1, + 716, -1, 935, -1, 979, -1, 1009, -1, 758, -1, + 989, -1, 570, -1, 880, -1, 885, -1, 781, -1, + 782, -1, 783, -1, 785, -1, 913, -1, 686, -1, + 889, -1, 541, -1, 718, -1, 943, -1, 977, -1, + 972, -1, 801, -1, 805, -1, 816, -1, 713, -1, + 827, -1, 980, -1, 923, -1, 667, -1, 934, -1, + 991, -1, 1001, -1, 921, -1, 974, -1, 784, -1, + 890, -1, 874, -1, 873, -1, 875, -1, 895, -1, + 806, -1, 817, -1, 914, -1, 798, -1, 1013, -1, + 925, -1, 794, -1, 924, -1, 996, -1, 957, -1, + 560, -1, 548, -1, 565, -1, 932, -1, -1, 1217, + -1, -1, 791, -1, -1, 89, -1, -1, 65, -1, + 358, -1, -1, 63, 1121, -1, 100, 364, 1210, 532, + 533, -1, 472, -1, 496, -1, -1, 533, 536, -1, + -1, 534, 535, -1, -1, 320, 1208, -1, 320, 12, + -1, 320, 287, -1, 146, 320, 1208, -1, 146, 320, + 12, -1, 444, 320, 1208, -1, 207, -1, 92, 245, + 1209, -1, 455, 450, 1208, -1, 452, 1212, -1, 3, + -1, 535, -1, 414, 1207, -1, 28, 1212, -1, 364, + 1212, -1, 200, 364, 1212, -1, 200, 185, 1212, -1, + 100, 452, 1210, 532, 533, -1, 33, 364, 1211, 532, + 534, -1, 33, 452, 1211, 532, 534, -1, -1, 200, + 115, 1202, -1, 33, 364, 1211, 539, 563, -1, 33, + 364, 31, 539, 563, -1, 33, 452, 1211, 539, 563, + -1, 33, 452, 31, 539, 563, -1, 141, 364, 1212, + -1, 141, 364, 194, 156, 1212, -1, 141, 452, 1212, + -1, 141, 452, 194, 156, 1212, -1, 141, 185, 1212, + -1, 141, 185, 194, 156, 1212, -1, 100, 185, 1210, + 532, 533, -1, 33, 185, 1211, 544, 452, 1212, -1, + 27, -1, 141, -1, 100, 374, 526, 50, 1211, 546, + -1, 100, 374, 1217, 546, -1, 100, 374, 194, 282, + 156, 526, 50, 1211, 546, -1, 100, 374, 194, 282, + 156, 1217, 546, -1, 546, 547, -1, -1, 608, -1, + 827, -1, 668, -1, 731, -1, 805, -1, 932, -1, + 387, 549, -1, 387, 248, 549, -1, 387, 385, 549, + -1, 431, 929, -1, 385, 73, 40, 431, 929, -1, + 551, -1, 552, 429, 553, -1, 552, 505, 553, -1, + 552, 429, 121, -1, 552, 505, 121, -1, 550, -1, + 552, 176, 104, -1, 427, 492, 557, -1, 69, 1208, + -1, 374, 1208, -1, 374, 12, -1, 268, 558, -1, + 364, 559, -1, 364, 12, -1, 385, 50, 559, -1, + 385, 50, 12, -1, 385, 50, 121, -1, 478, 300, + 1130, -1, 431, 396, 1208, -1, 1217, -1, 552, 517, + 1217, -1, 554, -1, 553, 519, 554, -1, 556, -1, + 675, -1, 12, -1, 340, 443, -1, 340, 87, -1, + 353, 340, -1, 383, -1, 436, -1, 162, -1, 297, + -1, 559, -1, 1208, -1, 12, -1, 3, -1, 1114, + 1208, 1116, -1, 1114, 515, 1207, 516, 1208, -1, 675, + -1, 121, -1, 248, -1, 1208, -1, 121, -1, -1, + 1219, -1, 1208, -1, 356, 561, -1, 562, -1, 427, + 492, -1, 431, 225, 243, -1, 385, 50, -1, 552, + -1, 31, -1, 387, 549, -1, 560, -1, 387, 551, + -1, 560, -1, 391, 552, -1, 391, 427, 492, -1, + 391, 431, 225, 243, -1, 391, 385, 50, -1, 391, + 31, -1, 387, 94, 567, 568, -1, 31, -1, 1199, + -1, 124, -1, 196, -1, 75, -1, 135, 31, -1, + 135, 421, -1, 135, 423, -1, 135, 322, -1, 135, + 382, -1, 33, 417, 1072, 572, -1, 33, 417, 194, + 156, 1072, 572, -1, 33, 417, 1072, 573, -1, 33, + 417, 194, 156, 1072, 573, -1, 33, 417, 31, 200, + 420, 1202, 387, 420, 1202, 994, -1, 33, 417, 31, + 200, 420, 1202, 312, 61, 1212, 387, 420, 1202, 994, + -1, 33, 205, 1200, 572, -1, 33, 205, 194, 156, + 1200, 572, -1, 33, 205, 1200, 574, -1, 33, 205, + 31, 200, 420, 1202, 387, 420, 1202, 994, -1, 33, + 205, 31, 200, 420, 1202, 312, 61, 1212, 387, 420, + 1202, 994, -1, 33, 381, 1200, 572, -1, 33, 381, + 194, 156, 1200, 572, -1, 33, 465, 1200, 572, -1, + 33, 465, 194, 156, 1200, 572, -1, 33, 258, 465, + 1200, 572, -1, 33, 258, 465, 194, 156, 1200, 572, + -1, 33, 258, 465, 31, 200, 420, 1202, 387, 420, + 1202, 994, -1, 33, 258, 465, 31, 200, 420, 1202, + 312, 61, 1212, 387, 420, 1202, 994, -1, 33, 172, + 417, 1072, 572, -1, 33, 172, 417, 194, 156, 1072, + 572, -1, 575, -1, 572, 519, 575, -1, 48, 318, + 1200, 586, -1, 132, 318, 1200, 528, -1, 132, 318, + 1200, 166, -1, 48, 318, 1200, -1, 27, 616, -1, + 27, 194, 282, 156, 616, -1, 27, 82, 616, -1, + 27, 82, 194, 282, 156, 616, -1, 33, 896, 1217, + 576, -1, 33, 896, 1217, 141, 282, 287, -1, 33, + 896, 1217, 387, 282, 287, -1, 33, 896, 1217, 141, + 158, -1, 33, 896, 1217, 141, 158, 194, 156, -1, + 33, 896, 1217, 387, 403, 1209, -1, 33, 896, 1207, + 387, 403, 1209, -1, 33, 896, 1217, 387, 580, -1, + 33, 896, 1217, 356, 580, -1, 33, 896, 1217, 387, + 620, -1, 33, 896, 1217, 387, 618, -1, 33, 896, + 1217, 27, 180, 626, 40, 193, 671, -1, 33, 896, + 1217, 584, -1, 33, 896, 1217, 141, 193, -1, 33, + 896, 1217, 141, 193, 194, 156, -1, 141, 896, 194, + 156, 1217, 529, -1, 141, 896, 1217, 529, -1, 33, + 896, 1217, 897, 439, 1095, 577, 578, -1, 33, 896, + 1217, 701, -1, 27, 631, -1, 33, 93, 1202, 749, + -1, 456, 93, 1202, -1, 141, 93, 194, 156, 1202, + 529, -1, 141, 93, 1202, 529, -1, 387, 474, 295, + -1, 78, 297, 1202, -1, 387, 474, 78, -1, 387, + 254, -1, 387, 449, -1, 144, 434, 1202, -1, 144, + 34, 434, 1202, -1, 144, 355, 434, 1202, -1, 144, + 434, 31, -1, 144, 434, 452, -1, 134, 434, 1202, + -1, 134, 434, 31, -1, 134, 434, 452, -1, 144, + 371, 1202, -1, 144, 34, 371, 1202, -1, 144, 355, + 371, 1202, -1, 134, 371, 1202, -1, 207, 1200, -1, + 278, 207, 1200, -1, 292, 791, -1, 282, 292, -1, + 313, 429, 1211, -1, 387, 25, 261, 1202, -1, 387, + 420, 1202, -1, 387, 580, -1, 356, 580, -1, 355, + 193, 579, -1, 144, 369, 243, 379, -1, 134, 369, + 243, 379, -1, 171, 369, 243, 379, -1, 278, 171, + 369, 243, 379, -1, 701, -1, 387, 121, 1118, -1, + 141, 121, -1, 80, 791, -1, -1, 453, 1118, -1, + -1, 283, -1, 177, -1, 121, -1, 453, 205, 1202, + -1, 515, 582, 516, -1, 472, 580, -1, -1, 583, + -1, 582, 519, 583, -1, 1220, 505, 762, -1, 1220, + -1, 1220, 517, 1220, 505, 762, -1, 1220, 517, 1220, + -1, 585, -1, 584, 585, -1, 357, -1, 357, 532, + 675, -1, 387, 673, -1, 387, 180, 626, -1, 170, + 459, 472, 515, 588, 516, -1, 170, 459, 200, 515, + 1157, 516, -1, 170, 459, 176, 515, 1157, 516, 429, + 515, 1157, 516, -1, 121, -1, 1219, 1207, -1, 587, + -1, 588, 519, 587, -1, 33, 439, 791, 590, -1, + 591, -1, 590, 519, 591, -1, 27, 49, 1087, 529, + -1, 141, 49, 194, 156, 1217, 529, -1, 141, 49, + 1217, 529, -1, 33, 49, 1217, 897, 439, 1095, 577, + 529, -1, 77, 1010, -1, 77, 31, -1, 98, 600, + 1200, 634, 594, 595, 596, 601, 532, 597, 1083, -1, + 98, 515, 976, 516, 429, 595, 596, 532, 597, -1, + 176, -1, 429, -1, 336, -1, -1, 1208, -1, 404, + -1, 405, -1, 598, -1, 515, 603, 516, -1, 598, + 599, -1, -1, 56, -1, 175, -1, 127, 950, 1208, + -1, 287, 950, 1208, -1, 102, -1, 190, -1, 338, + 950, 1208, -1, 149, 950, 1208, -1, 171, 338, 635, + -1, 171, 338, 508, -1, 171, 282, 287, 635, -1, + 171, 287, 635, -1, 145, 1208, -1, 56, -1, -1, + 602, 128, 1208, -1, -1, 453, -1, -1, 604, -1, + 603, 519, 604, -1, 1220, 605, -1, 556, -1, 675, + -1, 508, -1, 515, 606, 516, -1, -1, 607, -1, + 606, 519, 607, -1, 556, -1, 100, 609, 417, 1200, + 515, 610, 516, 646, 647, 651, 652, 653, 654, -1, + 100, 609, 417, 194, 282, 156, 1200, 515, 610, 516, + 646, 647, 651, 652, 653, 654, -1, 100, 609, 417, + 1200, 292, 791, 611, 647, 651, 652, 653, 654, -1, + 100, 609, 417, 194, 282, 156, 1200, 292, 791, 611, + 647, 651, 652, 653, 654, -1, 100, 609, 417, 1200, + 318, 292, 1200, 611, 586, 647, 651, 652, 653, 654, + -1, 100, 609, 417, 194, 282, 156, 1200, 318, 292, + 1200, 611, 586, 647, 651, 652, 653, 654, -1, 423, + -1, 421, -1, 248, 423, -1, 248, 421, -1, 181, + 423, -1, 181, 421, -1, 449, -1, -1, 612, -1, + -1, 515, 613, 516, -1, -1, 614, -1, 612, 519, + 614, -1, 615, -1, 613, 519, 615, -1, 616, -1, + 628, -1, 631, -1, 617, -1, 631, -1, 1217, 1095, + 621, 619, 699, 622, -1, 1217, 622, -1, 1217, 472, + 301, 622, -1, 88, 1217, -1, 88, 121, -1, 618, + -1, -1, 406, 1217, -1, 406, 121, -1, 620, -1, + -1, 622, 623, -1, -1, 93, 1202, 624, -1, 624, + -1, 627, -1, 80, 791, -1, 282, 287, -1, 287, + -1, 446, 625, 867, 655, -1, 330, 232, 867, 655, + -1, 74, 515, 1118, 516, 633, -1, 121, 1119, -1, + 180, 626, 40, 193, 671, -1, 180, 626, 40, 515, + 1118, 516, 407, -1, 346, 1200, 634, 638, 642, -1, + 289, 136, -1, 289, 282, 136, -1, -1, 34, -1, + 61, 121, -1, 123, -1, 282, 123, -1, 209, 124, + -1, 209, 196, -1, 244, 1200, 629, -1, 629, 202, + 630, -1, 629, 153, 630, -1, -1, 85, -1, 88, + -1, 94, -1, 122, -1, 193, -1, 180, -1, 206, + -1, 403, -1, 406, -1, 31, -1, 93, 1202, 632, + -1, 632, -1, 74, 515, 1118, 516, 749, -1, 446, + 625, 515, 635, 516, 637, 867, 655, 749, -1, 446, + 656, 749, -1, 330, 232, 515, 635, 516, 637, 867, + 655, 749, -1, 330, 232, 656, 749, -1, 152, 829, + 515, 639, 516, 637, 867, 655, 641, 749, -1, 172, + 232, 515, 635, 516, 346, 1200, 634, 638, 642, 749, + -1, 278, 207, -1, -1, 515, 635, 516, -1, -1, + 636, -1, 635, 519, 636, -1, 1217, -1, 201, 515, + 635, 516, -1, -1, 256, 177, -1, 256, 317, -1, + 256, 393, -1, -1, 640, -1, 639, 519, 640, -1, + 832, 472, 877, -1, 832, 472, 299, 515, 877, 516, + -1, 469, 515, 1118, 516, -1, -1, 643, -1, 644, + -1, 643, 644, -1, 644, 643, -1, -1, 297, 451, + 645, -1, 297, 126, 645, -1, 278, 26, -1, 358, + -1, 65, -1, 387, 287, 634, -1, 387, 121, 634, + -1, 208, 515, 1199, 516, -1, -1, 648, -1, -1, + 318, 61, 1217, 515, 649, 516, -1, 650, -1, 649, + 519, 650, -1, 1217, 835, 527, -1, 1123, 835, 527, + -1, 515, 1118, 516, 835, 527, -1, 453, 1202, -1, + -1, 472, 580, -1, 474, 295, -1, -1, 297, 86, + 141, -1, 297, 86, 126, 370, -1, 297, 86, 327, + 370, -1, -1, 420, 1202, -1, -1, 453, 205, 420, + 1202, -1, -1, 453, 205, 1202, -1, 100, 403, 527, + 968, 297, 658, 176, 1062, -1, 100, 403, 194, 282, + 156, 791, 968, 297, 658, 176, 1062, -1, 659, -1, + 658, 519, 659, -1, 1217, -1, 1123, -1, 515, 1118, + 516, -1, 33, 403, 791, 387, 403, 1209, -1, 33, + 403, 194, 156, 791, 387, 403, 1209, -1, 100, 609, + 417, 662, 40, 1013, 663, -1, 100, 609, 417, 194, + 282, 156, 662, 40, 1013, 663, -1, 1200, 634, 651, + 652, 653, 654, -1, 472, 114, -1, 472, 278, 114, + -1, -1, 100, 666, 258, 465, 665, 40, 1013, 663, + -1, 100, 666, 258, 465, 194, 282, 156, 665, 40, + 1013, 663, -1, 1200, 634, 651, 581, 654, -1, 449, + -1, -1, 348, 258, 465, 528, 1200, 663, -1, 100, + 609, 381, 1200, 670, -1, 100, 609, 381, 194, 282, + 156, 1200, 670, -1, 33, 381, 1200, 672, -1, 33, + 381, 194, 156, 1200, 672, -1, 672, -1, -1, 515, + 672, 516, -1, -1, 673, -1, 672, 673, -1, 40, + 1097, -1, 62, 675, -1, 113, -1, 278, 113, -1, + 203, 674, 675, -1, 259, 675, -1, 263, 675, -1, + 278, 259, -1, 278, 263, -1, 312, 61, 791, -1, + 381, 267, 791, -1, 401, 532, 675, -1, 357, -1, + 357, 532, 675, -1, 61, -1, -1, 5, -1, 506, + 5, -1, 507, 5, -1, 1209, -1, 675, -1, 676, + 519, 675, -1, 100, 839, 678, 683, 235, 1202, -1, + 100, 839, 678, 683, 235, 1202, 188, 679, 680, 682, + -1, 438, -1, -1, 1202, -1, 1202, 792, -1, 210, + 679, -1, -1, 457, 679, -1, 278, 457, -1, 681, + -1, -1, 333, -1, -1, 100, 420, 1202, 685, 251, + 1208, 581, -1, 313, 1211, -1, -1, 141, 420, 1202, + -1, 141, 420, 194, 156, 1202, -1, 100, 159, 1202, + 532, 688, -1, 100, 159, 194, 282, 156, 1202, 532, + 688, -1, 688, 689, -1, -1, 374, 1202, -1, 464, + 559, -1, 176, 559, -1, 65, -1, 33, 159, 1202, + 451, 691, -1, 691, 692, -1, -1, 429, 559, -1, + 33, 159, 1202, 544, 787, 1202, -1, 33, 159, 1202, + 544, 786, 791, -1, 33, 159, 1202, 544, 30, 855, + -1, 33, 159, 1202, 544, 68, 515, 1095, 40, 1095, + 516, -1, 33, 159, 1202, 544, 139, 1095, -1, 33, + 159, 1202, 544, 178, 843, -1, 33, 159, 1202, 544, + 299, 879, -1, 33, 159, 1202, 544, 299, 76, 791, + 453, 1202, -1, 33, 159, 1202, 544, 299, 163, 791, + 453, 1202, -1, 33, 159, 1202, 544, 334, 843, -1, + 33, 159, 1202, 544, 367, 843, -1, 33, 159, 1202, + 544, 432, 170, 1095, 235, 1202, -1, 33, 159, 1202, + 544, 439, 1095, -1, 100, 172, 114, 476, 1202, 697, + 699, -1, 188, 679, -1, 278, 188, -1, 457, 679, + -1, 278, 457, -1, 695, -1, 696, 695, -1, 696, + -1, -1, 33, 172, 114, 476, 1202, 697, 701, -1, + 33, 172, 114, 476, 1202, 696, -1, 301, 515, 700, + 516, -1, -1, 704, -1, 700, 519, 704, -1, 301, + 515, 702, 516, -1, 703, -1, 702, 519, 703, -1, + 704, -1, 387, 704, -1, 27, 704, -1, 141, 705, + -1, 705, 706, -1, 1220, -1, 1208, -1, 100, 384, + 1202, 708, 710, 172, 114, 476, 1202, 699, -1, 100, + 384, 194, 282, 156, 1202, 708, 710, 172, 114, 476, + 1202, 699, -1, 439, 1208, -1, -1, 464, 1208, -1, + 464, 287, -1, 709, -1, -1, 33, 384, 1202, 709, + 701, -1, 33, 384, 1202, 709, -1, 33, 384, 1202, + 701, -1, 100, 172, 417, 1200, 515, 610, 516, 646, + 384, 1202, 699, -1, 100, 172, 417, 194, 282, 156, + 1200, 515, 610, 516, 646, 384, 1202, 699, -1, 100, + 172, 417, 1200, 318, 292, 1200, 611, 586, 384, 1202, + 699, -1, 100, 172, 417, 194, 282, 156, 1200, 318, + 292, 1200, 611, 586, 384, 1202, 699, -1, 199, 172, + 374, 1202, 715, 176, 384, 1202, 221, 1202, 699, -1, + 245, 429, -1, 151, -1, 714, 515, 1074, 516, -1, + -1, 100, 452, 255, 170, 717, 384, 1202, 699, -1, + 100, 452, 255, 194, 282, 156, 170, 717, 384, 1202, + 699, -1, 1211, -1, 452, -1, 141, 452, 255, 170, + 717, 384, 1202, -1, 141, 452, 255, 194, 156, 170, + 717, 384, 1202, -1, 33, 452, 255, 170, 717, 384, + 1202, 701, -1, 100, 323, 1202, 297, 1200, 726, 727, + 724, 722, 723, -1, 33, 323, 1202, 297, 1200, 725, + 722, 723, -1, 453, 515, 1118, 516, -1, -1, 472, + 74, 515, 1118, 516, -1, -1, 429, 1212, -1, -1, + 429, 1212, -1, -1, 40, 3, -1, -1, 170, 728, + -1, -1, 31, -1, 380, -1, 215, -1, 451, -1, + 126, -1, 100, 25, 261, 1202, 439, 730, 188, 679, + -1, 205, -1, 417, -1, 100, 839, 434, 1202, 732, + 733, 297, 1200, 735, 741, 744, 155, 745, 1205, 515, + 746, 516, -1, 100, 839, 93, 434, 1202, 29, 733, + 297, 1200, 748, 749, 170, 142, 369, 744, 155, 745, + 1205, 515, 746, 516, -1, 52, -1, 29, -1, 216, + 292, -1, 734, -1, 733, 302, 734, -1, 215, -1, + 126, -1, 451, -1, 451, 292, 635, -1, 437, -1, + 347, 736, -1, -1, 737, -1, 736, 737, -1, 738, + 739, 950, 740, -1, 272, -1, 296, -1, 417, -1, + 369, -1, 1217, -1, 170, 742, 743, -1, -1, 142, + -1, -1, 369, -1, 402, -1, 468, 515, 1118, 516, + -1, -1, 178, -1, 334, -1, 747, -1, 746, 519, + 747, -1, -1, 1207, -1, 5, -1, 1208, -1, 1220, + -1, 176, 1200, -1, -1, -1, 749, 750, -1, 282, + 123, -1, 123, -1, 209, 196, -1, 209, 124, -1, + 282, 455, -1, 278, 207, -1, 100, 150, 434, 1202, + 297, 1220, 155, 745, 1205, 515, 516, -1, 100, 150, + 434, 1202, 297, 1220, 468, 752, 155, 745, 1205, 515, + 516, -1, 753, -1, 752, 37, 753, -1, 1217, 200, + 515, 754, 516, -1, 6, -1, 754, 519, 6, -1, + 33, 150, 434, 1202, 756, -1, 144, -1, 144, 355, + -1, 144, 34, -1, 134, -1, 100, 43, 791, 74, + 515, 1118, 516, 749, -1, 100, 839, 30, 1205, 853, + 759, -1, 100, 839, 30, 1205, 763, -1, 100, 299, + 877, 759, -1, 100, 439, 791, 759, -1, 100, 439, + 791, -1, 100, 439, 791, 40, 515, 1085, 516, -1, + 100, 439, 791, 40, 148, 515, 766, 516, -1, 100, + 439, 791, 40, 339, 759, -1, 100, 424, 377, 316, + 791, 759, -1, 100, 424, 377, 133, 791, 759, -1, + 100, 424, 377, 422, 791, 759, -1, 100, 424, 377, + 90, 791, 759, -1, 100, 81, 791, 759, -1, 100, + 81, 194, 282, 156, 791, 759, -1, 100, 81, 791, + 176, 791, -1, 100, 81, 194, 282, 156, 791, 176, + 791, -1, 515, 760, 516, -1, 761, -1, 760, 519, + 761, -1, 1220, 505, 762, -1, 1220, -1, 850, -1, + 1225, -1, 1155, -1, 675, -1, 1208, -1, 279, -1, + 515, 764, 516, -1, 765, -1, 764, 519, 765, -1, + 3, 505, 762, -1, 767, -1, -1, 1208, -1, 767, + 519, 1208, -1, 33, 439, 791, 27, 458, 769, 1208, + -1, 33, 439, 791, 27, 458, 769, 1208, 52, 1208, + -1, 33, 439, 791, 27, 458, 769, 1208, 29, 1208, + -1, 33, 439, 791, 352, 458, 1208, 429, 1208, -1, + 194, 282, 156, -1, -1, 100, 299, 76, 791, 773, + 170, 439, 1095, 453, 1202, 774, 40, 771, -1, 772, + -1, 771, 519, 772, -1, 299, 1207, 877, 775, 776, + -1, 299, 1207, 879, 775, 776, -1, 178, 1207, 843, + -1, 178, 1207, 515, 1161, 516, 843, -1, 406, 1095, + -1, 121, -1, -1, 163, 791, -1, -1, 170, 377, + -1, 170, 303, 61, 791, -1, -1, 343, -1, -1, + 100, 299, 163, 791, 453, 1202, -1, 33, 299, 163, + 791, 453, 1202, 27, 771, -1, 33, 299, 163, 791, + 453, 1202, 141, 779, -1, 780, -1, 779, 519, 780, + -1, 299, 1207, 515, 1161, 516, -1, 178, 1207, 515, + 1161, 516, -1, 141, 299, 76, 791, 453, 1202, 529, + -1, 141, 299, 76, 194, 156, 791, 453, 1202, 529, + -1, 141, 299, 163, 791, 453, 1202, 529, -1, 141, + 299, 163, 194, 156, 791, 453, 1202, 529, -1, 141, + 312, 61, 1212, 529, -1, 342, 312, 61, 1212, 429, + 1211, -1, 141, 786, 194, 156, 790, 529, -1, 141, + 786, 790, 529, -1, 141, 788, 194, 156, 1201, 529, + -1, 141, 788, 1201, 529, -1, 141, 789, 1202, 297, + 791, 529, -1, 141, 789, 194, 156, 1202, 297, 791, + 529, -1, 141, 439, 793, 529, -1, 141, 439, 194, + 156, 793, 529, -1, 141, 139, 793, 529, -1, 141, + 139, 194, 156, 793, 529, -1, 141, 205, 89, 790, + 529, -1, 141, 205, 89, 194, 156, 790, 529, -1, + 417, -1, 381, -1, 465, -1, 258, 465, -1, 205, + -1, 172, 417, -1, 81, -1, 97, -1, 403, -1, + 424, 377, 316, -1, 424, 377, 133, -1, 424, 377, + 422, -1, 424, 377, 90, -1, 788, -1, 115, -1, + 364, -1, 410, -1, 420, -1, 25, 261, -1, 150, + 434, -1, 159, -1, 172, 114, 476, -1, 683, 235, + -1, 337, -1, 374, -1, 384, -1, 323, -1, 371, + -1, 434, -1, 791, -1, 790, 519, 791, -1, 1217, + -1, 1217, 792, -1, 517, 1203, -1, 792, 517, 1203, + -1, 1095, -1, 793, 519, 1095, -1, 437, 1027, 1074, + 795, 529, -1, 96, 193, -1, 357, 193, -1, -1, + 84, 297, 786, 791, 223, 797, -1, 84, 297, 82, + 791, 223, 797, -1, 84, 297, 787, 1202, 223, 797, + -1, 84, 297, 439, 1095, 223, 797, -1, 84, 297, + 139, 1095, 223, 797, -1, 84, 297, 30, 855, 223, + 797, -1, 84, 297, 178, 843, 223, 797, -1, 84, + 297, 299, 879, 223, 797, -1, 84, 297, 93, 1202, + 297, 791, 223, 797, -1, 84, 297, 93, 1202, 297, + 139, 791, 223, 797, -1, 84, 297, 789, 1202, 297, + 791, 223, 797, -1, 84, 297, 334, 843, 223, 797, + -1, 84, 297, 367, 843, 223, 797, -1, 84, 297, + 432, 170, 1095, 235, 1202, 223, 797, -1, 84, 297, + 299, 76, 791, 453, 1202, 223, 797, -1, 84, 297, + 299, 163, 791, 453, 1202, 223, 797, -1, 84, 297, + 236, 291, 675, 223, 797, -1, 84, 297, 68, 515, + 1095, 40, 1095, 516, 223, 797, -1, 1208, -1, 287, + -1, 379, 234, 799, 297, 786, 791, 223, 800, -1, + 379, 234, 799, 297, 82, 791, 223, 800, -1, 379, + 234, 799, 297, 787, 1202, 223, 800, -1, 379, 234, + 799, 297, 439, 1095, 223, 800, -1, 379, 234, 799, + 297, 139, 1095, 223, 800, -1, 379, 234, 799, 297, + 30, 855, 223, 800, -1, 379, 234, 799, 297, 178, + 843, 223, 800, -1, 379, 234, 799, 297, 236, 291, + 675, 223, 800, -1, 379, 234, 799, 297, 334, 843, + 223, 800, -1, 379, 234, 799, 297, 367, 843, 223, + 800, -1, 170, 559, -1, -1, 1208, -1, 287, -1, + 164, 802, -1, 266, 802, -1, 1010, -1, 803, 1010, + -1, 273, 804, 1010, -1, 331, 804, 1010, -1, 167, + 804, 1010, -1, 237, 804, 1010, -1, 24, 1209, 804, + 1010, -1, 350, 1209, 804, 1010, -1, 1209, 804, 1010, + -1, 31, 804, 1010, -1, 174, 804, 1010, -1, 174, + 1209, 804, 1010, -1, 174, 31, 804, 1010, -1, 51, + 804, 1010, -1, 51, 1209, 804, 1010, -1, 51, 31, + 804, 1010, -1, 176, -1, 200, -1, 803, -1, -1, + 182, 807, 297, 812, 429, 813, 815, 821, -1, 362, + 807, 297, 812, 176, 813, 821, 529, -1, 362, 182, + 300, 170, 807, 297, 812, 176, 813, 821, 529, -1, + 808, -1, 31, -1, 31, 332, -1, 31, 515, 635, + 516, -1, 31, 332, 515, 635, 516, -1, 809, -1, + 808, 519, 809, -1, 380, 634, -1, 346, 634, -1, + 100, 634, -1, 33, 415, -1, 1217, 634, -1, 811, + -1, 810, 519, 811, -1, 1217, -1, 811, 517, 1217, + -1, 1199, -1, 417, 1199, -1, 381, 1199, -1, 172, + 114, 476, 1201, -1, 172, 384, 1201, -1, 178, 842, + -1, 334, 842, -1, 367, 842, -1, 115, 1201, -1, + 139, 790, -1, 235, 1201, -1, 236, 291, 676, -1, + 315, 810, -1, 374, 1201, -1, 420, 1201, -1, 439, + 790, -1, 31, 418, 200, 374, 1201, -1, 31, 382, + 200, 374, 1201, -1, 31, 179, 200, 374, 1201, -1, + 31, 335, 200, 374, 1201, -1, 31, 368, 200, 374, + 1201, -1, 814, -1, 813, 519, 814, -1, 1211, -1, + 185, 1211, -1, 472, 182, 300, -1, -1, 182, 808, + 429, 1212, 821, -1, 182, 808, 429, 1212, 472, 818, + 821, -1, 362, 808, 176, 1212, 821, 529, -1, 362, + 1217, 300, 170, 808, 176, 1212, 821, 529, -1, 818, + 519, 819, -1, 819, -1, 1220, 820, -1, 300, -1, + 436, -1, 162, -1, 183, 61, 1211, -1, -1, 33, + 121, 332, 823, 825, -1, 823, 824, -1, -1, 200, + 374, 1201, -1, 170, 364, 1212, -1, 170, 452, 1212, + -1, 182, 807, 297, 826, 429, 813, 815, -1, 362, + 807, 297, 826, 176, 813, 529, -1, 362, 182, 300, + 170, 807, 297, 826, 176, 813, 529, -1, 418, -1, + 179, -1, 368, -1, 382, -1, 440, -1, 375, -1, + 100, 828, 205, 528, 526, 297, 1072, 829, 515, 830, + 516, 833, 625, 581, 654, 1083, -1, 100, 828, 205, + 528, 194, 282, 156, 1202, 297, 1072, 829, 515, 830, + 516, 833, 625, 581, 654, 1083, -1, 446, -1, -1, + 453, 1202, -1, -1, 832, -1, 830, 519, 832, -1, + 835, 527, 836, 837, -1, 835, 791, 580, 836, 837, + -1, 1217, 831, -1, 1123, 831, -1, 515, 1118, 516, + 831, -1, 201, 515, 834, 516, -1, -1, 832, -1, + 834, 519, 832, -1, 80, 791, -1, -1, 41, -1, + 131, -1, -1, 495, 167, -1, 495, 237, -1, -1, + 100, 839, 178, 1205, 844, 361, 849, 857, 863, -1, + 100, 839, 178, 1205, 844, 361, 417, 515, 869, 516, + 857, 863, -1, 100, 839, 178, 1205, 844, 857, 863, + -1, 100, 839, 334, 1205, 844, 857, 863, -1, 302, + 354, -1, -1, 515, 841, 516, -1, 515, 516, -1, + 846, -1, 841, 519, 846, -1, 843, -1, 842, 519, + 843, -1, 1205, 840, -1, 1224, -1, 1217, -1, 1217, + 1180, -1, 515, 845, 516, -1, 515, 516, -1, 851, + -1, 845, 519, 851, -1, 847, 848, 850, -1, 848, + 847, 850, -1, 848, 850, -1, 847, 850, -1, 850, + -1, 200, -1, 306, -1, 212, -1, 200, 306, -1, + 461, -1, 1218, -1, 850, -1, 1095, -1, 1218, 792, + 510, 439, -1, 389, 1218, 792, 510, 439, -1, 846, + -1, 846, 121, 1118, -1, 846, 505, 1118, -1, 846, + -1, 515, 508, 516, -1, 515, 854, 516, -1, 515, + 303, 61, 854, 516, -1, 515, 854, 303, 61, 854, + 516, -1, 852, -1, 854, 519, 852, -1, 1205, 853, + -1, 855, -1, 856, 519, 855, -1, 858, -1, -1, + 860, -1, 858, 860, -1, 64, 297, 287, 213, -1, + 361, 287, 297, 287, 213, -1, 408, -1, 197, -1, + 399, -1, 467, -1, 160, 379, 125, -1, 160, 379, + 222, -1, 379, 125, -1, 379, 222, -1, 240, -1, + 282, 240, -1, 99, 675, -1, 370, 675, -1, 412, + 791, -1, 564, -1, 314, 1217, -1, 40, 861, -1, + 235, 559, -1, 432, 866, -1, 471, -1, 859, -1, + 1208, -1, 1208, 519, 1208, -1, 359, 1118, -1, 862, + -1, 53, 46, 864, 147, -1, -1, 864, 865, 518, + -1, -1, 525, -1, 862, -1, 170, 439, 1095, -1, + 866, 519, 170, 439, 1095, -1, 472, 759, -1, -1, + 848, 850, -1, 868, -1, 869, 519, 868, -1, 33, + 178, 843, 871, 872, -1, 33, 334, 843, 871, 872, + -1, 33, 367, 843, 871, 872, -1, 859, -1, 871, + 859, -1, 358, -1, -1, 141, 178, 842, 529, -1, + 141, 178, 194, 156, 842, 529, -1, 141, 334, 842, + 529, -1, 141, 334, 194, 156, 842, 529, -1, 141, + 367, 842, 529, -1, 141, 367, 194, 156, 842, 529, + -1, 141, 30, 856, 529, -1, 141, 30, 194, 156, + 856, 529, -1, 141, 299, 878, 529, -1, 141, 299, + 194, 156, 878, 529, -1, 515, 1095, 516, -1, 515, + 1095, 519, 1095, 516, -1, 515, 279, 519, 1095, 516, + -1, 515, 1095, 519, 279, 516, -1, 1152, -1, 1217, + 517, 877, -1, 879, -1, 878, 519, 879, -1, 877, + 876, -1, 137, 881, -1, 882, -1, 881, 882, -1, + 1208, -1, 235, 559, -1, 100, 68, 515, 1095, 40, + 1095, 516, 472, 178, 843, 884, -1, 100, 68, 515, + 1095, 40, 1095, 516, 474, 178, 884, -1, 100, 68, + 515, 1095, 40, 1095, 516, 472, 212, 884, -1, 40, + 198, -1, 40, 44, -1, -1, 141, 68, 886, 515, + 1095, 40, 1095, 516, 529, -1, 194, 156, -1, -1, + 100, 839, 432, 170, 1095, 235, 1202, 515, 888, 516, + -1, 176, 398, 472, 178, 843, 519, 429, 398, 472, + 178, 843, -1, 429, 398, 472, 178, 843, 519, 176, + 398, 472, 178, 843, -1, 176, 398, 472, 178, 843, + -1, 429, 398, 472, 178, 843, -1, 141, 432, 886, + 170, 1095, 235, 1202, 529, -1, 349, 893, 891, 528, + 1200, -1, 349, 893, 374, 528, 1202, -1, 349, 893, + 892, 528, 526, -1, 205, -1, 417, -1, 415, -1, + 115, -1, 515, 959, 516, -1, -1, 33, 420, 1202, + 387, 580, -1, 33, 420, 1202, 356, 580, -1, 33, + 30, 855, 352, 429, 1202, -1, 33, 81, 791, 352, + 429, 1202, -1, 33, 97, 791, 352, 429, 1202, -1, + 33, 115, 1202, 352, 429, 1202, -1, 33, 139, 791, + 352, 429, 1202, -1, 33, 139, 791, 352, 93, 1202, + 429, 1202, -1, 33, 172, 114, 476, 1202, 352, 429, + 1202, -1, 33, 178, 843, 352, 429, 1202, -1, 33, + 185, 1210, 352, 429, 1210, -1, 33, 683, 235, 1202, + 352, 429, 1202, -1, 33, 299, 76, 791, 453, 1202, + 352, 429, 1202, -1, 33, 299, 163, 791, 453, 1202, + 352, 429, 1202, -1, 33, 323, 1202, 297, 1200, 352, + 429, 1202, -1, 33, 323, 194, 156, 1202, 297, 1200, + 352, 429, 1202, -1, 33, 334, 843, 352, 429, 1202, + -1, 33, 337, 1202, 352, 429, 1202, -1, 33, 367, + 843, 352, 429, 1202, -1, 33, 374, 1202, 352, 429, + 1202, -1, 33, 384, 1202, 352, 429, 1202, -1, 33, + 410, 1202, 352, 429, 1202, -1, 33, 417, 1072, 352, + 429, 1202, -1, 33, 417, 194, 156, 1072, 352, 429, + 1202, -1, 33, 381, 1200, 352, 429, 1202, -1, 33, + 381, 194, 156, 1200, 352, 429, 1202, -1, 33, 465, + 1200, 352, 429, 1202, -1, 33, 465, 194, 156, 1200, + 352, 429, 1202, -1, 33, 258, 465, 1200, 352, 429, + 1202, -1, 33, 258, 465, 194, 156, 1200, 352, 429, + 1202, -1, 33, 205, 1200, 352, 429, 1202, -1, 33, + 205, 194, 156, 1200, 352, 429, 1202, -1, 33, 172, + 417, 1072, 352, 429, 1202, -1, 33, 172, 417, 194, + 156, 1072, 352, 429, 1202, -1, 33, 417, 1072, 352, + 896, 1202, 429, 1202, -1, 33, 417, 194, 156, 1072, + 352, 896, 1202, 429, 1202, -1, 33, 465, 1200, 352, + 896, 1202, 429, 1202, -1, 33, 465, 194, 156, 1200, + 352, 896, 1202, 429, 1202, -1, 33, 258, 465, 1200, + 352, 896, 1202, 429, 1202, -1, 33, 258, 465, 194, + 156, 1200, 352, 896, 1202, 429, 1202, -1, 33, 417, + 1072, 352, 93, 1202, 429, 1202, -1, 33, 417, 194, + 156, 1072, 352, 93, 1202, 429, 1202, -1, 33, 172, + 417, 1072, 352, 896, 1202, 429, 1202, -1, 33, 172, + 417, 194, 156, 1072, 352, 896, 1202, 429, 1202, -1, + 33, 371, 1202, 297, 1200, 352, 429, 1202, -1, 33, + 434, 1202, 297, 1200, 352, 429, 1202, -1, 33, 150, + 434, 1202, 352, 429, 1202, -1, 33, 364, 1210, 352, + 429, 1210, -1, 33, 452, 1210, 352, 429, 1210, -1, + 33, 420, 1202, 352, 429, 1202, -1, 33, 403, 791, + 352, 429, 1202, -1, 33, 424, 377, 316, 791, 352, + 429, 1202, -1, 33, 424, 377, 133, 791, 352, 429, + 1202, -1, 33, 424, 377, 422, 791, 352, 429, 1202, + -1, 33, 424, 377, 90, 791, 352, 429, 1202, -1, + 33, 439, 791, 352, 429, 1202, -1, 33, 439, 791, + 352, 49, 1202, 429, 1202, 529, -1, 82, -1, -1, + 387, 114, -1, -1, 33, 178, 843, 899, 129, 297, + 159, 1202, -1, 33, 334, 843, 899, 129, 297, 159, + 1202, -1, 33, 367, 843, 899, 129, 297, 159, 1202, + -1, 33, 434, 1202, 297, 1200, 899, 129, 297, 159, + 1202, -1, 33, 258, 465, 1200, 899, 129, 297, 159, + 1202, -1, 33, 205, 1200, 899, 129, 297, 159, 1202, + -1, 278, -1, -1, 33, 30, 855, 387, 374, 1202, + -1, 33, 81, 791, 387, 374, 1202, -1, 33, 97, + 791, 387, 374, 1202, -1, 33, 139, 791, 387, 374, + 1202, -1, 33, 159, 1202, 387, 374, 1202, -1, 33, + 178, 843, 387, 374, 1202, -1, 33, 299, 879, 387, + 374, 1202, -1, 33, 299, 76, 791, 453, 1202, 387, + 374, 1202, -1, 33, 299, 163, 791, 453, 1202, 387, + 374, 1202, -1, 33, 334, 843, 387, 374, 1202, -1, + 33, 367, 843, 387, 374, 1202, -1, 33, 417, 1072, + 387, 374, 1202, -1, 33, 417, 194, 156, 1072, 387, + 374, 1202, -1, 33, 403, 791, 387, 374, 1202, -1, + 33, 424, 377, 316, 791, 387, 374, 1202, -1, 33, + 424, 377, 133, 791, 387, 374, 1202, -1, 33, 424, + 377, 422, 791, 387, 374, 1202, -1, 33, 424, 377, + 90, 791, 387, 374, 1202, -1, 33, 381, 1200, 387, + 374, 1202, -1, 33, 381, 194, 156, 1200, 387, 374, + 1202, -1, 33, 465, 1200, 387, 374, 1202, -1, 33, + 465, 194, 156, 1200, 387, 374, 1202, -1, 33, 258, + 465, 1200, 387, 374, 1202, -1, 33, 258, 465, 194, + 156, 1200, 387, 374, 1202, -1, 33, 172, 417, 1072, + 387, 374, 1202, -1, 33, 172, 417, 194, 156, 1072, + 387, 374, 1202, -1, 33, 439, 791, 387, 374, 1202, + -1, 33, 299, 879, 387, 515, 902, 516, -1, 903, + -1, 902, 519, 903, -1, 1220, 505, 279, -1, 1220, + 505, 904, -1, 850, -1, 1225, -1, 1155, -1, 675, + -1, 1208, -1, 33, 439, 791, 387, 515, 902, 516, + -1, 33, 30, 855, 313, 429, 1211, -1, 33, 81, + 791, 313, 429, 1211, -1, 33, 97, 791, 313, 429, + 1211, -1, 33, 115, 1202, 313, 429, 1211, -1, 33, + 139, 791, 313, 429, 1211, -1, 33, 178, 843, 313, + 429, 1211, -1, 33, 683, 235, 1202, 313, 429, 1211, + -1, 33, 236, 291, 675, 313, 429, 1211, -1, 33, + 299, 879, 313, 429, 1211, -1, 33, 299, 76, 791, + 453, 1202, 313, 429, 1211, -1, 33, 299, 163, 791, + 453, 1202, 313, 429, 1211, -1, 33, 334, 843, 313, + 429, 1211, -1, 33, 367, 843, 313, 429, 1211, -1, + 33, 374, 1202, 313, 429, 1211, -1, 33, 439, 791, + 313, 429, 1211, -1, 33, 420, 1202, 313, 429, 1211, + -1, 33, 403, 791, 313, 429, 1211, -1, 33, 424, + 377, 133, 791, 313, 429, 1211, -1, 33, 424, 377, + 90, 791, 313, 429, 1211, -1, 33, 172, 114, 476, + 1202, 313, 429, 1211, -1, 33, 384, 1202, 313, 429, + 1211, -1, 33, 150, 434, 1202, 313, 429, 1211, -1, + 33, 337, 1202, 313, 429, 1211, -1, 33, 410, 1202, + 313, 429, 1211, -1, 100, 337, 1202, 867, -1, 100, + 337, 1202, 170, 31, 418, 867, -1, 100, 337, 1202, + 170, 909, 867, -1, 417, 1072, 634, 641, -1, 418, + 200, 374, 1217, -1, 418, 200, 374, 108, -1, 1217, + 634, 641, -1, 1217, 1180, 634, 641, -1, 1073, 634, + 641, -1, 108, -1, 908, -1, 909, 519, 908, -1, + 33, 337, 1202, 387, 759, -1, 33, 337, 1202, 27, + 909, -1, 33, 337, 1202, 387, 909, -1, 33, 337, + 1202, 141, 909, -1, 100, 410, 1202, 92, 1208, 337, + 1201, 867, -1, 33, 410, 1202, 387, 759, -1, 33, + 410, 1202, 92, 1208, -1, 33, 410, 1202, 348, 337, + 867, -1, 33, 410, 1202, 27, 337, 1201, 867, -1, + 33, 410, 1202, 141, 337, 1201, 867, -1, 33, 410, + 1202, 387, 337, 1201, 867, -1, 33, 410, 1202, 144, + -1, 33, 410, 1202, 134, -1, 33, 410, 1202, 394, + 759, -1, 141, 410, 1202, 529, -1, 141, 410, 194, + 156, 1202, 529, -1, 100, 839, 371, 1202, 40, 297, + 919, 429, 1200, 1083, 137, 920, 915, -1, 283, -1, + 917, -1, 515, 916, 516, -1, 916, 518, 918, -1, + 918, -1, 1013, -1, 980, -1, 996, -1, 989, -1, + 921, -1, 917, -1, -1, 380, -1, 451, -1, 126, + -1, 215, -1, 216, -1, 32, -1, -1, 284, 1217, + 922, -1, 519, 1208, -1, -1, 246, 1217, -1, 448, + 1217, -1, 448, 508, -1, 22, 927, 931, -1, 401, + 431, 930, -1, 86, 927, 931, -1, 365, 927, 931, + -1, 372, 1217, -1, 351, 372, 1217, -1, 351, 1217, + -1, 365, 927, 429, 372, 1217, -1, 365, 927, 429, + 1217, -1, 328, 431, 1208, -1, 86, 329, 1208, -1, + 365, 329, 1208, -1, 53, 927, 930, -1, 147, 927, + 931, -1, 475, -1, 431, -1, -1, 225, 243, 555, + -1, 340, 298, -1, 340, 477, -1, 123, -1, 282, + 123, -1, 928, -1, 929, 519, 928, -1, 929, 928, + -1, 929, -1, -1, 37, 70, -1, 37, 278, 70, + -1, -1, 100, 609, 465, 1200, 634, 581, 40, 1013, + 933, -1, 100, 302, 354, 609, 465, 1200, 634, 581, + 40, 1013, 933, -1, 100, 609, 344, 465, 1200, 515, + 635, 516, 581, 40, 1013, 933, -1, 100, 302, 354, + 609, 344, 465, 1200, 515, 635, 516, 581, 40, 1013, + 933, -1, 472, 74, 300, -1, 472, 66, 74, 300, + -1, 472, 248, 74, 300, -1, -1, 247, 1204, -1, + 100, 115, 1202, 532, 936, -1, 937, -1, -1, 938, + -1, 937, 938, -1, 939, 940, 675, -1, 939, 940, + 556, -1, 939, 940, 121, -1, 3, -1, 92, 245, + -1, 145, -1, 251, -1, 313, -1, 420, -1, 422, + -1, 505, -1, -1, 33, 115, 1202, 472, 936, -1, + 33, 115, 1202, 936, -1, 33, 115, 1202, 387, 420, + 1202, -1, 33, 115, 1202, 348, 81, 464, -1, 33, + 115, 1202, 563, -1, 141, 115, 1202, -1, 141, 115, + 194, 156, 1202, -1, 141, 115, 1202, 532, 515, 944, + 516, -1, 141, 115, 194, 156, 1202, 532, 515, 944, + 516, -1, 945, -1, 944, 519, 945, -1, 171, -1, + 33, 81, 791, 348, 464, -1, 33, 415, 387, 550, + -1, 33, 415, 356, 562, -1, 100, 139, 791, 950, + 1095, 622, -1, 33, 139, 791, 576, -1, 33, 139, + 791, 141, 282, 287, -1, 33, 139, 791, 387, 282, + 287, -1, 33, 139, 791, 27, 631, -1, 33, 139, + 791, 141, 93, 1202, 529, -1, 33, 139, 791, 141, + 93, 194, 156, 1202, 529, -1, 33, 139, 791, 456, + 93, 1202, -1, 40, -1, -1, 33, 424, 377, 133, + 791, 759, -1, 33, 424, 377, 90, 791, 27, 255, + 170, 1201, 953, 790, -1, 33, 424, 377, 90, 791, + 33, 255, 170, 1201, 953, 790, -1, 33, 424, 377, + 90, 791, 33, 255, 354, 791, 953, 791, -1, 33, + 424, 377, 90, 791, 33, 255, 170, 1201, 354, 791, + 953, 791, -1, 33, 424, 377, 90, 791, 141, 255, + 170, 1201, -1, 33, 424, 377, 90, 791, 141, 255, + 194, 156, 170, 1201, -1, 472, -1, 496, -1, 100, + 773, 97, 791, 170, 1208, 429, 1208, 176, 791, -1, + 78, 965, 1200, 956, -1, 78, 515, 959, 516, 1200, + 956, -1, 78, 965, -1, 78, 965, 1202, 297, 1200, + -1, 453, 1202, -1, -1, 454, 966, 967, 965, 964, + 971, -1, 454, 515, 959, 516, 971, -1, 960, 965, + 971, -1, 960, 515, 959, 516, 971, -1, 961, -1, + 959, 519, 961, -1, 36, -1, 35, -1, 962, 963, + -1, 1219, -1, 960, -1, 493, -1, 556, -1, 675, + -1, -1, 960, -1, -1, 463, -1, -1, 177, -1, + -1, 175, -1, -1, 515, 1201, 516, -1, -1, 1200, + 968, -1, 969, -1, 970, 519, 969, -1, 970, -1, + -1, 157, 973, -1, 157, 960, 965, 973, -1, 157, + 463, 973, -1, 157, 515, 959, 516, 973, -1, 1013, + -1, 980, -1, 996, -1, 989, -1, 1001, -1, 1009, + -1, 661, -1, 664, -1, 667, -1, 977, -1, 328, + 1202, 975, 40, 976, -1, 515, 1161, 516, -1, -1, + 1013, -1, 980, -1, 996, -1, 989, -1, 1001, -1, + 155, 1202, 978, -1, 100, 609, 417, 662, 40, 155, + 1202, 978, 663, -1, 100, 609, 417, 194, 282, 156, + 662, 40, 155, 1202, 978, 663, -1, 515, 1157, 516, + -1, -1, 117, 1202, -1, 117, 328, 1202, -1, 117, + 31, -1, 117, 328, 31, -1, 1024, 215, 221, 981, + 982, 986, 988, -1, 1200, -1, 1200, 40, 1217, -1, + 1013, -1, 311, 983, 458, 1013, -1, 515, 984, 516, + 1013, -1, 515, 984, 516, 311, 983, 458, 1013, -1, + 121, 459, -1, 452, -1, 415, -1, 985, -1, 984, + 519, 985, -1, 1217, 1181, -1, 297, 91, 987, 137, + 451, 387, 997, 1083, -1, 297, 91, 987, 137, 283, + -1, -1, 515, 830, 516, 1083, -1, 297, 93, 1202, + -1, -1, 360, 1197, -1, -1, 1024, 126, 176, 1075, + 990, 1084, 988, -1, 453, 1062, -1, -1, 252, 1027, + 1074, 992, 994, -1, 200, 993, 264, -1, -1, 25, + 390, -1, 369, 390, -1, 369, 154, -1, 390, 451, + 154, -1, 390, -1, 390, 369, 154, -1, 154, -1, + 25, 154, -1, 286, -1, -1, 286, -1, 394, 253, + -1, -1, 1024, 451, 1075, 387, 997, 1061, 1084, 988, + -1, 998, -1, 997, 519, 998, -1, 999, 505, 1118, + -1, 515, 1000, 516, 505, 1118, -1, 1217, 1181, -1, + 999, -1, 1000, 519, 999, -1, 1024, 260, 221, 1075, + 453, 1063, 297, 1118, 1002, -1, 1003, -1, 1002, 1003, + -1, 468, 257, 1004, 425, 1005, -1, 468, 257, 1004, + 425, 1006, -1, 468, 282, 257, 1004, 425, 1007, -1, + 468, 257, 1004, 425, 137, 283, -1, 468, 282, 257, + 1004, 425, 137, 283, -1, 37, 1118, -1, -1, 451, + 387, 997, -1, 126, -1, 215, 1008, -1, 215, 311, + 983, 458, 1008, -1, 215, 515, 984, 516, 1008, -1, + 215, 515, 984, 516, 311, 983, 458, 1008, -1, 215, + 121, 459, -1, 459, 515, 1157, 516, -1, 120, 1010, + 1011, 112, 1012, 170, 1013, -1, 1202, -1, -1, 1011, + 278, 376, -1, 1011, 376, -1, 1011, 56, -1, 1011, + 42, -1, 1011, 214, -1, -1, 472, 191, -1, 474, + 191, -1, 1015, -1, 1014, -1, 515, 1015, 516, -1, + 515, 1014, 516, -1, 1017, -1, 1016, 1033, -1, 1016, + 1032, 1054, 1037, -1, 1016, 1032, 1036, 1055, -1, 1018, + 1016, -1, 1018, 1016, 1033, -1, 1018, 1016, 1032, 1054, + 1037, -1, 1018, 1016, 1032, 1036, 1055, -1, 1017, -1, + 1014, -1, 380, 1030, 1196, 1025, 1061, 1083, 1046, 1053, + 1137, -1, 380, 1029, 1197, 1025, 1061, 1083, 1046, 1053, + 1137, -1, 1060, -1, 417, 1072, -1, 1016, 445, 1028, + 1016, -1, 1016, 219, 1028, 1016, -1, 1016, 151, 1028, + 1016, -1, 472, 1019, -1, 496, 1019, -1, 472, 344, + 1019, -1, 1020, -1, 1019, 519, 1020, -1, 1202, 968, + 40, 1021, 515, 976, 516, 1022, 1023, -1, 258, -1, + 282, 258, -1, -1, 377, 130, 167, 61, 635, 387, + 1217, -1, 377, 60, 167, 61, 635, 387, 1217, -1, + -1, 113, 635, 387, 1217, 429, 1206, 121, 1206, 453, + 1217, -1, 113, 635, 387, 1217, 453, 1217, -1, -1, + 1018, -1, -1, 221, 1026, -1, -1, 423, 1027, 1200, + -1, 421, 1027, 1200, -1, 248, 423, 1027, 1200, -1, + 248, 421, 1027, 1200, -1, 181, 423, 1027, 1200, -1, + 181, 421, 1027, 1200, -1, 449, 1027, 1200, -1, 417, + 1200, -1, 1200, -1, 417, -1, -1, 31, -1, 136, + -1, -1, 136, -1, 136, 297, 515, 1157, 516, -1, + 31, -1, -1, 1029, -1, 1030, -1, 1033, -1, -1, + 303, 61, 1034, -1, 1035, -1, 1034, 519, 1035, -1, + 1118, 453, 1155, 837, -1, 1118, 836, 837, -1, 1038, + 1039, -1, 1039, 1038, -1, 1038, -1, 1039, -1, 1036, + -1, -1, 245, 1040, -1, 245, 1040, 519, 1041, -1, + 164, 1045, 1042, 1044, 298, -1, 164, 1045, 1042, 1044, + 472, 426, -1, 164, 1045, 1044, 298, -1, 164, 1045, + 1044, 472, 426, -1, 294, 1041, -1, 294, 1042, 1044, + -1, 1118, -1, 31, -1, 1118, -1, 1120, -1, 506, + 1043, -1, 507, 1043, -1, 1207, -1, 5, -1, 369, + -1, 370, -1, 167, -1, 273, -1, 185, 61, 1028, + 1047, -1, -1, 1048, -1, 1047, 519, 1048, -1, 1118, + -1, 1049, -1, 1051, -1, 1050, -1, 1052, -1, 515, + 516, -1, 366, 515, 1157, 516, -1, 103, 515, 1157, + 516, -1, 186, 388, 515, 1047, 516, -1, 189, 1118, + -1, -1, 1056, -1, 170, 340, 298, -1, 1054, -1, + -1, 1057, -1, 1056, 1057, -1, 1058, 1059, 995, -1, + 170, 451, -1, 170, 278, 232, 451, -1, 170, 390, + -1, 170, 232, 390, -1, 292, 1199, -1, -1, 459, + 515, 1157, 516, -1, 1060, 519, 515, 1157, 516, -1, + 176, 1062, -1, -1, 1063, -1, 1062, 519, 1063, -1, + 1072, 1066, -1, 1072, 1066, 1076, -1, 1078, 1068, -1, + 238, 1078, 1068, -1, 1088, 1066, -1, 238, 1088, 1066, + -1, 1014, 1066, -1, 238, 1014, 1066, -1, 1064, -1, + 515, 1064, 516, 1065, -1, 515, 1064, 516, -1, 1063, + 101, 226, 1063, -1, 1063, 1069, 226, 1063, 1071, -1, + 1063, 226, 1063, 1071, -1, 1063, 270, 1069, 226, 1063, + -1, 1063, 270, 226, 1063, -1, 40, 1217, 515, 1201, + 516, -1, 40, 1217, -1, 1217, 515, 1201, 516, -1, + 1217, -1, 1065, -1, -1, 40, 1217, -1, -1, 1065, + -1, 40, 515, 1086, 516, -1, 40, 1217, 515, 1086, + 516, -1, 1217, 515, 1086, 516, -1, -1, 177, 1070, + -1, 242, 1070, -1, 363, 1070, -1, 211, -1, 307, + -1, -1, 453, 515, 1201, 516, 1067, -1, 297, 1118, + -1, 1200, -1, 1073, -1, 1200, 508, -1, 298, 1200, + -1, 298, 515, 1200, 516, -1, 1072, -1, 1074, 519, + 1072, -1, 1072, -1, 1072, 1217, -1, 1072, 40, 1217, + -1, 419, 1205, 515, 1157, 516, 1077, -1, 353, 515, + 1118, 516, -1, -1, 1123, 1082, -1, 370, 176, 515, + 1080, 516, 1082, -1, 1123, 1081, -1, 1079, -1, 1080, + 519, 1079, -1, 40, 515, 1086, 516, -1, -1, 496, + 304, -1, -1, 469, 1118, -1, -1, 469, 1118, -1, + 469, 104, 292, 1010, -1, -1, 1086, -1, -1, 1087, + -1, 1086, 519, 1087, -1, 1217, 1095, 577, -1, 489, + 515, 1120, 1133, 83, 1089, 516, -1, 489, 515, 484, + 515, 1093, 516, 519, 1120, 1133, 83, 1089, 516, -1, + 1090, -1, 1089, 519, 1090, -1, 1217, 1095, -1, 1217, + 1095, 1091, -1, 1217, 170, 304, -1, 1092, -1, 1091, + 1092, -1, 3, 1119, -1, 121, 1119, -1, 282, 287, + -1, 287, -1, 1094, -1, 1093, 519, 1094, -1, 1119, + 40, 1220, -1, 121, 1119, -1, 1097, 1096, -1, 389, + 1097, 1096, -1, 1097, 39, 513, 1207, 514, -1, 389, + 1097, 39, 513, 1207, 514, -1, 1097, 39, -1, 389, + 1097, 39, -1, 1096, 513, 514, -1, 1096, 513, 1207, + 514, -1, -1, 1099, -1, 1101, -1, 1103, -1, 1107, + -1, 1113, -1, 1114, 1116, -1, 1114, 515, 1207, 516, + -1, 1101, -1, 1104, -1, 1108, -1, 1113, -1, 1218, + 1100, -1, 1218, 792, 1100, -1, 515, 1157, 516, -1, + -1, 217, -1, 218, -1, 395, -1, 55, -1, 341, + -1, 168, 1102, -1, 140, 326, -1, 119, 1100, -1, + 118, 1100, -1, 290, 1100, -1, 58, -1, 515, 1207, + 516, -1, -1, 1105, -1, 1106, -1, 1105, -1, 1106, + -1, 57, 1112, 515, 1157, 516, -1, 57, 1112, -1, + 1109, -1, 1110, -1, 1109, -1, 1110, -1, 1111, 515, + 1207, 516, -1, 1111, -1, 72, 1112, -1, 71, 1112, + -1, 460, -1, 269, 72, 1112, -1, 269, 71, 1112, + -1, 271, 1112, -1, 462, -1, -1, 428, 515, 1207, + 516, 1115, -1, 428, 1115, -1, 427, 515, 1207, 516, + 1115, -1, 427, 1115, -1, 220, -1, 496, 427, 492, + -1, 497, 427, 492, -1, -1, 490, -1, 265, -1, + 116, -1, 192, -1, 262, -1, 1117, -1, 490, 429, + 265, -1, 116, 429, 192, -1, 116, 429, 262, -1, + 116, 429, 1117, -1, 192, 429, 262, -1, 192, 429, + 1117, -1, 262, 429, 1117, -1, -1, 378, -1, 378, + 515, 1207, 516, -1, 1120, -1, 1118, 13, 1095, -1, + 1118, 80, 791, -1, 1118, 47, 427, 492, 1118, -1, + 506, 1118, -1, 507, 1118, -1, 1118, 506, 1118, -1, + 1118, 507, 1118, -1, 1118, 508, 1118, -1, 1118, 509, + 1118, -1, 1118, 510, 1118, -1, 1118, 511, 1118, -1, + 1118, 503, 1118, -1, 1118, 504, 1118, -1, 1118, 505, + 1118, -1, 1118, 17, 1118, -1, 1118, 18, 1118, -1, + 1118, 19, 1118, -1, 1118, 1154, 1118, -1, 1154, 1118, + -1, 1118, 37, 1118, -1, 1118, 302, 1118, -1, 282, + 1118, -1, 494, 1118, -1, 1118, 244, 1118, -1, 1118, + 244, 1118, 149, 1118, -1, 1118, 494, 244, 1118, -1, + 1118, 494, 244, 1118, 149, 1118, -1, 1118, 195, 1118, + -1, 1118, 195, 1118, 149, 1118, -1, 1118, 494, 195, + 1118, -1, 1118, 494, 195, 1118, 149, 1118, -1, 1118, + 392, 429, 1118, -1, 1118, 392, 429, 1118, 149, 1118, + -1, 1118, 494, 392, 429, 1118, -1, 1118, 494, 392, + 429, 1118, 149, 1118, -1, 1118, 223, 287, -1, 1118, + 224, -1, 1118, 223, 282, 287, -1, 1118, 285, -1, + 1148, 309, 1148, -1, 1118, 223, 436, -1, 1118, 223, + 282, 436, -1, 1118, 223, 162, -1, 1118, 223, 282, + 162, -1, 1118, 223, 447, -1, 1118, 223, 282, 447, + -1, 1118, 223, 136, 176, 1118, -1, 1118, 223, 282, + 136, 176, 1118, -1, 1118, 54, 1182, 1119, 37, 1118, + -1, 1118, 494, 54, 1182, 1119, 37, 1118, -1, 1118, + 54, 413, 1119, 37, 1118, -1, 1118, 494, 54, 413, + 1119, 37, 1118, -1, 1118, 200, 1171, -1, 1118, 494, + 200, 1171, -1, 1118, 1156, 1151, 1014, -1, 1118, 1156, + 1151, 515, 1118, 516, -1, 446, 625, 1014, -1, 1118, + 223, 138, -1, 1118, 223, 282, 138, -1, 1118, 223, + 281, -1, 1118, 223, 1166, 281, -1, 1118, 223, 282, + 281, -1, 1118, 223, 282, 1166, 281, -1, 1118, 223, + 1187, 1188, -1, 1118, 223, 282, 1187, 1188, -1, 121, + -1, 1120, -1, 1119, 13, 1095, -1, 506, 1119, -1, + 507, 1119, -1, 1119, 506, 1119, -1, 1119, 507, 1119, + -1, 1119, 508, 1119, -1, 1119, 509, 1119, -1, 1119, + 510, 1119, -1, 1119, 511, 1119, -1, 1119, 503, 1119, + -1, 1119, 504, 1119, -1, 1119, 505, 1119, -1, 1119, + 17, 1119, -1, 1119, 18, 1119, -1, 1119, 19, 1119, + -1, 1119, 1154, 1119, -1, 1154, 1119, -1, 1119, 223, + 136, 176, 1119, -1, 1119, 223, 282, 136, 176, 1119, + -1, 1119, 223, 138, -1, 1119, 223, 282, 138, -1, + 1177, -1, 1206, -1, 12, 1181, -1, 515, 1118, 516, + 1181, -1, 1172, -1, 1122, -1, 1014, -1, 1014, 1180, + -1, 156, 1014, -1, 39, 1014, -1, 39, 1162, -1, + 1149, -1, 1150, -1, 186, 515, 1157, 516, -1, 1205, + 515, 516, -1, 1205, 515, 1158, 1032, 516, -1, 1205, + 515, 461, 1159, 1032, 516, -1, 1205, 515, 1158, 519, + 461, 1159, 1032, 516, -1, 1205, 515, 31, 1158, 1032, + 516, -1, 1205, 515, 136, 1158, 1032, 516, -1, 1205, + 515, 508, 516, -1, 1121, 1135, 1136, 1140, -1, 1194, + 1136, 1140, -1, 1124, -1, 1121, -1, 1124, -1, 1194, + -1, 81, 170, 515, 1118, 516, -1, 106, -1, 109, + -1, 109, 515, 1207, 516, -1, 110, -1, 110, 515, + 1207, 516, -1, 249, -1, 249, 515, 1207, 516, -1, + 250, -1, 250, 515, 1207, 516, -1, 107, -1, 111, + -1, 386, -1, 416, -1, 452, -1, 105, -1, 108, + -1, 68, 515, 1118, 40, 1095, 516, -1, 161, 515, + 1164, 516, -1, 280, 515, 1118, 516, -1, 280, 515, + 1118, 519, 1166, 516, -1, 310, 515, 1167, 516, -1, + 310, 515, 1160, 516, -1, 324, 515, 1168, 516, -1, + 411, 515, 1169, 516, -1, 411, 515, 1160, 516, -1, + 433, 515, 1118, 40, 1095, 516, -1, 435, 515, 59, + 1170, 516, -1, 435, 515, 239, 1170, 516, -1, 435, + 515, 430, 1170, 516, -1, 435, 515, 1170, 516, -1, + 288, 515, 1118, 519, 1118, 516, -1, 79, 515, 1157, + 516, -1, 184, 515, 1157, 516, -1, 241, 515, 1157, + 516, -1, 480, 515, 1157, 516, -1, 481, 515, 267, + 1220, 516, -1, 481, 515, 267, 1220, 519, 1127, 516, + -1, 481, 515, 267, 1220, 519, 1157, 516, -1, 481, + 515, 267, 1220, 519, 1127, 519, 1157, 516, -1, 482, + 515, 1120, 1133, 516, -1, 483, 515, 1128, 516, -1, + 485, 515, 1130, 1118, 1132, 516, -1, 486, 515, 267, + 1220, 516, -1, 486, 515, 267, 1220, 519, 1118, 516, + -1, 487, 515, 1118, 519, 1125, 1126, 516, -1, 488, + 515, 1130, 1118, 40, 1097, 1131, 516, -1, 230, 515, + 1158, 516, -1, 230, 515, 1189, 1191, 1188, 1186, 516, + -1, 230, 515, 1186, 516, -1, 228, 515, 1193, 1192, + 1186, 516, -1, 228, 515, 1015, 1184, 1186, 516, -1, + 228, 515, 1186, 516, -1, 464, 1118, -1, 464, 278, + 458, -1, 519, 400, 491, -1, 519, 400, 278, -1, + 519, 400, 278, 458, -1, -1, 479, 515, 1128, 516, + -1, 1129, -1, 1128, 519, 1129, -1, 1118, 40, 1220, + -1, 1118, -1, 138, -1, 95, -1, 204, -1, 278, + 204, -1, -1, 327, 470, -1, 409, 470, -1, -1, + 319, 1120, -1, 319, 1120, 1134, -1, 319, 1134, 1120, + -1, 319, 1134, 1120, 1134, -1, 61, 345, -1, 61, + 458, -1, 473, 185, 515, 1033, 516, -1, -1, 165, + 515, 469, 1118, 516, -1, -1, 471, 1138, -1, -1, + 1139, -1, 1138, 519, 1139, -1, 1217, 40, 1141, -1, + 308, 1141, -1, 308, 1217, -1, -1, 515, 1142, 1143, + 1032, 1144, 516, -1, 1217, -1, -1, 318, 61, 1157, + -1, -1, 339, 1145, 1147, -1, 370, 1145, 1147, -1, + 187, 1145, 1147, -1, -1, 1146, -1, 54, 1146, 37, + 1146, -1, 442, 325, -1, 442, 169, -1, 104, 369, + -1, 1118, 325, -1, 1118, 169, -1, 152, 104, 369, + -1, 152, 185, -1, 152, 426, -1, 152, 278, 305, + -1, -1, 369, 515, 1157, 516, -1, 369, 515, 516, + -1, 515, 1157, 519, 1118, 516, -1, 369, 515, 1157, + 516, -1, 369, 515, 516, -1, 515, 1157, 519, 1118, + 516, -1, 38, -1, 397, -1, 31, -1, 10, -1, + 1153, -1, 506, -1, 507, -1, 508, -1, 509, -1, + 510, -1, 511, -1, 503, -1, 504, -1, 505, -1, + 17, -1, 18, -1, 19, -1, 10, -1, 299, 515, + 877, 516, -1, 1152, -1, 299, 515, 877, 516, -1, + 1152, -1, 299, 515, 877, 516, -1, 244, -1, 494, + 244, -1, 195, -1, 494, 195, -1, 1118, -1, 1157, + 519, 1118, -1, 1159, -1, 1158, 519, 1159, -1, 1118, + -1, 848, 15, 1118, -1, 848, 16, 1118, -1, 1158, + -1, -1, 1095, -1, 1161, 519, 1095, -1, 513, 1157, + 514, -1, 513, 1163, 514, -1, 513, 514, -1, 1162, + -1, 1163, 519, 1162, -1, 1165, 176, 1118, -1, 12, + 176, 1118, -1, 3, -1, 490, -1, 265, -1, 116, + -1, 192, -1, 262, -1, 378, -1, 1208, -1, 274, + -1, 275, -1, 276, -1, 277, -1, 1118, 321, 1118, + 176, 1118, 170, 1118, -1, 1118, 321, 1118, 176, 1118, + -1, 1119, 200, 1119, -1, 1118, 176, 1118, 170, 1118, + -1, 1118, 170, 1118, 176, 1118, -1, 1118, 176, 1118, + -1, 1118, 170, 1118, -1, 1118, 392, 1118, 149, 1118, + -1, 1118, 176, 1157, -1, 176, 1157, -1, 1157, -1, + 1014, -1, 515, 1157, 516, -1, 67, 1176, 1173, 1175, + 147, -1, 1174, -1, 1173, 1174, -1, 468, 1118, 425, + 1118, -1, 143, 1118, -1, -1, 1118, -1, -1, 1217, + -1, 1217, 1180, -1, 517, 1203, -1, 517, 508, -1, + 513, 1118, 514, -1, 513, 1179, 520, 1179, 514, -1, + 1118, -1, -1, 1178, -1, 1180, 1178, -1, -1, 1181, + 1178, -1, 45, -1, -1, 1118, 1184, -1, 493, 227, + 1185, -1, -1, 145, 1202, -1, -1, 360, 1095, 1184, + -1, -1, 227, -1, 227, 458, -1, 227, 39, -1, + 227, 291, -1, 227, 373, -1, 472, 446, 233, -1, + 472, 446, -1, 474, 446, 233, -1, 474, 446, -1, + -1, 1190, -1, 1189, 519, 1190, -1, 1120, 458, 1183, + -1, 1118, 520, 1183, -1, 287, 297, 287, -1, 23, + 297, 287, -1, -1, 287, 297, 287, -1, 23, 297, + 287, -1, -1, 1183, -1, 1193, 519, 1183, -1, 231, + 515, 1190, 1191, 1188, 1186, 516, -1, 229, 515, 1183, + 1195, 1192, 1186, 516, -1, 303, 61, 1034, -1, -1, + 1197, -1, -1, 1198, -1, 1197, 519, 1198, -1, 1118, + 40, 1220, -1, 1118, 1221, -1, 1118, -1, 508, -1, + 1200, -1, 1199, 519, 1200, -1, 1217, -1, 1217, 1180, + -1, 1202, -1, 1201, 519, 1202, -1, 1217, -1, 1220, + -1, 1208, -1, 1218, -1, 1217, 1180, -1, 1207, -1, + 5, -1, 1208, -1, 8, -1, 9, -1, 1205, 1208, + -1, 1205, 515, 1158, 1032, 516, 1208, -1, 1205, 12, + -1, 1205, 515, 1158, 1032, 516, 12, -1, 1098, 1208, + -1, 1114, 1208, 1116, -1, 1114, 515, 1207, 516, 1208, + -1, 1098, 12, -1, 1114, 12, 1116, -1, 1114, 515, + 1207, 516, 12, -1, 436, -1, 162, -1, 287, -1, + 11, -1, 6, -1, 1207, -1, 506, 1207, -1, 507, + 1207, -1, 1211, -1, 1219, -1, 107, -1, 111, -1, + 386, -1, 1211, -1, 1212, 519, 1211, -1, 1031, 1196, + 1061, 1083, 1046, 1053, 1137, 1032, 1037, 1055, -1, 1215, + 1181, 1216, 1213, -1, 1217, -1, 12, -1, 15, -1, + 505, -1, 3, -1, 1222, -1, 1223, -1, 3, -1, + 1222, -1, 1224, -1, 3, -1, 1222, -1, 1223, -1, + 1224, -1, 3, -1, 1222, -1, 1223, -1, 1224, -1, + 1225, -1, 3, -1, 1226, -1, 22, -1, 23, -1, + 24, -1, 25, -1, 26, -1, 27, -1, 28, -1, + 29, -1, 30, -1, 32, -1, 33, -1, 34, -1, + 42, -1, 43, -1, 44, -1, 47, -1, 46, -1, + 48, -1, 49, -1, 51, -1, 52, -1, 53, -1, + 60, -1, 61, -1, 62, -1, 63, -1, 64, -1, + 65, -1, 66, -1, 69, -1, 70, -1, 73, -1, + 75, -1, 76, -1, 77, -1, 78, -1, 83, -1, + 84, -1, 85, -1, 86, -1, 87, -1, 88, -1, + 90, -1, 91, -1, 92, -1, 94, -1, 95, -1, + 96, -1, 97, -1, 98, -1, 99, -1, 102, -1, + 103, -1, 104, -1, 112, -1, 113, -1, 114, -1, + 115, -1, 116, -1, 117, -1, 120, -1, 122, -1, + 124, -1, 125, -1, 126, -1, 127, -1, 128, -1, + 129, -1, 130, -1, 132, -1, 133, -1, 134, -1, + 135, -1, 138, -1, 139, -1, 140, -1, 141, -1, + 142, -1, 144, -1, 145, -1, 146, -1, 148, -1, + 149, -1, 150, -1, 152, -1, 153, -1, 154, -1, + 155, -1, 157, -1, 158, -1, 159, -1, 160, -1, + 163, -1, 165, -1, 166, -1, 167, -1, 169, -1, + 171, -1, 173, -1, 174, -1, 178, -1, 179, -1, + 180, -1, 181, -1, 183, -1, 187, -1, 188, -1, + 190, -1, 191, -1, 192, -1, 193, -1, 194, -1, + 196, -1, 197, -1, 198, -1, 199, -1, 201, -1, + 202, -1, 203, -1, 204, -1, 205, -1, 206, -1, + 207, -1, 208, -1, 210, -1, 213, -1, 214, -1, + 215, -1, 216, -1, 222, -1, 225, -1, 227, -1, + 232, -1, 233, -1, 234, -1, 235, -1, 236, -1, + 237, -1, 240, -1, 243, -1, 246, -1, 247, -1, + 248, -1, 251, -1, 252, -1, 253, -1, 254, -1, 255, -1, 256, -1, 257, -1, 258, -1, 259, -1, - 263, -1, 264, -1, 265, -1, 266, -1, 267, -1, - 268, -1, 269, -1, 272, -1, 274, -1, 275, -1, - 277, -1, 280, -1, 282, -1, 283, -1, 284, -1, - 286, -1, 287, -1, 290, -1, 291, -1, 292, -1, - 295, -1, 296, -1, 299, -1, 302, -1, 303, -1, - 304, -1, 305, -1, 306, -1, 307, -1, 308, -1, - 309, -1, 310, -1, 311, -1, 313, -1, 314, -1, - 316, -1, 319, -1, 320, -1, 318, -1, 322, -1, - 323, -1, 324, -1, 325, -1, 326, -1, 327, -1, - 328, -1, 329, -1, 330, -1, 331, -1, 333, -1, - 334, -1, 335, -1, 336, -1, 338, -1, 339, -1, - 340, -1, 341, -1, 342, -1, 343, -1, 344, -1, - 345, -1, 346, -1, 347, -1, 348, -1, 349, -1, - 350, -1, 352, -1, 353, -1, 355, -1, 356, -1, - 357, -1, 358, -1, 359, -1, 361, -1, 362, -1, - 363, -1, 364, -1, 365, -1, 366, -1, 367, -1, - 368, -1, 369, -1, 371, -1, 372, -1, 373, -1, - 374, -1, 375, -1, 377, -1, 378, -1, 380, -1, - 381, -1, 383, -1, 384, -1, 386, -1, 388, -1, - 389, -1, 390, -1, 391, -1, 392, -1, 393, -1, - 394, -1, 395, -1, 396, -1, 397, -1, 398, -1, - 399, -1, 400, -1, 402, -1, 404, -1, 405, -1, - 407, -1, 409, -1, 410, -1, 411, -1, 412, -1, - 413, -1, 415, -1, 420, -1, 421, -1, 423, -1, - 426, -1, 427, -1, 428, -1, 429, -1, 430, -1, - 431, -1, 432, -1, 433, -1, 436, -1, 437, -1, - 438, -1, 439, -1, 440, -1, 443, -1, 444, -1, - 445, -1, 446, -1, 447, -1, 451, -1, 453, -1, - 454, -1, 455, -1, 456, -1, 459, -1, 462, -1, - 463, -1, 464, -1, 465, -1, 466, -1, 467, -1, - 479, -1, 480, -1, 481, -1, 53, -1, 54, -1, - 56, -1, 57, -1, 70, -1, 71, -1, 78, -1, - 117, -1, 118, -1, 155, -1, 160, -1, 167, -1, - 182, -1, 184, -1, 209, -1, 214, -1, 215, -1, - 217, -1, 232, -1, 260, -1, 262, -1, 270, -1, - 271, -1, 279, -1, 281, -1, 297, -1, 301, -1, - 315, -1, 317, -1, 332, -1, 360, -1, 379, -1, - 385, -1, 401, -1, 416, -1, 417, -1, 422, -1, - 424, -1, 448, -1, 449, -1, 468, -1, 469, -1, - 470, -1, 471, -1, 472, -1, 473, -1, 474, -1, - 475, -1, 476, -1, 477, -1, 478, -1, 49, -1, - 55, -1, 80, -1, 88, -1, 100, -1, 107, -1, - 173, -1, 175, -1, 193, -1, 208, -1, 220, -1, - 221, -1, 223, -1, 233, -1, 235, -1, 261, -1, - 276, -1, 298, -1, 300, -1, 354, -1, 382, -1, - 408, -1, 452, -1, 30, -1, 34, -1, 35, -1, - 36, -1, 37, -1, 38, -1, 39, -1, 40, -1, - 44, -1, 58, -1, 66, -1, 67, -1, 73, -1, - 79, -1, 81, -1, 92, -1, 99, -1, 104, -1, - 105, -1, 106, -1, 108, -1, 109, -1, 110, -1, - 120, -1, 122, -1, 130, -1, 135, -1, 136, -1, - 142, -1, 146, -1, 150, -1, 161, -1, 163, -1, - 169, -1, 171, -1, 174, -1, 180, -1, 183, -1, - 187, -1, 198, -1, 206, -1, 216, -1, 218, -1, - 229, -1, 230, -1, 236, -1, 240, -1, 241, -1, - 273, -1, 278, -1, 285, -1, 288, -1, 289, -1, - 293, -1, 294, -1, 312, -1, 321, -1, 337, -1, - 351, -1, 370, -1, 376, -1, 387, -1, 403, -1, - 406, -1, 414, -1, 418, -1, 419, -1, 425, -1, - 434, -1, 435, -1, 441, -1, 442, -1, 450, -1, - 457, -1, 458, -1, 460, -1, 461, -1, 22, -1, + 260, -1, 261, -1, 262, -1, 263, -1, 264, -1, + 265, -1, 266, -1, 267, -1, 268, -1, 272, -1, + 273, -1, 274, -1, 275, -1, 276, -1, 277, -1, + 278, -1, 281, -1, 283, -1, 284, -1, 286, -1, + 289, -1, 291, -1, 292, -1, 293, -1, 295, -1, + 296, -1, 299, -1, 300, -1, 301, -1, 304, -1, + 305, -1, 308, -1, 311, -1, 312, -1, 313, -1, + 314, -1, 315, -1, 316, -1, 317, -1, 318, -1, + 319, -1, 320, -1, 322, -1, 323, -1, 325, -1, + 328, -1, 329, -1, 327, -1, 331, -1, 332, -1, + 333, -1, 334, -1, 335, -1, 336, -1, 337, -1, + 338, -1, 339, -1, 340, -1, 342, -1, 343, -1, + 344, -1, 345, -1, 347, -1, 348, -1, 349, -1, + 350, -1, 351, -1, 352, -1, 353, -1, 354, -1, + 355, -1, 356, -1, 357, -1, 358, -1, 359, -1, + 361, -1, 362, -1, 364, -1, 365, -1, 366, -1, + 367, -1, 368, -1, 370, -1, 371, -1, 372, -1, + 373, -1, 374, -1, 375, -1, 376, -1, 377, -1, + 378, -1, 379, -1, 381, -1, 382, -1, 383, -1, + 384, -1, 385, -1, 387, -1, 388, -1, 390, -1, + 391, -1, 393, -1, 394, -1, 396, -1, 398, -1, + 399, -1, 400, -1, 401, -1, 402, -1, 403, -1, + 404, -1, 405, -1, 406, -1, 407, -1, 408, -1, + 409, -1, 410, -1, 412, -1, 414, -1, 415, -1, + 418, -1, 420, -1, 421, -1, 422, -1, 423, -1, + 424, -1, 426, -1, 431, -1, 432, -1, 434, -1, + 437, -1, 438, -1, 439, -1, 440, -1, 441, -1, + 442, -1, 443, -1, 444, -1, 447, -1, 448, -1, + 449, -1, 450, -1, 451, -1, 454, -1, 455, -1, + 456, -1, 457, -1, 458, -1, 462, -1, 464, -1, + 465, -1, 466, -1, 467, -1, 470, -1, 473, -1, + 474, -1, 475, -1, 476, -1, 477, -1, 478, -1, + 490, -1, 491, -1, 492, -1, 54, -1, 55, -1, + 57, -1, 58, -1, 71, -1, 72, -1, 79, -1, + 118, -1, 119, -1, 156, -1, 161, -1, 168, -1, + 184, -1, 186, -1, 212, -1, 217, -1, 218, -1, + 220, -1, 228, -1, 229, -1, 230, -1, 231, -1, + 241, -1, 269, -1, 271, -1, 279, -1, 280, -1, + 288, -1, 290, -1, 306, -1, 310, -1, 324, -1, + 326, -1, 341, -1, 369, -1, 389, -1, 395, -1, + 411, -1, 427, -1, 428, -1, 433, -1, 435, -1, + 459, -1, 460, -1, 479, -1, 480, -1, 481, -1, + 482, -1, 483, -1, 484, -1, 485, -1, 486, -1, + 487, -1, 488, -1, 489, -1, 50, -1, 56, -1, + 81, -1, 89, -1, 101, -1, 108, -1, 175, -1, + 177, -1, 195, -1, 211, -1, 223, -1, 224, -1, + 226, -1, 242, -1, 244, -1, 270, -1, 285, -1, + 307, -1, 309, -1, 363, -1, 392, -1, 419, -1, + 463, -1, 31, -1, 35, -1, 36, -1, 37, -1, + 38, -1, 39, -1, 40, -1, 41, -1, 45, -1, + 59, -1, 67, -1, 68, -1, 74, -1, 80, -1, + 82, -1, 93, -1, 100, -1, 105, -1, 106, -1, + 107, -1, 109, -1, 110, -1, 111, -1, 121, -1, + 123, -1, 131, -1, 136, -1, 137, -1, 143, -1, + 147, -1, 151, -1, 162, -1, 164, -1, 170, -1, + 172, -1, 176, -1, 182, -1, 185, -1, 189, -1, + 200, -1, 209, -1, 219, -1, 221, -1, 238, -1, + 239, -1, 245, -1, 249, -1, 250, -1, 282, -1, + 287, -1, 294, -1, 297, -1, 298, -1, 302, -1, + 303, -1, 321, -1, 330, -1, 346, -1, 360, -1, + 380, -1, 386, -1, 397, -1, 413, -1, 416, -1, + 417, -1, 425, -1, 429, -1, 430, -1, 436, -1, + 445, -1, 446, -1, 452, -1, 453, -1, 461, -1, + 468, -1, 469, -1, 471, -1, 472, -1, 22, -1, 23, -1, 24, -1, 25, -1, 26, -1, 27, -1, 28, -1, 29, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, - 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, - 46, -1, 45, -1, 47, -1, 48, -1, 49, -1, + 38, -1, 41, -1, 42, -1, 43, -1, 44, -1, + 45, -1, 47, -1, 46, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, 66, -1, 67, -1, 68, -1, 69, -1, - 72, -1, 73, -1, 74, -1, 75, -1, 76, -1, + 70, -1, 73, -1, 74, -1, 75, -1, 76, -1, 77, -1, 78, -1, 79, -1, 80, -1, 81, -1, 82, -1, 83, -1, 84, -1, 85, -1, 86, -1, 87, -1, 88, -1, 89, -1, 90, -1, 91, -1, 92, -1, 93, -1, 94, -1, 95, -1, 96, -1, - 97, -1, 98, -1, 100, -1, 101, -1, 102, -1, + 97, -1, 98, -1, 99, -1, 101, -1, 102, -1, 103, -1, 104, -1, 105, -1, 106, -1, 107, -1, 108, -1, 109, -1, 110, -1, 111, -1, 112, -1, - 113, -1, 114, -1, 116, -1, 117, -1, 118, -1, + 113, -1, 114, -1, 115, -1, 117, -1, 118, -1, 119, -1, 120, -1, 121, -1, 122, -1, 123, -1, 124, -1, 125, -1, 126, -1, 127, -1, 128, -1, 129, -1, 130, -1, 131, -1, 132, -1, 133, -1, 134, -1, 135, -1, 136, -1, 137, -1, 138, -1, 139, -1, 140, -1, 141, -1, 142, -1, 143, -1, 144, -1, 145, -1, 146, -1, 147, -1, 148, -1, - 149, -1, 151, -1, 152, -1, 153, -1, 154, -1, + 149, -1, 150, -1, 152, -1, 153, -1, 154, -1, 155, -1, 156, -1, 157, -1, 158, -1, 159, -1, - 160, -1, 161, -1, 162, -1, 165, -1, 166, -1, - 167, -1, 168, -1, 170, -1, 171, -1, 172, -1, - 173, -1, 175, -1, 176, -1, 177, -1, 178, -1, - 179, -1, 181, -1, 182, -1, 184, -1, 185, -1, - 186, -1, 188, -1, 189, -1, 191, -1, 192, -1, + 160, -1, 161, -1, 162, -1, 163, -1, 166, -1, + 167, -1, 168, -1, 169, -1, 171, -1, 172, -1, + 173, -1, 174, -1, 175, -1, 177, -1, 178, -1, + 179, -1, 180, -1, 181, -1, 183, -1, 184, -1, + 186, -1, 187, -1, 188, -1, 190, -1, 191, -1, 193, -1, 194, -1, 195, -1, 196, -1, 197, -1, 198, -1, 199, -1, 200, -1, 201, -1, 202, -1, 203, -1, 204, -1, 205, -1, 206, -1, 207, -1, 208, -1, 209, -1, 210, -1, 211, -1, 212, -1, - 213, -1, 214, -1, 215, -1, 217, -1, 219, -1, - 220, -1, 222, -1, 223, -1, 224, -1, 225, -1, + 213, -1, 214, -1, 215, -1, 216, -1, 217, -1, + 218, -1, 220, -1, 222, -1, 223, -1, 225, -1, 226, -1, 227, -1, 228, -1, 229, -1, 230, -1, 231, -1, 232, -1, 233, -1, 234, -1, 235, -1, - 237, -1, 238, -1, 239, -1, 240, -1, 241, -1, - 242, -1, 243, -1, 244, -1, 245, -1, 246, -1, + 236, -1, 237, -1, 238, -1, 239, -1, 240, -1, + 241, -1, 242, -1, 243, -1, 244, -1, 246, -1, 247, -1, 248, -1, 249, -1, 250, -1, 251, -1, - 252, -1, 254, -1, 255, -1, 257, -1, 258, -1, - 259, -1, 260, -1, 261, -1, 262, -1, 263, -1, - 264, -1, 265, -1, 266, -1, 267, -1, 268, -1, + 252, -1, 253, -1, 254, -1, 255, -1, 256, -1, + 257, -1, 258, -1, 259, -1, 260, -1, 261, -1, + 263, -1, 264, -1, 266, -1, 267, -1, 268, -1, 269, -1, 270, -1, 271, -1, 272, -1, 273, -1, - 274, -1, 275, -1, 277, -1, 278, -1, 279, -1, - 280, -1, 281, -1, 282, -1, 283, -1, 284, -1, - 286, -1, 287, -1, 289, -1, 290, -1, 291, -1, - 292, -1, 293, -1, 295, -1, 296, -1, 297, -1, - 298, -1, 301, -1, 302, -1, 303, -1, 304, -1, - 305, -1, 306, -1, 307, -1, 308, -1, 309, -1, + 274, -1, 275, -1, 276, -1, 277, -1, 278, -1, + 279, -1, 280, -1, 281, -1, 282, -1, 283, -1, + 284, -1, 286, -1, 287, -1, 288, -1, 289, -1, + 290, -1, 291, -1, 292, -1, 293, -1, 295, -1, + 296, -1, 298, -1, 299, -1, 300, -1, 301, -1, + 302, -1, 304, -1, 305, -1, 306, -1, 307, -1, 310, -1, 311, -1, 312, -1, 313, -1, 314, -1, - 315, -1, 316, -1, 319, -1, 320, -1, 318, -1, - 321, -1, 322, -1, 323, -1, 324, -1, 325, -1, - 326, -1, 327, -1, 328, -1, 329, -1, 330, -1, + 315, -1, 316, -1, 317, -1, 318, -1, 319, -1, + 320, -1, 321, -1, 322, -1, 323, -1, 324, -1, + 325, -1, 328, -1, 329, -1, 327, -1, 330, -1, 331, -1, 332, -1, 333, -1, 334, -1, 335, -1, 336, -1, 337, -1, 338, -1, 339, -1, 340, -1, 341, -1, 342, -1, 343, -1, 344, -1, 345, -1, 346, -1, 347, -1, 348, -1, 349, -1, 350, -1, - 352, -1, 353, -1, 354, -1, 355, -1, 356, -1, - 357, -1, 358, -1, 359, -1, 360, -1, 361, -1, + 351, -1, 352, -1, 353, -1, 354, -1, 355, -1, + 356, -1, 357, -1, 358, -1, 359, -1, 361, -1, 362, -1, 363, -1, 364, -1, 365, -1, 366, -1, - 367, -1, 369, -1, 370, -1, 371, -1, 372, -1, - 373, -1, 374, -1, 375, -1, 376, -1, 377, -1, - 379, -1, 378, -1, 380, -1, 381, -1, 382, -1, + 367, -1, 368, -1, 369, -1, 370, -1, 371, -1, + 372, -1, 373, -1, 374, -1, 375, -1, 376, -1, + 377, -1, 379, -1, 380, -1, 381, -1, 382, -1, 383, -1, 384, -1, 385, -1, 386, -1, 387, -1, - 388, -1, 389, -1, 390, -1, 391, -1, 392, -1, + 389, -1, 388, -1, 390, -1, 391, -1, 392, -1, 393, -1, 394, -1, 395, -1, 396, -1, 397, -1, 398, -1, 399, -1, 400, -1, 401, -1, 402, -1, 403, -1, 404, -1, 405, -1, 406, -1, 407, -1, 408, -1, 409, -1, 410, -1, 411, -1, 412, -1, 413, -1, 414, -1, 415, -1, 416, -1, 417, -1, - 419, -1, 420, -1, 421, -1, 422, -1, 423, -1, - 424, -1, 425, -1, 426, -1, 427, -1, 428, -1, - 429, -1, 430, -1, 431, -1, 432, -1, 433, -1, - 435, -1, 436, -1, 437, -1, 438, -1, 439, -1, - 440, -1, 441, -1, 442, -1, 443, -1, 444, -1, - 445, -1, 446, -1, 447, -1, 448, -1, 449, -1, - 450, -1, 452, -1, 453, -1, 454, -1, 455, -1, - 456, -1, 457, -1, 459, -1, 464, -1, 465, -1, - 466, -1, 467, -1, 468, -1, 469, -1, 470, -1, - 471, -1, 472, -1, 473, -1, 474, -1, 475, -1, - 476, -1, 477, -1, 478, -1, 480, -1, 481, -1 + 418, -1, 419, -1, 420, -1, 421, -1, 422, -1, + 423, -1, 424, -1, 425, -1, 426, -1, 427, -1, + 428, -1, 430, -1, 431, -1, 432, -1, 433, -1, + 434, -1, 435, -1, 436, -1, 437, -1, 438, -1, + 439, -1, 440, -1, 441, -1, 442, -1, 443, -1, + 444, -1, 446, -1, 447, -1, 448, -1, 449, -1, + 450, -1, 451, -1, 452, -1, 453, -1, 454, -1, + 455, -1, 456, -1, 457, -1, 458, -1, 459, -1, + 460, -1, 461, -1, 463, -1, 464, -1, 465, -1, + 466, -1, 467, -1, 468, -1, 470, -1, 475, -1, + 476, -1, 477, -1, 478, -1, 479, -1, 480, -1, + 481, -1, 482, -1, 483, -1, 484, -1, 485, -1, + 486, -1, 487, -1, 488, -1, 489, -1, 491, -1, + 492, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 862, 862, 867, 871, 876, 884, 892, 912, 924, - 938, 939, 943, 944, 945, 946, 947, 948, 949, 950, - 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, - 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, - 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, - 1061, 1062, 1063, 1064, 1065, 1066, 1068, 1077, 1093, 1105, - 1106, 1107, 1116, 1117, 1121, 1122, 1126, 1131, 1136, 1140, - 1150, 1160, 1168, 1172, 1176, 1181, 1185, 1233, 1235, 1239, - 1243, 1247, 1251, 1265, 1284, 1293, 1305, 1306, 1310, 1319, - 1328, 1337, 1359, 1367, 1375, 1383, 1391, 1399, 1417, 1436, - 1448, 1449, 1460, 1471, 1482, 1498, 1517, 1518, 1522, 1529, - 1537, 1538, 1539, 1540, 1541, 1542, 1556, 1563, 1570, 1580, - 1589, 1598, 1602, 1611, 1620, 1628, 1639, 1640, 1649, 1661, - 1669, 1678, 1686, 1698, 1707, 1715, 1724, 1732, 1740, 1750, - 1761, 1762, 1766, 1767, 1770, 1772, 1774, 1778, 1779, 1780, - 1781, 1785, 1786, 1787, 1793, 1805, 1809, 1813, 1817, 1834, - 1842, 1843, 1844, 1848, 1849, 1850, 1854, 1855, 1859, 1863, - 1864, 1872, 1880, 1891, 1899, 1910, 1911, 1916, 1917, 1922, - 1929, 1936, 1943, 1950, 1961, 1972, 1973, 1977, 1978, 1986, - 2002, 2009, 2016, 2023, 2030, 2050, 2060, 2070, 2080, 2090, - 2102, 2114, 2124, 2134, 2144, 2156, 2168, 2178, 2188, 2198, - 2208, 2218, 2228, 2240, 2252, 2262, 2275, 2276, 2281, 2295, - 2308, 2324, 2341, 2351, 2361, 2371, 2381, 2391, 2400, 2409, - 2418, 2428, 2438, 2454, 2464, 2474, 2484, 2494, 2511, 2521, - 2531, 2541, 2552, 2566, 2582, 2592, 2601, 2617, 2626, 2637, - 2648, 2656, 2665, 2674, 2682, 2690, 2699, 2708, 2717, 2725, - 2733, 2742, 2750, 2758, 2767, 2776, 2785, 2794, 2803, 2812, - 2823, 2831, 2840, 2849, 2858, 2867, 2876, 2885, 2893, 2901, - 2909, 2916, 2927, 2928, 2932, 2933, 2934, 2938, 2947, 2951, - 2952, 2956, 2964, 2972, 2980, 2991, 2994, 2995, 2999, 3000, - 3005, 3009, 3013, 3018, 3025, 3027, 3032, 3036, 3040, 3051, - 3059, 3112, 3125, 3139, 3151, 3158, 3162, 3176, 3189, 3190, - 3195, 3205, 3216, 3227, 3254, 3261, 3295, 3331, 3354, 3355, - 3359, 3360, 3369, 3370, 3371, 3374, 3375, 3380, 3381, 3385, - 3389, 3393, 3397, 3401, 3405, 3409, 3413, 3417, 3421, 3425, - 3429, 3433, 3442, 3446, 3450, 3454, 3458, 3459, 3464, 3468, - 3475, 3482, 3483, 3484, 3485, 3486, 3490, 3494, 3502, 3513, - 3533, 3553, 3574, 3595, 3616, 3650, 3651, 3652, 3653, 3654, - 3661, 3668, 3669, 3673, 3674, 3678, 3679, 3683, 3687, 3694, - 3698, 3705, 3706, 3707, 3711, 3712, 3715, 3738, 3757, 3779, - 3780, 3784, 3785, 3789, 3790, 3794, 3802, 3803, 3804, 3836, - 3844, 3852, 3865, 3877, 3890, 3900, 3910, 3934, 3954, 3955, - 3956, 3960, 3961, 3980, 3988, 3996, 4004, 4016, 4028, 4029, - 4030, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, - 4043, 4052, 4060, 4064, 4078, 4096, 4112, 4129, 4145, 4165, - 4188, 4189, 4193, 4194, 4198, 4199, 4202, 4208, 4209, 4212, - 4216, 4224, 4229, 4235, 4236, 4240, 4245, 4252, 4253, 4257, - 4267, 4277, 4285, 4294, 4307, 4319, 4326, 4334, 4342, 4350, - 4358, 4368, 4369, 4373, 4374, 4377, 4389, 4390, 4393, 4404, - 4415, 4429, 4430, 4435, 4436, 4437, 4440, 4441, 4442, 4443, - 4446, 4447, 4450, 4451, 4454, 4472, 4485, 4507, 4508, 4511, - 4517, 4523, 4540, 4549, 4571, 4585, 4602, 4618, 4619, 4620, - 4632, 4646, 4663, 4677, 4678, 4690, 4711, 4722, 4736, 4745, - 4757, 4758, 4761, 4762, 4765, 4766, 4769, 4773, 4777, 4781, - 4785, 4789, 4793, 4797, 4801, 4805, 4809, 4814, 4818, 4822, - 4828, 4829, 4833, 4834, 4835, 4842, 4845, 4846, 4858, 4874, - 4890, 4891, 4899, 4900, 4904, 4905, 4909, 4910, 4914, 4915, - 4919, 4920, 4930, 4942, 4943, 4956, 4964, 4982, 4991, 5003, - 5006, 5010, 5014, 5018, 5025, 5037, 5048, 5051, 5055, 5068, - 5078, 5088, 5098, 5108, 5118, 5128, 5138, 5148, 5158, 5168, - 5178, 5188, 5207, 5219, 5220, 5221, 5222, 5226, 5227, 5231, - 5232, 5242, 5251, 5264, 5265, 5269, 5273, 5281, 5285, 5289, - 5296, 5300, 5305, 5310, 5317, 5324, 5329, 5339, 5352, 5368, - 5369, 5374, 5375, 5379, 5380, 5390, 5400, 5409, 5427, 5448, - 5469, 5491, 5525, 5541, 5542, 5546, 5555, 5570, 5580, 5593, - 5594, 5606, 5615, 5633, 5658, 5676, 5691, 5692, 5696, 5697, - 5701, 5702, 5706, 5707, 5711, 5725, 5729, 5730, 5734, 5735, - 5736, 5737, 5738, 5748, 5760, 5761, 5772, 5795, 5827, 5828, - 5829, 5833, 5835, 5857, 5859, 5861, 5863, 5865, 5870, 5871, - 5875, 5876, 5880, 5892, 5893, 5897, 5906, 5910, 5914, 5919, - 5929, 5930, 5934, 5935, 5939, 5940, 5944, 5945, 5949, 5950, - 5951, 5955, 5959, 5960, 5961, 5965, 5966, 5971, 5972, 5999, - 6000, 6001, 6002, 6003, 6004, 6017, 6028, 6043, 6045, 6050, - 6055, 6057, 6062, 6073, 6074, 6075, 6076, 6087, 6106, 6118, - 6131, 6142, 6153, 6165, 6174, 6182, 6190, 6200, 6210, 6220, - 6230, 6240, 6251, 6261, 6274, 6277, 6278, 6281, 6285, 6292, - 6293, 6294, 6295, 6296, 6297, 6300, 6303, 6304, 6312, 6319, - 6320, 6323, 6325, 6336, 6348, 6360, 6372, 6386, 6387, 6403, - 6419, 6420, 6424, 6437, 6448, 6457, 6467, 6477, 6478, 6481, - 6482, 6485, 6486, 6487, 6490, 6504, 6509, 6520, 6530, 6543, - 6544, 6548, 6557, 6570, 6581, 6595, 6606, 6629, 6640, 6659, - 6670, 6681, 6692, 6703, 6714, 6725, 6736, 6747, 6758, 6769, - 6780, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, - 6804, 6805, 6806, 6807, 6817, 6818, 6819, 6820, 6821, 6825, - 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6837, 6838, 6839, - 6843, 6844, 6847, 6848, 6851, 6853, 6858, 6859, 6870, 6882, - 6883, 6884, 6894, 6903, 6912, 6921, 6930, 6939, 6948, 6957, - 6966, 6975, 6989, 6998, 7007, 7016, 7025, 7034, 7043, 7052, - 7064, 7065, 7079, 7090, 7101, 7112, 7123, 7134, 7145, 7156, - 7167, 7178, 7191, 7192, 7195, 7196, 7206, 7213, 7222, 7231, - 7240, 7249, 7258, 7267, 7276, 7285, 7294, 7303, 7312, 7321, - 7330, 7339, 7348, 7357, 7368, 7369, 7372, 7373, 7383, 7401, - 7417, 7445, 7447, 7449, 7451, 7459, 7469, 7470, 7473, 7481, - 7489, 7497, 7504, 7515, 7519, 7526, 7530, 7541, 7550, 7559, - 7568, 7577, 7586, 7595, 7604, 7613, 7622, 7631, 7640, 7649, - 7657, 7666, 7675, 7684, 7693, 7702, 7711, 7720, 7733, 7734, - 7738, 7739, 7744, 7745, 7755, 7769, 7780, 7793, 7794, 7797, - 7798, 7808, 7819, 7820, 7824, 7828, 7832, 7843, 7857, 7872, - 7890, 7891, 7892, 7893, 7894, 7895, 7907, 7939, 7974, 7975, - 7979, 7980, 7984, 7985, 7989, 7990, 7993, 7994, 7999, 8011, - 8030, 8035, 8040, 8047, 8048, 8051, 8052, 8055, 8056, 8059, - 8060, 8063, 8064, 8065, 8068, 8069, 8070, 8086, 8100, 8115, - 8129, 8146, 8147, 8150, 8151, 8155, 8156, 8160, 8161, 8166, - 8180, 8188, 8196, 8212, 8213, 8217, 8218, 8233, 8243, 8253, - 8263, 8273, 8286, 8287, 8288, 8289, 8290, 8296, 8300, 8315, - 8316, 8322, 8332, 8336, 8341, 8349, 8391, 8395, 8399, 8403, - 8411, 8412, 8416, 8428, 8429, 8434, 8435, 8440, 8441, 8448, - 8452, 8456, 8460, 8464, 8468, 8472, 8476, 8480, 8484, 8488, - 8492, 8496, 8500, 8504, 8508, 8513, 8520, 8524, 8528, 8532, - 8536, 8542, 8543, 8549, 8559, 8563, 8574, 8580, 8589, 8595, - 8596, 8600, 8601, 8605, 8606, 8609, 8622, 8626, 8641, 8650, - 8659, 8672, 8673, 8678, 8679, 8696, 8707, 8718, 8729, 8740, - 8751, 8765, 8776, 8790, 8801, 8815, 8823, 8825, 8827, 8832, - 8834, 8839, 8840, 8845, 8864, 8874, 8875, 8879, 8883, 8895, - 8907, 8919, 8933, 8934, 8935, 8939, 8952, 8953, 8963, 8976, - 8980, 8984, 8988, 8995, 9016, 9029, 9042, 9055, 9070, 9071, - 9074, 9075, 9076, 9086, 9096, 9114, 9124, 9134, 9144, 9154, - 9164, 9174, 9184, 9194, 9204, 9214, 9224, 9234, 9245, 9256, - 9266, 9276, 9286, 9296, 9306, 9316, 9327, 9338, 9349, 9360, - 9371, 9382, 9393, 9404, 9415, 9426, 9437, 9448, 9460, 9472, - 9484, 9496, 9508, 9520, 9531, 9542, 9554, 9566, 9577, 9588, - 9597, 9607, 9617, 9627, 9637, 9647, 9657, 9667, 9677, 9687, - 9702, 9703, 9706, 9707, 9717, 9727, 9737, 9747, 9758, 9768, - 9780, 9781, 9791, 9801, 9811, 9821, 9831, 9841, 9851, 9861, - 9871, 9881, 9891, 9901, 9911, 9921, 9931, 9941, 9951, 9961, - 9971, 9981, 9991, 10001, 10011, 10021, 10031, 10041, 10051, 10070, - 10080, 10081, 10084, 10086, 10092, 10093, 10094, 10095, 10096, 10108, - 10124, 10133, 10142, 10151, 10160, 10169, 10178, 10187, 10196, 10205, - 10214, 10223, 10232, 10241, 10250, 10259, 10268, 10277, 10286, 10295, - 10304, 10313, 10322, 10331, 10359, 10367, 10376, 10402, 10411, 10418, - 10424, 10451, 10462, 10471, 10479, 10481, 10503, 10511, 10521, 10531, - 10550, 10569, 10579, 10589, 10599, 10610, 10621, 10632, 10643, 10654, - 10672, 10681, 10698, 10716, 10717, 10718, 10723, 10729, 10738, 10739, - 10740, 10741, 10742, 10746, 10747, 10750, 10751, 10752, 10753, 10757, - 10758, 10759, 10771, 10782, 10783, 10786, 10796, 10803, 10823, 10832, - 10840, 10849, 10858, 10866, 10874, 10882, 10890, 10898, 10906, 10914, - 10925, 10933, 10944, 10945, 10946, 10950, 10953, 10956, 10959, 10962, - 10969, 10971, 10973, 10978, 10980, 10984, 10985, 10986, 10998, 11012, - 11026, 11045, 11067, 11068, 11069, 11070, 11080, 11097, 11108, 11109, - 11113, 11114, 11118, 11122, 11126, 11144, 11145, 11146, 11147, 11148, - 11149, 11150, 11157, 11158, 11169, 11177, 11185, 11194, 11204, 11222, - 11231, 11240, 11249, 11261, 11265, 11276, 11288, 11306, 11313, 11330, - 11344, 11354, 11363, 11372, 11382, 11394, 11406, 11417, 11418, 11429, - 11440, 11452, 11464, 11476, 11488, 11498, 11511, 11512, 11526, 11551, - 11563, 11572, 11584, 11598, 11599, 11611, 11632, 11643, 11655, 11667, - 11671, 11678, 11679, 11683, 11690, 11691, 11695, 11696, 11697, 11701, - 11702, 11706, 11707, 11710, 11711, 11714, 11715, 11719, 11720, 11724, - 11731, 11733, 11738, 11739, 11752, 11760, 11771, 11779, 11790, 11791, - 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11809, 11820, - 11821, 11825, 11826, 11827, 11828, 11829, 11839, 11847, 11865, 11885, - 11886, 11896, 11903, 11910, 11917, 11934, 11952, 11956, 11964, 11970, - 11977, 11983, 11990, 11999, 12000, 12004, 12006, 12011, 12022, 12032, - 12042, 12048, 12057, 12066, 12072, 12073, 12084, 12099, 12100, 12111, - 12122, 12123, 12126, 12127, 12128, 12129, 12130, 12131, 12132, 12133, - 12136, 12137, 12141, 12142, 12143, 12154, 12173, 12174, 12178, 12183, - 12207, 12218, 12219, 12231, 12249, 12250, 12254, 12261, 12268, 12275, - 12285, 12298, 12299, 12303, 12316, 12329, 12338, 12347, 12356, 12365, - 12377, 12389, 12401, 12404, 12405, 12406, 12407, 12408, 12409, 12412, - 12413, 12414, 12462, 12463, 12467, 12468, 12483, 12484, 12491, 12499, - 12507, 12515, 12523, 12531, 12542, 12543, 12575, 12591, 12608, 12609, - 12628, 12632, 12636, 12651, 12658, 12665, 12675, 12676, 12679, 12695, - 12696, 12697, 12701, 12711, 12722, 12728, 12740, 12753, 12759, 12760, - 12764, 12776, 12784, 12789, 12794, 12799, 12804, 12812, 12820, 12825, - 12830, 12837, 12838, 12842, 12843, 12844, 12851, 12852, 12856, 12857, - 12861, 12862, 12866, 12867, 12871, 12875, 12876, 12879, 12888, 12901, - 12906, 12911, 12915, 12927, 12928, 12932, 12941, 12957, 12966, 12975, - 12984, 12996, 12999, 13004, 13005, 13013, 13033, 13034, 13036, 13041, - 13042, 13046, 13047, 13050, 13051, 13076, 13085, 13095, 13096, 13100, - 13101, 13102, 13103, 13104, 13108, 13121, 13128, 13135, 13142, 13143, - 13147, 13148, 13152, 13153, 13157, 13158, 13162, 13174, 13175, 13176, - 13177, 13181, 13182, 13192, 13199, 13218, 13219, 13223, 13224, 13230, - 13235, 13244, 13252, 13261, 13268, 13276, 13312, 13338, 13342, 13368, - 13372, 13386, 13407, 13429, 13442, 13459, 13465, 13470, 13476, 13483, - 13484, 13494, 13500, 13508, 13512, 13516, 13523, 13531, 13536, 13537, - 13538, 13539, 13543, 13544, 13559, 13563, 13571, 13578, 13585, 13592, - 13599, 13610, 13611, 13624, 13628, 13636, 13650, 13664, 13665, 13680, - 13691, 13704, 13709, 13710, 13713, 13714, 13717, 13718, 13723, 13724, - 13729, 13730, 13739, 13744, 13745, 13749, 13753, 13759, 13784, 13795, - 13809, 13810, 13814, 13828, 13885, 13899, 13901, 13906, 13908, 13910, - 13912, 13917, 13919, 13924, 13932, 13952, 13957, 13964, 13969, 13975, - 13980, 13989, 13991, 13994, 13998, 13999, 14000, 14001, 14002, 14003, - 14008, 14028, 14029, 14030, 14031, 14042, 14048, 14056, 14057, 14063, - 14068, 14073, 14078, 14083, 14088, 14093, 14098, 14104, 14110, 14116, - 14123, 14145, 14154, 14158, 14166, 14170, 14178, 14190, 14211, 14215, - 14221, 14225, 14238, 14246, 14256, 14258, 14260, 14262, 14264, 14266, - 14271, 14272, 14279, 14288, 14296, 14305, 14316, 14324, 14325, 14326, - 14330, 14332, 14334, 14336, 14338, 14340, 14342, 14347, 14352, 14358, - 14366, 14371, 14378, 14385, 14389, 14393, 14429, 14430, 14432, 14441, - 14457, 14459, 14461, 14463, 14465, 14467, 14469, 14471, 14473, 14475, - 14477, 14479, 14481, 14483, 14486, 14488, 14491, 14493, 14495, 14497, - 14500, 14505, 14514, 14519, 14528, 14533, 14542, 14547, 14557, 14566, - 14575, 14584, 14603, 14612, 14621, 14630, 14639, 14656, 14665, 14674, - 14683, 14692, 14701, 14710, 14714, 14718, 14726, 14734, 14742, 14750, - 14771, 14794, 14806, 14813, 14829, 14834, 14840, 14847, 14854, 14862, - 14870, 14896, 14898, 14900, 14902, 14904, 14906, 14908, 14910, 14912, - 14914, 14916, 14918, 14920, 14922, 14924, 14926, 14928, 14930, 14932, - 14936, 14940, 14945, 14961, 14962, 14963, 14980, 14993, 14995, 14997, - 15009, 15034, 15046, 15058, 15066, 15077, 15088, 15098, 15104, 15113, - 15123, 15133, 15146, 15156, 15187, 15223, 15234, 15235, 15242, 15249, - 15253, 15257, 15261, 15265, 15269, 15273, 15277, 15281, 15285, 15289, - 15293, 15297, 15301, 15305, 15309, 15311, 15318, 15325, 15332, 15339, - 15350, 15364, 15374, 15385, 15401, 15411, 15418, 15425, 15432, 15436, - 15444, 15453, 15462, 15466, 15470, 15474, 15478, 15482, 15491, 15495, - 15505, 15509, 15513, 15518, 15533, 15535, 15539, 15541, 15543, 15546, - 15549, 15552, 15553, 15556, 15564, 15574, 15575, 15578, 15579, 15580, - 15585, 15589, 15593, 15597, 15604, 15605, 15613, 15614, 15618, 15619, - 15627, 15628, 15632, 15633, 15638, 15647, 15649, 15664, 15667, 15695, - 15696, 15699, 15700, 15708, 15716, 15724, 15733, 15743, 15761, 15807, - 15816, 15825, 15834, 15843, 15855, 15856, 15857, 15858, 15859, 15873, - 15874, 15875, 15878, 15879, 15882, 15885, 15886, 15887, 15890, 15891, - 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 15902, 15903, - 15904, 15905, 15908, 15910, 15915, 15917, 15922, 15924, 15926, 15928, - 15930, 15932, 15944, 15948, 15955, 15959, 15965, 15969, 15979, 15991, - 15992, 15995, 15996, 15999, 16003, 16007, 16013, 16014, 16019, 16023, - 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16044, 16045, - 16046, 16047, 16052, 16057, 16066, 16087, 16091, 16096, 16107, 16124, - 16130, 16131, 16132, 16135, 16143, 16153, 16168, 16169, 16173, 16185, - 16186, 16189, 16190, 16193, 16197, 16204, 16208, 16212, 16221, 16233, - 16234, 16238, 16239, 16243, 16244, 16247, 16248, 16258, 16259, 16263, - 16264, 16267, 16275, 16283, 16291, 16314, 16315, 16326, 16330, 16336, - 16338, 16343, 16345, 16347, 16357, 16359, 16370, 16374, 16378, 16382, - 16386, 16395, 16403, 16435, 16442, 16474, 16478, 16485, 16493, 16497, - 16503, 16510, 16514, 16518, 16524, 16525, 16527, 16528, 16529, 16533, - 16574, 16602, 16606, 16610, 16616, 16618, 16632, 16668, 16681, 16682, - 16685, 16686, 16703, 16704, 16705, 16710, 16711, 16712, 16717, 16718, - 16719, 16720, 16726, 16727, 16728, 16729, 16730, 16736, 16737, 16757, - 16758, 16759, 16760, 16761, 16762, 16763, 16764, 16765, 16766, 16767, - 16768, 16769, 16770, 16771, 16772, 16773, 16774, 16775, 16776, 16777, - 16778, 16779, 16780, 16781, 16782, 16783, 16784, 16785, 16786, 16787, - 16788, 16789, 16790, 16791, 16792, 16793, 16794, 16795, 16796, 16797, - 16798, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16806, 16807, - 16808, 16809, 16810, 16811, 16812, 16813, 16814, 16815, 16816, 16817, - 16818, 16819, 16820, 16821, 16822, 16823, 16824, 16825, 16826, 16827, - 16828, 16829, 16830, 16831, 16832, 16833, 16834, 16835, 16836, 16837, - 16838, 16839, 16840, 16841, 16842, 16843, 16844, 16845, 16846, 16847, - 16848, 16849, 16850, 16851, 16852, 16853, 16854, 16855, 16856, 16857, - 16858, 16859, 16860, 16861, 16862, 16863, 16864, 16865, 16866, 16867, - 16868, 16869, 16870, 16871, 16872, 16873, 16874, 16875, 16876, 16877, - 16878, 16879, 16880, 16881, 16882, 16883, 16884, 16885, 16886, 16887, - 16888, 16889, 16890, 16891, 16892, 16893, 16894, 16895, 16896, 16897, - 16898, 16899, 16900, 16901, 16902, 16903, 16904, 16905, 16906, 16907, - 16908, 16909, 16910, 16911, 16912, 16913, 16914, 16915, 16916, 16917, - 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16926, 16927, - 16928, 16929, 16930, 16931, 16932, 16933, 16934, 16935, 16936, 16937, - 16938, 16939, 16940, 16941, 16942, 16943, 16944, 16945, 16946, 16947, - 16948, 16949, 16950, 16951, 16952, 16953, 16954, 16955, 16956, 16957, - 16958, 16959, 16960, 16961, 16962, 16963, 16964, 16965, 16966, 16967, - 16968, 16969, 16970, 16971, 16972, 16973, 16974, 16975, 16976, 16977, - 16978, 16979, 16980, 16981, 16982, 16983, 16984, 16985, 16986, 16987, - 16988, 16989, 16990, 16991, 16992, 16993, 16994, 16995, 16996, 16997, - 16998, 16999, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, - 17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 17016, 17017, - 17018, 17019, 17020, 17021, 17022, 17023, 17024, 17025, 17026, 17027, - 17028, 17029, 17030, 17031, 17032, 17033, 17034, 17035, 17036, 17037, - 17038, 17039, 17040, 17041, 17042, 17043, 17044, 17045, 17046, 17047, - 17048, 17049, 17050, 17051, 17052, 17053, 17054, 17055, 17056, 17057, - 17058, 17059, 17060, 17061, 17062, 17063, 17064, 17065, 17079, 17080, - 17081, 17082, 17083, 17084, 17085, 17086, 17087, 17088, 17089, 17090, - 17091, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, - 17101, 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17110, - 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17118, 17119, 17120, - 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17143, - 17144, 17145, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, - 17154, 17155, 17156, 17157, 17158, 17159, 17160, 17161, 17162, 17163, - 17164, 17165, 17175, 17176, 17177, 17178, 17179, 17180, 17181, 17182, - 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, 17192, - 17193, 17194, 17195, 17196, 17197, 17198, 17199, 17200, 17201, 17202, - 17203, 17204, 17205, 17206, 17207, 17208, 17209, 17210, 17211, 17212, - 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17221, 17222, - 17223, 17224, 17225, 17226, 17227, 17228, 17229, 17230, 17231, 17232, - 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17240, 17241, 17242, - 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17264, - 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17273, 17274, - 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17283, 17284, - 17285, 17286, 17287, 17288, 17289, 17290, 17291, 17292, 17293, 17294, - 17295, 17296, 17297, 17298, 17299, 17300, 17301, 17302, 17303, 17304, - 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17313, 17314, - 17315, 17316, 17317, 17318, 17319, 17320, 17321, 17322, 17323, 17324, - 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17332, 17333, 17334, - 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, - 17345, 17346, 17347, 17348, 17349, 17350, 17351, 17352, 17353, 17354, - 17355, 17356, 17357, 17358, 17359, 17360, 17361, 17362, 17363, 17364, - 17365, 17366, 17367, 17368, 17369, 17370, 17371, 17372, 17373, 17374, + 0, 889, 889, 894, 898, 903, 911, 919, 939, 951, + 965, 966, 970, 971, 972, 973, 974, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, + 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, + 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, + 1088, 1089, 1090, 1091, 1092, 1093, 1095, 1102, 1103, 1107, + 1108, 1112, 1113, 1117, 1118, 1119, 1128, 1144, 1156, 1157, + 1158, 1167, 1168, 1172, 1173, 1177, 1182, 1187, 1191, 1201, + 1211, 1219, 1223, 1227, 1232, 1236, 1284, 1286, 1290, 1294, + 1298, 1302, 1316, 1335, 1344, 1356, 1357, 1361, 1370, 1379, + 1388, 1410, 1418, 1426, 1434, 1442, 1450, 1468, 1487, 1499, + 1500, 1511, 1522, 1533, 1549, 1568, 1575, 1583, 1584, 1585, + 1586, 1587, 1588, 1602, 1609, 1616, 1626, 1635, 1644, 1648, + 1657, 1666, 1674, 1685, 1686, 1695, 1707, 1715, 1724, 1732, + 1744, 1753, 1761, 1770, 1778, 1786, 1796, 1807, 1808, 1812, + 1813, 1816, 1818, 1820, 1824, 1825, 1826, 1827, 1831, 1832, + 1833, 1839, 1851, 1855, 1859, 1863, 1880, 1888, 1889, 1890, + 1894, 1895, 1896, 1900, 1901, 1905, 1909, 1910, 1918, 1926, + 1937, 1945, 1956, 1957, 1962, 1963, 1968, 1975, 1982, 1989, + 1996, 2007, 2018, 2019, 2023, 2024, 2032, 2048, 2055, 2062, + 2069, 2076, 2096, 2106, 2116, 2126, 2136, 2148, 2160, 2170, + 2180, 2190, 2202, 2214, 2224, 2234, 2244, 2254, 2264, 2274, + 2286, 2298, 2308, 2321, 2322, 2327, 2341, 2354, 2370, 2387, + 2397, 2407, 2417, 2427, 2437, 2446, 2455, 2464, 2474, 2484, + 2500, 2510, 2520, 2530, 2540, 2557, 2567, 2577, 2587, 2598, + 2612, 2628, 2638, 2647, 2663, 2672, 2683, 2694, 2702, 2711, + 2720, 2728, 2736, 2745, 2754, 2763, 2771, 2779, 2788, 2796, + 2804, 2813, 2822, 2831, 2840, 2849, 2858, 2869, 2877, 2886, + 2895, 2904, 2913, 2922, 2931, 2939, 2947, 2955, 2962, 2973, + 2974, 2978, 2987, 2991, 2992, 2996, 3004, 3012, 3020, 3031, + 3034, 3035, 3039, 3040, 3045, 3049, 3053, 3058, 3065, 3067, + 3072, 3076, 3080, 3091, 3099, 3152, 3165, 3179, 3191, 3198, + 3202, 3216, 3229, 3230, 3235, 3245, 3256, 3267, 3294, 3301, + 3335, 3371, 3394, 3395, 3399, 3400, 3409, 3410, 3411, 3414, + 3415, 3420, 3421, 3425, 3429, 3433, 3437, 3441, 3445, 3449, + 3453, 3457, 3461, 3465, 3469, 3473, 3482, 3486, 3490, 3494, + 3498, 3499, 3504, 3508, 3515, 3522, 3523, 3524, 3525, 3526, + 3530, 3534, 3542, 3553, 3573, 3593, 3614, 3635, 3656, 3690, + 3691, 3692, 3693, 3694, 3701, 3708, 3709, 3713, 3714, 3718, + 3719, 3723, 3727, 3734, 3738, 3745, 3746, 3747, 3751, 3752, + 3755, 3779, 3798, 3820, 3821, 3825, 3826, 3830, 3831, 3835, + 3836, 3840, 3841, 3845, 3853, 3854, 3855, 3887, 3895, 3903, + 3916, 3928, 3941, 3951, 3961, 3985, 4005, 4006, 4007, 4011, + 4012, 4031, 4039, 4047, 4055, 4067, 4079, 4080, 4081, 4085, + 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4103, + 4111, 4115, 4129, 4147, 4163, 4180, 4196, 4216, 4239, 4240, + 4244, 4245, 4249, 4250, 4253, 4259, 4260, 4263, 4267, 4275, + 4280, 4286, 4287, 4291, 4296, 4303, 4304, 4308, 4318, 4328, + 4336, 4345, 4358, 4370, 4377, 4385, 4393, 4401, 4409, 4419, + 4420, 4424, 4425, 4428, 4440, 4441, 4444, 4455, 4466, 4480, + 4481, 4486, 4487, 4488, 4491, 4492, 4493, 4494, 4497, 4498, + 4501, 4502, 4505, 4525, 4538, 4560, 4561, 4564, 4570, 4576, + 4593, 4602, 4624, 4638, 4655, 4671, 4672, 4673, 4685, 4699, + 4716, 4730, 4731, 4743, 4764, 4775, 4789, 4798, 4810, 4811, + 4814, 4815, 4818, 4819, 4822, 4826, 4830, 4834, 4838, 4842, + 4846, 4850, 4854, 4858, 4862, 4867, 4871, 4875, 4881, 4882, + 4886, 4887, 4888, 4895, 4898, 4899, 4911, 4927, 4943, 4944, + 4952, 4953, 4957, 4958, 4962, 4963, 4967, 4968, 4972, 4973, + 4983, 4995, 4996, 5009, 5017, 5035, 5044, 5056, 5059, 5063, + 5067, 5071, 5078, 5090, 5101, 5104, 5108, 5121, 5131, 5141, + 5151, 5161, 5171, 5181, 5191, 5201, 5211, 5221, 5231, 5241, + 5260, 5272, 5273, 5274, 5275, 5279, 5280, 5284, 5285, 5295, + 5304, 5317, 5318, 5322, 5326, 5334, 5338, 5342, 5349, 5353, + 5358, 5363, 5370, 5377, 5382, 5392, 5405, 5421, 5422, 5427, + 5428, 5432, 5433, 5443, 5453, 5462, 5480, 5501, 5522, 5544, + 5578, 5594, 5595, 5599, 5608, 5623, 5633, 5646, 5647, 5659, + 5668, 5686, 5711, 5729, 5744, 5745, 5749, 5750, 5754, 5755, + 5759, 5760, 5764, 5778, 5782, 5783, 5787, 5788, 5789, 5790, + 5791, 5801, 5813, 5814, 5825, 5848, 5880, 5881, 5882, 5886, + 5888, 5910, 5912, 5914, 5916, 5918, 5923, 5924, 5928, 5929, + 5933, 5945, 5946, 5950, 5959, 5963, 5967, 5972, 5982, 5983, + 5987, 5988, 5992, 5993, 5997, 5998, 6002, 6003, 6004, 6008, + 6012, 6013, 6014, 6018, 6019, 6024, 6025, 6052, 6053, 6054, + 6055, 6056, 6057, 6070, 6081, 6096, 6098, 6103, 6108, 6110, + 6115, 6126, 6127, 6128, 6129, 6140, 6159, 6171, 6184, 6195, + 6206, 6218, 6227, 6235, 6243, 6253, 6263, 6273, 6283, 6293, + 6304, 6314, 6327, 6330, 6331, 6334, 6338, 6345, 6346, 6347, + 6348, 6349, 6350, 6353, 6356, 6357, 6365, 6372, 6373, 6376, + 6378, 6389, 6401, 6413, 6425, 6439, 6440, 6456, 6472, 6473, + 6477, 6490, 6501, 6510, 6520, 6530, 6531, 6534, 6535, 6538, + 6539, 6540, 6543, 6557, 6562, 6573, 6583, 6596, 6597, 6601, + 6610, 6623, 6634, 6648, 6659, 6682, 6693, 6712, 6723, 6734, + 6745, 6756, 6767, 6778, 6789, 6800, 6811, 6822, 6833, 6848, + 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, + 6859, 6860, 6870, 6871, 6872, 6873, 6874, 6878, 6879, 6880, + 6881, 6882, 6883, 6884, 6885, 6890, 6891, 6892, 6896, 6897, + 6900, 6901, 6904, 6906, 6911, 6912, 6923, 6935, 6936, 6937, + 6947, 6956, 6965, 6974, 6983, 6992, 7001, 7010, 7019, 7028, + 7042, 7051, 7060, 7069, 7078, 7087, 7096, 7105, 7117, 7118, + 7132, 7143, 7154, 7165, 7176, 7187, 7198, 7209, 7220, 7231, + 7244, 7245, 7248, 7249, 7259, 7266, 7275, 7284, 7293, 7302, + 7311, 7320, 7329, 7338, 7347, 7356, 7365, 7374, 7383, 7392, + 7401, 7410, 7421, 7422, 7425, 7426, 7436, 7454, 7470, 7498, + 7500, 7502, 7504, 7512, 7522, 7523, 7526, 7534, 7542, 7550, + 7557, 7568, 7572, 7579, 7583, 7594, 7603, 7612, 7621, 7630, + 7639, 7648, 7657, 7666, 7675, 7684, 7693, 7702, 7710, 7719, + 7728, 7737, 7746, 7755, 7764, 7773, 7786, 7787, 7791, 7792, + 7797, 7798, 7808, 7819, 7833, 7845, 7863, 7864, 7868, 7875, + 7876, 7877, 7880, 7881, 7891, 7902, 7903, 7907, 7911, 7915, + 7926, 7940, 7955, 7973, 7974, 7975, 7976, 7977, 7978, 7990, + 8022, 8057, 8058, 8062, 8063, 8066, 8067, 8072, 8084, 8103, + 8108, 8113, 8120, 8121, 8124, 8125, 8128, 8129, 8133, 8134, + 8135, 8138, 8139, 8140, 8156, 8170, 8185, 8199, 8216, 8217, + 8220, 8221, 8225, 8226, 8230, 8231, 8236, 8250, 8258, 8266, + 8282, 8283, 8287, 8288, 8303, 8313, 8323, 8333, 8343, 8356, + 8357, 8358, 8359, 8360, 8366, 8370, 8385, 8386, 8392, 8402, + 8406, 8411, 8419, 8461, 8465, 8469, 8473, 8481, 8482, 8486, + 8498, 8499, 8504, 8505, 8510, 8511, 8518, 8522, 8526, 8530, + 8534, 8538, 8542, 8546, 8550, 8554, 8558, 8562, 8566, 8570, + 8574, 8578, 8583, 8590, 8594, 8598, 8602, 8606, 8612, 8613, + 8619, 8629, 8633, 8644, 8650, 8659, 8665, 8666, 8670, 8671, + 8675, 8676, 8679, 8692, 8696, 8711, 8720, 8729, 8742, 8743, + 8748, 8749, 8766, 8777, 8788, 8799, 8810, 8821, 8835, 8846, + 8860, 8871, 8885, 8893, 8895, 8897, 8902, 8904, 8909, 8910, + 8915, 8934, 8944, 8945, 8949, 8953, 8965, 8977, 8989, 9003, + 9004, 9005, 9009, 9022, 9023, 9033, 9046, 9050, 9054, 9058, + 9065, 9087, 9100, 9113, 9128, 9129, 9132, 9133, 9136, 9137, + 9147, 9157, 9175, 9185, 9195, 9205, 9215, 9225, 9235, 9245, + 9255, 9265, 9275, 9285, 9295, 9306, 9317, 9327, 9337, 9347, + 9357, 9367, 9377, 9388, 9399, 9410, 9421, 9432, 9443, 9454, + 9465, 9476, 9487, 9498, 9509, 9521, 9533, 9545, 9557, 9569, + 9581, 9592, 9603, 9615, 9627, 9638, 9649, 9658, 9668, 9678, + 9688, 9698, 9708, 9718, 9728, 9738, 9748, 9763, 9764, 9767, + 9768, 9778, 9788, 9798, 9808, 9819, 9829, 9841, 9842, 9852, + 9862, 9872, 9882, 9892, 9902, 9912, 9922, 9932, 9942, 9952, + 9962, 9972, 9982, 9992, 10002, 10012, 10022, 10032, 10042, 10052, + 10062, 10072, 10082, 10092, 10102, 10112, 10131, 10141, 10142, 10145, + 10147, 10153, 10154, 10155, 10156, 10157, 10169, 10185, 10194, 10203, + 10212, 10221, 10230, 10239, 10248, 10257, 10266, 10275, 10284, 10293, + 10302, 10311, 10320, 10329, 10338, 10347, 10356, 10365, 10374, 10383, + 10392, 10420, 10428, 10437, 10463, 10472, 10479, 10485, 10512, 10523, + 10532, 10540, 10542, 10564, 10572, 10582, 10592, 10611, 10630, 10640, + 10650, 10660, 10671, 10682, 10693, 10704, 10715, 10733, 10742, 10759, + 10777, 10778, 10779, 10784, 10790, 10799, 10800, 10801, 10802, 10803, + 10807, 10808, 10811, 10812, 10813, 10814, 10818, 10819, 10820, 10832, + 10843, 10844, 10847, 10857, 10864, 10884, 10893, 10901, 10910, 10919, + 10927, 10935, 10943, 10951, 10959, 10967, 10975, 10986, 10994, 11005, + 11006, 11007, 11011, 11014, 11017, 11020, 11023, 11030, 11032, 11034, + 11039, 11041, 11045, 11046, 11047, 11059, 11073, 11087, 11106, 11128, + 11129, 11130, 11131, 11141, 11158, 11169, 11170, 11174, 11175, 11179, + 11183, 11187, 11205, 11206, 11207, 11208, 11209, 11210, 11211, 11218, + 11219, 11230, 11238, 11246, 11255, 11265, 11283, 11292, 11301, 11310, + 11322, 11326, 11337, 11349, 11367, 11374, 11391, 11405, 11415, 11424, + 11433, 11443, 11455, 11467, 11478, 11479, 11490, 11501, 11513, 11525, + 11537, 11549, 11559, 11572, 11573, 11587, 11612, 11624, 11633, 11645, + 11659, 11660, 11672, 11693, 11704, 11716, 11728, 11732, 11739, 11740, + 11744, 11751, 11752, 11753, 11757, 11758, 11759, 11763, 11764, 11768, + 11769, 11772, 11773, 11776, 11777, 11781, 11782, 11786, 11793, 11795, + 11800, 11801, 11814, 11822, 11833, 11841, 11852, 11853, 11854, 11855, + 11856, 11857, 11858, 11859, 11860, 11861, 11871, 11882, 11883, 11887, + 11888, 11889, 11890, 11891, 11901, 11909, 11927, 11947, 11948, 11958, + 11965, 11972, 11979, 11996, 12014, 12018, 12026, 12032, 12039, 12045, + 12052, 12061, 12062, 12066, 12068, 12073, 12084, 12094, 12104, 12110, + 12119, 12128, 12134, 12135, 12146, 12161, 12162, 12173, 12184, 12185, + 12188, 12189, 12190, 12191, 12192, 12193, 12194, 12195, 12198, 12199, + 12203, 12204, 12205, 12216, 12235, 12236, 12240, 12245, 12269, 12280, + 12281, 12293, 12311, 12312, 12316, 12323, 12330, 12337, 12347, 12360, + 12361, 12365, 12378, 12391, 12400, 12409, 12418, 12427, 12439, 12451, + 12463, 12466, 12467, 12468, 12469, 12470, 12471, 12474, 12475, 12476, + 12524, 12525, 12529, 12530, 12545, 12546, 12553, 12561, 12569, 12577, + 12585, 12593, 12604, 12605, 12637, 12653, 12670, 12671, 12690, 12694, + 12698, 12713, 12720, 12727, 12737, 12738, 12741, 12757, 12758, 12759, + 12763, 12773, 12784, 12790, 12802, 12815, 12821, 12822, 12826, 12838, + 12846, 12851, 12856, 12861, 12866, 12874, 12882, 12887, 12892, 12899, + 12900, 12904, 12905, 12906, 12913, 12914, 12918, 12919, 12923, 12924, + 12928, 12929, 12933, 12937, 12938, 12941, 12950, 12963, 12968, 12973, + 12977, 12989, 12990, 12994, 13003, 13019, 13028, 13037, 13046, 13058, + 13061, 13066, 13067, 13075, 13095, 13096, 13098, 13103, 13104, 13108, + 13109, 13112, 13113, 13138, 13147, 13157, 13158, 13162, 13163, 13164, + 13165, 13166, 13170, 13183, 13190, 13197, 13204, 13205, 13209, 13210, + 13214, 13215, 13219, 13220, 13224, 13236, 13237, 13238, 13239, 13243, + 13244, 13254, 13261, 13280, 13281, 13285, 13286, 13292, 13297, 13306, + 13314, 13323, 13330, 13338, 13347, 13356, 13360, 13386, 13390, 13404, + 13425, 13447, 13460, 13477, 13483, 13488, 13494, 13501, 13502, 13512, + 13518, 13526, 13530, 13534, 13541, 13549, 13554, 13555, 13556, 13557, + 13561, 13562, 13577, 13581, 13589, 13596, 13603, 13610, 13617, 13628, + 13629, 13642, 13646, 13654, 13668, 13682, 13683, 13698, 13709, 13722, + 13727, 13728, 13731, 13732, 13735, 13736, 13741, 13742, 13747, 13748, + 13757, 13762, 13763, 13767, 13771, 13777, 13802, 13813, 13827, 13828, + 13832, 13846, 13903, 13917, 13919, 13924, 13926, 13928, 13930, 13935, + 13937, 13942, 13950, 13970, 13975, 13982, 13987, 13993, 13998, 14007, + 14009, 14012, 14016, 14017, 14018, 14019, 14020, 14021, 14026, 14046, + 14047, 14048, 14049, 14060, 14066, 14074, 14075, 14081, 14086, 14091, + 14096, 14101, 14106, 14111, 14116, 14122, 14128, 14134, 14141, 14163, + 14172, 14176, 14184, 14188, 14196, 14208, 14229, 14233, 14239, 14243, + 14256, 14264, 14274, 14276, 14278, 14280, 14282, 14284, 14289, 14290, + 14297, 14306, 14314, 14323, 14334, 14342, 14343, 14344, 14348, 14350, + 14352, 14354, 14356, 14358, 14360, 14365, 14370, 14376, 14384, 14389, + 14396, 14403, 14407, 14411, 14447, 14448, 14450, 14459, 14475, 14477, + 14479, 14481, 14483, 14485, 14487, 14489, 14491, 14493, 14495, 14497, + 14499, 14501, 14504, 14506, 14509, 14511, 14513, 14515, 14518, 14523, + 14532, 14537, 14546, 14551, 14560, 14565, 14575, 14584, 14593, 14602, + 14621, 14630, 14639, 14648, 14657, 14674, 14683, 14692, 14701, 14710, + 14719, 14728, 14732, 14736, 14744, 14752, 14760, 14768, 14789, 14812, + 14824, 14831, 14847, 14852, 14858, 14865, 14872, 14880, 14888, 14906, + 14926, 14952, 14954, 14956, 14958, 14960, 14962, 14964, 14966, 14968, + 14970, 14972, 14974, 14976, 14978, 14980, 14982, 14984, 14986, 14988, + 14992, 14996, 15001, 15017, 15018, 15019, 15036, 15049, 15051, 15053, + 15065, 15090, 15102, 15114, 15122, 15133, 15144, 15154, 15160, 15169, + 15179, 15189, 15202, 15212, 15243, 15279, 15289, 15300, 15301, 15302, + 15309, 15316, 15320, 15324, 15328, 15332, 15336, 15340, 15344, 15348, + 15352, 15356, 15360, 15364, 15371, 15375, 15379, 15383, 15385, 15392, + 15399, 15406, 15413, 15424, 15438, 15448, 15459, 15475, 15485, 15492, + 15499, 15506, 15510, 15518, 15527, 15536, 15540, 15544, 15548, 15552, + 15556, 15565, 15569, 15579, 15583, 15587, 15592, 15603, 15609, 15623, + 15634, 15648, 15664, 15681, 15683, 15687, 15689, 15691, 15694, 15697, + 15700, 15701, 15704, 15712, 15722, 15723, 15726, 15727, 15728, 15731, + 15732, 15733, 15738, 15742, 15746, 15750, 15757, 15758, 15766, 15767, + 15771, 15772, 15780, 15781, 15785, 15786, 15791, 15800, 15802, 15817, + 15820, 15848, 15849, 15852, 15853, 15861, 15869, 15877, 15886, 15896, + 15914, 15960, 15969, 15978, 15987, 15996, 16008, 16009, 16010, 16011, + 16012, 16026, 16027, 16028, 16031, 16032, 16035, 16038, 16039, 16040, + 16043, 16044, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, + 16055, 16056, 16057, 16058, 16061, 16063, 16068, 16070, 16075, 16077, + 16079, 16081, 16083, 16085, 16097, 16101, 16108, 16112, 16118, 16122, + 16132, 16144, 16145, 16148, 16149, 16152, 16156, 16160, 16166, 16167, + 16172, 16176, 16186, 16187, 16188, 16189, 16190, 16191, 16192, 16193, + 16197, 16198, 16199, 16200, 16205, 16210, 16219, 16240, 16244, 16249, + 16260, 16277, 16283, 16284, 16285, 16288, 16296, 16306, 16321, 16322, + 16326, 16338, 16339, 16342, 16343, 16346, 16350, 16357, 16361, 16365, + 16374, 16386, 16387, 16391, 16392, 16396, 16397, 16400, 16401, 16406, + 16415, 16420, 16426, 16427, 16431, 16440, 16444, 16445, 16446, 16447, + 16448, 16453, 16454, 16455, 16456, 16457, 16461, 16463, 16473, 16476, + 16482, 16483, 16484, 16488, 16489, 16490, 16494, 16495, 16499, 16517, + 16537, 16538, 16547, 16548, 16552, 16553, 16556, 16564, 16572, 16580, + 16603, 16604, 16615, 16619, 16625, 16627, 16632, 16634, 16636, 16646, + 16648, 16659, 16663, 16667, 16671, 16675, 16684, 16692, 16724, 16731, + 16763, 16767, 16774, 16782, 16786, 16792, 16799, 16803, 16807, 16813, + 16814, 16816, 16817, 16818, 16822, 16863, 16891, 16895, 16899, 16905, + 16907, 16921, 16957, 16970, 16971, 16974, 16975, 16992, 16993, 16994, + 16999, 17000, 17001, 17006, 17007, 17008, 17009, 17015, 17016, 17017, + 17018, 17019, 17025, 17026, 17046, 17047, 17048, 17049, 17050, 17051, + 17052, 17053, 17054, 17055, 17056, 17057, 17058, 17059, 17060, 17061, + 17062, 17063, 17064, 17065, 17066, 17067, 17068, 17069, 17070, 17071, + 17072, 17073, 17074, 17075, 17076, 17077, 17078, 17079, 17080, 17081, + 17082, 17083, 17084, 17085, 17086, 17087, 17088, 17089, 17090, 17091, + 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, + 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17110, 17111, + 17112, 17113, 17114, 17115, 17116, 17117, 17118, 17119, 17120, 17121, + 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 17131, + 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17139, 17140, 17141, + 17142, 17143, 17144, 17145, 17146, 17147, 17148, 17149, 17150, 17151, + 17152, 17153, 17154, 17155, 17156, 17157, 17158, 17159, 17160, 17161, + 17162, 17163, 17164, 17165, 17166, 17167, 17168, 17169, 17170, 17171, + 17172, 17173, 17174, 17175, 17176, 17177, 17178, 17179, 17180, 17181, + 17182, 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, + 17192, 17193, 17194, 17195, 17196, 17197, 17198, 17199, 17200, 17201, + 17202, 17203, 17204, 17205, 17206, 17207, 17208, 17209, 17210, 17211, + 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17221, + 17222, 17223, 17224, 17225, 17226, 17227, 17228, 17229, 17230, 17231, + 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17240, 17241, + 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, + 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, + 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, + 17272, 17273, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, + 17282, 17283, 17284, 17285, 17286, 17287, 17288, 17289, 17290, 17291, + 17292, 17293, 17294, 17295, 17296, 17297, 17298, 17299, 17300, 17301, + 17302, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, + 17312, 17313, 17314, 17315, 17316, 17317, 17318, 17319, 17320, 17321, + 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, + 17332, 17333, 17334, 17335, 17336, 17337, 17338, 17339, 17340, 17341, + 17342, 17343, 17344, 17345, 17346, 17347, 17348, 17349, 17350, 17351, + 17352, 17353, 17354, 17355, 17356, 17357, 17358, 17359, 17360, 17374, 17375, 17376, 17377, 17378, 17379, 17380, 17381, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17391, 17392, 17393, 17394, 17395, 17396, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17414, 17415, 17416, 17417, 17418, 17419, 17420, 17421, 17422, 17423, 17424, - 17425, 17426, 17427, 17428, 17429, 17430, 17431, 17432, 17433, 17434, - 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, - 17445, 17446, 17447, 17448, 17449, 17450, 17451, 17452, 17453, 17454, - 17455, 17456, 17457, 17458, 17459, 17460, 17461, 17462, 17463, 17464, - 17465, 17466, 17467, 17468, 17469, 17470, 17471, 17472, 17473, 17474, - 17475, 17476, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, - 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17492, 17493, 17494, - 17495, 17496, 17497, 17498, 17499, 17500, 17501, 17502, 17503, 17504, - 17505, 17506, 17507, 17508, 17509, 17510, 17511, 17512, 17513, 17514, - 17515, 17516, 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, - 17525, 17526, 17527, 17528, 17529, 17530, 17531, 17532, 17533, 17534, - 17535, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, - 17545, 17546, 17547, 17548, 17549, 17550, 17551, 17552, 17553, 17554, - 17555, 17556, 17557, 17558, 17559, 17560, 17561, 17562, 17563, 17564, - 17565, 17566, 17567, 17568, 17569, 17570, 17571, 17572, 17573, 17574, - 17575, 17576, 17577, 17578, 17579, 17580, 17581, 17582, 17583, 17584, - 17585, 17586, 17587, 17588, 17589, 17590, 17591, 17592, 17593, 17594, - 17595, 17596, 17597, 17598, 17599, 17600, 17601, 17602, 17603, 17604, - 17605, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, - 17615, 17616, 17617, 17618, 17619, 17620, 17621, 17622, 17623, 17624, - 17625, 17626, 17627, 17628, 17629, 17630, 17631, 17632, 17633, 17634, - 17635, 17636, 17637, 17638, 17639, 17640, 17641, 17642, 17643, 17644, - 17645, 17646, 17647, 17648, 17649, 17650, 17651, 17652, 17653, 17654, - 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, - 17665, 17666, 17667, 17668, 17669, 17670, 17671, 17672, 17673, 17674, - 17675, 17676, 17677, 17678, 17679, 17680, 17681, 17682, 17683, 17684 + 17425, 17426, 17427, 17428, 17442, 17443, 17444, 17445, 17446, 17447, + 17448, 17449, 17450, 17451, 17452, 17453, 17454, 17455, 17456, 17457, + 17458, 17459, 17460, 17461, 17462, 17463, 17464, 17474, 17475, 17476, + 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, + 17487, 17488, 17489, 17490, 17491, 17492, 17493, 17494, 17495, 17496, + 17497, 17498, 17499, 17500, 17501, 17502, 17503, 17504, 17505, 17506, + 17507, 17508, 17509, 17510, 17511, 17512, 17513, 17514, 17515, 17516, + 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, 17525, 17526, + 17527, 17528, 17529, 17530, 17531, 17532, 17533, 17534, 17535, 17536, + 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, 17545, 17546, + 17547, 17548, 17549, 17550, 17551, 17564, 17565, 17566, 17567, 17568, + 17569, 17570, 17571, 17572, 17573, 17574, 17575, 17576, 17577, 17578, + 17579, 17580, 17581, 17582, 17583, 17584, 17585, 17586, 17587, 17588, + 17589, 17590, 17591, 17592, 17593, 17594, 17595, 17596, 17597, 17598, + 17599, 17600, 17601, 17602, 17603, 17604, 17605, 17606, 17607, 17608, + 17609, 17610, 17611, 17612, 17613, 17614, 17615, 17616, 17617, 17618, + 17619, 17620, 17621, 17622, 17623, 17624, 17625, 17626, 17627, 17628, + 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17638, + 17639, 17640, 17641, 17642, 17643, 17644, 17645, 17646, 17647, 17648, + 17649, 17650, 17651, 17652, 17653, 17654, 17655, 17656, 17657, 17658, + 17659, 17660, 17661, 17662, 17663, 17664, 17665, 17666, 17667, 17668, + 17669, 17670, 17671, 17672, 17673, 17674, 17675, 17676, 17677, 17678, + 17679, 17680, 17681, 17682, 17683, 17684, 17685, 17686, 17687, 17688, + 17689, 17690, 17691, 17692, 17693, 17694, 17695, 17696, 17697, 17698, + 17699, 17700, 17701, 17702, 17703, 17704, 17705, 17706, 17707, 17708, + 17709, 17710, 17711, 17712, 17713, 17714, 17715, 17716, 17717, 17718, + 17719, 17720, 17721, 17722, 17723, 17724, 17725, 17726, 17727, 17728, + 17729, 17730, 17731, 17732, 17733, 17734, 17735, 17736, 17737, 17738, + 17739, 17740, 17741, 17742, 17743, 17744, 17745, 17746, 17747, 17748, + 17749, 17750, 17751, 17752, 17753, 17754, 17755, 17756, 17757, 17758, + 17759, 17760, 17761, 17762, 17763, 17764, 17765, 17766, 17767, 17768, + 17769, 17770, 17771, 17772, 17773, 17774, 17775, 17776, 17777, 17778, + 17779, 17780, 17781, 17782, 17783, 17784, 17785, 17786, 17787, 17788, + 17789, 17790, 17791, 17792, 17793, 17794, 17795, 17796, 17797, 17798, + 17799, 17800, 17801, 17802, 17803, 17804, 17805, 17806, 17807, 17808, + 17809, 17810, 17811, 17812, 17813, 17814, 17815, 17816, 17817, 17818, + 17819, 17820, 17821, 17822, 17823, 17824, 17825, 17826, 17827, 17828, + 17829, 17830, 17831, 17832, 17833, 17834, 17835, 17836, 17837, 17838, + 17839, 17840, 17841, 17842, 17843, 17844, 17845, 17846, 17847, 17848, + 17849, 17850, 17851, 17852, 17853, 17854, 17855, 17856, 17857, 17858, + 17859, 17860, 17861, 17862, 17863, 17864, 17865, 17866, 17867, 17868, + 17869, 17870, 17871, 17872, 17873, 17874, 17875, 17876, 17877, 17878, + 17879, 17880, 17881, 17882, 17883, 17884, 17885, 17886, 17887, 17888, + 17889, 17890, 17891, 17892, 17893, 17894, 17895, 17896, 17897, 17898, + 17899, 17900, 17901, 17902, 17903, 17904, 17905, 17906, 17907, 17908, + 17909, 17910, 17911, 17912, 17913, 17914, 17915, 17916, 17917, 17918, + 17919, 17920, 17921, 17922, 17923, 17924, 17925, 17926, 17927, 17928, + 17929, 17930, 17931, 17932, 17933, 17934, 17935, 17936, 17937, 17938, + 17939, 17940, 17941, 17942, 17943, 17944, 17945, 17946, 17947, 17948, + 17949, 17950, 17951, 17952, 17953, 17954, 17955, 17956, 17957, 17958, + 17959, 17960, 17961, 17962, 17963, 17964, 17965, 17966, 17967, 17968, + 17969, 17970, 17971, 17972, 17973, 17974, 17975, 17976, 17977, 17978, + 17979, 17980, 17981, 17982, 17983, 17984, 17985, 17986, 17987, 17988, + 17989, 17990, 17991, 17992, 17993, 17994, 17995 }; #endif @@ -3542,16 +3607,16 @@ static const char *const yytname[] = "USCONST", "BCONST", "XCONST", "Op", "ICONST", "PARAM", "TYPECAST", "DOT_DOT", "COLON_EQUALS", "EQUALS_GREATER", "LESS_EQUALS", "GREATER_EQUALS", "NOT_EQUALS", "SQL_COMMENT", "C_COMMENT", "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", + "ABSENT", "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", @@ -3566,88 +3631,91 @@ static const char *const yytname[] = "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", "MATCHED", - "MATERIALIZED", "MAXVALUE", "MERGE", "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", "PARAMETER", "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_P", "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", + "FOREIGN", "FORMAT", "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", + "INDENT", "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", "JSON", "JSON_ARRAY", + "JSON_ARRAYAGG", "JSON_OBJECT", "JSON_OBJECTAGG", "KEY", "KEYS", "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", "MATCHED", "MATERIALIZED", "MAXVALUE", "MERGE", + "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", "PARAMETER", "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_P", "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", "SCALAR", + "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", "SYSTEM_USER", "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", + "FORMAT_LA", "NOT_LA", "NULLS_LA", "WITH_LA", "WITHOUT_LA", "MODE_TYPE_NAME", "MODE_PLPGSQL_EXPR", "MODE_PLPGSQL_ASSIGN1", "MODE_PLPGSQL_ASSIGN2", "MODE_PLPGSQL_ASSIGN3", "'<'", "'>'", "'='", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "UMINUS", "'['", "']'", "'('", "')'", "'.'", "';'", "','", "':'", "$accept", "parse_toplevel", - "stmtmulti", "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", + "stmtmulti", "toplevel_stmt", "stmt", "opt_single_name", + "opt_qualified_name", "opt_concurrently", "opt_drop_behavior", + "CallStmt", "CreateRoleStmt", "opt_with", "OptRoleList", + "AlterOptRoleList", "AlterOptRoleElem", "CreateOptRoleElem", + "CreateUserStmt", "AlterRoleStmt", "opt_in_database", "AlterRoleSetStmt", + "DropRoleStmt", "CreateGroupStmt", "AlterGroupStmt", "add_drop", + "CreateSchemaStmt", "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", + "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", "column_storage", + "opt_column_storage", "ColQualList", "ColConstraint", "ColConstraintElem", "opt_unique_null_treatment", "generated_when", "ConstraintAttr", "TableLikeClause", "TableLikeOptionList", "TableLikeOption", "TableConstraint", "ConstraintElem", "opt_no_inherit", @@ -3708,45 +3776,46 @@ static const char *const yytname[] = "RevokeStmt", "privileges", "privilege_list", "privilege", "parameter_name_list", "parameter_name", "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", + "RevokeRoleStmt", "grant_role_opt_list", "grant_role_opt", + "grant_role_opt_value", "opt_granted_by", "AlterDefaultPrivilegesStmt", + "DefACLOptionList", "DefACLOption", "DefACLAction", + "defacl_privilege_target", "IndexStmt", "opt_unique", + "access_method_clause", "index_params", "index_elem_options", + "index_elem", "opt_include", "index_including_params", "opt_collate", + "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", - "PublicationObjSpec", "pub_obj_list", "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", + "reindex_target_relation", "reindex_target_all", + "opt_reindex_option_list", "AlterTblSpcStmt", "RenameStmt", "opt_column", + "opt_set_data", "AlterObjectDependsStmt", "opt_no", + "AlterObjectSchemaStmt", "AlterOperatorStmt", "operator_def_list", + "operator_def_elem", "operator_def_arg", "AlterTypeStmt", + "AlterOwnerStmt", "CreatePublicationStmt", "PublicationObjSpec", + "pub_obj_list", "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", @@ -3799,27 +3868,35 @@ static const char *const yytname[] = "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", "Sconst", "SignedIconst", "RoleId", "RoleSpec", "role_list", - "PLpgSQL_Expr", "PLAssignStmt", "plassign_target", "plassign_equals", - "ColId", "type_function_name", "NonReservedWord", "ColLabel", - "BareColLabel", "unreserved_keyword", "col_name_keyword", - "type_func_name_keyword", "reserved_keyword", "bare_label_keyword", 0 + "xml_attribute_el", "document_or_content", "xml_indent_option", + "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", "json_value_expr", + "json_format_clause_opt", "json_encoding_clause_opt", + "json_output_clause_opt", "json_predicate_type_constraint", + "json_key_uniqueness_constraint_opt", "json_name_and_value_list", + "json_name_and_value", "json_object_constructor_null_clause_opt", + "json_array_constructor_null_clause_opt", "json_value_expr_list", + "json_aggregate_func", "json_array_aggregate_order_by_clause_opt", + "opt_target_list", "target_list", "target_el", "qualified_name_list", + "qualified_name", "name_list", "name", "attr_name", "file_name", + "func_name", "AexprConst", "Iconst", "Sconst", "SignedIconst", "RoleId", + "RoleSpec", "role_list", "PLpgSQL_Expr", "PLAssignStmt", + "plassign_target", "plassign_equals", "ColId", "type_function_name", + "NonReservedWord", "ColLabel", "BareColLabel", "unreserved_keyword", + "col_name_keyword", "type_func_name_keyword", "reserved_keyword", + "bare_label_keyword", 0 }; #endif @@ -3877,336 +3954,346 @@ static const yytype_uint16 yytoknum[] = 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, - 60, 62, 61, 43, 45, 42, 47, 37, 94, 745, - 91, 93, 40, 41, 46, 59, 44, 58 + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 60, 62, 61, 43, 45, 42, 47, + 37, 94, 758, 91, 93, 40, 41, 46, 59, 44, + 58 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 508, 509, 509, 509, 509, 509, 509, 510, 510, - 511, 511, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 513, 514, 515, - 515, 515, 516, 516, 517, 517, 518, 518, 518, 518, - 518, 518, 518, 518, 518, 518, 518, 519, 519, 519, - 519, 519, 519, 520, 521, 521, 522, 522, 523, 523, - 523, 523, 524, 524, 524, 524, 524, 524, 525, 526, - 527, 527, 528, 528, 528, 528, 529, 529, 530, 530, - 531, 531, 531, 531, 531, 531, 532, 532, 532, 533, - 533, 533, 534, 534, 534, 534, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 536, 536, 537, 537, 538, 538, 538, 539, 539, 539, - 539, 540, 540, 540, 540, 541, 541, 541, 541, 541, - 541, 541, 541, 542, 542, 542, 543, 543, 544, 545, - 545, 545, 545, 546, 546, 547, 547, 548, 548, 549, - 549, 549, 549, 549, 550, 551, 551, 552, 552, 553, - 554, 554, 554, 554, 554, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 555, 555, 556, 556, 557, 557, - 557, 558, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 560, 560, 561, 561, 561, 562, 562, 563, - 563, 564, 564, 564, 564, 565, 566, 566, 567, 567, - 568, 568, 568, 568, 569, 569, 570, 570, 570, 570, - 571, 571, 571, 571, 572, 573, 573, 574, 575, 575, - 576, 576, 576, 576, 577, 577, 578, 578, 579, 579, - 580, 580, 581, 581, 581, 582, 582, 583, 583, 584, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 585, 585, 586, 586, 587, 587, 588, 588, - 589, 590, 590, 590, 590, 590, 591, 591, 592, 593, - 593, 593, 593, 593, 593, 594, 594, 594, 594, 594, - 594, 594, 594, 595, 595, 596, 596, 597, 597, 598, - 598, 599, 599, 599, 600, 600, 601, 602, 602, 603, - 603, 604, 604, 605, 605, 606, 606, 606, 606, 607, - 607, 607, 607, 607, 607, 607, 607, 607, 608, 608, - 608, 609, 609, 610, 610, 610, 610, 611, 612, 612, - 612, 613, 613, 613, 613, 613, 613, 613, 613, 613, - 613, 614, 614, 615, 615, 615, 615, 615, 615, 615, - 616, 616, 617, 617, 618, 618, 619, 620, 620, 621, - 621, 621, 621, 622, 622, 623, 623, 624, 624, 625, - 625, 625, 625, 625, 626, 627, 628, 628, 628, 628, - 628, 629, 629, 630, 630, 631, 632, 632, 633, 633, - 633, 634, 634, 635, 635, 635, 636, 636, 636, 636, - 637, 637, 638, 638, 639, 640, 640, 641, 641, 642, - 642, 642, 643, 643, 644, 644, 645, 646, 646, 646, - 647, 647, 648, 649, 649, 650, 651, 651, 652, 652, - 653, 653, 654, 654, 655, 655, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, - 657, 657, 658, 658, 658, 658, 659, 659, 660, 660, - 661, 661, 662, 662, 663, 663, 664, 664, 665, 665, - 666, 666, 667, 668, 668, 669, 669, 670, 670, 671, - 671, 672, 672, 672, 672, 673, 674, 674, 675, 676, - 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 677, 678, 678, 678, 678, 679, 679, 680, - 680, 681, 681, 682, 682, 683, 683, 684, 685, 685, - 686, 686, 686, 686, 687, 688, 689, 690, 690, 691, - 691, 692, 692, 693, 693, 694, 694, 694, 695, 695, - 695, 695, 696, 697, 697, 698, 698, 699, 699, 700, - 700, 701, 701, 702, 703, 704, 705, 705, 706, 706, - 707, 707, 708, 708, 709, 709, 710, 710, 711, 711, - 711, 711, 711, 712, 713, 713, 714, 714, 715, 715, - 715, 716, 716, 717, 717, 717, 717, 717, 718, 718, - 719, 719, 720, 721, 721, 722, 722, 723, 724, 724, - 725, 725, 726, 726, 727, 727, 728, 728, 729, 729, - 729, 730, 730, 730, 730, 731, 731, 732, 732, 733, - 733, 733, 733, 733, 733, 734, 734, 735, 735, 736, - 737, 737, 738, 739, 739, 739, 739, 740, 741, 741, - 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, - 741, 741, 741, 741, 742, 743, 743, 744, 744, 745, - 745, 745, 745, 745, 745, 746, 747, 747, 748, 749, - 749, 750, 750, 751, 751, 751, 751, 752, 752, 753, - 754, 754, 755, 755, 755, 755, 755, 756, 756, 757, - 757, 758, 758, 758, 759, 759, 760, 761, 761, 762, - 762, 763, 763, 764, 764, 765, 765, 766, 767, 768, - 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, - 768, 769, 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 770, 770, 770, 770, 770, 771, - 771, 771, 771, 771, 771, 771, 771, 772, 772, 772, - 773, 773, 774, 774, 775, 775, 776, 776, 777, 778, - 778, 778, 779, 779, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, - 780, 780, 781, 781, 781, 781, 781, 781, 781, 781, - 781, 781, 782, 782, 783, 783, 784, 784, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 786, 786, 787, 787, 788, 789, - 789, 790, 790, 790, 790, 790, 791, 791, 792, 792, - 792, 792, 792, 793, 793, 794, 794, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, 796, 796, - 797, 797, 798, 798, 799, 800, 800, 801, 801, 802, - 802, 803, 804, 804, 805, 805, 805, 806, 806, 806, - 807, 807, 807, 807, 807, 807, 808, 808, 809, 809, - 810, 810, 811, 811, 812, 812, 813, 813, 814, 814, - 815, 815, 815, 816, 816, 817, 817, 818, 818, 819, - 819, 820, 820, 820, 821, 821, 821, 822, 822, 822, - 822, 823, 823, 824, 824, 825, 825, 826, 826, 827, - 827, 827, 827, 828, 828, 829, 829, 830, 830, 830, - 830, 830, 831, 831, 831, 831, 831, 832, 833, 834, - 834, 834, 835, 835, 835, 836, 837, 837, 837, 837, - 838, 838, 839, 840, 840, 841, 841, 842, 842, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, - 843, 843, 843, 843, 843, 843, 844, 844, 844, 844, - 844, 845, 845, 846, 847, 847, 847, 848, 848, 849, - 849, 850, 850, 851, 851, 852, 853, 853, 854, 854, - 854, 855, 855, 856, 856, 857, 857, 857, 857, 857, - 857, 858, 858, 859, 859, 860, 860, 860, 860, 861, - 861, 862, 862, 863, 864, 865, 865, 866, 866, 867, - 867, 867, 868, 868, 868, 869, 870, 870, 871, 872, - 872, 872, 872, 873, 874, 874, 874, 874, 875, 875, - 876, 876, 876, 877, 877, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 879, 879, 880, 880, 881, 881, 881, 881, 881, 881, - 882, 882, 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, 883, 884, - 885, 885, 886, 886, 887, 887, 887, 887, 887, 888, - 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 890, 890, 890, 891, 891, 891, - 891, 891, 891, 891, 892, 892, 893, 893, 893, 893, - 894, 895, 895, 895, 895, 895, 895, 895, 895, 895, - 896, 896, 897, 898, 898, 898, 899, 899, 900, 900, - 900, 900, 900, 901, 901, 902, 902, 902, 902, 903, - 903, 903, 904, 905, 905, 906, 907, 907, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, - 909, 909, 910, 910, 910, 911, 911, 911, 911, 911, - 912, 912, 912, 913, 913, 914, 914, 914, 915, 915, - 915, 915, 916, 916, 916, 916, 917, 918, 919, 919, - 920, 920, 921, 921, 921, 922, 922, 922, 922, 922, - 922, 922, 923, 923, 924, 924, 924, 924, 925, 926, - 926, 926, 926, 927, 927, 928, 929, 930, 930, 931, - 932, 932, 932, 932, 932, 932, 932, 933, 933, 934, - 935, 935, 935, 935, 935, 935, 936, 936, 937, 938, - 938, 938, 938, 939, 939, 940, 940, 941, 941, 942, - 942, 943, 943, 944, 945, 945, 946, 946, 946, 947, - 947, 948, 948, 949, 949, 950, 950, 951, 951, 952, - 953, 953, 954, 954, 955, 955, 955, 955, 956, 956, - 956, 956, 956, 956, 956, 956, 956, 956, 957, 958, - 958, 959, 959, 959, 959, 959, 960, 960, 960, 961, - 961, 962, 962, 962, 962, 963, 964, 964, 965, 965, - 965, 965, 965, 966, 966, 967, 967, 968, 969, 969, - 969, 970, 970, 970, 971, 971, 972, 973, 973, 974, - 975, 975, 976, 976, 976, 976, 976, 976, 976, 976, - 977, 977, 978, 978, 978, 979, 980, 980, 981, 981, - 982, 983, 983, 984, 985, 985, 986, 986, 986, 986, - 986, 987, 987, 988, 989, 990, 990, 990, 990, 990, - 991, 992, 993, 994, 994, 994, 994, 994, 994, 995, - 995, 995, 996, 996, 997, 997, 998, 998, 998, 998, - 998, 998, 998, 998, 999, 999, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1001, 1001, 1001, 1002, 1002, 1003, 1004, - 1004, 1004, 1005, 1005, 1005, 1006, 1006, 1006, 1007, 1007, - 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1010, 1010, 1011, 1011, 1011, 1012, 1012, 1013, 1013, - 1014, 1014, 1015, 1015, 1016, 1017, 1017, 1018, 1018, 1019, - 1019, 1019, 1019, 1020, 1020, 1021, 1021, 1021, 1021, 1021, - 1021, 1022, 1022, 1023, 1023, 1024, 1025, 1025, 1025, 1026, - 1026, 1027, 1027, 1028, 1028, 1029, 1029, 1030, 1030, 1031, - 1031, 1031, 1031, 1031, 1032, 1033, 1034, 1035, 1036, 1036, - 1037, 1037, 1038, 1038, 1039, 1039, 1040, 1041, 1041, 1041, - 1041, 1042, 1042, 1043, 1043, 1044, 1044, 1045, 1045, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, - 1047, 1047, 1047, 1047, 1047, 1048, 1048, 1048, 1048, 1049, - 1049, 1050, 1050, 1051, 1051, 1051, 1051, 1051, 1052, 1052, - 1052, 1052, 1053, 1053, 1054, 1054, 1055, 1055, 1056, 1056, - 1056, 1057, 1057, 1058, 1058, 1058, 1059, 1060, 1060, 1061, - 1061, 1062, 1063, 1063, 1064, 1064, 1065, 1065, 1066, 1066, - 1067, 1067, 1067, 1068, 1068, 1069, 1069, 1070, 1071, 1071, - 1072, 1072, 1073, 1073, 1073, 1074, 1074, 1075, 1075, 1075, - 1075, 1076, 1076, 1077, 1077, 1078, 1078, 1078, 1078, 1078, - 1078, 1079, 1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080, - 1080, 1081, 1081, 1081, 1081, 1082, 1082, 1083, 1083, 1084, - 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, - 1085, 1085, 1086, 1086, 1087, 1087, 1088, 1089, 1090, 1090, - 1091, 1091, 1092, 1093, 1094, 1094, 1094, 1094, 1094, 1094, - 1095, 1095, 1096, 1096, 1096, 1096, 1097, 1098, 1098, 1098, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1100, 1100, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, - 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, - 1102, 1102, 1102, 1103, 1103, 1103, 1103, 1103, 1103, 1103, - 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, - 1104, 1104, 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1107, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1108, 1108, 1109, 1109, 1109, 1109, - 1110, 1111, 1111, 1112, 1112, 1113, 1113, 1114, 1114, 1114, - 1115, 1115, 1115, 1115, 1116, 1116, 1117, 1117, 1118, 1118, - 1119, 1119, 1120, 1120, 1121, 1122, 1122, 1122, 1123, 1124, - 1124, 1125, 1125, 1126, 1126, 1126, 1126, 1127, 1127, 1128, - 1128, 1128, 1128, 1128, 1129, 1129, 1129, 1129, 1129, 1130, - 1130, 1130, 1131, 1131, 1132, 1133, 1133, 1133, 1134, 1134, - 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, - 1135, 1135, 1136, 1136, 1137, 1137, 1138, 1138, 1138, 1138, - 1138, 1138, 1139, 1139, 1140, 1140, 1141, 1141, 1141, 1142, - 1142, 1143, 1143, 1144, 1144, 1144, 1145, 1145, 1146, 1146, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148, - 1148, 1148, 1149, 1149, 1150, 1151, 1151, 1151, 1151, 1151, - 1152, 1152, 1152, 1153, 1153, 1154, 1155, 1155, 1156, 1157, - 1157, 1158, 1158, 1159, 1159, 1160, 1160, 1160, 1160, 1161, - 1161, 1162, 1162, 1163, 1163, 1164, 1164, 1165, 1165, 1166, - 1166, 1167, 1167, 1167, 1167, 1168, 1168, 1169, 1169, 1170, - 1170, 1171, 1172, 1173, 1174, 1174, 1175, 1175, 1175, 1175, - 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, - 1175, 1175, 1175, 1175, 1176, 1177, 1178, 1178, 1178, 1179, - 1180, 1180, 1180, 1180, 1181, 1181, 1182, 1183, 1184, 1184, - 1185, 1185, 1186, 1186, 1186, 1187, 1187, 1187, 1188, 1188, - 1188, 1188, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1193, - 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, - 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, - 1193, 1193, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195 + 0, 521, 522, 522, 522, 522, 522, 522, 523, 523, + 524, 524, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 526, 526, 527, + 527, 528, 528, 529, 529, 529, 530, 531, 532, 532, + 532, 533, 533, 534, 534, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 536, 536, 536, 536, + 536, 536, 537, 538, 538, 539, 539, 540, 540, 540, + 540, 541, 541, 541, 541, 541, 541, 542, 543, 544, + 544, 545, 545, 545, 545, 546, 546, 547, 547, 547, + 547, 547, 547, 548, 548, 548, 549, 549, 549, 550, + 550, 550, 550, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 552, 552, 553, + 553, 554, 554, 554, 555, 555, 555, 555, 556, 556, + 556, 556, 557, 557, 557, 557, 557, 557, 557, 557, + 558, 558, 558, 559, 559, 560, 561, 561, 561, 561, + 562, 562, 563, 563, 564, 564, 565, 565, 565, 565, + 565, 566, 567, 567, 568, 568, 569, 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, 572, 572, 573, 573, 573, 574, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 576, + 576, 577, 577, 578, 578, 579, 579, 579, 579, 580, + 581, 581, 582, 582, 583, 583, 583, 583, 584, 584, + 585, 585, 585, 585, 586, 586, 586, 586, 587, 588, + 588, 589, 590, 590, 591, 591, 591, 591, 592, 592, + 593, 593, 594, 594, 595, 595, 596, 596, 596, 597, + 597, 598, 598, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 600, 600, 601, 601, + 602, 602, 603, 603, 604, 605, 605, 605, 605, 605, + 606, 606, 607, 608, 608, 608, 608, 608, 608, 609, + 609, 609, 609, 609, 609, 609, 609, 610, 610, 611, + 611, 612, 612, 613, 613, 614, 614, 614, 615, 615, + 616, 617, 617, 618, 618, 619, 619, 620, 620, 621, + 621, 622, 622, 623, 623, 623, 623, 624, 624, 624, + 624, 624, 624, 624, 624, 624, 625, 625, 625, 626, + 626, 627, 627, 627, 627, 628, 629, 629, 629, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 631, + 631, 632, 632, 632, 632, 632, 632, 632, 633, 633, + 634, 634, 635, 635, 636, 637, 637, 638, 638, 638, + 638, 639, 639, 640, 640, 641, 641, 642, 642, 642, + 642, 642, 643, 644, 645, 645, 645, 645, 645, 646, + 646, 647, 647, 648, 649, 649, 650, 650, 650, 651, + 651, 652, 652, 652, 653, 653, 653, 653, 654, 654, + 655, 655, 656, 657, 657, 658, 658, 659, 659, 659, + 660, 660, 661, 661, 662, 663, 663, 663, 664, 664, + 665, 666, 666, 667, 668, 668, 669, 669, 670, 670, + 671, 671, 672, 672, 673, 673, 673, 673, 673, 673, + 673, 673, 673, 673, 673, 673, 673, 673, 674, 674, + 675, 675, 675, 675, 676, 676, 677, 677, 678, 678, + 679, 679, 680, 680, 681, 681, 682, 682, 683, 683, + 684, 685, 685, 686, 686, 687, 687, 688, 688, 689, + 689, 689, 689, 690, 691, 691, 692, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 694, 695, 695, 695, 695, 696, 696, 697, 697, 698, + 698, 699, 699, 700, 700, 701, 702, 702, 703, 703, + 703, 703, 704, 705, 706, 707, 707, 708, 708, 709, + 709, 710, 710, 711, 711, 711, 712, 712, 712, 712, + 713, 714, 714, 715, 715, 716, 716, 717, 717, 718, + 718, 719, 720, 721, 722, 722, 723, 723, 724, 724, + 725, 725, 726, 726, 727, 727, 728, 728, 728, 728, + 728, 729, 730, 730, 731, 731, 732, 732, 732, 733, + 733, 734, 734, 734, 734, 734, 735, 735, 736, 736, + 737, 738, 738, 739, 739, 740, 741, 741, 742, 742, + 743, 743, 744, 744, 745, 745, 746, 746, 746, 747, + 747, 747, 747, 748, 748, 749, 749, 750, 750, 750, + 750, 750, 750, 751, 751, 752, 752, 753, 754, 754, + 755, 756, 756, 756, 756, 757, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, + 758, 758, 759, 760, 760, 761, 761, 762, 762, 762, + 762, 762, 762, 763, 764, 764, 765, 766, 766, 767, + 767, 768, 768, 768, 768, 769, 769, 770, 771, 771, + 772, 772, 772, 772, 772, 773, 773, 774, 774, 775, + 775, 775, 776, 776, 777, 778, 778, 779, 779, 780, + 780, 781, 781, 782, 782, 783, 784, 785, 785, 785, + 785, 785, 785, 785, 785, 785, 785, 785, 785, 786, + 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 787, 787, 787, 787, 787, 788, 788, 788, + 788, 788, 788, 788, 788, 789, 789, 789, 790, 790, + 791, 791, 792, 792, 793, 793, 794, 795, 795, 795, + 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 797, 797, + 798, 798, 798, 798, 798, 798, 798, 798, 798, 798, + 799, 799, 800, 800, 801, 801, 802, 802, 802, 802, + 802, 802, 802, 802, 802, 802, 802, 802, 802, 802, + 802, 802, 803, 803, 804, 804, 805, 806, 806, 807, + 807, 807, 807, 807, 808, 808, 809, 809, 809, 809, + 809, 810, 810, 811, 811, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 813, 813, 814, 814, + 815, 815, 816, 816, 817, 817, 818, 818, 819, 820, + 820, 820, 821, 821, 822, 823, 823, 824, 824, 824, + 825, 825, 825, 826, 826, 826, 826, 826, 826, 827, + 827, 828, 828, 829, 829, 830, 830, 831, 831, 832, + 832, 832, 833, 833, 834, 834, 835, 835, 836, 836, + 836, 837, 837, 837, 838, 838, 838, 838, 839, 839, + 840, 840, 841, 841, 842, 842, 843, 843, 843, 843, + 844, 844, 845, 845, 846, 846, 846, 846, 846, 847, + 847, 847, 847, 847, 848, 849, 850, 850, 850, 851, + 851, 851, 852, 853, 853, 853, 853, 854, 854, 855, + 856, 856, 857, 857, 858, 858, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 860, 860, 860, 860, 860, 861, 861, + 862, 863, 863, 863, 864, 864, 865, 865, 866, 866, + 867, 867, 868, 869, 869, 870, 870, 870, 871, 871, + 872, 872, 873, 873, 873, 873, 873, 873, 874, 874, + 875, 875, 876, 876, 876, 876, 877, 877, 878, 878, + 879, 880, 881, 881, 882, 882, 883, 883, 883, 884, + 884, 884, 885, 886, 886, 887, 888, 888, 888, 888, + 889, 890, 890, 890, 891, 891, 892, 892, 893, 893, + 894, 894, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 896, 896, 897, + 897, 898, 898, 898, 898, 898, 898, 899, 899, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 901, 902, 902, 903, + 903, 904, 904, 904, 904, 904, 905, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 907, 907, 907, 908, 908, 908, 908, 908, 908, + 908, 909, 909, 910, 910, 910, 910, 911, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 913, 913, 914, + 915, 915, 915, 916, 916, 917, 917, 917, 917, 917, + 918, 918, 919, 919, 919, 919, 920, 920, 920, 921, + 922, 922, 923, 924, 924, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 926, 926, 927, + 927, 927, 928, 928, 928, 928, 928, 929, 929, 929, + 930, 930, 931, 931, 931, 932, 932, 932, 932, 933, + 933, 933, 933, 934, 935, 936, 936, 937, 937, 938, + 938, 938, 939, 939, 939, 939, 939, 939, 939, 940, + 940, 941, 941, 941, 941, 942, 943, 943, 943, 943, + 944, 944, 945, 946, 947, 947, 948, 949, 949, 949, + 949, 949, 949, 949, 950, 950, 951, 952, 952, 952, + 952, 952, 952, 953, 953, 954, 955, 955, 955, 955, + 956, 956, 957, 957, 958, 958, 959, 959, 960, 960, + 961, 962, 962, 962, 963, 963, 963, 964, 964, 965, + 965, 966, 966, 967, 967, 968, 968, 969, 970, 970, + 971, 971, 972, 972, 972, 972, 973, 973, 973, 973, + 973, 973, 973, 973, 973, 973, 974, 975, 975, 976, + 976, 976, 976, 976, 977, 977, 977, 978, 978, 979, + 979, 979, 979, 980, 981, 981, 982, 982, 982, 982, + 982, 983, 983, 984, 984, 985, 986, 986, 986, 987, + 987, 987, 988, 988, 989, 990, 990, 991, 992, 992, + 993, 993, 993, 993, 993, 993, 993, 993, 994, 994, + 995, 995, 995, 996, 997, 997, 998, 998, 999, 1000, + 1000, 1001, 1002, 1002, 1003, 1003, 1003, 1003, 1003, 1004, + 1004, 1005, 1006, 1007, 1007, 1007, 1007, 1007, 1008, 1009, + 1010, 1011, 1011, 1011, 1011, 1011, 1011, 1012, 1012, 1012, + 1013, 1013, 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1016, 1016, 1017, 1017, 1017, 1017, 1017, 1017, + 1017, 1018, 1018, 1018, 1019, 1019, 1020, 1021, 1021, 1021, + 1022, 1022, 1022, 1023, 1023, 1023, 1024, 1024, 1025, 1025, + 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1027, + 1027, 1028, 1028, 1028, 1029, 1029, 1030, 1030, 1031, 1031, + 1032, 1032, 1033, 1034, 1034, 1035, 1035, 1036, 1036, 1036, + 1036, 1037, 1037, 1038, 1038, 1038, 1038, 1038, 1038, 1039, + 1039, 1040, 1040, 1041, 1042, 1042, 1042, 1043, 1043, 1044, + 1044, 1045, 1045, 1046, 1046, 1047, 1047, 1048, 1048, 1048, + 1048, 1048, 1049, 1050, 1051, 1052, 1053, 1053, 1054, 1054, + 1055, 1055, 1056, 1056, 1057, 1058, 1058, 1058, 1058, 1059, + 1059, 1060, 1060, 1061, 1061, 1062, 1062, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064, 1064, 1064, + 1064, 1064, 1064, 1065, 1065, 1065, 1065, 1066, 1066, 1067, + 1067, 1068, 1068, 1068, 1068, 1068, 1069, 1069, 1069, 1069, + 1070, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1073, 1074, + 1074, 1075, 1075, 1075, 1076, 1077, 1077, 1078, 1078, 1079, + 1080, 1080, 1081, 1081, 1082, 1082, 1083, 1083, 1084, 1084, + 1084, 1085, 1085, 1086, 1086, 1087, 1088, 1088, 1089, 1089, + 1090, 1090, 1090, 1091, 1091, 1092, 1092, 1092, 1092, 1093, + 1093, 1094, 1094, 1095, 1095, 1095, 1095, 1095, 1095, 1096, + 1096, 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098, + 1098, 1098, 1098, 1099, 1099, 1100, 1100, 1101, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102, + 1103, 1103, 1104, 1104, 1105, 1106, 1107, 1107, 1108, 1108, + 1109, 1110, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, + 1113, 1113, 1113, 1113, 1114, 1115, 1115, 1115, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120, 1120, 1120, + 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1123, 1123, 1123, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1125, 1125, 1126, 1126, 1126, 1126, 1127, + 1128, 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1131, 1132, + 1132, 1132, 1133, 1133, 1133, 1133, 1134, 1134, 1135, 1135, + 1136, 1136, 1137, 1137, 1138, 1138, 1139, 1140, 1140, 1140, + 1141, 1142, 1142, 1143, 1143, 1144, 1144, 1144, 1144, 1145, + 1145, 1146, 1146, 1146, 1146, 1146, 1147, 1147, 1147, 1147, + 1147, 1148, 1148, 1148, 1149, 1149, 1150, 1151, 1151, 1151, + 1152, 1152, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, + 1153, 1153, 1153, 1153, 1154, 1154, 1155, 1155, 1156, 1156, + 1156, 1156, 1156, 1156, 1157, 1157, 1158, 1158, 1159, 1159, + 1159, 1160, 1160, 1161, 1161, 1162, 1162, 1162, 1163, 1163, + 1164, 1164, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, + 1166, 1166, 1166, 1166, 1167, 1167, 1168, 1169, 1169, 1169, + 1169, 1169, 1170, 1170, 1170, 1171, 1171, 1172, 1173, 1173, + 1174, 1175, 1175, 1176, 1176, 1177, 1177, 1178, 1178, 1178, + 1178, 1179, 1179, 1180, 1180, 1181, 1181, 1182, 1182, 1183, + 1184, 1184, 1185, 1185, 1186, 1186, 1187, 1187, 1187, 1187, + 1187, 1188, 1188, 1188, 1188, 1188, 1189, 1189, 1190, 1190, + 1191, 1191, 1191, 1192, 1192, 1192, 1193, 1193, 1194, 1194, + 1195, 1195, 1196, 1196, 1197, 1197, 1198, 1198, 1198, 1198, + 1199, 1199, 1200, 1200, 1201, 1201, 1202, 1203, 1204, 1205, + 1205, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, + 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207, + 1208, 1209, 1209, 1209, 1210, 1211, 1211, 1211, 1211, 1212, + 1212, 1213, 1214, 1215, 1215, 1216, 1216, 1217, 1217, 1217, + 1218, 1218, 1218, 1219, 1219, 1219, 1219, 1220, 1220, 1220, + 1220, 1220, 1221, 1221, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1224, 1224, 1224, 1224, 1224, 1224, + 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, + 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -4225,225 +4312,232 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 3, - 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, 2, 2, 3, 3, 3, 3, 3, - 1, 3, 1, 3, 1, 1, 1, 2, 2, 2, - 1, 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, 2, - 3, 4, 3, 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, 4, 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, 4, 4, 5, 2, 5, 7, 5, 2, 3, - 0, 1, 2, 1, 2, 2, 2, 3, 3, 3, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 5, 9, 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, 3, - 3, 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, 7, 10, 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, 1, 2, - 3, 3, 3, 3, 4, 4, 3, 3, 3, 4, - 4, 3, 4, 4, 1, 1, 1, 0, 8, 8, - 11, 1, 1, 2, 4, 5, 1, 3, 2, 2, - 2, 2, 2, 1, 3, 1, 3, 1, 2, 2, - 4, 3, 2, 2, 2, 2, 2, 2, 3, 2, - 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, 16, 19, 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, 4, 7, 6, 4, 4, 4, - 3, 4, 3, 1, 1, 3, 5, 5, 5, 5, - 8, 5, 5, 6, 7, 7, 7, 4, 4, 5, - 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, 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, 1, 5, 3, - 0, 1, 1, 1, 1, 1, 3, 9, 12, 3, - 0, 2, 3, 2, 3, 7, 1, 3, 1, 4, - 4, 7, 2, 1, 1, 1, 3, 2, 8, 5, - 0, 4, 3, 0, 2, 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, 9, 1, 2, 5, 5, 6, 6, - 7, 2, 0, 3, 1, 2, 5, 5, 8, 3, - 4, 7, 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, 0, 3, 3, 4, 4, 4, 4, 3, 2, - 1, 1, 0, 1, 1, 0, 1, 5, 1, 0, - 1, 1, 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, 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, 3, 3, 4, 3, 4, 4, 5, + 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 1, 0, 2, 5, 1, 1, + 0, 2, 0, 2, 0, 2, 2, 2, 3, 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, 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, + 2, 2, 3, 3, 3, 3, 3, 1, 3, 1, + 3, 1, 1, 1, 2, 2, 2, 1, 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, 2, 3, 4, 3, + 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, 5, 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, 4, + 3, 2, 2, 3, 4, 4, 4, 5, 1, 3, + 2, 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, + 6, 2, 4, 2, 2, 1, 0, 2, 2, 1, + 0, 2, 0, 3, 1, 1, 2, 2, 1, 4, + 4, 5, 2, 5, 7, 5, 2, 3, 0, 1, + 2, 1, 2, 2, 2, 3, 3, 3, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 5, 9, 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, 3, 3, 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, 7, 10, 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, 1, 2, 3, 3, + 3, 3, 4, 4, 3, 3, 3, 4, 4, 3, + 4, 4, 1, 1, 1, 0, 8, 8, 11, 1, + 1, 2, 4, 5, 1, 3, 2, 2, 2, 2, + 2, 1, 3, 1, 3, 1, 2, 2, 4, 3, + 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, + 2, 5, 5, 5, 5, 5, 1, 3, 1, 2, + 3, 0, 5, 7, 6, 9, 3, 1, 2, 1, + 1, 1, 3, 0, 5, 2, 0, 3, 3, 3, + 7, 7, 10, 1, 1, 1, 1, 1, 1, 16, + 19, 1, 0, 2, 0, 1, 3, 4, 5, 2, + 2, 4, 4, 0, 1, 3, 2, 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, 5, 5, 5, 1, 1, 1, 1, 3, 0, + 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, 4, 7, 6, 4, 4, 4, 3, 4, 3, + 1, 1, 3, 5, 5, 5, 5, 8, 5, 5, + 6, 7, 7, 7, 4, 4, 5, 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, 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, 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, 1, 5, 3, 0, 1, + 1, 1, 1, 1, 3, 9, 12, 3, 0, 2, + 3, 2, 3, 7, 1, 3, 1, 4, 4, 7, + 2, 1, 1, 1, 3, 2, 8, 5, 0, 4, + 3, 0, 2, 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, 9, 1, 2, 5, 5, 6, 6, 7, 2, + 0, 3, 1, 2, 5, 5, 8, 3, 4, 7, + 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, 0, + 3, 3, 4, 4, 4, 4, 3, 2, 1, 1, + 0, 1, 1, 0, 1, 5, 1, 0, 1, 1, + 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, 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, 3, 3, 4, 3, 4, 4, 5, 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, + 8, 6, 6, 4, 4, 3, 1, 1, 1, 1, + 5, 1, 1, 4, 1, 4, 1, 4, 1, 4, + 1, 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, 8, 4, 7, 4, + 6, 6, 4, 2, 3, 3, 3, 4, 0, 4, + 1, 3, 3, 1, 1, 1, 1, 2, 0, 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, 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, 3, + 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, 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, 2, + 3, 0, 2, 0, 3, 0, 1, 2, 2, 2, + 2, 3, 2, 3, 2, 0, 1, 3, 3, 3, + 3, 3, 0, 3, 3, 0, 1, 3, 7, 7, + 3, 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, 6, + 2, 3, 5, 2, 3, 5, 1, 1, 1, 1, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, + 3, 10, 4, 1, 1, 1, 1, 1, 1, 1, 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, 6, 2, 3, 5, 2, 3, - 5, 1, 1, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 3, 10, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4533,7 +4627,8 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -4541,12 +4636,12 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 1699, 1444, 651, 1532, 1531, 1444, 0, 269, 0, 1542, - 0, 1444, 433, 1102, 0, 0, 0, 0, 651, 1444, - 0, 1699, 0, 0, 0, 0, 0, 1712, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1444, 0, 0, - 1719, 0, 0, 0, 0, 1712, 0, 1544, 0, 0, - 0, 0, 1719, 0, 0, 0, 0, 0, 2, 9, + 1707, 1451, 659, 1539, 1538, 1451, 0, 276, 0, 1550, + 0, 1451, 437, 1109, 0, 0, 0, 0, 659, 1451, + 0, 1707, 0, 0, 0, 0, 0, 1720, 0, 0, + 0, 0, 0, 1249, 0, 0, 0, 1451, 0, 0, + 1727, 0, 0, 0, 0, 1720, 0, 1552, 0, 0, + 0, 0, 1727, 0, 0, 0, 0, 0, 2, 9, 10, 45, 80, 81, 38, 37, 98, 63, 24, 71, 133, 132, 134, 50, 46, 88, 33, 35, 47, 51, 73, 75, 40, 53, 64, 110, 72, 31, 70, 76, @@ -4558,24250 +4653,25193 @@ static const yytype_uint16 yydefact[] = 117, 34, 121, 25, 26, 28, 29, 27, 67, 36, 74, 39, 95, 124, 114, 109, 129, 127, 11, 135, 111, 83, 14, 15, 100, 13, 32, 57, 17, 42, - 41, 56, 48, 131, 44, 1542, 102, 115, 101, 84, - 108, 87, 112, 130, 113, 85, 126, 1663, 1662, 1723, - 1666, 1698, 0, 1678, 1443, 1442, 1457, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1454, 2322, 2339, 2340, 2341, 2342, 2343, - 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2354, - 2353, 2355, 2356, 2699, 2357, 2358, 2359, 2648, 2649, 2700, - 2650, 2651, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, - 2368, 2652, 2653, 2369, 2370, 2371, 2372, 2373, 2654, 2701, - 2374, 2375, 2376, 2377, 2378, 2379, 2702, 2380, 2381, 2382, - 2383, 2384, 2385, 2386, 2387, 2388, 2703, 2389, 2390, 2391, - 2704, 2392, 2393, 2394, 2395, 2396, 2397, 2655, 2656, 2398, + 41, 56, 48, 131, 44, 1550, 102, 115, 101, 84, + 108, 87, 112, 130, 113, 85, 126, 1671, 1670, 1731, + 1674, 1706, 0, 1686, 1450, 1449, 1464, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1461, 2377, 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, 2657, 2426, 2427, - 2428, 2429, 2658, 2430, 2431, 2432, 2433, 2659, 2434, 2435, - 2436, 2705, 2706, 2437, 2438, 2439, 2440, 2441, 2660, 2661, - 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2707, 2449, 2450, - 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, - 2708, 2662, 2461, 2462, 2463, 2464, 2663, 2664, 2665, 2465, - 2709, 2710, 2466, 2711, 2467, 2468, 2469, 2470, 2471, 2472, - 2666, 2712, 2473, 2713, 2474, 2475, 2476, 2477, 2478, 2479, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, - 2490, 2491, 2492, 2493, 2494, 2667, 2714, 2668, 2495, 2496, - 2497, 2498, 2499, 2500, 2501, 2669, 2670, 2502, 2503, 2504, - 2715, 2505, 2671, 2506, 2672, 2507, 2508, 2509, 2510, 2511, - 2512, 2513, 2514, 2515, 2516, 2673, 2716, 2517, 2717, 2674, - 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, - 2528, 2529, 2675, 2530, 2676, 2533, 2531, 2532, 2534, 2535, - 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2677, 2544, - 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, - 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2718, 2563, - 2564, 2565, 2566, 2567, 2678, 2568, 2569, 2570, 2571, 2572, - 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, - 2583, 2679, 2584, 2585, 2719, 2586, 2587, 2680, 2588, 2589, - 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, - 2600, 2601, 2681, 2602, 2603, 2604, 2605, 2720, 2606, 2607, - 2608, 2609, 2610, 2611, 2682, 2683, 2612, 2613, 2684, 2614, - 2685, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, - 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2686, - 2687, 2633, 2721, 2634, 2635, 2636, 2637, 2638, 2639, 2640, - 2641, 2642, 2643, 2644, 2688, 2689, 2690, 2691, 2692, 2693, - 2694, 2695, 2696, 2697, 2698, 2645, 2646, 2647, 137, 0, - 0, 2284, 2323, 2324, 2327, 2322, 405, 404, 1652, 2281, - 2323, 1541, 0, 1521, 651, 0, 1457, 432, 1699, 0, - 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, - 0, 0, 0, 456, 455, 0, 0, 1068, 461, 0, - 0, 0, 0, 0, 641, 1583, 2531, 1581, 1653, 270, - 273, 274, 271, 272, 2305, 0, 1214, 1215, 1217, 0, - 0, 1227, 907, 908, 0, 0, 0, 921, 0, 0, - 0, 905, 0, 0, 0, 927, 0, 924, 0, 0, - 928, 925, 902, 926, 909, 0, 901, 0, 0, 1227, - 929, 0, 0, 903, 0, 0, 0, 0, 1457, 1580, - 462, 1699, 0, 1564, 1565, 1566, 1542, 1554, 1567, 1559, - 1561, 1560, 1562, 1563, 1558, 2304, 2340, 997, 997, 997, - 997, 994, 995, 997, 997, 997, 2551, 0, 0, 976, - 0, 978, 2306, 997, 1002, 2348, 533, 533, 533, 0, - 1001, 1006, 533, 0, 1425, 1466, 2283, 1711, 0, 977, - 1424, 2612, 1570, 0, 0, 1242, 1238, 1240, 1241, 1239, - 0, 1071, 1071, 2570, 1434, 254, 2581, 2682, 2612, 253, - 248, 249, 220, 2344, 0, 0, 1001, 0, 1457, 1432, - 973, 1718, 1716, 0, 2268, 2367, 2383, 2476, 245, 2563, - 2571, 2581, 2682, 2612, 2644, 196, 206, 201, 0, 263, - 2581, 2682, 2612, 259, 1454, 0, 1679, 1827, 1826, 2277, - 0, 1427, 1426, 1543, 0, 1546, 0, 2546, 1683, 1686, - 1548, 1684, 2325, 1902, 1931, 1909, 1931, 1931, 1898, 1898, - 2413, 1911, 1899, 1900, 1936, 0, 1931, 1898, 1903, 0, - 1901, 1939, 1939, 1926, 3, 1883, 1884, 1885, 1886, 1912, - 1913, 1887, 1918, 1919, 1923, 1888, 1953, 1898, 2326, 1720, - 1721, 2268, 4, 2319, 5, 2263, 2318, 6, 7, 1675, - 0, 0, 1, 1699, 0, 1553, 1715, 1715, 0, 1715, - 0, 1667, 1675, 1670, 1674, 0, 0, 0, 0, 0, - 0, 1428, 0, 0, 0, 932, 0, 1469, 1053, 0, - 0, 0, 0, 0, 1311, 0, 1111, 1110, 2328, 2311, - 2312, 2313, 0, 2309, 2310, 2329, 2330, 2331, 0, 2448, - 1311, 0, 0, 2178, 2189, 2190, 2191, 2371, 2430, 2186, - 2187, 2188, 2180, 2181, 2182, 2183, 2184, 2185, 0, 0, - 1209, 2179, 0, 2448, 0, 1311, 0, 166, 0, 141, - 1311, 0, 0, 2448, 0, 0, 2448, 0, 0, 0, - 0, 0, 2448, 0, 0, 0, 0, 0, 166, 2481, - 0, 141, 2448, 0, 0, 1448, 0, 0, 0, 1450, - 1453, 1440, 0, 2260, 0, 2261, 2285, 0, 1535, 1529, - 1538, 1534, 1524, 0, 2277, 0, 0, 0, 0, 915, - 0, 0, 905, 0, 0, 0, 916, 0, 917, 918, - 0, 0, 0, 0, 914, 0, 1438, 1430, 0, 1572, - 1574, 1573, 1575, 1571, 533, 0, 0, 0, 2448, 0, - 141, 1508, 0, 2448, 141, 0, 0, 460, 459, 141, - 2309, 458, 457, 2371, 2430, 0, 1101, 0, 1184, 141, - 2448, 0, 189, 2448, 710, 2448, 1548, 0, 654, 0, - 822, 2481, 141, 0, 0, 0, 0, 0, 0, 1071, - 0, 0, 0, 0, 0, 0, 0, 640, 651, 1584, - 1582, 0, 1218, 247, 246, 1216, 919, 2448, 1143, 366, - 0, 0, 2448, 1489, 2448, 366, 936, 920, 0, 906, - 2448, 366, 1107, 2448, 2314, 176, 0, 904, 2371, 2430, - 2448, 366, 1211, 0, 2448, 366, 2448, 172, 2448, 366, - 2448, 366, 2448, 655, 0, 0, 2448, 366, 2448, 2481, - 174, 923, 2448, 366, 930, 2448, 366, 2279, 2448, 0, - 1441, 0, 1576, 0, 1556, 2686, 0, 1699, 997, 996, - 0, 997, 0, 997, 0, 997, 0, 997, 0, 0, - 0, 997, 2307, 2308, 979, 0, 1003, 0, 1011, 0, - 1010, 1009, 1008, 0, 0, 0, 1012, 0, 1831, 1611, - 0, 1422, 1437, 0, 0, 0, 1071, 0, 1070, 0, - 0, 1433, 252, 250, 0, 0, 0, 0, 0, 0, - 1439, 0, 1431, 0, 0, 0, 2287, 2289, 2290, 2192, - 2263, 0, 2649, 2650, 2651, 2252, 0, 2652, 2653, 2654, - 2701, 2082, 2069, 2078, 2083, 2070, 2072, 2079, 2655, 2656, - 2020, 2657, 2658, 2302, 2659, 2660, 2661, 2663, 2664, 2665, - 2666, 2074, 2076, 2667, 2668, 2670, 0, 2303, 2671, 2672, - 2512, 2674, 2675, 2677, 2678, 2080, 2680, 2681, 2682, 2683, - 2684, 2685, 2301, 500, 2081, 2687, 2689, 2690, 2691, 2692, - 2694, 2695, 2696, 2697, 0, 0, 0, 2274, 0, 2049, - 0, 1891, 1892, 1914, 1915, 1893, 1920, 1921, 1894, 0, - 2273, 1956, 2137, 2048, 2065, 0, 2054, 2055, 0, 2047, - 2043, 1701, 2269, 0, 2044, 2286, 2288, 2253, 1701, 2267, - 209, 265, 0, 266, 2275, 2581, 197, 244, 212, 243, - 214, 213, 211, 210, 0, 2369, 198, 0, 0, 199, - 0, 0, 0, 0, 262, 260, 0, 1429, 0, 1829, - 1828, 2278, 941, 0, 1545, 1542, 2202, 0, 1685, 0, - 0, 0, 1930, 1917, 1925, 1924, 0, 1907, 1906, 1905, - 0, 1904, 1931, 1931, 1929, 1908, 1883, 0, 0, 0, - 1935, 0, 1933, 1879, 1875, 0, 1942, 1943, 1944, 1941, - 1954, 1940, 0, 1889, 1945, 0, 1898, 1895, 1786, 0, - 1665, 1664, 8, 0, 1550, 1552, 1527, 1548, 1713, 1714, - 0, 0, 0, 0, 0, 0, 0, 0, 1773, 1731, - 1732, 1734, 1770, 1774, 1782, 0, 1671, 0, 0, 0, - 1833, 0, 0, 1455, 0, 0, 0, 0, 0, 1142, - 0, 0, 0, 0, 933, 0, 0, 0, 1475, 0, - 1477, 1478, 1479, 0, 0, 0, 1480, 1481, 1469, 256, - 1488, 1485, 1468, 1470, 1483, 0, 0, 0, 0, 0, - 0, 0, 1500, 0, 180, 181, 0, 667, 651, 0, - 2448, 0, 0, 0, 0, 1152, 1159, 1310, 0, 0, - 0, 0, 0, 0, 0, 0, 1153, 1151, 0, 1154, - 258, 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, 281, 283, 296, 361, 0, 632, 0, 0, 0, - 635, 0, 2448, 1311, 0, 0, 0, 1213, 0, 0, - 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 140, 145, 0, - 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, - 0, 618, 631, 0, 0, 0, 0, 0, 628, 0, - 0, 141, 286, 608, 614, 0, 0, 0, 717, 716, - 0, 0, 0, 0, 0, 0, 1398, 0, 1397, 0, - 0, 0, 0, 0, 1498, 1497, 0, 0, 0, 0, - 0, 0, 1301, 0, 275, 277, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 397, 398, 0, 0, 0, 145, 0, 0, 1301, - 0, 288, 0, 0, 1449, 1446, 1447, 0, 1452, 0, - 0, 0, 0, 2057, 0, 2206, 1723, 2204, 2284, 2259, - 0, 2332, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, - 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, - 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, - 2750, 2751, 2752, 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, 2786, 2787, 2788, 2789, - 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2256, - 2255, 2282, 2333, 2334, 2335, 2336, 2262, 0, 0, 232, - 233, 231, 1536, 234, 1537, 1533, 0, 1519, 0, 0, - 0, 0, 0, 0, 0, 0, 2371, 2430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 830, 1469, 1507, 0, 0, 0, - 660, 0, 2448, 0, 143, 868, 0, 820, 461, 0, - 0, 0, 0, 1374, 143, 0, 0, 183, 0, 0, - 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 821, 0, 0, 143, 0, 2448, 611, 2448, 0, - 533, 533, 0, 0, 1073, 0, 0, 0, 0, 0, - 0, 0, 0, 1657, 1656, 1659, 1658, 0, 1655, 0, - 364, 365, 0, 1201, 1226, 0, 0, 0, 0, 0, - 897, 922, 0, 0, 1195, 0, 0, 2448, 366, 2448, - 0, 2448, 0, 0, 0, 1203, 366, 0, 1197, 0, - 0, 1199, 0, 1400, 0, 913, 911, 910, 912, 0, - 0, 895, 0, 0, 0, 0, 0, 890, 0, 0, - 892, 0, 0, 0, 0, 1699, 1555, 0, 987, 0, - 991, 0, 982, 0, 988, 0, 983, 980, 981, 0, - 986, 0, 0, 534, 536, 0, 0, 2395, 2412, 0, - 2437, 2469, 2470, 2522, 2537, 2566, 2571, 2577, 0, 2606, - 2617, 0, 1017, 1048, 1007, 726, 0, 0, 1621, 1423, - 2211, 0, 1699, 0, 0, 0, 1234, 1235, 251, 221, - 0, 0, 0, 1050, 2570, 1436, 972, 651, 0, 2045, - 0, 2052, 2053, 2251, 0, 0, 0, 0, 0, 0, - 2051, 0, 0, 0, 0, 0, 0, 0, 1978, 0, - 0, 2210, 0, 0, 2210, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1979, 1960, 1961, - 2049, 2202, 0, 2050, 2298, 2295, 1953, 0, 1953, 2337, - 2192, 0, 2189, 2190, 2191, 2799, 2800, 2801, 2802, 2803, - 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, - 2814, 0, 2815, 2816, 2817, 2818, 2819, 2821, 2820, 2822, - 2823, 2824, 2825, 2826, 2827, 2266, 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, 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, 2959, 2960, 2961, 2962, - 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, - 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 1993, 2981, - 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, - 2992, 2993, 2994, 2995, 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, - 1995, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, - 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, - 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, - 3061, 3062, 3063, 3064, 3065, 3066, 3069, 3067, 3068, 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, 3126, 3125, 3127, 3128, 3129, 3130, - 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, - 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, - 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, - 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, - 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, - 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, - 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, - 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, - 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 0, - 2186, 2187, 2188, 2180, 2181, 2182, 2183, 2184, 2185, 2196, - 0, 0, 2272, 2338, 0, 2139, 0, 1975, 0, 0, - 1786, 2293, 0, 2291, 2254, 1786, 267, 268, 264, 0, - 0, 216, 217, 215, 0, 237, 236, 241, 242, 208, - 240, 0, 235, 219, 2126, 2125, 218, 207, 226, 204, - 202, 222, 224, 225, 205, 203, 261, 0, 0, 0, - 366, 1553, 1540, 0, 0, 2266, 0, 2200, 0, 0, - 2198, 0, 0, 0, 1783, 0, 1687, 0, 1691, 0, - 0, 0, 1928, 1927, 1880, 1876, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, - 0, 1896, 0, 1849, 2320, 2321, 2264, 1719, 1553, 0, - 1549, 1682, 1681, 1724, 1725, 1093, 1680, 1753, 1754, 0, - 0, 0, 0, 1779, 1777, 1744, 1735, 1743, 0, 0, - 1741, 0, 1745, 1956, 1772, 1669, 1729, 1730, 1733, 1668, - 0, 1775, 0, 1624, 1773, 1734, 1608, 0, 1586, 0, - 0, 1834, 0, 0, 1456, 0, 0, 0, 1122, 1124, - 0, 1123, 0, 1126, 0, 1135, 0, 0, 1121, 1140, - 0, 1129, 1127, 0, 1496, 0, 0, 0, 0, 0, - 1476, 0, 0, 0, 2606, 255, 1479, 1484, 1471, 1482, - 0, 0, 0, 0, 0, 1052, 1051, 0, 0, 1075, - 0, 0, 500, 1503, 522, 0, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 816, 813, 0, 0, 812, - 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 690, 0, 1301, 0, 294, 0, 1161, - 0, 1160, 0, 1165, 0, 0, 1162, 1157, 1158, 2571, - 2581, 2612, 257, 1163, 1193, 0, 1192, 1188, 0, 1104, - 0, 1105, 0, 0, 0, 0, 0, 2422, 2448, 302, - 325, 0, 1300, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, - 0, 350, 349, 0, 0, 0, 0, 0, 355, 0, - 333, 0, 334, 0, 354, 0, 0, 0, 633, 634, - 0, 0, 0, 1301, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 1210, 0, 743, 0, 0, 2571, - 1189, 0, 1383, 0, 2605, 1384, 1387, 533, 0, 533, - 1389, 0, 0, 1386, 1388, 0, 0, 169, 0, 164, - 168, 0, 0, 2571, 1190, 0, 0, 0, 0, 0, - 616, 617, 630, 0, 621, 622, 619, 623, 624, 0, - 0, 0, 0, 0, 0, 0, 615, 0, 0, 712, - 711, 715, 0, 0, 0, 0, 0, 0, 1392, 0, - 0, 1184, 0, 0, 1391, 1399, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1244, 1243, 0, 0, - 0, 0, 1311, 0, 858, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 171, 730, 0, 729, 0, 165, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 230, - 1445, 1451, 1723, 1723, 1723, 2063, 0, 0, 0, 0, - 1722, 2257, 2260, 1524, 1530, 1523, 1522, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 408, 409, 411, 0, 0, - 0, 0, 832, 0, 835, 838, 1467, 484, 0, 0, - 657, 690, 0, 0, 464, 178, 0, 0, 0, 0, - 745, 0, 1184, 1183, 138, 187, 189, 462, 0, 188, - 190, 192, 193, 194, 191, 195, 0, 709, 713, 0, - 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, - 0, 1854, 0, 0, 163, 0, 0, 606, 610, 0, - 0, 0, 0, 464, 572, 377, 2448, 0, 533, 0, - 2448, 0, 1072, 0, 819, 0, 0, 0, 1146, 1146, - 0, 0, 759, 758, 0, 0, 0, 0, 0, 0, - 1654, 366, 1144, 0, 1490, 0, 366, 937, 366, 1108, - 177, 2315, 0, 899, 0, 0, 0, 0, 366, 1212, - 887, 366, 173, 366, 366, 656, 0, 366, 175, 0, - 0, 366, 931, 366, 2280, 0, 366, 1579, 2448, 533, - 1557, 984, 993, 992, 990, 989, 985, 0, 1004, 0, - 532, 0, 0, 0, 0, 0, 1025, 1026, 0, 0, - 1022, 1027, 0, 1029, 1013, 1015, 1023, 1024, 1030, 1019, - 1018, 1031, 1032, 0, 0, 1050, 724, 0, 0, 0, - 0, 1618, 0, 1616, 0, 1832, 1620, 1609, 1569, 0, - 1568, 0, 599, 1071, 1071, 0, 0, 1001, 0, 0, - 366, 1435, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2215, 0, 2216, 0, 0, 2250, 2246, - 0, 0, 0, 0, 0, 2220, 0, 2223, 2224, 2225, - 2222, 2226, 2221, 0, 0, 2227, 0, 0, 0, 0, - 0, 0, 0, 0, 2206, 2209, 0, 0, 2678, 0, - 0, 0, 0, 2021, 0, 0, 2173, 0, 2206, 0, - 0, 0, 0, 0, 0, 0, 2202, 2242, 0, 498, - 0, 2013, 0, 0, 0, 2124, 0, 2121, 0, 0, - 0, 0, 2263, 0, 2299, 0, 2296, 1957, 1971, 1972, - 1973, 1976, 2271, 0, 2265, 0, 0, 1958, 1984, 0, - 2243, 2009, 0, 2014, 1999, 2228, 2229, 2230, 2231, 2016, - 0, 1992, 1997, 2001, 0, 1980, 0, 1977, 0, 2266, - 2201, 0, 2199, 0, 1968, 1969, 1970, 1962, 1963, 1964, - 1965, 1966, 1967, 1974, 2177, 2175, 2176, 0, 0, 0, - 2147, 0, 0, 1996, 2440, 2476, 0, 1712, 1712, 1712, - 1700, 1710, 2270, 1849, 1723, 1849, 2276, 0, 0, 1953, - 0, 1830, 939, 940, 938, 1526, 1539, 1553, 2203, 1547, - 1689, 0, 0, 0, 1897, 1910, 0, 1938, 1937, 1939, - 1939, 0, 1881, 0, 1922, 1947, 1948, 1949, 1950, 1951, - 1952, 0, 1946, 1890, 935, 0, 2568, 2698, 0, 1810, - 1785, 1787, 1797, 1810, 1817, 1810, 2066, 1847, 2067, 2277, - 0, 1756, 2317, 1528, 1551, 0, 1091, 1092, 0, 1096, - 2678, 2568, 0, 0, 0, 0, 1746, 1780, 0, 1771, - 0, 2287, 1747, 2286, 1748, 1751, 1752, 1742, 1781, 1622, - 0, 1776, 1673, 1672, 0, 1852, 0, 0, 0, 1600, - 1588, 0, 0, 1835, 0, 1786, 1626, 0, 2263, 1784, - 1350, 1245, 1312, 1125, 0, 1898, 1136, 0, 1120, 0, - 1119, 1898, 0, 1137, 0, 1898, 1351, 1246, 1313, 1352, - 1247, 1314, 1353, 1487, 1248, 1486, 1474, 1473, 1472, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 797, 2448, 366, 1501, 1354, 0, 1249, - 362, 1502, 1315, 1506, 815, 814, 0, 0, 1316, 0, - 666, 671, 0, 673, 674, 2371, 2430, 675, 678, 679, - 0, 681, 670, 669, 0, 0, 0, 0, 0, 687, - 692, 0, 0, 0, 0, 0, 0, 1155, 1156, 1355, - 1252, 0, 1317, 0, 1103, 0, 1253, 179, 0, 0, - 282, 2448, 304, 0, 482, 797, 0, 1303, 301, 331, - 0, 346, 341, 342, 340, 2448, 366, 2448, 366, 0, - 0, 0, 0, 0, 343, 338, 339, 335, 0, 0, - 348, 2343, 2414, 2582, 0, 698, 700, 0, 705, 351, - 1273, 373, 372, 371, 0, 356, 0, 378, 381, 0, - 353, 332, 330, 327, 297, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1205, 0, 1358, 1318, - 0, 1340, 0, 0, 0, 0, 737, 1361, 1259, 1321, - 0, 533, 0, 0, 548, 548, 533, 1372, 1260, 167, - 1290, 156, 0, 0, 152, 0, 0, 0, 0, 144, - 1362, 1261, 1322, 0, 0, 1363, 1262, 0, 0, 287, - 609, 620, 625, 1267, 629, 626, 1330, 627, 1370, 1263, - 0, 1366, 1293, 1325, 592, 1184, 1184, 1373, 1393, 1264, - 1184, 0, 1301, 0, 276, 278, 0, 1071, 0, 1265, - 0, 1323, 1365, 1292, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1509, 0, 0, 0, 0, 0, 0, - 366, 0, 0, 0, 1303, 2448, 366, 1364, 0, 1298, - 0, 1338, 0, 0, 399, 0, 1291, 1301, 0, 289, - 1269, 0, 1332, 0, 0, 228, 227, 229, 0, 0, - 0, 0, 2207, 2208, 0, 2205, 2058, 2259, 0, 1520, - 961, 947, 960, 0, 943, 2412, 0, 946, 948, 0, - 0, 0, 949, 953, 954, 0, 945, 942, 944, 0, - 410, 0, 0, 754, 755, 0, 0, 0, 0, 834, - 0, 0, 1499, 0, 141, 664, 0, 0, 0, 659, - 689, 694, 0, 0, 0, 0, 463, 467, 471, 472, - 473, 0, 0, 0, 0, 157, 142, 0, 876, 0, - 533, 0, 747, 1184, 1376, 0, 189, 182, 0, 0, - 710, 0, 1548, 0, 0, 587, 590, 589, 0, 377, - 829, 827, 826, 828, 850, 825, 0, 1853, 1855, 0, - 0, 0, 0, 0, 0, 599, 466, 0, 0, 536, - 0, 575, 0, 0, 0, 0, 572, 0, 0, 0, - 2325, 0, 846, 818, 0, 1114, 0, 1132, 1115, 0, - 0, 0, 0, 1169, 1176, 1145, 1170, 1147, 1176, 0, - 0, 760, 764, 763, 767, 765, 0, 761, 638, 1660, - 1661, 0, 1202, 0, 0, 1495, 0, 1493, 898, 1196, - 366, 0, 366, 0, 366, 1204, 1198, 1200, 1401, 0, - 896, 0, 0, 889, 891, 0, 893, 0, 1005, 535, - 0, 0, 0, 0, 0, 0, 1021, 636, 1028, 0, - 0, 0, 1043, 1038, 1040, 0, 1044, 723, 0, 0, - 1619, 1612, 1614, 1613, 0, 0, 1610, 2212, 888, 0, - 605, 0, 0, 0, 0, 1050, 0, 1045, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1717, 2213, - 2214, 0, 0, 0, 2247, 0, 0, 2099, 0, 2071, - 2073, 0, 2085, 0, 2100, 2056, 2101, 2075, 2077, 2086, - 0, 0, 2193, 0, 2089, 2088, 0, 2023, 2024, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2038, 2090, 2172, - 0, 0, 0, 2092, 2091, 0, 0, 2241, 0, 0, - 0, 2097, 499, 2102, 0, 0, 0, 0, 2108, 0, - 2129, 0, 0, 0, 2046, 2203, 0, 0, 0, 0, - 0, 0, 0, 0, 2015, 2000, 2018, 1994, 1998, 2002, - 0, 2017, 0, 0, 1988, 0, 0, 1986, 2010, 1982, - 0, 0, 2011, 0, 0, 0, 2064, 0, 0, 1712, - 1712, 1712, 1712, 1709, 0, 0, 0, 1756, 0, 1756, - 200, 0, 238, 223, 1525, 1690, 1699, 1916, 0, 1934, - 1932, 1877, 1882, 1955, 1810, 1817, 1810, 0, 0, 1675, - 0, 1797, 0, 1809, 1795, 1808, 0, 0, 1823, 1821, - 0, 1823, 0, 1823, 0, 1789, 0, 1813, 1791, 1808, - 1793, 0, 1839, 2278, 1848, 0, 1769, 1726, 0, 2194, - 1096, 0, 1728, 1750, 1749, 0, 1739, 0, 1778, 1736, - 1623, 1607, 0, 1605, 1592, 1594, 1593, 0, 0, 1595, - 2263, 0, 1605, 1587, 0, 1631, 0, 0, 1852, 0, - 1630, 0, 1898, 1117, 1118, 0, 1141, 0, 1055, 1056, - 0, 1054, 0, 0, 0, 521, 1074, 0, 0, 0, - 797, 0, 0, 525, 0, 1504, 0, 1371, 1289, 668, - 0, 0, 0, 0, 683, 642, 684, 686, 0, 0, - 685, 688, 691, 1301, 0, 295, 1275, 0, 1336, 1149, - 0, 0, 1106, 0, 0, 0, 0, 0, 0, 481, - 694, 326, 0, 0, 0, 0, 386, 0, 306, 318, - 384, 324, 0, 358, 0, 329, 0, 322, 344, 336, - 345, 337, 357, 359, 0, 702, 703, 701, 697, 0, - 704, 706, 0, 375, 0, 0, 0, 352, 0, 1357, - 0, 1301, 0, 291, 1271, 0, 1334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, - 0, 0, 0, 0, 742, 0, 739, 0, 548, 0, - 1385, 0, 1382, 1380, 548, 0, 0, 147, 148, 146, - 0, 155, 0, 0, 0, 0, 0, 0, 1394, 1395, - 1396, 0, 0, 0, 0, 0, 0, 393, 0, 298, - 300, 299, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, - 368, 0, 853, 0, 0, 0, 402, 0, 0, 1349, - 0, 0, 0, 0, 0, 1356, 1254, 2061, 2062, 2059, - 1723, 2258, 0, 0, 0, 958, 0, 0, 0, 0, - 413, 414, 141, 412, 435, 0, 797, 0, 0, 831, - 836, 844, 2512, 2180, 2181, 842, 837, 839, 841, 843, - 840, 0, 0, 0, 0, 503, 0, 0, 0, 490, - 0, 0, 500, 483, 486, 487, 0, 0, 660, 663, - 661, 662, 0, 682, 0, 466, 510, 562, 0, 159, - 0, 0, 160, 158, 0, 0, 377, 744, 0, 741, - 1375, 0, 185, 0, 714, 0, 0, 0, 0, 0, - 1184, 652, 0, 849, 851, 823, 0, 694, 0, 0, - 611, 0, 533, 1580, 594, 0, 564, 466, 562, 571, - 0, 0, 579, 376, 0, 0, 599, 377, 0, 0, - 1075, 0, 845, 0, 0, 1113, 0, 0, 0, 1166, - 1171, 1167, 0, 1146, 1128, 0, 1168, 0, 0, 1174, - 1099, 1148, 1100, 1417, 1418, 1415, 1416, 0, 0, 0, - 0, 0, 0, 1651, 0, 0, 1491, 0, 900, 0, - 883, 0, 885, 366, 731, 0, 366, 0, 0, 0, - 0, 0, 0, 1020, 0, 1014, 1016, 1041, 0, 0, - 1050, 1047, 0, 0, 1617, 1615, 597, 0, 1236, 1237, - 1050, 0, 366, 1049, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2217, 0, 2249, 2245, 0, 2068, - 2219, 2218, 0, 0, 0, 2173, 0, 0, 2022, 2034, - 2035, 2036, 2234, 0, 2041, 0, 2031, 2032, 2033, 2025, - 2026, 2027, 2028, 2029, 2030, 2037, 2238, 2237, 0, 0, - 2094, 2095, 2096, 2240, 2103, 0, 2361, 2130, 0, 2107, - 2123, 2122, 0, 0, 0, 2110, 0, 0, 2119, 0, - 2174, 2300, 2297, 1959, 0, 0, 1985, 2244, 2003, 0, - 2019, 1981, 2193, 0, 0, 0, 0, 0, 1990, 0, - 0, 0, 2150, 2145, 2146, 2170, 0, 0, 0, 0, - 0, 0, 1703, 1702, 1708, 1769, 2058, 1769, 0, 0, - 1878, 1796, 1792, 1794, 0, 2693, 0, 1799, 1806, 0, - 1788, 0, 1822, 1818, 0, 1819, 0, 0, 1820, 0, - 0, 1790, 0, 1806, 0, 1846, 1715, 0, 2141, 0, - 1727, 1094, 1095, 1737, 0, 1740, 2391, 1850, 0, 1606, - 0, 0, 0, 1597, 1603, 1585, 0, 0, 0, 1627, - 1605, 1628, 1138, 0, 0, 1130, 1061, 1062, 1065, 1063, - 1060, 1064, 0, 0, 0, 797, 0, 0, 543, 0, - 1088, 1088, 0, 0, 527, 584, 0, 800, 0, 0, - 0, 798, 366, 1250, 0, 0, 0, 0, 643, 1369, - 1251, 0, 0, 0, 0, 1150, 1304, 0, 0, 1274, - 0, 303, 480, 479, 484, 0, 0, 309, 319, 0, - 314, 0, 1302, 0, 0, 0, 0, 313, 316, 388, - 0, 385, 0, 366, 366, 360, 699, 374, 379, 380, - 383, 1309, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 877, 860, 0, 0, 878, - 879, 0, 0, 0, 1207, 1208, 1206, 1341, 1342, 1347, - 1344, 1343, 1346, 1348, 1345, 0, 1257, 0, 0, 735, - 1305, 1377, 1379, 1378, 0, 1381, 153, 150, 149, 151, - 154, 1306, 1287, 1268, 1331, 593, 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, 1857, 857, 0, 0, 0, 366, 366, - 856, 733, 1270, 0, 1333, 1279, 0, 0, 0, 950, - 0, 0, 0, 952, 418, 436, 141, 0, 753, 817, - 0, 0, 833, 0, 488, 0, 494, 501, 0, 0, - 505, 506, 504, 489, 1184, 533, 1184, 786, 787, 0, - 0, 807, 0, 658, 0, 0, 464, 0, 507, 0, - 0, 468, 162, 161, 0, 0, 0, 748, 752, 750, - 749, 751, 746, 0, 737, 189, 2448, 0, 0, 0, - 0, 591, 585, 588, 1390, 824, 0, 1856, 727, 0, - 377, 607, 0, 0, 0, 464, 599, 0, 469, 474, - 475, 484, 0, 572, 563, 0, 564, 573, 574, 0, - 581, 1465, 0, 600, 581, 0, 0, 0, 848, 0, - 847, 0, 1116, 1133, 1134, 0, 0, 1176, 0, 0, - 1178, 1173, 0, 0, 766, 769, 762, 645, 366, 0, - 1494, 366, 366, 1233, 0, 894, 1035, 1036, 1037, 1034, - 1033, 637, 0, 1039, 998, 725, 0, 598, 366, 0, - 999, 975, 967, 974, 963, 966, 968, 0, 970, 971, - 965, 962, 964, 2248, 2084, 2087, 2098, 0, 2172, 2203, - 0, 0, 2042, 0, 0, 0, 2093, 2688, 0, 0, - 2134, 2135, 0, 2131, 2132, 2127, 2128, 2109, 0, 2501, - 2114, 0, 0, 0, 2007, 2005, 2004, 1989, 0, 0, - 1987, 1983, 0, 2012, 2136, 0, 2152, 2149, 2169, 2203, - 1707, 1706, 1705, 1704, 2141, 2294, 2292, 2141, 239, 1694, - 1842, 0, 1845, 0, 0, 1798, 0, 0, 1800, 0, - 0, 1802, 1804, 0, 0, 0, 0, 0, 0, 2281, - 0, 1768, 0, 1723, 0, 1738, 0, 1604, 1589, 0, - 1590, 1596, 0, 0, 0, 0, 0, 1632, 1625, 1131, - 1139, 0, 0, 0, 523, 0, 538, 0, 0, 0, - 1081, 1090, 1080, 0, 538, 538, 802, 801, 804, 799, - 803, 1505, 0, 676, 677, 680, 1276, 0, 1337, 1285, - 0, 1621, 305, 476, 312, 0, 0, 0, 307, 387, - 389, 308, 311, 315, 368, 328, 321, 0, 0, 0, - 1272, 0, 1335, 1281, 1308, 1359, 1255, 1319, 0, 0, - 866, 0, 0, 0, 0, 1360, 1256, 1320, 0, 0, - 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, - 0, 0, 1514, 0, 0, 367, 855, 854, 368, 401, - 1299, 0, 2060, 0, 951, 956, 957, 955, 0, 407, - 415, 418, 0, 0, 1224, 1224, 0, 0, 485, 502, - 0, 583, 542, 583, 0, 0, 0, 0, 0, 695, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 740, 739, 184, 0, 464, 0, 694, 0, 852, 0, - 0, 0, 599, 466, 0, 0, 1577, 465, 0, 0, - 477, 0, 575, 564, 572, 0, 0, 596, 0, 1458, - 0, 602, 0, 0, 0, 796, 1172, 0, 1186, 0, - 1127, 1097, 1181, 0, 1699, 1849, 0, 0, 0, 0, - 779, 0, 649, 1225, 1492, 884, 886, 732, 1042, 0, - 1046, 1050, 969, 2233, 2174, 2039, 0, 2236, 2235, 2239, - 0, 2104, 0, 2105, 2133, 2111, 2115, 0, 2112, 2113, - 2008, 2006, 1991, 2138, 0, 1723, 2171, 1677, 1676, 0, - 1697, 1847, 0, 0, 1841, 0, 0, 1871, 0, 0, - 0, 1807, 1825, 0, 1803, 1801, 0, 1814, 0, 1816, - 2390, 2661, 2565, 0, 1755, 1757, 1760, 1762, 1761, 1763, - 1759, 2140, 2142, 0, 1734, 2195, 1851, 0, 0, 0, - 1076, 0, 0, 1633, 1634, 1629, 1043, 0, 366, 1088, - 0, 1184, 544, 2512, 545, 1087, 1089, 1093, 0, 1184, - 1184, 672, 0, 0, 284, 0, 310, 320, 370, 382, - 0, 1621, 0, 0, 864, 873, 873, 861, 0, 0, - 880, 1258, 736, 0, 547, 0, 279, 1284, 1278, 0, - 0, 0, 1516, 1517, 0, 0, 0, 0, 0, 1307, - 366, 1280, 959, 0, 438, 445, 419, 423, 1508, 0, - 1508, 0, 420, 424, 1508, 1508, 417, 1849, 434, 1224, - 0, 1221, 1220, 531, 613, 0, 0, 492, 0, 553, - 491, 0, 808, 0, 0, 693, 0, 466, 562, 0, - 520, 511, 512, 513, 514, 516, 515, 517, 518, 519, - 509, 508, 0, 694, 870, 377, 1465, 734, 0, 0, - 707, 0, 694, 0, 1580, 595, 564, 466, 562, 470, - 484, 0, 579, 572, 575, 0, 576, 0, 580, 0, - 0, 0, 599, 1518, 1075, 0, 0, 797, 1185, 1146, - 0, 0, 1175, 1179, 1180, 0, 0, 0, 0, 1228, - 773, 774, 768, 770, 0, 781, 785, 644, 0, 0, - 648, 639, 694, 366, 0, 2040, 0, 0, 2117, 2116, - 0, 2156, 0, 0, 0, 1688, 1840, 1843, 0, 1874, - 0, 0, 0, 0, 1860, 0, 1805, 0, 0, 1815, - 0, 0, 0, 1764, 0, 0, 0, 1773, 0, 1602, - 1849, 0, 1599, 0, 1642, 0, 1635, 1057, 0, 1058, - 1082, 0, 583, 0, 1093, 1096, 533, 583, 583, 1286, - 0, 613, 0, 323, 0, 292, 1282, 0, 0, 875, - 875, 0, 0, 0, 0, 0, 0, 395, 0, 0, - 1510, 0, 1511, 1512, 1515, 403, 416, 0, 443, 0, - 441, 440, 442, 0, 431, 0, 0, 0, 0, 0, - 0, 406, 1219, 1223, 1222, 0, 493, 0, 495, 0, - 0, 539, 540, 541, 0, 497, 549, 550, 805, 0, - 810, 0, 696, 0, 0, 694, 561, 718, 0, 0, - 0, 1459, 0, 0, 586, 728, 1465, 599, 572, 0, - 564, 478, 0, 581, 575, 579, 577, 578, 0, 1462, - 0, 601, 0, 1084, 795, 0, 1176, 1187, 1182, 1177, - 1421, 0, 0, 771, 776, 775, 1508, 780, 0, 0, - 0, 647, 646, 722, 1000, 2232, 2120, 2106, 2118, 2151, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1872, - 1873, 1858, 0, 0, 1862, 1812, 1838, 0, 0, 0, - 1758, 2143, 2144, 2316, 1591, 1601, 1077, 0, 0, 0, - 1642, 0, 0, 548, 0, 1096, 1078, 542, 797, 797, - 1621, 317, 369, 0, 0, 0, 871, 874, 862, 863, - 882, 881, 738, 1621, 0, 391, 390, 0, 394, 0, - 439, 448, 0, 446, 421, 426, 0, 430, 428, 427, - 422, 425, 530, 0, 0, 0, 0, 0, 0, 551, - 0, 552, 0, 809, 0, 0, 0, 720, 869, 0, - 0, 464, 694, 1460, 1578, 575, 564, 572, 0, 0, - 566, 1088, 1088, 451, 579, 581, 1463, 1464, 0, 0, - 500, 0, 1098, 1420, 1419, 1699, 0, 0, 0, 782, - 783, 778, 0, 0, 2648, 2391, 2620, 0, 2168, 2157, - 2168, 2168, 2148, 0, 0, 0, 1844, 0, 1861, 1864, - 0, 0, 0, 1870, 1863, 1865, 0, 1824, 0, 1836, - 1766, 0, 1765, 1849, 1641, 0, 0, 366, 537, 797, - 546, 1079, 553, 526, 524, 285, 1621, 865, 0, 280, - 0, 396, 1513, 444, 0, 429, 612, 496, 582, 558, - 0, 557, 0, 555, 554, 806, 811, 0, 694, 859, - 1465, 708, 579, 572, 575, 0, 565, 0, 1090, 1090, - 581, 449, 0, 0, 377, 0, 1403, 1699, 1402, 1404, - 1412, 1409, 1411, 1410, 1408, 0, 1231, 1232, 772, 777, - 0, 0, 0, 2161, 2160, 2159, 2163, 2162, 0, 2155, - 2153, 2154, 0, 0, 0, 0, 1867, 1868, 1869, 1866, - 1811, 0, 1767, 1598, 1644, 0, 0, 1636, 1637, 0, - 1059, 528, 797, 293, 872, 0, 447, 556, 533, 533, - 694, 719, 1461, 581, 575, 579, 1088, 567, 1089, 569, - 568, 453, 1084, 1085, 0, 581, 785, 0, 1413, 1407, - 1675, 1662, 0, 0, 784, 0, 0, 0, 2165, 0, - 2166, 0, 0, 0, 0, 0, 0, 1639, 0, 0, - 0, 1638, 529, 0, 560, 559, 721, 452, 579, 581, - 1090, 500, 1083, 0, 1849, 0, 1405, 1699, 0, 0, - 790, 2158, 2164, 2167, 1693, 1692, 0, 0, 1696, 0, - 1837, 1643, 1640, 0, 0, 0, 0, 1645, 392, 581, - 450, 570, 377, 1086, 1066, 0, 1406, 0, 0, 792, - 0, 788, 791, 793, 794, 0, 0, 1859, 1649, 0, - 0, 0, 454, 581, 0, 0, 0, 756, 0, 1723, - 0, 0, 0, 0, 1849, 0, 0, 0, 789, 0, - 0, 1646, 1650, 0, 1647, 1067, 790, 1229, 1230, 0, - 1695, 0, 0, 0, 757, 1648 + 2410, 2409, 2411, 2412, 2764, 2413, 2414, 2415, 2709, 2710, + 2765, 2711, 2712, 2416, 2417, 2418, 2419, 2420, 2421, 2422, + 2423, 2424, 2713, 2714, 2425, 2426, 2427, 2428, 2429, 2715, + 2766, 2430, 2431, 2432, 2433, 2434, 2435, 2767, 2436, 2437, + 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2768, 2445, 2446, + 2447, 2769, 2448, 2449, 2450, 2451, 2452, 2453, 2716, 2717, + 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, + 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2718, 2482, + 2483, 2484, 2485, 2719, 2486, 2487, 2488, 2489, 2720, 2490, + 2491, 2492, 2493, 2770, 2771, 2494, 2495, 2496, 2497, 2498, + 2721, 2722, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2772, + 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, + 2516, 2517, 2518, 2773, 2723, 2519, 2520, 2521, 2522, 2724, + 2725, 2726, 2523, 2774, 2775, 2524, 2776, 2525, 2727, 2728, + 2729, 2730, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2731, + 2777, 2533, 2778, 2534, 2535, 2536, 2537, 2538, 2539, 2540, + 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, + 2551, 2552, 2553, 2554, 2732, 2779, 2733, 2555, 2556, 2557, + 2558, 2559, 2560, 2561, 2734, 2735, 2562, 2563, 2564, 2780, + 2565, 2736, 2566, 2737, 2567, 2568, 2569, 2570, 2571, 2572, + 2573, 2574, 2575, 2576, 2738, 2781, 2577, 2782, 2739, 2578, + 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, + 2589, 2740, 2590, 2741, 2593, 2591, 2592, 2594, 2595, 2596, + 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2742, 2604, 2605, + 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, + 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2783, 2623, 2624, + 2625, 2626, 2627, 2743, 2628, 2629, 2630, 2631, 2632, 2633, + 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, + 2644, 2744, 2645, 2646, 2784, 2647, 2648, 2745, 2649, 2650, + 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, + 2661, 2662, 2746, 2663, 2664, 2665, 2666, 2785, 2667, 2668, + 2669, 2670, 2671, 2672, 2747, 2748, 2673, 2674, 2749, 2675, + 2750, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, + 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2751, + 2752, 2694, 2786, 2695, 2696, 2697, 2698, 2699, 2700, 2701, + 2702, 2703, 2704, 2705, 2753, 2754, 2755, 2756, 2757, 2758, + 2759, 2760, 2761, 2762, 2763, 2706, 2707, 2708, 146, 0, + 0, 2339, 2378, 2379, 2382, 2377, 409, 408, 1660, 2336, + 2378, 1549, 0, 1528, 659, 0, 1464, 436, 1707, 0, + 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 140, 0, 0, 460, 459, 0, 0, 1081, 465, 0, + 0, 0, 0, 0, 649, 1591, 2591, 1589, 1661, 277, + 280, 281, 278, 279, 2360, 0, 1221, 1222, 1224, 0, + 0, 1234, 915, 916, 0, 0, 0, 929, 0, 0, + 0, 913, 0, 0, 0, 935, 0, 932, 0, 0, + 936, 933, 910, 934, 917, 0, 909, 0, 0, 1234, + 937, 0, 0, 911, 0, 0, 0, 0, 1464, 1588, + 466, 1707, 0, 1572, 1573, 1574, 1550, 1562, 1575, 1567, + 1569, 1568, 1570, 1571, 1566, 2359, 2396, 1005, 1005, 1005, + 1005, 1002, 1003, 1005, 1005, 1005, 2611, 0, 0, 984, + 0, 986, 2361, 1005, 1010, 2404, 541, 541, 541, 0, + 1009, 1014, 541, 0, 1432, 1473, 2338, 1719, 0, 985, + 1431, 2673, 1578, 0, 0, 0, 0, 2630, 1441, 261, + 2642, 2747, 2673, 260, 255, 256, 227, 0, 0, 1009, + 541, 0, 1464, 1439, 981, 1726, 1724, 0, 2323, 2423, + 2439, 2536, 252, 2623, 2632, 2642, 2747, 2673, 2705, 203, + 213, 208, 0, 270, 2642, 2747, 2673, 266, 1461, 0, + 1687, 1835, 1834, 2332, 0, 1434, 1433, 1551, 0, 1554, + 0, 2606, 1691, 1694, 1556, 1692, 2380, 1910, 1939, 1917, + 1939, 1939, 1906, 1906, 2469, 1919, 1907, 1908, 1944, 0, + 1939, 1906, 1911, 0, 1909, 1947, 1947, 1934, 3, 1891, + 1892, 1893, 1894, 1920, 1921, 1895, 1926, 1927, 1931, 1896, + 1961, 1906, 2381, 1728, 1729, 2323, 4, 2374, 5, 2285, + 2373, 6, 7, 1683, 0, 0, 1, 1707, 0, 1561, + 1723, 1723, 0, 1723, 0, 1675, 1683, 1678, 1682, 0, + 0, 0, 0, 0, 0, 1435, 0, 0, 0, 940, + 0, 1476, 1066, 0, 0, 0, 0, 0, 1318, 0, + 1118, 1117, 2383, 2366, 2367, 2368, 0, 2364, 2365, 2384, + 2385, 2386, 0, 2505, 1318, 0, 0, 2200, 2211, 2212, + 2213, 2427, 2486, 2208, 2209, 2210, 2202, 2203, 2204, 2205, + 2206, 2207, 0, 0, 1216, 2201, 0, 2505, 0, 1318, + 0, 175, 0, 150, 1318, 0, 0, 2505, 0, 0, + 2505, 0, 0, 0, 0, 0, 2505, 0, 0, 0, + 0, 0, 175, 2541, 0, 150, 2505, 0, 0, 1455, + 0, 0, 0, 1457, 1460, 1447, 0, 2282, 0, 2283, + 2340, 1543, 0, 1542, 1536, 1546, 1541, 1531, 0, 2332, + 0, 0, 0, 0, 923, 0, 0, 913, 0, 0, + 0, 924, 0, 925, 926, 0, 0, 0, 0, 922, + 0, 1445, 1437, 0, 1580, 1582, 1581, 1583, 1579, 541, + 0, 0, 0, 2505, 0, 150, 1515, 0, 2505, 150, + 0, 0, 464, 463, 150, 2364, 462, 461, 2427, 2486, + 0, 1108, 0, 1191, 150, 2505, 0, 196, 2505, 718, + 2505, 1556, 139, 0, 662, 0, 830, 2541, 150, 0, + 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, + 0, 0, 0, 648, 659, 1592, 1590, 0, 1225, 254, + 253, 1223, 927, 2505, 1150, 145, 0, 0, 2505, 1496, + 2505, 145, 944, 928, 0, 914, 2505, 145, 1114, 2505, + 2369, 185, 0, 912, 2427, 2486, 2505, 145, 1218, 0, + 2505, 145, 2505, 181, 2505, 145, 2505, 145, 2505, 663, + 0, 0, 2505, 145, 2505, 2541, 183, 931, 2505, 145, + 938, 2505, 145, 2334, 2505, 0, 1448, 0, 1584, 0, + 1564, 2751, 0, 1707, 1005, 1004, 0, 1005, 0, 1005, + 0, 1005, 0, 1005, 0, 0, 0, 1005, 2362, 2363, + 987, 0, 1011, 0, 1019, 0, 1018, 1017, 1016, 0, + 0, 0, 1020, 0, 1839, 1619, 0, 1429, 1444, 0, + 0, 0, 142, 0, 1247, 1244, 142, 1246, 1245, 142, + 142, 1440, 259, 257, 0, 0, 0, 0, 0, 0, + 1446, 0, 1438, 0, 0, 0, 2342, 2344, 2345, 2214, + 2285, 0, 2710, 2711, 2712, 2274, 0, 2713, 2714, 2715, + 2766, 2095, 2081, 2090, 2096, 2082, 2084, 2091, 2716, 2717, + 2030, 2718, 2719, 2357, 2720, 2721, 2722, 2724, 2725, 2726, + 2727, 2728, 2729, 2730, 2731, 2086, 2088, 2732, 2733, 2735, + 0, 2358, 2736, 2737, 2572, 2739, 2740, 2742, 2743, 2092, + 2745, 2746, 2093, 2747, 2748, 2749, 2750, 2356, 508, 2094, + 2752, 2754, 2755, 2756, 2757, 2759, 2760, 2761, 2762, 0, + 0, 0, 2329, 0, 2059, 0, 1899, 1900, 1922, 1923, + 1901, 1928, 1929, 1902, 0, 2328, 1964, 2159, 2058, 2076, + 0, 2064, 2065, 0, 2057, 2053, 2161, 1709, 2324, 0, + 2054, 2341, 2343, 2275, 1709, 2322, 216, 272, 0, 273, + 2330, 2642, 204, 251, 219, 250, 221, 220, 218, 217, + 0, 2425, 205, 0, 0, 206, 0, 0, 0, 0, + 269, 267, 0, 1436, 0, 1837, 1836, 2333, 949, 0, + 1553, 1550, 2224, 0, 1693, 0, 0, 0, 1938, 1925, + 1933, 1932, 0, 1915, 1914, 1913, 0, 1912, 1939, 1939, + 1937, 1916, 1891, 0, 0, 0, 1943, 0, 1941, 1887, + 1883, 0, 1950, 1951, 1952, 1949, 1962, 1948, 0, 1897, + 1953, 0, 1906, 1903, 1794, 0, 1673, 1672, 8, 0, + 1558, 1560, 1534, 1556, 1721, 1722, 0, 0, 0, 0, + 0, 0, 0, 0, 1781, 1739, 1740, 1742, 1778, 1782, + 1790, 0, 1679, 0, 0, 0, 1841, 0, 0, 1462, + 0, 0, 0, 0, 0, 1149, 0, 0, 0, 0, + 941, 0, 0, 0, 1482, 0, 1484, 1485, 1486, 0, + 0, 0, 1487, 1488, 1476, 263, 1495, 1492, 1475, 1477, + 1490, 0, 0, 0, 0, 0, 0, 0, 1507, 0, + 189, 190, 0, 675, 659, 0, 2505, 0, 0, 0, + 0, 1159, 1166, 1317, 0, 0, 0, 0, 0, 0, + 0, 0, 1160, 1158, 0, 1161, 265, 1171, 1198, 1201, + 0, 0, 1116, 1119, 0, 0, 0, 0, 0, 1308, + 0, 0, 0, 1308, 0, 0, 0, 1317, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 288, 290, 303, + 368, 0, 640, 0, 0, 0, 643, 0, 2505, 1318, + 0, 0, 0, 1220, 0, 0, 0, 0, 0, 0, + 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 148, 149, 154, 0, 0, 0, 0, 1201, + 0, 0, 0, 0, 0, 0, 0, 626, 639, 0, + 0, 0, 0, 0, 636, 0, 0, 150, 293, 616, + 622, 0, 0, 0, 725, 724, 0, 0, 0, 0, + 0, 0, 1405, 0, 1404, 0, 0, 0, 0, 0, + 1505, 1504, 0, 0, 0, 0, 0, 0, 1308, 0, + 282, 284, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 401, 402, 0, + 0, 0, 154, 0, 0, 1308, 0, 295, 0, 0, + 1456, 1453, 1454, 0, 1459, 0, 0, 0, 0, 2067, + 0, 2228, 1731, 2226, 2339, 2281, 0, 2387, 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, 2278, 2277, 2337, 2388, + 2389, 2390, 2391, 2284, 0, 0, 239, 240, 238, 1544, + 241, 1545, 1540, 0, 1526, 0, 0, 0, 0, 0, + 0, 0, 0, 2427, 2486, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 838, 1476, 1514, 0, 0, 0, 668, 0, 2505, + 0, 152, 876, 0, 828, 465, 0, 0, 0, 0, + 1381, 152, 0, 0, 192, 0, 0, 722, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, + 0, 152, 0, 2505, 619, 2505, 0, 541, 541, 0, + 0, 141, 138, 0, 0, 0, 0, 0, 0, 0, + 0, 1665, 1664, 1667, 1666, 0, 1663, 0, 143, 144, + 0, 1208, 1233, 0, 0, 0, 0, 0, 905, 930, + 0, 0, 1202, 0, 0, 2505, 145, 2505, 0, 2505, + 0, 0, 0, 1210, 145, 0, 1204, 0, 0, 1206, + 0, 1407, 0, 921, 919, 918, 920, 0, 0, 903, + 0, 0, 0, 0, 0, 898, 0, 0, 900, 0, + 0, 0, 0, 1707, 1563, 0, 995, 0, 999, 0, + 990, 0, 996, 0, 991, 988, 989, 0, 994, 0, + 0, 542, 544, 0, 0, 2451, 2468, 0, 2494, 2529, + 2530, 2582, 2597, 2626, 2632, 2638, 0, 2667, 2678, 0, + 1025, 1063, 1015, 734, 0, 0, 1629, 1430, 2233, 0, + 1707, 0, 0, 1248, 0, 0, 138, 258, 228, 0, + 0, 1063, 0, 2630, 1443, 980, 659, 0, 2055, 0, + 2062, 2063, 2273, 0, 0, 0, 0, 0, 0, 2061, + 0, 0, 0, 2295, 0, 2295, 0, 0, 0, 0, + 0, 1986, 0, 0, 2232, 0, 0, 2232, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1987, 1968, 1969, 2059, 2224, 0, 2060, 2353, 2350, 1961, + 0, 1961, 2392, 2214, 0, 2211, 2212, 2213, 2865, 2866, + 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, + 2877, 2878, 2879, 2880, 2881, 0, 2882, 2883, 2884, 2885, + 2886, 2888, 2887, 2889, 2890, 2891, 2892, 2893, 2894, 2288, + 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, + 2906, 2907, 2908, 2909, 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, 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, 2993, 2994, 2995, + 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, 2001, 3050, 3051, 3052, 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, 2003, 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, 3144, 3142, + 3143, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, + 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, + 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, + 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, + 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, + 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3202, 3201, 3203, + 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, + 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, + 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, + 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, + 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, + 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, + 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, + 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, + 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, + 3294, 3295, 3296, 0, 2208, 2209, 2210, 2202, 2203, 2204, + 2205, 2206, 2207, 2218, 0, 0, 2327, 2393, 0, 2161, + 0, 1983, 0, 2169, 0, 0, 1794, 2348, 0, 2346, + 2276, 1794, 274, 275, 271, 0, 0, 223, 224, 222, + 0, 244, 243, 248, 249, 215, 247, 0, 242, 226, + 2145, 2144, 225, 214, 233, 211, 209, 229, 231, 232, + 212, 210, 268, 0, 0, 0, 145, 1561, 1548, 0, + 0, 2288, 0, 2222, 0, 0, 2220, 0, 0, 0, + 1791, 0, 1695, 0, 1699, 0, 0, 0, 1936, 1935, + 1888, 1884, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 942, 0, 1904, 0, 1857, + 2375, 2376, 2286, 1727, 1561, 0, 1557, 1690, 1689, 1732, + 1733, 1100, 1688, 1761, 1762, 0, 0, 0, 0, 1787, + 1785, 1752, 1743, 1751, 0, 0, 1749, 0, 1753, 1964, + 1780, 1677, 1737, 1738, 1741, 1676, 0, 1783, 0, 1632, + 1781, 1742, 1616, 0, 1594, 0, 0, 1842, 0, 0, + 1463, 0, 0, 0, 1129, 1131, 0, 1130, 0, 1133, + 0, 1142, 0, 0, 1128, 1147, 0, 1136, 1134, 0, + 1503, 0, 0, 0, 0, 0, 1483, 0, 0, 0, + 2667, 262, 1486, 1491, 1478, 1489, 0, 0, 0, 0, + 0, 1065, 1064, 0, 0, 1084, 0, 0, 508, 1510, + 530, 0, 370, 0, 0, 0, 0, 0, 0, 0, + 0, 824, 821, 0, 0, 820, 0, 673, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, + 0, 1308, 0, 301, 0, 1168, 0, 1167, 0, 1172, + 0, 0, 1169, 1164, 1165, 2632, 2642, 2673, 264, 1170, + 1200, 0, 1199, 1195, 0, 1111, 0, 1112, 0, 0, + 0, 0, 0, 2478, 2505, 309, 332, 0, 1307, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 354, 0, 0, 357, 356, 0, + 0, 0, 0, 0, 362, 0, 340, 0, 341, 0, + 361, 0, 0, 0, 641, 642, 0, 0, 0, 1308, + 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, + 1217, 0, 751, 0, 0, 2632, 1196, 0, 1390, 0, + 2666, 1391, 1394, 541, 0, 541, 1396, 0, 0, 1393, + 1395, 0, 0, 178, 0, 173, 177, 0, 0, 2632, + 1197, 0, 0, 0, 0, 0, 624, 625, 638, 0, + 629, 630, 627, 631, 632, 0, 0, 0, 0, 0, + 0, 0, 623, 0, 0, 720, 719, 723, 0, 0, + 0, 0, 0, 0, 1399, 0, 0, 1191, 0, 0, + 1398, 1406, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1251, 1250, 0, 0, 0, 0, 1318, 0, + 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 180, 738, 0, 737, 0, 174, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 1452, 1458, 1731, 1731, + 1731, 2073, 0, 0, 0, 0, 1730, 2279, 2282, 1531, + 1537, 1530, 1529, 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, 840, 0, + 843, 846, 1474, 492, 0, 0, 665, 698, 0, 0, + 468, 187, 0, 0, 0, 0, 753, 0, 1191, 1190, + 147, 138, 196, 466, 0, 195, 197, 199, 200, 201, + 198, 202, 0, 717, 721, 0, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 1862, 0, 0, + 172, 0, 0, 614, 618, 0, 0, 0, 0, 468, + 580, 381, 2505, 0, 541, 0, 2505, 0, 137, 0, + 827, 0, 0, 0, 1153, 1153, 0, 0, 767, 766, + 0, 0, 0, 0, 0, 0, 1662, 145, 1151, 0, + 1497, 0, 145, 945, 145, 1115, 186, 2370, 0, 907, + 0, 0, 0, 0, 145, 1219, 895, 145, 182, 145, + 145, 664, 0, 145, 184, 0, 0, 145, 939, 145, + 2335, 0, 145, 1587, 2505, 541, 1565, 992, 1001, 1000, + 998, 997, 993, 0, 1012, 0, 540, 0, 0, 0, + 0, 0, 1033, 1034, 0, 0, 1030, 1035, 0, 1037, + 1021, 1023, 1031, 1032, 1038, 1027, 1026, 1039, 1040, 0, + 0, 0, 1052, 732, 0, 0, 0, 0, 1626, 0, + 1624, 0, 1840, 1628, 1617, 1577, 0, 1576, 0, 607, + 1242, 1241, 1243, 0, 1009, 0, 145, 0, 1442, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2237, 0, 2238, 0, 0, 2272, 2268, 0, 0, 0, + 0, 0, 2242, 0, 2245, 2246, 2247, 2244, 2248, 2243, + 0, 0, 2249, 0, 0, 0, 2059, 2291, 2291, 2316, + 0, 2315, 2321, 2228, 1964, 0, 0, 2312, 2306, 0, + 2312, 0, 0, 0, 0, 0, 0, 2228, 2231, 0, + 0, 2743, 0, 0, 0, 0, 2031, 0, 0, 2195, + 0, 2228, 0, 0, 0, 0, 0, 0, 0, 2224, + 2264, 0, 506, 0, 2021, 0, 0, 0, 2143, 0, + 2140, 0, 0, 0, 0, 2285, 0, 2354, 0, 2351, + 1965, 1979, 1980, 1981, 1984, 2326, 0, 2287, 0, 0, + 1966, 1992, 0, 2265, 2017, 0, 2022, 2007, 2296, 2250, + 2251, 2252, 2253, 2024, 0, 2000, 2005, 2009, 0, 2305, + 1988, 0, 1985, 0, 2288, 2223, 0, 2221, 0, 1976, + 1977, 1978, 1970, 1971, 1972, 1973, 1974, 1975, 1982, 2199, + 2197, 2198, 0, 0, 2169, 0, 0, 2004, 0, 0, + 2075, 2497, 2536, 0, 1720, 1720, 1720, 1708, 1718, 2325, + 1857, 1731, 1857, 2331, 0, 0, 1961, 0, 1838, 947, + 948, 946, 1533, 1547, 1561, 2225, 1555, 1697, 0, 0, + 0, 1905, 1918, 0, 1945, 1946, 1947, 1947, 0, 1889, + 0, 1930, 1955, 1956, 1957, 1958, 1959, 1960, 0, 1954, + 1898, 943, 0, 2628, 2763, 0, 1818, 1793, 1795, 1805, + 1818, 1825, 1818, 2077, 1855, 2078, 2079, 2332, 0, 1764, + 2372, 1535, 1559, 0, 1098, 1099, 0, 1103, 2743, 2628, + 0, 0, 0, 0, 1754, 1788, 0, 1779, 0, 2342, + 1755, 2341, 1756, 1759, 1760, 1750, 1789, 1630, 0, 1784, + 1681, 1680, 0, 1860, 0, 0, 0, 1608, 1596, 0, + 0, 1843, 0, 1794, 1634, 0, 2285, 1792, 1357, 1252, + 1319, 1132, 0, 1906, 1143, 0, 1127, 0, 1126, 1906, + 0, 1144, 0, 1906, 1358, 1253, 1320, 1359, 1254, 1321, + 1360, 1494, 1255, 1493, 1481, 1480, 1479, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 805, 2505, 145, 1508, 1361, 0, 1256, 369, 1509, + 1322, 1513, 823, 822, 0, 0, 1323, 0, 674, 679, + 0, 681, 682, 2427, 2486, 683, 686, 687, 0, 689, + 678, 677, 0, 0, 0, 0, 0, 695, 700, 0, + 0, 0, 0, 0, 0, 1162, 1163, 1362, 1259, 0, + 1324, 0, 1110, 0, 1260, 188, 0, 0, 289, 2505, + 311, 0, 490, 805, 0, 1310, 308, 338, 0, 353, + 348, 349, 347, 2505, 145, 2505, 145, 0, 0, 0, + 0, 0, 350, 345, 346, 342, 0, 0, 355, 2399, + 2470, 2643, 0, 706, 708, 0, 713, 358, 1280, 377, + 376, 375, 0, 363, 0, 382, 385, 0, 360, 339, + 337, 334, 304, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1212, 0, 1365, 1325, 0, 1347, + 0, 0, 0, 0, 745, 1368, 1266, 1328, 0, 541, + 0, 0, 556, 556, 541, 1379, 1267, 176, 1297, 165, + 0, 0, 161, 0, 0, 0, 0, 153, 1369, 1268, + 1329, 0, 0, 1370, 1269, 0, 0, 294, 617, 628, + 633, 1274, 637, 634, 1337, 635, 1377, 1270, 0, 1373, + 1300, 1332, 600, 1191, 1191, 1380, 1400, 1271, 1191, 0, + 1308, 0, 283, 285, 0, 142, 0, 1272, 0, 1330, + 1372, 1299, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1516, 0, 0, 0, 0, 0, 0, 145, 0, + 0, 0, 1310, 2505, 145, 1371, 0, 1305, 0, 1345, + 0, 0, 403, 0, 1298, 1308, 0, 296, 1276, 0, + 1339, 0, 0, 235, 234, 236, 0, 0, 0, 0, + 2229, 2230, 0, 2227, 2068, 2281, 0, 1527, 969, 955, + 968, 0, 951, 2468, 0, 954, 956, 0, 0, 0, + 957, 961, 962, 0, 953, 950, 952, 0, 414, 0, + 0, 762, 763, 0, 0, 0, 0, 842, 0, 0, + 1506, 0, 150, 672, 0, 0, 0, 667, 697, 702, + 0, 0, 0, 0, 467, 471, 475, 476, 477, 0, + 0, 0, 0, 166, 151, 0, 884, 0, 541, 0, + 755, 1191, 1383, 0, 196, 191, 0, 0, 718, 0, + 1556, 0, 0, 595, 598, 597, 0, 381, 837, 835, + 834, 836, 858, 833, 0, 1861, 1863, 0, 0, 0, + 0, 0, 0, 607, 470, 0, 0, 544, 0, 583, + 0, 0, 0, 0, 580, 0, 0, 0, 2380, 0, + 854, 826, 0, 1121, 0, 1139, 1122, 0, 0, 0, + 0, 1176, 1183, 1152, 1177, 1154, 1183, 0, 0, 768, + 772, 771, 775, 773, 0, 769, 646, 1668, 1669, 0, + 1209, 0, 0, 1502, 0, 1500, 906, 1203, 145, 0, + 145, 0, 145, 1211, 1205, 1207, 1408, 0, 904, 0, + 0, 897, 899, 0, 901, 0, 1013, 543, 0, 0, + 0, 0, 0, 0, 1029, 644, 1036, 0, 0, 0, + 1051, 1046, 1048, 0, 1063, 1057, 0, 731, 0, 0, + 1627, 1620, 1622, 1621, 0, 0, 1618, 2234, 896, 0, + 613, 0, 1063, 1054, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1725, 2235, 2236, 0, 0, + 0, 2269, 0, 0, 2112, 0, 2083, 2085, 0, 2098, + 0, 2113, 2066, 2291, 0, 2295, 2289, 2132, 0, 0, + 0, 2295, 0, 2315, 0, 0, 2127, 2129, 0, 0, + 0, 2305, 2305, 2114, 2087, 2089, 2099, 0, 0, 2215, + 0, 2102, 2101, 0, 2033, 2034, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2048, 2103, 2194, 0, 0, 0, + 2105, 2104, 0, 0, 2263, 0, 0, 0, 2110, 507, + 2115, 0, 0, 0, 0, 2121, 0, 2151, 0, 0, + 0, 2056, 2225, 0, 0, 0, 0, 0, 0, 0, + 2298, 2299, 2300, 2297, 0, 2023, 2008, 2026, 2002, 2006, + 2010, 0, 2305, 2025, 0, 0, 2028, 0, 0, 1996, + 0, 0, 1994, 2018, 1990, 0, 0, 2019, 0, 2074, + 0, 0, 0, 2172, 2167, 2168, 1720, 1720, 1720, 1720, + 1717, 0, 0, 0, 1764, 0, 1764, 207, 0, 245, + 230, 1532, 1698, 1707, 1924, 0, 1942, 1940, 1885, 1890, + 1963, 1818, 1825, 1818, 0, 0, 1683, 0, 1805, 0, + 1817, 1803, 1816, 0, 0, 1831, 1829, 0, 1831, 0, + 1831, 0, 1797, 0, 1821, 1799, 1816, 1801, 0, 1847, + 2333, 1856, 0, 1777, 1734, 0, 2216, 1103, 0, 1736, + 1758, 1757, 0, 1747, 0, 1786, 1744, 1631, 1615, 0, + 1613, 1600, 1602, 1601, 0, 0, 1603, 2285, 0, 1613, + 1595, 0, 1639, 0, 0, 1860, 0, 1638, 0, 1906, + 1124, 1125, 0, 1148, 0, 1068, 1069, 0, 1067, 0, + 0, 0, 529, 1083, 0, 0, 0, 805, 0, 0, + 533, 0, 1511, 0, 1378, 1296, 676, 0, 0, 0, + 0, 691, 650, 692, 694, 0, 0, 693, 696, 699, + 1308, 0, 302, 1282, 0, 1343, 1156, 0, 0, 1113, + 0, 0, 0, 0, 0, 0, 489, 486, 333, 0, + 0, 0, 0, 390, 0, 313, 325, 388, 331, 0, + 365, 0, 336, 0, 329, 351, 343, 352, 344, 364, + 366, 0, 710, 711, 709, 705, 0, 712, 714, 0, + 379, 0, 0, 0, 359, 0, 1364, 0, 1308, 0, + 298, 1278, 0, 1341, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1346, 0, 0, 0, + 0, 750, 0, 747, 0, 556, 0, 1392, 0, 1389, + 1387, 556, 0, 0, 156, 157, 155, 0, 164, 0, + 0, 0, 0, 0, 0, 1401, 1402, 1403, 0, 0, + 0, 0, 0, 0, 397, 0, 305, 307, 306, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 404, 372, 0, 861, + 0, 0, 0, 406, 0, 0, 1356, 0, 0, 0, + 0, 0, 1363, 1261, 2071, 2072, 2069, 1731, 2280, 0, + 0, 0, 966, 0, 0, 0, 0, 417, 418, 150, + 416, 439, 0, 805, 0, 0, 839, 844, 852, 2572, + 2202, 2203, 850, 845, 847, 849, 851, 848, 0, 0, + 0, 0, 511, 0, 0, 0, 498, 0, 0, 508, + 491, 494, 495, 0, 0, 668, 671, 669, 670, 0, + 690, 0, 470, 518, 570, 0, 168, 0, 0, 169, + 167, 0, 0, 381, 752, 0, 749, 1382, 0, 194, + 0, 722, 0, 0, 0, 0, 0, 1191, 660, 0, + 857, 859, 831, 0, 702, 0, 0, 619, 0, 541, + 1588, 602, 0, 572, 470, 570, 579, 0, 0, 587, + 380, 0, 0, 607, 381, 0, 0, 1084, 0, 853, + 0, 0, 1120, 0, 0, 0, 1173, 1178, 1174, 0, + 1153, 1135, 0, 1175, 0, 0, 1181, 1106, 1155, 1107, + 1424, 1425, 1422, 1423, 0, 0, 0, 0, 0, 0, + 1659, 0, 0, 1498, 0, 908, 0, 891, 0, 893, + 145, 739, 0, 145, 0, 0, 0, 0, 0, 0, + 1028, 0, 1022, 1024, 1049, 0, 0, 1063, 1062, 0, + 1053, 1061, 1059, 1060, 1058, 0, 0, 1625, 1623, 605, + 0, 0, 145, 1063, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2239, 0, 2271, 2267, 0, 2080, + 2241, 2240, 2294, 2293, 0, 0, 0, 2317, 0, 0, + 2295, 2309, 2308, 0, 0, 2307, 2295, 2295, 0, 0, + 0, 2195, 0, 0, 2032, 2044, 2045, 2046, 2256, 0, + 2051, 0, 2041, 2042, 2043, 2035, 2036, 2037, 2038, 2039, + 2040, 2047, 2260, 2259, 0, 0, 2107, 2108, 2109, 2262, + 2116, 0, 2417, 2152, 0, 2120, 2142, 2141, 0, 0, + 0, 2123, 0, 0, 2138, 0, 2196, 2355, 2352, 1967, + 0, 0, 1993, 2266, 2011, 0, 2027, 2029, 2302, 2304, + 1989, 2215, 0, 0, 0, 0, 0, 1998, 0, 0, + 2192, 0, 0, 0, 2174, 2171, 0, 0, 0, 0, + 1711, 1710, 1716, 1777, 2068, 1777, 0, 0, 1886, 1804, + 1800, 1802, 0, 2758, 0, 1807, 1814, 0, 1796, 0, + 1830, 1826, 0, 1827, 0, 0, 1828, 0, 0, 1798, + 0, 1814, 0, 1854, 1723, 0, 2163, 0, 1735, 1101, + 1102, 1745, 0, 1748, 2447, 1858, 0, 1614, 0, 0, + 0, 1605, 1611, 1593, 0, 0, 0, 1635, 1613, 1636, + 1145, 0, 0, 1137, 1074, 1075, 1078, 1076, 1073, 1077, + 0, 0, 0, 805, 0, 0, 551, 0, 1097, 1097, + 0, 0, 535, 592, 0, 808, 0, 0, 0, 806, + 145, 1257, 0, 0, 0, 0, 651, 1376, 1258, 0, + 0, 0, 0, 1157, 1311, 0, 0, 1281, 0, 310, + 488, 487, 0, 485, 702, 0, 0, 316, 326, 0, + 321, 0, 1309, 0, 0, 0, 320, 323, 322, 392, + 0, 389, 0, 145, 145, 367, 707, 378, 383, 384, + 387, 1316, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 885, 868, 0, 0, 886, + 887, 0, 0, 0, 1214, 1215, 1213, 1348, 1349, 1354, + 1351, 1350, 1353, 1355, 1352, 0, 1264, 0, 0, 743, + 1312, 1384, 1386, 1385, 0, 1388, 162, 159, 158, 160, + 163, 1313, 1294, 1275, 1338, 601, 0, 0, 0, 1273, + 0, 1331, 0, 1290, 1284, 0, 0, 0, 0, 0, + 1375, 1304, 1336, 1374, 1302, 1334, 1301, 1333, 1303, 1335, + 1295, 0, 0, 1865, 865, 0, 0, 0, 145, 145, + 864, 741, 1277, 0, 1340, 1286, 0, 0, 0, 958, + 0, 0, 0, 960, 422, 440, 150, 0, 761, 825, + 0, 0, 841, 0, 496, 0, 502, 509, 0, 0, + 513, 514, 512, 497, 1191, 541, 1191, 794, 795, 0, + 0, 815, 0, 666, 0, 0, 468, 0, 515, 0, + 0, 472, 171, 170, 0, 0, 0, 756, 760, 758, + 757, 759, 754, 0, 745, 196, 2505, 0, 0, 0, + 0, 599, 593, 596, 1397, 832, 0, 1864, 735, 0, + 381, 615, 0, 0, 0, 468, 607, 0, 473, 478, + 479, 492, 0, 580, 571, 0, 572, 581, 582, 0, + 589, 1472, 0, 608, 589, 0, 0, 0, 856, 0, + 855, 0, 1123, 1140, 1141, 0, 0, 1183, 0, 0, + 1185, 1180, 0, 0, 774, 777, 770, 653, 145, 0, + 1501, 145, 145, 1240, 0, 902, 1043, 1044, 1045, 1042, + 1041, 645, 0, 1047, 1006, 1056, 733, 0, 606, 0, + 1007, 145, 983, 975, 982, 971, 974, 976, 0, 978, + 979, 973, 970, 972, 2270, 2097, 0, 2290, 2131, 2314, + 2313, 2130, 2320, 0, 2311, 2310, 0, 0, 2100, 2111, + 0, 2194, 2225, 0, 0, 2052, 0, 0, 0, 2106, + 2753, 0, 0, 2156, 2157, 0, 2153, 2154, 2149, 2150, + 2122, 0, 2561, 2133, 0, 0, 2148, 2015, 2013, 2012, + 2301, 2303, 1997, 0, 0, 1995, 1991, 0, 2020, 2158, + 2191, 2225, 2160, 0, 1731, 1715, 1714, 1713, 1712, 2163, + 2349, 2347, 2163, 246, 1702, 1850, 0, 1853, 0, 0, + 1806, 0, 0, 1808, 0, 0, 1810, 1812, 0, 0, + 0, 0, 0, 0, 2336, 0, 1776, 0, 1731, 0, + 1746, 0, 1612, 1597, 0, 1598, 1604, 0, 0, 0, + 0, 0, 1640, 1633, 1138, 1146, 0, 0, 0, 531, + 0, 546, 0, 0, 0, 1090, 140, 1089, 0, 546, + 546, 810, 809, 812, 807, 811, 1512, 0, 684, 685, + 688, 1283, 0, 1344, 1292, 0, 1629, 312, 484, 483, + 492, 319, 0, 0, 0, 314, 391, 393, 315, 318, + 372, 335, 328, 0, 0, 0, 1279, 0, 1342, 1288, + 1315, 1366, 1262, 1326, 0, 0, 874, 0, 0, 0, + 0, 1367, 1263, 1327, 0, 0, 0, 0, 0, 1629, + 0, 0, 0, 0, 0, 0, 0, 0, 1521, 0, + 0, 371, 863, 862, 372, 405, 1306, 0, 2070, 0, + 959, 964, 965, 963, 0, 411, 419, 422, 0, 0, + 1231, 1231, 0, 0, 493, 510, 0, 591, 550, 591, + 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 748, 747, 193, 0, + 468, 0, 702, 0, 860, 0, 0, 0, 607, 470, + 0, 0, 1585, 469, 0, 0, 481, 0, 583, 572, + 580, 0, 0, 604, 0, 1465, 0, 610, 0, 0, + 0, 804, 1179, 0, 1193, 0, 1134, 1104, 1188, 0, + 1707, 1857, 0, 0, 0, 0, 787, 0, 657, 1232, + 1499, 892, 894, 740, 1050, 0, 1063, 1055, 977, 2292, + 2319, 2128, 2318, 2255, 2196, 2049, 0, 2258, 2257, 2261, + 0, 2117, 0, 2118, 2155, 2124, 2134, 0, 2125, 2146, + 0, 0, 2016, 2014, 1999, 2193, 0, 2178, 1685, 1684, + 0, 1705, 1855, 0, 0, 1849, 0, 0, 1879, 0, + 0, 0, 1815, 1833, 0, 1811, 1809, 0, 1822, 0, + 1824, 2446, 2722, 2625, 0, 1763, 1765, 1768, 1770, 1769, + 1771, 1767, 2162, 2164, 0, 1742, 2217, 1859, 0, 0, + 0, 1085, 0, 0, 1641, 1642, 1637, 1051, 0, 145, + 1097, 0, 1191, 552, 2572, 553, 1096, 1100, 139, 0, + 1191, 1191, 680, 0, 0, 291, 480, 0, 317, 327, + 374, 386, 0, 1629, 0, 0, 872, 881, 881, 869, + 0, 0, 888, 1265, 744, 0, 555, 0, 286, 1291, + 1285, 0, 0, 0, 1523, 1524, 0, 0, 0, 0, + 0, 1314, 145, 1287, 967, 0, 442, 449, 423, 427, + 1515, 0, 1515, 0, 424, 428, 1515, 1515, 421, 1857, + 438, 1231, 0, 1228, 1227, 539, 621, 0, 0, 500, + 0, 561, 499, 0, 816, 0, 0, 701, 0, 470, + 570, 0, 528, 519, 520, 521, 522, 524, 523, 525, + 526, 527, 517, 516, 0, 702, 878, 381, 1472, 742, + 0, 0, 715, 0, 702, 0, 1588, 603, 572, 470, + 570, 474, 492, 0, 587, 580, 583, 0, 584, 0, + 588, 0, 0, 0, 607, 1525, 1084, 0, 0, 805, + 1192, 1153, 0, 0, 1182, 1186, 1187, 0, 0, 0, + 0, 1235, 781, 782, 776, 778, 0, 789, 793, 652, + 0, 0, 656, 647, 702, 145, 0, 2050, 0, 0, + 2136, 2135, 2147, 2126, 2173, 0, 0, 0, 0, 0, + 0, 0, 1696, 1848, 1851, 0, 1882, 0, 0, 0, + 0, 1868, 0, 1813, 0, 0, 1823, 0, 0, 0, + 1772, 0, 0, 0, 1781, 0, 1610, 1857, 0, 1607, + 0, 1650, 0, 1643, 1070, 0, 1071, 1091, 0, 591, + 0, 1103, 1100, 541, 591, 591, 1293, 0, 621, 0, + 330, 0, 299, 1289, 0, 0, 883, 883, 0, 0, + 0, 0, 0, 0, 399, 0, 0, 1517, 0, 1518, + 1519, 1522, 407, 420, 0, 447, 0, 445, 444, 446, + 0, 435, 0, 0, 0, 0, 0, 0, 410, 1226, + 1230, 1229, 0, 501, 0, 503, 0, 0, 547, 548, + 549, 0, 505, 557, 558, 813, 0, 818, 0, 704, + 0, 0, 702, 569, 726, 0, 0, 0, 1466, 0, + 0, 594, 736, 1472, 607, 580, 0, 572, 482, 0, + 589, 583, 587, 585, 586, 0, 1469, 0, 609, 0, + 1093, 803, 0, 1183, 1194, 1189, 1184, 1428, 0, 0, + 779, 784, 783, 1515, 788, 0, 0, 0, 655, 654, + 730, 1008, 2254, 2139, 2119, 2137, 2709, 2447, 2681, 0, + 2190, 2179, 2190, 2190, 2170, 0, 0, 0, 0, 0, + 1880, 1881, 1866, 0, 0, 1870, 1820, 1846, 0, 0, + 0, 1766, 2165, 2166, 2371, 1599, 1609, 1086, 0, 0, + 0, 1650, 0, 0, 556, 0, 1087, 1103, 550, 805, + 805, 1629, 324, 373, 0, 0, 0, 879, 882, 870, + 871, 890, 889, 746, 1629, 0, 395, 394, 0, 398, + 0, 443, 452, 0, 450, 425, 430, 0, 434, 432, + 431, 426, 429, 538, 0, 0, 0, 0, 0, 0, + 559, 0, 560, 0, 817, 0, 0, 0, 728, 877, + 0, 0, 468, 702, 1467, 1586, 583, 572, 580, 0, + 0, 574, 1097, 1097, 455, 587, 589, 1470, 1471, 0, + 0, 508, 0, 1105, 1427, 1426, 1707, 0, 0, 0, + 790, 791, 786, 0, 0, 0, 2183, 2182, 2181, 2185, + 2184, 0, 2177, 2175, 2176, 0, 0, 0, 1852, 0, + 1869, 1872, 0, 0, 0, 1878, 1871, 1873, 0, 1832, + 0, 1844, 1774, 0, 1773, 1857, 1649, 0, 0, 145, + 545, 805, 554, 1088, 561, 534, 532, 292, 1629, 873, + 0, 287, 0, 400, 1520, 448, 0, 433, 620, 504, + 590, 566, 0, 565, 0, 563, 562, 814, 819, 0, + 702, 867, 1472, 716, 587, 580, 583, 0, 573, 0, + 140, 140, 589, 453, 0, 0, 381, 0, 1410, 1707, + 1409, 1411, 1419, 1416, 1418, 1417, 1415, 0, 1238, 1239, + 780, 785, 0, 0, 0, 0, 2187, 0, 2188, 0, + 0, 0, 0, 1875, 1876, 1877, 1874, 1819, 0, 1775, + 1606, 1652, 0, 0, 1644, 1645, 0, 1072, 536, 805, + 300, 880, 0, 451, 564, 541, 541, 702, 727, 1468, + 589, 583, 587, 1097, 575, 577, 576, 457, 1093, 1094, + 0, 589, 793, 0, 1420, 1414, 1683, 1670, 0, 0, + 792, 0, 2180, 2186, 2189, 0, 0, 0, 0, 0, + 0, 1647, 0, 0, 0, 1646, 537, 0, 568, 567, + 729, 456, 587, 589, 140, 508, 1092, 0, 1857, 0, + 1412, 1707, 0, 0, 798, 1701, 1700, 0, 0, 1704, + 0, 1845, 1651, 1648, 0, 0, 0, 0, 1653, 396, + 589, 454, 578, 381, 1095, 1079, 0, 1413, 0, 0, + 800, 0, 796, 799, 801, 802, 0, 0, 1867, 1657, + 0, 0, 0, 458, 589, 0, 0, 0, 764, 0, + 1731, 0, 0, 0, 0, 1857, 0, 0, 0, 797, + 0, 0, 1654, 1658, 0, 1655, 1080, 798, 1236, 1237, + 0, 1703, 0, 0, 0, 765, 1656 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 57, 58, 59, 60, 61, 62, 1588, 2975, 2829, - 3765, 3766, 63, 64, 1584, 65, 66, 67, 68, 1498, - 69, 1081, 1837, 2989, 70, 2665, 826, 827, 828, 2530, - 2531, 2920, 2532, 2519, 1348, 1783, 1520, 800, 801, 1480, - 1521, 72, 73, 1342, 2508, 74, 75, 76, 1551, 1645, - 1552, 1553, 1492, 1883, 4833, 5593, 3555, 2784, 3813, 3556, - 3557, 4199, 4200, 4289, 5607, 5608, 77, 1661, 1662, 78, - 79, 2957, 3731, 4342, 5199, 5200, 5436, 639, 4856, 4857, - 5423, 5424, 5621, 5772, 5773, 2990, 670, 3808, 4426, 3756, - 4927, 3757, 4928, 3758, 4929, 4189, 4190, 3742, 4373, 4374, - 2028, 4869, 4375, 3759, 4888, 5470, 3760, 2684, 5636, 3024, - 1955, 1953, 5371, 5449, 4687, 4688, 4262, 5645, 5646, 5647, - 5893, 4890, 4933, 4934, 5809, 5810, 3811, 4432, 4940, 5257, - 5447, 3453, 81, 3784, 3785, 82, 733, 1859, 3910, 734, - 3027, 671, 735, 2991, 87, 3017, 5638, 3018, 1614, 2843, - 4355, 3888, 88, 1108, 4164, 5282, 5530, 5531, 724, 89, - 1845, 90, 91, 2970, 3749, 92, 2701, 3470, 93, 94, - 3489, 3490, 3491, 95, 4383, 5218, 1554, 3544, 3545, 3546, - 3547, 4220, 96, 1840, 2998, 2999, 97, 98, 99, 3128, - 3129, 100, 2906, 101, 102, 103, 104, 4256, 4789, 4904, - 3586, 3772, 4399, 4902, 105, 3735, 2992, 3045, 3846, 3847, - 5280, 5522, 5523, 5524, 5696, 5928, 5526, 5698, 5831, 5700, - 4879, 6060, 6061, 5507, 4153, 4701, 107, 4880, 4881, 5651, - 108, 2699, 109, 110, 1814, 2963, 2964, 4356, 3034, 3821, - 3822, 4412, 4413, 111, 3673, 112, 4765, 4766, 672, 5659, - 5599, 5758, 113, 114, 4769, 4770, 115, 116, 117, 118, - 119, 725, 1043, 1044, 727, 1163, 1164, 3425, 1125, 120, - 2540, 121, 3711, 122, 1234, 4992, 123, 759, 1179, 1180, - 2993, 125, 769, 3147, 771, 3113, 3114, 1971, 3892, 3893, - 4500, 126, 127, 3125, 3150, 128, 1485, 2675, 2676, 4682, - 2994, 673, 1219, 3031, 3448, 5359, 5110, 5360, 5820, 5984, - 5111, 5377, 3369, 4102, 130, 674, 1526, 2740, 1131, 1132, - 3038, 3826, 2645, 2646, 1684, 4453, 2648, 3828, 2649, 1459, - 2650, 1118, 1119, 3834, 3835, 3836, 3837, 4449, 4459, 4460, - 5274, 5515, 4456, 1833, 5268, 5269, 131, 1523, 2737, 132, - 133, 134, 1567, 968, 1141, 1142, 135, 686, 687, 136, - 5441, 137, 1121, 138, 5278, 139, 140, 791, 792, 141, - 142, 2754, 4202, 143, 1524, 144, 145, 3580, 3581, 4781, - 146, 147, 148, 2815, 2816, 149, 150, 151, 152, 153, - 5918, 5987, 5988, 5989, 4467, 5825, 154, 1211, 155, 156, - 157, 158, 196, 1009, 1010, 1011, 921, 2995, 5259, 160, - 161, 1481, 1482, 1483, 1484, 2670, 162, 163, 164, 3856, - 3857, 165, 166, 167, 168, 1817, 169, 170, 5414, 171, - 172, 1787, 173, 174, 1017, 1018, 1019, 1020, 1785, 3317, - 633, 845, 1375, 1381, 1424, 1425, 1426, 176, 737, 177, - 1214, 1048, 738, 1172, 179, 739, 2627, 3399, 4117, 4118, - 4119, 4122, 5094, 4659, 740, 3395, 182, 1978, 3134, 3137, - 3391, 741, 3405, 3406, 3407, 4126, 742, 5363, 5364, 5739, - 5957, 5958, 6011, 6047, 743, 761, 1111, 3049, 744, 1309, - 188, 189, 190, 901, 848, 849, 3322, 5320, 5545, 192, - 2500, 3300, 778, 1430, 889, 890, 891, 910, 2930, 2593, - 2594, 2618, 2619, 1439, 1440, 2606, 2610, 2611, 3382, 3375, - 2599, 4096, 5344, 5345, 5346, 5347, 5348, 5349, 4648, 2614, - 2615, 1442, 1443, 1444, 2623, 193, 2583, 3350, 3351, 3352, - 4073, 4074, 5857, 4088, 4084, 4633, 5071, 3353, 837, 1209, - 1451, 4641, 5859, 3354, 5060, 5061, 5324, 4092, 3361, 4113, - 3796, 3797, 3798, 3355, 5553, 5554, 5854, 5855, 5326, 5327, - 2651, 1404, 875, 1310, 876, 1417, 1311, 1391, 878, 1312, - 1313, 1314, 881, 1315, 1316, 1317, 884, 1383, 1318, 1319, - 1400, 1413, 1414, 1376, 5328, 1321, 1322, 1323, 3357, 1324, - 4578, 5032, 5018, 3226, 3227, 2526, 4574, 3996, 4568, 2495, - 3290, 5083, 5351, 5352, 4036, 4603, 5046, 5315, 5713, 5838, - 5839, 5939, 1325, 1326, 1327, 3287, 2489, 971, 1328, 4358, - 2491, 3217, 3195, 1687, 3196, 1981, 2002, 3166, 3183, 3184, - 3264, 3197, 3205, 3210, 3218, 3251, 1329, 3168, 3169, 3935, - 2004, 1330, 1015, 1690, 1016, 1419, 3246, 1338, 1339, 1332, - 1972, 838, 5067, 1167, 1770, 775, 1333, 1334, 1335, 1336, - 1560, 942, 1134, 1135, 892, 894, 895, 2587, 629, 621, - 944, 3548, 2492, 630, 623, 624, 1775, 2493 + -1, 57, 58, 59, 60, 1086, 1091, 1882, 1901, 61, + 62, 1604, 3011, 2865, 3823, 3824, 63, 64, 1600, 65, + 66, 67, 68, 1514, 69, 1854, 3025, 70, 2701, 830, + 831, 832, 2566, 2567, 2956, 2568, 2555, 1364, 1800, 1536, + 804, 805, 1496, 1537, 72, 73, 1358, 2544, 74, 75, + 76, 1567, 1661, 1568, 1569, 1508, 4943, 5730, 3613, 2820, + 3871, 3614, 3615, 4286, 4287, 4376, 5744, 5745, 77, 1677, + 1678, 78, 79, 2993, 3789, 4429, 5325, 5326, 5568, 649, + 4966, 4967, 5555, 5556, 5758, 5913, 5914, 3026, 680, 3866, + 4513, 3814, 5037, 3815, 5038, 3816, 5039, 4833, 4834, 4276, + 4277, 3800, 4460, 4461, 2051, 4979, 4462, 3817, 4998, 5602, + 3818, 2720, 5773, 3060, 1973, 1971, 5502, 5581, 4795, 4796, + 4349, 5782, 5783, 5784, 6035, 5000, 5043, 5044, 5950, 5951, + 3869, 4519, 5050, 5383, 5579, 3511, 81, 3842, 3843, 82, + 743, 1876, 3970, 744, 3063, 681, 745, 3027, 87, 3053, + 5775, 3054, 1630, 2879, 4442, 3946, 88, 1114, 4251, 5408, + 5662, 5663, 734, 89, 1862, 90, 91, 3006, 3807, 92, + 2737, 3528, 93, 94, 3547, 3548, 3549, 95, 4470, 5344, + 1570, 3602, 3603, 3604, 3605, 4307, 96, 1857, 3034, 3035, + 97, 98, 99, 3165, 3166, 100, 2942, 101, 102, 103, + 104, 4343, 4899, 5014, 3644, 3830, 4486, 5012, 105, 3793, + 3028, 3081, 3904, 3905, 5406, 5654, 5655, 5656, 5833, 6070, + 5658, 5835, 5972, 5837, 4989, 6191, 6192, 5639, 4240, 4809, + 107, 4990, 4991, 5788, 108, 2735, 109, 110, 1831, 2999, + 3000, 4443, 3070, 3879, 3880, 4499, 4500, 111, 3731, 112, + 4875, 4876, 682, 5796, 5736, 5899, 113, 114, 4879, 4880, + 115, 116, 117, 118, 119, 735, 1048, 1049, 737, 1169, + 1170, 3483, 1131, 120, 2576, 121, 3769, 122, 1244, 5103, + 123, 769, 1185, 1186, 3029, 125, 779, 3184, 781, 3149, + 3150, 1989, 3950, 3951, 4587, 126, 127, 3954, 3955, 4594, + 3162, 128, 1501, 2711, 2712, 4790, 3030, 683, 3506, 5490, + 5235, 5491, 5961, 6120, 5236, 3427, 4189, 130, 684, 1542, + 2776, 1137, 1138, 3074, 3884, 2681, 2682, 1700, 4540, 2684, + 3886, 2685, 1475, 2686, 1124, 1125, 3892, 3893, 3894, 3895, + 4536, 4546, 4547, 5400, 5647, 4543, 1850, 5394, 5395, 131, + 1539, 2773, 132, 133, 134, 1583, 972, 1147, 1148, 135, + 696, 697, 136, 5573, 137, 1127, 138, 5404, 139, 140, + 1229, 1230, 796, 141, 142, 2790, 4289, 143, 1540, 144, + 145, 3638, 3639, 4891, 146, 147, 148, 2851, 2852, 149, + 150, 151, 152, 153, 6060, 6123, 6124, 6125, 4554, 5966, + 154, 1217, 155, 156, 157, 158, 196, 1013, 1014, 1015, + 925, 3031, 5385, 160, 161, 1497, 1498, 1499, 1500, 2706, + 162, 163, 164, 3914, 3915, 165, 166, 167, 168, 1834, + 169, 170, 5546, 171, 172, 1804, 173, 174, 1022, 1023, + 1024, 1025, 1802, 3374, 643, 849, 1391, 1397, 1440, 1441, + 1442, 176, 747, 177, 1220, 1053, 748, 1178, 179, 749, + 2663, 3457, 4204, 4205, 4206, 4209, 5219, 4767, 750, 3453, + 182, 1996, 3171, 3174, 3449, 751, 3463, 3464, 3465, 4213, + 752, 5494, 5495, 5880, 6094, 6095, 6145, 6178, 753, 771, + 1117, 3085, 754, 1324, 188, 189, 190, 905, 852, 853, + 3379, 5451, 5682, 192, 2536, 3357, 788, 1446, 893, 894, + 895, 914, 2966, 2629, 2630, 2654, 2655, 1455, 1456, 2642, + 2646, 2647, 3440, 3433, 2635, 4183, 5475, 5476, 5477, 5478, + 5479, 5480, 4756, 2650, 2651, 1458, 1459, 1460, 2659, 193, + 2619, 3407, 3408, 3409, 4160, 4161, 5999, 4175, 4171, 4741, + 5196, 3410, 841, 1215, 1467, 4749, 6001, 3411, 5185, 5186, + 5455, 4179, 3419, 4200, 3854, 3855, 3856, 3412, 5690, 5691, + 5996, 5997, 5457, 5458, 2687, 1420, 879, 1325, 880, 1433, + 1326, 1407, 882, 1327, 1328, 1329, 885, 1330, 1331, 1332, + 888, 1399, 1333, 1334, 1416, 1429, 1430, 1392, 5459, 1336, + 1337, 1338, 3414, 1339, 4684, 5155, 5141, 3279, 3280, 2562, + 5441, 4680, 4073, 4674, 2529, 2533, 5208, 5482, 5483, 3350, + 4124, 4714, 5174, 5678, 5850, 5851, 5982, 1340, 1341, 1342, + 3342, 2523, 975, 1343, 4445, 2525, 3270, 3248, 1703, 3249, + 1999, 2021, 3203, 3220, 3221, 3318, 3250, 3258, 3263, 3271, + 3304, 1344, 3205, 3206, 3992, 2023, 1345, 1019, 1706, 1020, + 1435, 3299, 3229, 4005, 5117, 3230, 3319, 4106, 3237, 3238, + 4021, 4011, 3231, 1346, 4013, 1354, 1355, 1348, 1990, 842, + 5192, 1173, 1787, 785, 1349, 1350, 1351, 1352, 1576, 946, + 1140, 1141, 896, 898, 899, 2623, 639, 631, 948, 3606, + 2526, 640, 633, 634, 1792, 2527 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -5539 +#define YYPACT_NINF -5456 static const int yypact[] = { - 8508, 1611, 21059, -5539, -5539, 1611, 65898, -5539, 75478, 1337, - 190, 102, 185, 19937, 75957, 84579, 416, 341, 14567, 1611, - 84579, 2369, 56318, 71167, 891, 84579, 1141, 594, 56318, 84579, - 85058, 1092, 1153, 786, 85537, 76436, 69730, 1138, 84579, 1321, - 1419, 86016, 76915, 1145, 77394, 594, 52035, 127, 1099, 86495, - 84579,108459, 1419, 77873, 77873, 77873, 1844, 1863, 1413, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, 1373, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 2097, -5539, 825, - 2493, 1417, 182, 1466, -5539, -5539, 2014, 65898, 84579, 84579, - 84579, 1776, 84579, 1635, 84579, 774, 65898, 61587, 78352, 1721, - 1772, 48101, 86974, -5539, 65898, 84579, 59192, 65898, 84579, 84579, - 87453, 84579, 87932, 84579, 1578, 73562, 84579, 1887, 84579, 84579, - 59671, 88411, 2098, 926, 236, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 1878, - 1707, -5539, 254, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 64461, 84579, 20566, 1141, 2014, -5539, 1844, 84579, - 2146, 84579, 1900, 88890, 84579, -5539, 84579, 1987, 89369, 813, - 1870, 61587, 1898, 48597, 2091, 84579, 84579, 61587, 89848, 90327, - 90806, 84579, 84579, -5539, -5539, 2087, 84579, -5539, 2234, 62066, - 1910, 2238, 2374, 2320, 1306, -5539, 78831, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, 65419, 341, -5539, -5539, 2291, - 66377, 2370, -5539, -5539, 91285,108924, 2143, -5539, 839, 66856, - 62545, 2525, 2155, 49093, 2557, -5539, 67335, -5539, 63024, 67814, - -5539, -5539, -5539, -5539, -5539, 91764, -5539, 92243, 2254, 2370, - -5539,109389, 63503, -5539, 2413, 92722, 93201, 93680, 2014, 2152, - 2051, 1386, 42763, -5539, -5539, -5539, 2176, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, 267, 866, 284, 231, - 305, -5539, -5539, 237, 239, 243, 267, 2638, 2638, -5539, - 84579, -5539, -5539, 866, 67, 2275, 2170, 2170, 2170, 2388, - 33, -5539, 2170, 2329, -5539, -5539, -5539, -5539, 77394, -5539, - 2181, 1141, 2232, 2682, 2302, -5539, -5539, -5539, -5539, -5539, - 64461, 2684, 2684, 84579, -5539, -5539, 2731, 2304, 2576, 2312, - -5539, -5539, -5539, 2511, 2519, 2540, 117, 1141, 263, -5539, - 2665, -5539, 2589, 29048, 29048, 1141, 79310, 94159, 228, 64940, - 2150, 79789, 2359, 1523, 2563, -5539, -5539, -5539, 677, -5539, - 2835, 2404, 2671, 2312, 926, 44689, -5539, -5539, 2419, 1707, - 77394, -5539, -5539, -5539, 64461, 2746, 31523, 84579, 2417, -5539, - 2422, 2417, -5539, -5539, 2484, -5539, 2484, 2484, 2428, 2428, - 2647, 2473, -5539, -5539, -5539, 2020, 2484, 2428, -5539,110319, - -5539, 10, 1830, -5539, -5539, 2943, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, 2512, -5539, 1013, 1967, -5539, -5539, - -5539, 29048, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 2499, - 2515, 1417, -5539, 11445, 64461, 84579, 1658, 1658, 2936, 1658, - 1546, 1819, -5539, 2762, -5539, 2845, 2811, 2812, 77394, 2537, - 318, -5539, 1708, 2543, 1984, 2542, 1735, 1130, -5539, 801, - 84579, 294, 2599, 80268, 5610, 2577, 1707, 2604, -5539, -5539, - -5539, -5539, 2722, 412, -5539, -5539, -5539, -5539, 2893, 2952, - 5979, 355, 80747, -5539, -5539, -5539, -5539, 84579, 84579, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 2642, 1309, - -5539, -5539, 2635, 2990, 2866, 6623, 1151, 2960, 2819, 1267, - 8638, 2879, 172, 3016, 6419, 1392, 3024, 1789, 2161, 81226, - 84579, 2982, 3026, 4344, 1726, 928, 2894, 983, 2960, 3017, - 2841, 1267, 3030, 5295, 84579, -5539, 2953, 3066, 676, -5539, - 352, -5539, 22669, 31523, 51556, -5539, 1707, 626, -5539, -5539, - 55839, -5539, 2747, 2904, 884, 65898, 2695, 84579, 84579, -5539, - 108459, 65898, -5539, 2917, 49589, 65898, -5539, 65898, -5539, -5539, - 3031,108459, 84579, 84579, -5539, 84579, -5539, -5539, 2699, -5539, - -5539, -5539, -5539, -5539, 2170, 84579, 3131,108459, 2932, 271, - 1758, 3171, 84579, 2941, 1758, 2750, 94638, -5539, -5539, 1758, - -5539, -5539, -5539, 84579, 84579, 2716, 1766, 2931, 777, 1758, - 2947, 3172, 3177, 2951, 2800, 2956, 2422, 3140, 2928, 1025, - 220, 2094, 1758, 2780, 95117, 95596, 84579, 2782, 84579, 2684, - 65898, 2814, 65898, 65898, 84579, 3072, 84579, -5539, 2918, -5539, - -5539, 989, -5539, -5539, -5539, -5539, -5539, 3089, -5539, 193, - 3091, 2745, 3093, 1600, 3094, 215, -5539, -5539, 2785, -5539, - 3096, 251, -5539, 3098, -5539, 2748, 96075, -5539, 96554, 97033, - 3100, 253, -5539, 61587, 3101, 251, 3102, 2748, 3104, 251, - 3105, 899, 3106, -5539, 1069, 3103, 3108, 215, 3114, 2126, - 2748, -5539, 3115, 261, -5539, 3116, 275, -5539, 3118, 2986, - -5539, 31523, -5539, 2869, -5539, 1099, 1330, 1386, 866, -5539, - 84579, 866, 84579, 866, 84579, 866, 84579, 866, 84579, 84579, - 84579, 866, -5539, -5539, -5539, 84579, 2775, 84579, -5539, 84579, - -5539, -5539, -5539, 72125, 61587, 72604, -5539, 84579, -5539, 195, - 1141, -5539, -5539,108459, 3239, 61587, 2684, 1752, -5539, 84579, - 84579, -5539, -5539, -5539, 3053, 84579, 3119, 3120, 72125, 61587, - -5539, 97512, -5539, 65419, 3002, 2790, -5539, -5539, -5539, -5539, - -5539, 1953, 2300, 268, 2365, 31523, 2794, 268, 268, 2795, - 3129, -5539, -5539, -5539, 315, 2797, 2801, -5539, 269, 269, - -5539, 2804, 2805, -5539, 270, 2806, 2809, 2393, 2394, 277, - 2810, 2815, 2816, 2020, 268, 2820, 31523, -5539, 2822, 269, - 2823, 2824, 2825, 2395, 2826, -5539, 2427, 2827, 332, 334, - 2832, 2834, -5539, 3033, -5539, 298, 2836, 2838, 2839, 2848, - 2849, 2853, 2854, 2856, 31523, 31523, 31523, -5539, 26568, 1707, - 2450, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 300, - 47605, -5539, 2852, -5539, -5539, 3037, -5539, -5539, 31523, -5539, - -5539, 741, -5539, 322, -5539, -5539, -5539, 1707, 3142, 2855, - -5539, -5539, 1714, 2859, -5539, 2253, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, 63982, 3277, -5539, 478, 1141, 352, - 1873, 3244, 53923, 54402, -5539, -5539, 3128, -5539, 84579, -5539, - -5539, 1707, 151, 1906, -5539, 2176, 19935, 2078, 2417, 84579, - 84579, 3325, -5539, 2864, -5539, -5539, 31523, -5539, -5539, -5539, - 2638, -5539, 2484, 2484, -5539, -5539, 3329, 2954, 2955, 2638, - -5539, 2638, -5539, 2873, 2875, 2638, 2958, 2959, 2962, -5539, - 2867, 2963, 2638, -5539, -5539, 57276, 2071, -5539, 3204, 258, - -5539, -5539, -5539, 2083, -5539, 2881, -5539, 2422, -5539, -5539, - 1417, 1417, 31523, 1417, 287, 1280, 29543, 32018, 3216, 3109, - 1797, 1463, 3220, -5539, 3112, 1546, 1819, 77394, 84579, 77394, - 97991, 3014, 31523, -5539, 3328, 2983, 2985, 3036, 52993, -5539, - 2987, 2957, 2988, 3043, 2905, 2996, 2997, 3052, -5539, 3181, - -5539, -5539, 3001, 3340, 3003, 98470, -5539, -5539, 883, -5539, - -5539, -5539, 883, -5539, 2930, 1730, 276, 304, 3005, 403, - 235, 3332, -5539, 1107, -5539, -5539, 3061, -5539, 9251, 84579, - 3271, 6253, 3141, 355, 3062, -5539, -5539, -5539, 3199, 3022, - 84579, 3027, 3154, 355, 336, 98949, -5539, -5539, 84579, -5539, - -5539, -5539, -5539, 2721, 3307, 25637, -5539, 2059, 3028, 3009, - 3035, 84579, 68772, 2175, 3133, 3163, 1826, 2270, 623, 3092, - 84579, 1956, 3173, 84579, 2965, 3039, 3040, 3263, 2966, 490, - 3363, 2967, -5539, -5539, -5539, 3331, -5539, 2453, 2461, 3157, - -5539, 3264, 3309, 7192, 3023, 3034,107064, -5539, 3057, 52, - 50085, 84579, 84579, 3059, 3060, 99428, 2721, 3351, 73083, 73083, - 3064, 3065, 44208, 3366, 1780, 3067, -5539, -5539, -5539, 1780, - 3068, 3070, 99907, 2721, 3356, 84579, 3071, 3073, 84579,110319, - 355, -5539, 3432, 355, 355, 2035, 3433, 3076, 353, 3238, - 652, 1758, 2967, 3099, -5539, 3079, 3082, 919, -5539, 3209, - 84579, 3085, 3097, 1712, 3186, 1141, -5539, 3188, -5539, 3107, - 3189, 3110, 843, 2716, -5539, -5539, 34, 3113, 77394, 3212, - 3214, 1956, 424, 877, 2967, -5539, 3111, 3122, 2966, 2966, - 84579, 84579, 84579, 84579, 84579, 208, 3470, 3482, 3123, 413, - 749, 3032, -5539, 1780, 60150, 3126, -5539, 1780, 84579, 383, - 1004, 2967, 1790, 1864, -5539, -5539, -5539, 926, -5539, 31523, - 31523, 31523, 3029, -5539, 2138, 19935, 815, -5539, 2341, 7923, - 3038, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 84579, 64461, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, 84579, -5539, 84579, 3313, - 108459, 3314, 3259, 3334, 3335, 355, 84579, 84579, 3336, 3337, - 3338,108459, 3342, 3345, 3346, 3260, 3134, 187, 3121, 3049, - 3514, 3412, 84579, 57276, -5539, 883, -5539,108459, 3282, 3419, - -5539, 84579, 3302, 661, -5539, 3456, 3135, -5539, -5539, 90, - 84579, 71646, 2716, -5539, -5539, 3425, 61587, 1323, 3426, 1141, - 3130, 3429, 3297, 1141, 61587, 3344, 84579, 84579, 84579, 84579, - 139, -5539, 60150, 3316, -5539, 84579, 3319, 3099, 3320, 3548, - 99, 2170,100386, 3427,100865, 3124, 84579, 3125, 3125, 3555, - 108459, 367, 3369, -5539, -5539, 2124, -5539, 3233, -5539, 65898, - -5539, -5539, 65898, -5539, -5539,108459, 84579, 3127,108459,108459, - -5539, -5539, 65898, 65898, -5539, 61587, 61587, 3445, 261, 3448, - 3164, 3450, 3165, 50085, 50085, -5539, 286, 65898, -5539, 61587, - 65898, -5539, 84579, -5539, 84579, -5539, -5539, -5539, -5539,108459, - 108459, -5539, 61587, 60150, 3454, 84579, 84579, -5539, 84579, 84579, - -5539, 84579, 84579, 2085,101344, 1386, -5539, 84579, -5539, 84579, - -5539, 84579, -5539, 84579, -5539, 84579, -5539, -5539, -5539, 84579, - -5539, 84579, 2093, -5539, -5539, 2095, 1331, 84579, 84579, 238, - 65898, 84579, 3330, 84579, 65898, 65898, 84579, 84579, 84579, 84579, - 84579, 3192, 2859, 1098, -5539, 1278, 495, 77394, 3339, -5539, - -5539, 2102, 1844, 973, 84579, 1398, -5539, -5539, -5539, -5539, - 72604, 71167, 3439, 130, 84579, -5539, -5539, 16184, 31523, 1707, - 28548, -5539, -5539, 19935, 3160, 31523, 31523, 3136, 2638, 2638, - -5539, 1442, 31523, 31523, 31523, 2638, 2638, 31523, 7833, 31523, - 50085, 31523, 36968, 23671, 31523, 31523, 27063, 1183, 2804, 31523, - 3362, 37952, 31523, 1873, 3364, 31523, 1873, 7833, 3601, 3601, - 2447, 9033, 3145, 1707, -5539, -5539, 1291, 2638, 1291, -5539, - 234,108459, 31523, 31523, 31523, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 31523, - -5539, 57276, -5539, -5539, -5539, -5539, -5539, -5539, 3205, -5539, - -5539, -5539, -5539, -5539, -5539, 5970, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 84579, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 27558, -5539, -5539, -5539, -5539, 3138, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 2776, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 28053, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 3146, -5539, -5539, 31523, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 3206, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 1290, - 31523, 31523, 31523, 31523, 31523, 31523, 31523, 31523, 31523, -5539, - 31523, 337, -5539, -5539, 3442, 3464, 46, 484, 81705, 29048, - 3204, -5539, 22669, -5539, 249, 3204, -5539, -5539, -5539, 84579, - 3277, -5539, -5539, -5539, 3217, -5539, -5539, -5539, -5539, -5539, - -5539, 210, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - 3147, -5539, -5539, -5539, -5539, 3147, -5539, 3139, 3452, 3461, - 899, 84579, 2521, 31523, 3205, 279, 84579, 31523, 3138, 2776, - 31523, 3146, 31523, 3206, -5539, 31523, -5539, 2108, 1601, 31523, - 2129, 3144, -5539, -5539, 3155, 2875, 3158, 3176, 3151, 3153, - 2638, 222, 3156, 885, 1248, 3268, 2638, 3402, 3159, -5539, - 57276, -5539, 39877, 3210, -5539, -5539, -5539, 1419, 84579, 84579, - -5539, 3451, -5539, 3166, -5539, 13608, 3451, -5539, -5539, 37460, - 3289, 3446, 3384, -5539, -5539, -5539, 3168, 19935, 32513, 32513, - -5539, 2391, 19935, 2400, -5539, -5539, -5539, -5539, -5539, -5539, - 1190, -5539, 84579, 153, 3216, 1463, 3234, 959, 3636, 3235, - 84579, -5539, 45170, 2147, -5539, 61587, 84579, 84579, 3381, -5539, - 3620, -5539,110319, -5539, 3178, -5539,109854,105655, -5539, -5539, - 787, -5539, 935, 61587, -5539, 84579, 84579, 61587, 84579, 84579, - -5539, 61587, 3230, 84579, 84579, -5539, -5539, -5539, -5539, -5539, - 54881, 1224, 71167, 3321, 70209, -5539, -5539, 3184, 84579, 3246, - 3465, 3466, 120, -5539, -5539,101823, -5539, 3413, 61587, 84579, - 84579, 31523, 3415, 84579, 84579, -5539, 308, 3278, 3279, -5539, - 84579, 3284, 65898, 3198,108459, 65898, 50581, 65898, 65898, 3536, - 108459, 84579, 84579, 1410, 77394, 443, 1059, 2967, 3434, -5539, - 1557, -5539, 61587, -5539, 84579, 3418, -5539, -5539, -5539, 74041, - 3665, 3343, -5539, -5539, -5539,102302, -5539, -5539, 3430, -5539, - 2163, -5539, 61587, 61587, 84579, 9891,102781, 1455, 3444, -5539, - -5539,108459, -5539, 84579, 82184, 84579, 84579, 3485, 84579, 74520, - 103260,103739, 765, 1418, 3486, 84579, 74999, 3487, -5539, 3365, - 84579, -5539, -5539, 57755, 61587, 84579, 936, 57276, -5539, 3471, - -5539, 84579, -5539, 909, -5539, 84579, 4164, 3436, -5539, -5539, - 3308, 3323, 84579, 452, 1061, 2967, 3600, 84579, 84579, 3224, - 2164, 61587, 84579, 57276, -5539, 3449, 116, 61587, 84579, 74041, - -5539, 3453, -5539, 77394, 3535, -5539, 3232, 2170, 2419, 2026, - 3232, 61587, 84579, -5539, 3232, 84579, 94159, -5539, 61587, 1317, - -5539, 61587, 84579, 74041, -5539, 3455, 3393, 61587, 84579, 8364, - -5539, -5539, -5539, 355, -5539, -5539, -5539, -5539, -5539, 84579, - 84579, 355, 84579, 84579, 355, 1263, -5539, 61587, 84579, -5539, - -5539, -5539, 3367, 61587, 84579, 84579, 267, 84579, -5539, 84579, - 61587, 3285, 84579, 84579, -5539, -5539, 84579, 4384, 84579, 84579, - 84579, 84579, 84579, 84579, 61587, 84579, -5539, -5539, 1484, 1420, - 1882, 1892, 180, 84579, 3547, 84579,104218, 61587, 84579, 84579, - 1141, 84579, 57276, 1741, -5539, -5539, 3371, -5539, 61587, 1317, - -5539, 10058, 84579, 84579, 84579, 3347, 3350, 232, 3416, -5539, - -5539, -5539, 822, 822, 3457, -5539, 31523, 31523, 30038, 3245, - -5539, -5539, 31523, 2747, -5539, -5539, -5539, 995, 3710, 995, - 104697, 995, 995, 3530, 3310, 3311, 995, 995, 995, 3528, - 995, 995, 995, 84579, 3431, -5539, -5539, 3431, 861, 31523, - 108459, 84579, -5539, 2171, -5539, 3269, -5539, -5539, 57276, 84579, - 327, 857, 3605, 3473, 69251, 2174, 3593, 84579, 3315, 84579, - 3724, 3357, 1310, -5539, 2174, 84579, -5539, 2082, 71167, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, 84579, -5539, -5539, 3602, - 84579, 40358, 3443, -5539, 1141, 2716, 2716, 2716, 2716, 3276, - 2716, 84579, 3407, 3627, 2174, 3281, 3629, -5539, 3099, 3630, - 1445, 84579, 3503, 69251, 3348, 3326, 3515, 3752, 2170, 1141, - 3521, 3507, -5539, 53458, -5539, 2716, 3768, 26102, 4233, 7122, - 3509, 3572, -5539, -5539, 3516, 842, 84579, 3612, 3613, 3635, - -5539, 193, -5539, 3766, 1600, 3637, 215, -5539, 251, -5539, - 2748, -5539, 84579, -5539, 84579, 84579, 84579, 84579, 253, -5539, - -5539, 251, 2748, 251, 899, -5539, 3582, 215, 2748, 3435, - 3641, 261, -5539, 275, -5539, 3524, 899, -5539, 3540, 2170, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 2186, -5539, 84579, - -5539, 3616, 3618, 3619, 3622, 3625, 3312, 3327, 3370, 84579, - 3352, 3312, 355, 3353, 3341, -5539, 3352, 3352, 3312, 2859, - 2859, 3312, 3327, 60629, 3805, 3660, -5539, 3424, 3349, 3669, - 203, -5539, 834, 1247, 3589, -5539, -5539, -5539, -5539,108459, - -5539, 61587, 3385, 2684, 2684, 126, 3560, 3355, 60629, 3789, - 899, -5539, 65898, 84579,108459, 65898, 3568, 65898, 65898,108459, - 84579, 84579, 2188, -5539, 1836, -5539, 1934, 31523, 476, -5539, - 15094, 2197, 31523, 3360, 3361, -5539, 3678, -5539, -5539, -5539, - -5539, -5539, -5539, 3368, 3679, -5539, 2204, 2211, 2215, 3373, - 3374, 7054, 7158, 3375, 15126, 3376, 3377, 3378, 3354, 36968, - 36968, 26568, 1143, -5539, 36968, 3380, 3567, 2216, 14030, 3387, - 3388, 16627, 30533, 31523, 30533, 30533, 16981, 3390, 3394, -5539, - 3733, -5539, 2220, 57276, 3559, 17227, 2221, -5539, 31523, 57276, - 7774, 31523, -5539, 31523, -5539, 3396, -5539, -5539, 4724, 4724, - 4724, 7833, -5539, 3389, -5539, 36968, 36968, -5539, 2786, 26568, - -5539, -5539, 3698, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - 2739, -5539, -5539, -5539, 3607, 3137, 50085, 7321, 31523, 293, - 31523, 3138, 31523, 3469, 4724, 4724, 4724, 396, 396, 313, - 313, 313, 2046, 484, -5539, -5539, -5539, 3372, 3382, 3400, - 3574, 3401, 31523, -5539, 2182, 2482, 84579, 3428, 6030, 6455, - -5539, -5539, -5539, 3210, 815, 3210, -5539, 926, 2638, 1291, - 55360, -5539, -5539, -5539, -5539, -5539, -5539, 84579, 19935, -5539, - -5539, 3655, 3403, 2225, -5539, -5539, 2638, -5539, -5539, 1852, - 1852, 3405, -5539, 3408, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, 3409, -5539, -5539, -5539, 40839, 3734, 3411, 39395, 82663, - 3414, 2132, -5539, 82663, 83142, 82663, -5539, 3437, -5539, 1707, - 31523, 3731, -5539, -5539, -5539, 31523, -5539, -5539, 1040, 3441, - 628, 1105, 2490, 2490, 2391, 1168, -5539, -5539, 3475, -5539, - 31523, 2405, -5539, 2507, -5539, -5539, -5539, -5539, 2859, -5539, - 3674, -5539, -5539, -5539, 39877, 3467, 3474, 72, 43726, 3631, - -5539, 84579, 39877, -5539, 84579, 159, -5539, 3447, -5539, -5539, - -5539, -5539, -5539, -5539,105655, 1967, -5539,109854, -5539,109854, - -5539, 1967, 3869, -5539,105655, 1879, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, 61587, - 61587, 3646, 84579, 3645, 3650, 31523, 433, 84579, 3440, 3458, - 1469, 3739, 3476, -5539, 3788, 899, -5539, -5539, 3526, -5539, - 19935, -5539, -5539, -5539, -5539, -5539, 61587, 84579, -5539, 65419, - -5539, -5539,108459, -5539, -5539, 84579, 84579, -5539, -5539, -5539, - 108459, -5539, -5539, -5539, 84579, 167, 3531, 3533, 84579, -5539, - 832, 3209, 10387, 84579, 84579, 84579, 3736, -5539, -5539, -5539, - -5539, 3670, -5539, 3794, -5539,105655, -5539, 2748, 1292, 3541, - 2967, 3680, -5539, 3816, 3885, -5539, 3596, 1179, -5539, -5539, - 3611, -5539, -5539, -5539, -5539, 3827, 899, 3828, 899, 84579, - 84579, 84579, 84579, 3617, -5539, -5539, -5539, -5539, 3621, 3753, - -5539, 57276, 57276, 57276, 2237, -5539, -5539, 1141, -5539, -5539, - -5539, -5539, -5539, -5539, 3786, -5539, 2241, -5539, 1461, 84579, - -5539, -5539, -5539, -5539, -5539, 3834, 61587, 84579, 10389, 84579, - 84579, 84579, 3706, 1846, 1465,108459, -5539,107529, -5539, -5539, - 2243, -5539, 3504, 84579, 3581, 61587, 3558, -5539, -5539, -5539, - 3845, 2170, 3643, 73083, 3550, 3550, 2032, -5539, -5539, -5539, - -5539, -5539, 3769, 3699, -5539, 1096, 3701, 61587, 3570, -5539, - -5539, -5539, -5539, 3855, 3597, -5539, -5539, 3599, 1080, 2967, - 3099, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - 3628, -5539, -5539, -5539, -5539, 1351, 1351, -5539, -5539, -5539, - 1351, 1503, 426, 1159, 2967, -5539, 348, 1690, 3604, -5539, - 3609, -5539, -5539, -5539, 3772, 3777, 3782, 3614, 3623, 3666, - 3624, 3626, 3675, -5539, 3633, 3690, 3638, 3695, 3651, 3886, - 899,108459, 3761, 1141, 3686, 3888, 899, -5539, 3653, -5539, - 3654, -5539, 2247, 4007, -5539, 84579, -5539, 454, 1253, 2967, - -5539, 3657, -5539, 61587, 84579, -5539, -5539, -5539, 31523, 3561, - 3565, 3573, 19935, 19935, 31523, -5539, -5539, 19935, 3576, -5539, - -5539, -5539, -5539,108459, -5539, 84579, 3853, -5539, -5539, 995, - 84579, 84579, -5539, -5539, -5539, 84579, -5539, -5539, -5539, 3858, - -5539, 380, 380, -5539, -5539, 3893, 9393, 3577, 292, -5539, - 57276, 46613, 2090, 422, 1758, -5539, 65419, 84579, 65419, -5539, - 857, 3791, 84579, 84579, 84579, 3578, 3579, -5539, -5539, -5539, - -5539, 61587, 1257, 61587, 2638, -5539, -5539, 3656, -5539, 84579, - 2170, 4083, 3918, 3285, -5539, 4039, 3177, 1323, 1916, 211, - 2800, 3976, 2422, 31523, 314, -5539, -5539, 1707, 84579, 3326, - -5539, -5539, -5539, -5539, 1141, -5539, 3587, 3585, -5539, 84579, - 3923, 84579, 84579, 84579, 84579, 3385, 3591, 84579, 3592,108459, - 84579, 2272, 2966, 4055, 3941, 1844, 3348, 3681, 3942, 77394, - 3606, 2256, -5539, -5539, 842, -5539, 2267, 170, -5539, 1141, - 65419,106599, 3932, -5539, 469, 7122, -5539, -5539, 469, 872, - 84579, -5539, -5539, -5539, -5539, 3819, 2065, -5539, 3917, -5539, - -5539, 1844, -5539,108459, 3603, -5539, 2271, -5539, -5539, -5539, - 261, 3662, 899, 3667, 899, -5539, -5539, -5539, -5539, 84579, - -5539, 84579, 60150, -5539, -5539, 84579, -5539, 3952, -5539, -5539, - 3744, 3746, 3747, 3748, 3749, 84579, 3312, -5539, 3608, 84579, - 84579, 61587, 1470, -5539, -5539, 3824, -5539, -5539, 77394, 3743, - -5539, -5539, -5539, -5539, 3965, 3967, -5539, -5539, -5539, 994, - -5539, 84579, 84579, 61587, 72125, 132, 61587, -5539, 3901, 3902, - 3904, 3905, 355, 3906, 3907, 3908, 3910, 3911, -5539, -5539, - -5539, 3632, 17660, 31523, -5539, 3987,108459, -5539, 9629, -5539, - -5539, 31523, -5539, 31523, -5539, -5539, -5539, -5539, -5539, -5539, - 2303, 31523, -5539, 31523, -5539, -5539, 24172, 4121, 4121, 3634, - 108459, 36968, 36968, 36968, 36968, 1453, 2823, 36968, 36968, 36968, - 36968, 36968, 36968, 36968, 36968, 36968, 36968, 212, -5539, 3835, - 31523, 31523, 31028, -5539, -5539,108459, 3639, 3390, 3640, 3644, - 31523, -5539, -5539, -5539, 2286, 38433, 3647, 57276, -5539, 31523, - 13682, 2301, 3693, 17987, 1707, 9957, 2491, 31523, 1157, 1781, - 31523, 2305, 31523, 3970, -5539, -5539, -5539, -5539, -5539, -5539, - 3867, -5539, 31523, 3648, 3333, 36968, 36968, 3847, -5539, 4314, - 31523, 26568, -5539, 3457, 3697, 45651, -5539, 24673, 3642, 594, - 594, 594, 594, -5539, 84579, 84579, 84579, 3731, 3658, 3731, - 352, 3664, -5539, -5539, -5539, -5539, 1844, -5539, 3652, -5539, - -5539, -5539, -5539, -5539, 82663, 83142, 82663, 3663, 38914, 25155, - 2132, 3668, 84579, -5539, -5539, 3672, 39877, 3926, 3859, -5539, - 39877, 3859, 1849, 3859, 3933, 3750, 46132, -5539, -5539, 3673, - -5539, 3864, -5539, 2059, 19935, 4100, 3981, -5539, 3676, -5539, - 3441, 297, -5539, -5539, -5539, 1185, -5539, 3755, -5539, -5539, - -5539, 3414, 33008, 3821, -5539, -5539, -5539, 3729, 2306, -5539, - -5539, 4087, 3821, -5539, 1644, -5539, 2317, 45170, 3467, 31523, - 1707, 2321, 1890, -5539, -5539,105655, -5539, 3751, 2748, 2748, - 2261, 3312, 4011, 2261, 9989, -5539, -5539, 41320, 84579, 84579, - -5539, 84579, 84579, 1679, 84579, -5539, 84579, -5539, -5539, -5539, - 4152, 3756, 3762, 3966, -5539, 2542, -5539, -5539, 61587, 84579, - -5539, -5539, -5539, 460, 1255, 2967, -5539, 3775, -5539, -5539, - 3984, 84579, -5539, 4135, 3790, 84579, 4042, 84579, 83621, -5539, - 3791, 1679, 3810, 4027, 1486, 2966, 353, 3270, -5539, 1793, - -5539, -5539, 3778, -5539, 84579, -5539, 84579, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, 3838, -5539, -5539, -5539, -5539, 57755, - -5539, -5539, 84579, -5539, 57276, 46613, 57276, -5539, 84579, -5539, - 1517, 465, 1303, 2967, -5539, 3792, -5539, 4051, 3793, 3796, - 3848, 869, 1221, 3797, 3799, 3857, 3719, 3720, 3721, -5539, - 57276, 47109, 3882, 84579, 2748, 3725, 3765, 84579, 3550, 84100, - -5539, 3726, -5539, -5539, 3550, 267, 2496, -5539, -5539, -5539, - 1141, 2748, 1141, 84579, 84579, 84579, 84579, 267, -5539, -5539, - -5539, 4170, 3822, 84579, 84579, 84579, 84579, -5539, 3784, -5539, - -5539, -5539, 84579, 84579, 4064, 821, 2142, 61587, 84579, 84579, - 61587, 84579, 84579, 84579, 84579, 84579, 84579, 84579, 3946, -5539, - 4156, 4081, 2315, 4124, 3815, 84579, -5539, 84579, 1141, -5539, - 3209, 84579, 84579, 84579, 84579, -5539, -5539, -5539, -5539, -5539, - 3457, -5539, 3735, 4026, 995, -5539, 4036, 4037, 4038, 995, - -5539, -5539, 1758, -5539, 492, 84579, -5539, 2399, 84579, -5539, - -5539, -5539, 3676, 2453, 2461, -5539, -5539, -5539, -5539, -5539, - -5539, 3758, 84579, 84579, 36968, -5539, 1680, 1745, 1215, -5539, - 4040, 84579, 3033, -5539, -5539, -5539, 827, 84579, -5539, -5539, - -5539, -5539, 3759, -5539, 811, 3591, -5539, 4057, 69251, 2748, - 61587, 61587, 2748, -5539,108459, 3763, 3326, -5539, 463, 3849, - -5539, 61587, 1323,105176, 3130, 3798, 3978, 10790, 39877, 40358, - 1351, -5539, 3767, 3770, -5539, -5539, 84579, 3791, 60150, 2323, - 3099, 4229, 101, 2152, -5539, 70688, 3960, 3591, 4057, -5539, - 2966, 3985, 3986, -5539, 1844, 84579, 3385, 3326, 1141, 84579, - 3246, 46613, -5539, 4270, 2226, -5539,105655, 31523, 31523, -5539, - 3771, -5539, 3773, 7122, -5539, 3850, 3774, 4234, 31523, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 3863, 3780, 84579, - 84579, 842, 84579, -5539, 3781, 3637, -5539, 3637, -5539, 84579, - -5539, 84579, -5539, 899, -5539, 3909, 899, 84579, 84579, 84579, - 84579, 84579, 84579, 3312, 355, 3341, -5539, -5539, 4105, 60629, - 3660, -5539, 2332, 84579, -5539, -5539, -5539, 4173, -5539, -5539, - 130, 4113, 899, -5539, 1005, 1005, 1005, 1005, 4068, 1005, - 1005, 1005, 1005, 1005, -5539, 31523, 19935, -5539, 3787, -5539, - 19935, 19935, 3795, 10876, 18537, -5539, 2342, 31523, -5539, 576, - 576, 576, 1951, 4115, -5539, 2764, 576, 576, 576, 498, - 498, 241, 241, 241, 4121, 212, 18686, 18845, 19267, 3800, - -5539, -5539, -5539, 3390, -5539, 33503, 1209, 4232, 37952, -5539, - -5539, -5539, 3840, 3841, 3803, -5539, 31523, 33998, 3802,110319, - 3993, -5539, -5539, 1706, 31523, 31523, 5853, -5539, 7972, 31523, - -5539, 5853, 425, 31523, 3015, 3691, 31523, 31523, 4936, 11420, - 3806, 31523,106120, -5539, -5539, -5539, 2344, 31523, 84579, 84579, - 84579, 84579, -5539, -5539, -5539, 3981, 2500, 3981, 1141, 3807, - -5539, -5539, -5539, -5539, 58234, 3809, 3559, 82663, 3811, 84579, - 2132, 39877, -5539, -5539, 2334, -5539, 39877, 4078, -5539, 39877, - 65898, -5539, 84579, 3813, 84579, -5539, 1658, 31523, 3852, 50085, - -5539, -5539, -5539, -5539, 3913, -5539, 4033, 19935, 29048, -5539, - 1844, 1989, 84579, 1707, 66, -5539, 31523, 3825, 84579, -5539, - 3821, 19935, -5539, 3891, 2352, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 3903, 71167, 4148, -5539, 31523, 2353, -5539, 3862, - 4246, 166, 2376, 2383, 1679, -5539, 2402, -5539, 1755, 4122, - 230, -5539, 899, -5539,108459, 84579, 84579, 84579, 2905, -5539, - -5539, 84579, 84579, 84579, 84579, -5539, -5539, 61587, 84579, -5539, - 84579, -5539, -5539, -5539, -5539, 267, 1680, 4138, 4141, 4058, - -5539, 355, -5539, 1680, 4059, 267, 84579, -5539, -5539, -5539, - 2119, -5539,108459, 899, 899, -5539, -5539, -5539, -5539, -5539, - 3843, -5539, 4278, 3930, 84579, 84579, 84579, 84579, 84579, 61587, - 84579, 84579, 2638, 2638,108459, 3842, -5539, 2638, 2638, 3844, - -5539, 61587, 84579, 84579, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, 3928, -5539, 31523, 4274, -5539, - -5539, -5539, -5539, -5539, 31523, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, 61587, 84579, 3931, -5539, - 3934, -5539, 206, -5539, -5539, 84579, 84579, 84579, 84579, 4196, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, 4195, 84579, -5539, -5539, 1141, 1141,108459, 899, 899, - -5539, -5539, -5539, 3936, -5539, -5539, 3856, 4136, 995, -5539, - 995, 995, 995, -5539, 3860, -5539, 1758, 4228, -5539, 1679, - 1904, 4185, -5539, 31523, -5539, 1749, 1951, -5539, 4243, 4325, - -5539, -5539, -5539, -5539, 3285, 2170, 3285, -5539, -5539, 65898, - 404, -5539, 4167, 327, 57276, 4086, 69251, 348, 320, 3870, - 3997, -5539, 2748, 2748, 3937, 84579, 4334, -5539, -5539, -5539, - -5539, -5539, -5539, 61587, 3558, -5539, 4102, 106, 4207, 84579, - 40358, -5539, 3414, -5539, -5539, -5539, 1141, -5539, -5539, 4006, - 3326, -5539, 1454, 84579, 4099, 69251, 3385, 2403, -5539, -5539, - -5539, 3922, 4326, 3348, -5539, 348, 3960, -5539, -5539, 4302, - 3980, 3929, 4355, -5539, 3980, 4222, 4109, 3896, -5539, 3606, - -5539, 84579, -5539, 19935, 19935, 1141,110784, 469,108459, 4230, - -5539, 19935, 84579, 191, 3894, 4063, -5539, 4197, 899, 2412, - -5539, 899, 899, -5539, 84579, -5539, 3312, 3312, 3312, 3312, - 3312, -5539, 4114, -5539, -5539, -5539, 4188, -5539, 899, 60629, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 1005, -5539, -5539, - -5539, -5539, -5539, 19935, -5539, -5539, -5539, 31523, -5539, 11472, - 36968, 4235, -5539, 31523, 31523, 31523, -5539, 3915, 2426, 2433, - -5539, -5539, 1209, -5539, 4232, -5539, -5539, -5539, 11611, 3964, - 19935, 4017, 3912, 3916, 5853, 5853, 7972, 5853, 31523, 31523, - 5853, 5853, 31523, -5539, -5539, 11659, 4104, -5539, -5539, 11845, - -5539, -5539, -5539, -5539, 3852, -5539, -5539, 3852, -5539, 4053, - -5539, 2438, 4379, 35978, 4340, -5539, 84579, 2443, -5539, 31523, - 3921, -5539, -5539, 39877, 2334, 3924, 2454, 84579, 2455,108459, - 34493, 19935, 84579, 3457, 3927, -5539, 84579, 2855, -5539, 72, - -5539, -5539, 4332, 41320, 4291, 19415, 31523, -5539, -5539, -5539, - -5539, 60629, 4144, 60629, 1679, 12112, 4237, 41320, 51077, 84579, - -5539, 84579, -5539, 4092, 4237, 4237, -5539, -5539, -5539, -5539, - -5539, -5539, 3945, -5539, -5539, -5539, -5539, 4021, -5539, -5539, - 30, 3339, -5539, 2090, -5539, 4410, 4296, 4298, -5539, -5539, - -5539, -5539, -5539, -5539, 4156, -5539, -5539, 46613, 61587, 84579, - -5539, 4045, -5539, -5539, -5539, -5539, -5539, -5539, 43245, 50085, - -5539, 869, 3953, 3955, 1221, -5539, -5539, -5539, 84579, 12277, - 3956, 12348, 51, 3339, 84579, 84579, 3958, 3963, 3968, 25, - 1119, 1883, 3312, 4285, 84579, -5539, -5539, -5539, 4156, -5539, - -5539, 84579, -5539, 995, -5539, -5539, -5539, -5539, 57276, -5539, - 3175, 3860, 1141, 65898, 4427, 4427, 12447, 4189, -5539, -5539, - 118, 4030, 4226, 4030, 3972, 84579, 827, 3974, 2464, -5539, - 84579, 3975, 4106, 1681, 1681, 84579, 84579, 84579, 2465, 1844, - 2748, 3765, 1323, 4324, 69251, 4368, 3791, 324, -5539, 84579, - 4443, 84579, 3385, 3591, 84579, 3982, -5539, -5539, 70688, 4191, - 2090, 84579, 2272, 3960, 3348, 1191, 84579, -5539, 969, -5539, - 1844, -5539, 84579, 77394, 41320, 4312, -5539,109854, -5539, 2466, - -5539, -5539, -5539, 4061, 20592, 3210, 4107, 4108, 3994, 1905, - 4321, 84579, 744, -5539, -5539, -5539, -5539, -5539, -5539, 84579, - -5539, 132, -5539, 19501, -5539, 3757, 36968, 19935, 19935, 19935, - 31523, -5539, 31523, -5539, -5539, -5539, -5539, 752, -5539, -5539, - 5853, 5853, 5853, -5539, 4439, 3457, -5539, -5539, -5539, 964, - 4388, 3437, 58234, 4001, -5539, 36968, 2470, -5539, 1923, 84579, - 2471, -5539, 19935, 84579, -5539, -5539, 31523, -5539, 2477, -5539, - 4002, 45, 4003, 23170, 4010, -5539, -5539, -5539, -5539, -5539, - 19935, 4012, -5539, 4469, 1463, -5539, -5539, 4066, 84579, 2479, - -5539, 125, 1961, 4065, -5539, 19935, 1470, 2261, 319, 4246, - 4018, 3285, -5539, 4019, -5539, -5539, 2966, 399, 84579, 3285, - 3285, -5539, 84579, 4116, -5539, 4335, -5539, -5539, 4088, -5539, - 860, 3339, 84579,108459, -5539, 150, 4354, -5539,108459,108459, - -5539, -5539, -5539, 31523, -5539, 4119, -5539, -5539, -5539, 31523, - 31523, 68293, -5539, -5539, 84579, 84579, 84579, 84579, 84579, -5539, - 899, -5539, -5539, 2486, -5539, 42282, -5539, -5539, 3171, 1141, - 3171, 1759, -5539, -5539, 3171, 3171, -5539, 3210, -5539, 4427, - 360, -5539, -5539, 4260, 4031, 31523, 4330, -5539, 188, 4248, - -5539, 4034, -5539, 65898, 4528, -5539, 57276, 3591, 4057, 84579, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, 2494, 3791, 4378, 3326, 3929, -5539, 84579, 4077, - -5539, 39877, 3791, 1844, 2152, -5539, 3960, 3591, 4057, -5539, - -5539, 4041, 3986, 3348, 2272, 4183, -5539, 4184, -5539, 4473, - 4256, 4478, 3385, -5539, 3246, 2517, 84579, -5539, -5539, 7122, - 110784,108459, -5539, -5539, -5539, 4047, 4417, 4094, 4095, -5539, - -5539, -5539, 1905, -5539, 1009, 4416, 4101, -5539, 4117, 84579, - -5539, -5539, 3791, 899, 31523, 3757, 2547, 2552, 4120, -5539, - 31523, 1123, 4394, 4395, 84579, -5539, -5539, -5539, 84579, 1951, - 4060, 35978, 57276, 2554, -5539,107994, -5539, 2556, 2560, -5539, - 31523, 4062, 31523, -5539, 34493, 84579, 4070, 3216, 1844, -5539, - 3210, 41320, -5539, 4198, 4532, 4328, -5539, -5539, 4400, -5539, - -5539, 84579, 4030, 50085, 399, 3441, 2170, 4030, 4030, -5539, - 84579, 4031, 31523, -5539, 4168, -5539, -5539, 2566, 1669, 4247, - 4247, 2568, 2572, 12877, 84579, 2574, 2580, -5539, 2581, 2638, - 3327, 1883, 3327, -5539, 3312, -5539, -5539, 57276, -5539, 61108, - -5539, -5539, -5539, 1141, -5539, 1141, 4304, 84579, 52514, 1141, - 1141, -5539, -5539, -5539, -5539, 4380, -5539, 3099, -5539, 12944, - 4177, -5539, -5539, -5539, 502, -5539, 4301, 4308, -5539, 4096, - -5539, 2582, -5539, 348, 4223, 3791, -5539, -5539, 84579, 4560, - 4561, -5539, 794, 84579, 3414, -5539, 3929, 3385, 3348, 348, - 3960, 2090, 41801, 3980, 2272, 3986, -5539, -5539, 4315, -5539, - 4317, -5539, 4103, 4404, -5539, 1580, 469, -5539, -5539, -5539, - 366, 4436, 4438, -5539, -5539, -5539, 3171, -5539, 140, 4118, - 4461, -5539, -5539, -5539, -5539, 19935, -5539, -5539, -5539, 3390, - 34988, 34988, 34988, 4123, 4556, 4559, 957, 2586, 37952, -5539, - -5539, -5539, 84579, 4329, 916, 4582, 4279, 2590, 34493, 2594, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, 45170, 31523, 4214, - 4532, 60629, 2596, 3550, 4126, 3441, -5539, 4226, -5539, -5539, - 3339, -5539, 19935, 84579, 65898, 4572, -5539, -5539, -5539, -5539, - -5539, -5539, -5539, 3339, 4219, -5539, -5539, 68293, -5539, 84579, - -5539, -5539, 2598, -5539, -5539, -5539, 84579, 3894, -5539, 3894, - -5539, -5539, -5539, 1559, 4242, 84579, 946, 946, 4517, -5539, - 4203, -5539, 4142, -5539, 4638, 4272, 84579, -5539, -5539, 869, - 1844, 69251, 3791, -5539, -5539, 2272, 3960, 3348, 31523, 2602, - -5539, 4246, 166, -5539, 3986, 3980, -5539, -5539, 41320, 4145, - 3033, 4508, -5539, -5539, -5539, 2177, 65898, 65898, 84579, -5539, - -5539, -5539, 31523, 827, 36473, 4290, 1170, 14110, 4500, -5539, - 4500, 4500, -5539, 84579, 84579, 84579, -5539, 3559, -5539, -5539, - 36968, 36968, 4377, -5539, 916, -5539, 84579, -5539, 4154, -5539, - -5539, 2608, -5539, 1385, 19935, 456, 4245, 319, -5539, -5539, - -5539, -5539, 4248, 1679, 1679, -5539, 3339, -5539, 84579, -5539, - 4159, -5539, -5539, -5539, 61108, 3894, -5539, -5539, -5539, -5539, - 4637, -5539, 281, -5539, -5539, -5539, -5539, 84579, 3791, 3842, - 3929, -5539, 3986, 3348, 2272, 13108, -5539, 41801, 84579, 84579, - 3980, -5539, 2609, 41320, 3326, 4303, -5539, 2385, -5539, -5539, - -5539, -5539, -5539, -5539, -5539, 448, 4160, 4162, -5539, -5539, - 13278, 65898, 4634, -5539, -5539, -5539, -5539, -5539, 829, -5539, - -5539, -5539, 981, 990, 1820, 4589, 1951, 1951, -5539, -5539, - -5539, 31523, -5539, -5539, -5539, 4398, 4297, -5539, -5539, 956, - -5539, 1679, -5539, -5539, -5539, 31523, -5539, -5539, 2170, 2170, - 3791, -5539, -5539, 3980, 2272, 3986, 4246, -5539, -5539, -5539, - -5539, -5539, 4404, -5539, 2610, 3980, 4101, 2498, -5539, -5539, - 2505, 2515, 4255, 4501, -5539, 4175, 35483, 4318, -5539, 4383, - -5539, 84579, 84579, 58713, 84579, 84579, 13531, -5539, 45170, 4411, - 142, -5539, 1679, 2615, -5539, -5539, -5539, -5539, 3986, 3980, - 84579, 3033, -5539, 41320, 3210, 4530, -5539, 2385, 4306, 4307, - 56797, -5539, -5539, -5539, -5539, -5539, 330, 4566, -5539, 2619, - -5539, 4186, -5539, 4249, 72, 4199, 84579, -5539, -5539, 3980, - -5539, -5539, 3326, -5539, -5539, 827, -5539, 4238, 4239, -5539, - 2621, -5539, -5539, -5539, -5539, 31523, 58713, -5539, -5539, 4257, - 31523, 2631, -5539, 3980, 65898, 4526, 4529, -5539, 56797, 822, - 4264, 4262, 2637, 841, 3210, 4210, 65898, 65898, -5539, 4211, - 84579, -5539, -5539, 72, -5539, -5539, 56797, -5539, -5539, 2500, - -5539, 4266, 2653, 4262, -5539, -5539 + 7322, 1367, 21257, -5456, -5456, 1367, 68858, -5456, 78658, 952, + 193, 121, 202, 20224, 79148, 88458, 793, 1089, 20847, 1367, + 88458, 2334, 59057, 74248, 351, 88458, 1164, 762, 59057, 88458, + 88948, 1187, 1182, 1009, 89438, 79638, 72778, 1486, 88458, 1415, + 1743, 89928, 80128, 1236, 80618, 762, 54673, 369, 1224, 90418, + 88458,112888, 1743, 81108, 81108, 81108, 2066, 1635, 1320, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, 1532, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, 1931, -5456, 993, + 2110, 1607, 239, 1354, -5456, -5456, 1929, 68858, 88458, 88458, + 88458, 1749, 88458, 1684, 88458, 846, 68858, 64938, 81598, 1842, + 1705, 50639, 90908, -5456, 68858, 88458, 62488, 68858, 88458, 88458, + 91398, 88458, 91888, 88458, 1079, 76698, 88458, 1822, 88458, 88458, + 62978, 92378, 1946, 1670, 238, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, 1700, + 1934, -5456, 250, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, 59547, 88458, 14407, 1164, 1929, -5456, 2066, 88458, + 2008, 88458, 1742, 92868, 88458, -5456, 88458, 1877, 93358, 911, + 1963, 64938, 1996, 51148, 1967, 88458, 88458, 64938, 93848, 94338, + 94828, 88458, 88458, -5456, -5456, 1975, 88458, -5456, 2171, 65428, + 1786, 2181, 2299, 2268, 607, -5456, 82088, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, 68368, 1089, -5456, -5456, 2225, + 69348, 2306, -5456, -5456, 95318,113364, 2073, -5456, 912, 69838, + 65918, 2438, 2070, 51657, 2482, -5456, 70328, -5456, 66408, 70818, + -5456, -5456, -5456, -5456, -5456, 95808, -5456, 96298, 2240, 2306, + -5456,113840, 66898, -5456, 2319, 96788, 97278, 97768, 1929, 2127, + 1775, 2406, 45160, -5456, -5456, -5456, 2186, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, 249, 295, 257, 229, + 307, -5456, -5456, 241, 243, 248, 249, 2643, 2643, -5456, + 88458, -5456, -5456, 295, 751, 2282, 2226, 2226, 2226, 2418, + 26, -5456, 2226, 2355, -5456, -5456, -5456, -5456, 80618, -5456, + 2231, 1164, 2269, 2739, 2383, 59547, 1388, 88458, -5456, -5456, + 2805, 2368, 2699, 2442, -5456, -5456, -5456, 2584, 2634, 220, + 749, 1164, 222, -5456, 2765, -5456, 2690, 30574, 30574, 1164, + 82578, 98258, 228, 67878, 1959, 83068, 2449, 1377, 2720, -5456, + -5456, -5456, 128, -5456, 2946, 2533, 2807, 2442, 1670, 47136, + -5456, -5456, 2561, 1934, 80618, -5456, -5456, -5456, 59547, 2866, + 33622, 88458, 2539, -5456, 2560, 2539, -5456, -5456, 2583, -5456, + 2583, 2583, 2566, 2566, 2748, 2572, -5456, -5456, -5456, 2336, + 2583, 2566, -5456,114792, -5456, 1823, 1905, -5456, -5456, 3037, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, 2577, -5456, + 1058, 1933, -5456, -5456, -5456, 30574, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 2578, 2592, 1607, -5456, 9386, 59547, 88458, + 1777, 1777, 3038, 1777, 1728, 1962, -5456, 2302, -5456, 2924, + 2894, 2900, 80618, 2594, 1010, -5456, 1744, 2627, 1732, 2631, + 1810, 1861, -5456, 236, 88458, 318, 2674, 83558, 6520, 2637, + 1934, 2639, -5456, -5456, -5456, -5456, 2783, 1102, -5456, -5456, + -5456, -5456, 2959, 3009, 8656, 368, 84048, -5456, -5456, -5456, + -5456, 88458, 88458, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, 2652, 1573, -5456, -5456, 2654, 3013, 2876, 8377, + 1077, 2980, 2830, 1384, 9288, 2890, 1833, 3039, 19715, 1519, + 3041, 1831, 1454, 84538, 88458, 3002, 3050, 7852, 1821, 1022, + 2911, 1041, 2980, 3046, 2879, 1384, 3062, 5523, 88458, -5456, + 2991, 3112, 1109, -5456, 178, -5456, 23523, 33622, 54183, -5456, + 1934, -5456, 1751, -5456, -5456, 58567, -5456, 2784, 2939, 91, + 68858, 2725, 88458, 88458, -5456,112888, 68858, -5456, 2951, 52166, + 68858, -5456, 68858, -5456, -5456, 3073,112888, 88458, 88458, -5456, + 88458, -5456, -5456, 2728, -5456, -5456, -5456, -5456, -5456, 2226, + 88458, 3175,112888, 2970, 207, 1790, 3216, 88458, 2975, 1790, + 2787, 98748, -5456, -5456, 1790, -5456, -5456, -5456, 88458, 88458, + 2750, 1438, 2969, 798, 1790, 2985, 3222, 3223, 2992, 2838, + 2997, 2560, -5456, 3190, 2973, 1028, 253, 2079, 1790, 2822, + 99238, 99728, 88458, 2823, 88458, 3201, 68858, 2857, 68858, 68858, + 88458, 3125, 88458, -5456, 2966, -5456, -5456, 981, -5456, -5456, + -5456, -5456, -5456, 3144, -5456, 225, 3146, 2788, 3148, 1750, + 3149, 327, -5456, -5456, 2831, -5456, 3150, 328, -5456, 3152, + -5456, 2790,100218, -5456,100708,101198, 3155, 330, -5456, 64938, + 3156, 328, 3157, 2790, 3158, 328, 3159, 270, 3160, -5456, + 1327, 3153, 3164, 327, 3169, 2101, 2790, -5456, 3170, 353, + -5456, 3172, 379, -5456, 3173, 3033, -5456, 33622, -5456, 2914, + -5456, 1224, 1911, 2406, 295, -5456, 88458, 295, 88458, 295, + 88458, 295, 88458, 295, 88458, 88458, 88458, 295, -5456, -5456, + -5456, 88458, 2817, 88458, -5456, 88458, -5456, -5456, -5456, 75228, + 64938, 75718, -5456, 88458, -5456, 129, 1164, -5456, -5456,112888, + 3301, 64938, 3201, 1943, -5456, -5456, 3201, -5456, -5456, 3201, + 3201, -5456, -5456, -5456, 3100, 88458, 3179, 75228, 64938, 3182, + -5456,101688, -5456, 68368, 3057, 2842, -5456, -5456, -5456, -5456, + -5456, 1948, 2344, 290, 2458, 33622, 2843, 290, 290, 2845, + 3192, -5456, -5456, -5456, 271, 2848, 2849, -5456, 293, 293, + -5456, 2850, 2851, -5456, 300, 2856, 2859, 2478, 2485, 303, + 2861, 2863, 2864, 2865, 2867, 2868, 2869, 2336, 290, 2871, + 33622, -5456, 2873, 293, 2877, 2878, 2880, 2490, 2882, -5456, + 2493, 2883, -5456, 313, 325, 2886, 2887, -5456, 3083, -5456, + 305, 2893, 2895, 2896, 2899, 2901, 2906, 2909, 2912, 33622, + 33622, 33622, -5456, 28029, 1934, 2516, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 308, 50130, -5456, 2908, -5456, -5456, + 3082, -5456, -5456, 33622, -5456, -5456, 3238, 168, -5456, 316, + -5456, -5456, -5456, 1934, 3188, 2907, -5456, -5456, 1370, 2910, + -5456, 2239, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + 67388, 3388, -5456, 364, 1164, 178, 374, 3329, 56607, 57097, + -5456, -5456, 3193, -5456, 88458, -5456, -5456, 1934, 165, 2026, + -5456, 2186, 19614, 2088, 2539, 88458, 88458, 3401, -5456, 2927, + -5456, -5456, 33622, -5456, -5456, -5456, 2643, -5456, 2583, 2583, + -5456, -5456, 3404, 3018, 3020, 2643, -5456, 2643, -5456, 2935, + 2936, 2643, 3022, 3023, 3030, -5456, 2945, 3032, 2643, -5456, + -5456, 60528, 2052, -5456, 3286, 349, -5456, -5456, -5456, 2107, + -5456, 2944, -5456, 2560, -5456, -5456, 1607, 1607, 33622, 1607, + 980, 1401, 31082, 34130, 3294, 3174, 1281, 1590, 3297, -5456, + 3178, 1728, 1962, 80618, 88458, 80618,102178, 3085, 33622, -5456, + 3403, 3049, 3052, 3109, 55653, -5456, 3055, 3021, 3058, 3114, + 2958, 3064, 3065, 3124, -5456, 3241, -5456, -5456, 3072, 3421, + 3074,102668, -5456, -5456, 321, -5456, -5456, -5456, 321, -5456, + 2999, 1595, 210, 973, 3076, 465, 242, 3413, -5456, 1572, + -5456, -5456, 3133, -5456, 13280, 88458, 3353, 5641, 3213, 368, + 3132, -5456, -5456, -5456, 3272, 3084, 88458, 3087, 3232, 368, + 1355,103158, -5456, -5456, 88458, -5456, -5456, -5456, -5456, 8250, + 3391, 26569, -5456, 1882, 3093, 3075, 3105, 88458, 71798, 1886, + 3208, 3231, 1824, 2043, 604, 3161, 88458, 2048, 3237, 88458, + 3024, 3104, 3113, 3345, 3026, 643, 3455, 3031, -5456, -5456, + -5456, 3422, -5456, 2377, 2526, 3242, -5456, 3356, 3405, 7571, + 3106, 3107,111460, -5456, 3143, 65, 52675, 88458, 88458, 3145, + 3147,103648, 8250, 3433, 76208, 76208, 3151, 3162, 46642, 3462, + 1834, 3163, -5456, -5456, -5456, 1834, 3167, 3168,104138, 8250, + 3449, 88458, 3185, 3187, 88458,114792, 368, -5456, 3520, 368, + 368, 1651, 3521, 3196, 373, 3318, 938, 1790, 3031, 2888, + -5456, 3197, 3199, 393, -5456, 3288, 88458, 3202, 3203, 98, + 3250, 1164, -5456, 3253, -5456, 3204, 3262, 3205, 747, 2750, + -5456, -5456, 1394, 3181, 80618, 3284, 3303, 2048, 344, 1053, + 3031, -5456, 3206, 3209, 3026, 3026, 88458, 88458, 88458, 88458, + 88458, 291, 3570, 3573, 3211, 526, 66, 3111, -5456, 1834, + 63468, 3212, -5456, 1834, 88458, 262, 1096, 3031, 1839, 1923, + -5456, -5456, -5456, 1670, -5456, 33622, 33622, 33622, 3126, -5456, + 2563, 19614, 729, -5456, 2647, 9868, 3123, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 88458, 59547, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 88458, -5456, 88458, 3423,112888, 3424, 3347, + 3425, 3426, 368, 88458, 88458, 3427, 3428, 3429,112888, 3430, + 3438, 3439, 3359, 3236, 851, 3228, 3154, 3630, 3515, 88458, + 60528, -5456, 321, -5456,112888, 3377, 3519, -5456, 88458, 3397, + 90, -5456, 3556, 3229, -5456, -5456, 102, 88458, 74738, 2750, + -5456, -5456, 3525, 64938, 1001, 3528, 1164, 3221, 3533, 3394, + 1164, 64938, 3446, 88458, 88458, 88458, 88458, 152, -5456, 63468, + 3417, -5456, 88458, 3419, 2888, 3420, 3665, 1203, 2226,104628, + 3536, -5456,105118, 3194, 88458, 3195, 3195, 3671,112888, 1155, + 3481, -5456, -5456, 2119, -5456, 3343, -5456, 68858, -5456, -5456, + 68858, -5456, -5456,112888, 88458, 3207,112888,112888, -5456, -5456, + 68858, 68858, -5456, 64938, 64938, 3564, 353, 3569, 3275, 3574, + 3276, 52675, 52675, -5456, 448, 68858, -5456, 64938, 68858, -5456, + 88458, -5456, 88458, -5456, -5456, -5456, -5456,112888,112888, -5456, + 64938, 63468, 3575, 88458, 88458, -5456, 88458, 88458, -5456, 88458, + 88458, 2109,105608, 2406, -5456, 88458, -5456, 88458, -5456, 88458, + -5456, 88458, -5456, 88458, -5456, -5456, -5456, 88458, -5456, 88458, + 2114, -5456, -5456, 2115, 1310, 88458, 88458, 247, 68858, 88458, + 3442, 88458, 68858, 68858, 88458, 88458, 88458, 88458, 88458, 3305, + 2910, 434, -5456, 302, 360, 80618, 3451, -5456, -5456, 2121, + 2066, 34, 88458, -5456, 88458, 88458, 88458, -5456, -5456, 74248, + 3562, 419, 75718, 88458, -5456, -5456, 8642, 33622, 1934, 30061, + -5456, -5456, 19614, 3274, 33622, 33622, 3225, 2643, 2643, -5456, + 336, 33622, 33622, 27521, 33622, 31590, 33622, 33622, 2643, 2643, + 33622, 10031, 33622, 52675, 33622, 39210, 24551, 33622, 33622, 28537, + 292, 2850, 33622, 3476, 40220, 33622, 374, 3477, 33622, 374, + 10031, 3733, 3733, 2353, 7043, 3230, 1934, -5456, -5456, 1130, + 2643, 1130, -5456, 498,112888, 33622, 33622, 33622, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 33622, -5456, 60528, -5456, -5456, -5456, -5456, + -5456, -5456, 3320, -5456, -5456, -5456, -5456, -5456, -5456, 4870, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 88458, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, 29045, -5456, -5456, + -5456, -5456, 3240, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 3550, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 29553, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 3244, -5456, -5456, 33622, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, 3322, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 954, 33622, 33622, 33622, 33622, 33622, 33622, + 33622, 33622, 33622, -5456, 33622, 510, -5456, -5456, 3568, 3238, + 816, 507, 3246, 3454, 85028, 30574, 3286, -5456, 23523, -5456, + 266, 3286, -5456, -5456, -5456, 88458, 3388, -5456, -5456, -5456, + 3326, -5456, -5456, -5456, -5456, -5456, -5456, 245, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, 3245, -5456, -5456, -5456, + -5456, 3245, -5456, 3247, 3576, 3577, 270, 88458, 2734, 33622, + 3320, 282, 88458, 33622, 3240, 3550, 33622, 3244, 33622, 3322, + -5456, 33622, -5456, 2125, 2027, 33622, 2139, 3251, -5456, -5456, + 3261, 2936, 3287, 3290, 3264, 3267, 2643, 224, 3268, 219, + 852, 3400, 2643, 3501, 3269, -5456, 60528, -5456, 42196, 3319, + -5456, -5456, -5456, 1743, 88458, 88458, -5456, 3572, -5456, 3270, + -5456, 14682, 3572, -5456, -5456, 39715, 3407, 3555, 3497, -5456, + -5456, -5456, 3280, 19614, 34638, 34638, -5456, 2310, 19614, 2465, + -5456, -5456, -5456, -5456, -5456, -5456, 1291, -5456, 88458, 150, + 3294, 1590, 3348, 1038, 3762, 3350, 88458, -5456, 47630, 2141, + -5456, 64938, 88458, 88458, 3498, -5456, 3744, -5456,114792, -5456, + 3291, -5456,114316,110508, -5456, -5456, 95, -5456, 1638, 64938, + -5456, 88458, 88458, 64938, 88458, 88458, -5456, 64938, 3344, 88458, + 88458, -5456, -5456, -5456, -5456, -5456, 57587, 721, 74248, 3435, + 73268, -5456, -5456, 3295, 88458, 3358, 3580, 3582, 801, -5456, + -5456,106098, -5456, 3529, 64938, 88458, 88458, 33622, 3530, 88458, + 88458, -5456, 1020, 3390, 3392, -5456, 88458, 3393, 68858, 3308, + 112888, 68858, 53184, 68858, 68858, 3650,112888, 88458, 88458, 1303, + 80618, 286, 1098, 3031, 3541, -5456, 1525, -5456, 64938, -5456, + 88458, 3532, -5456, -5456, -5456, 77188, 3780, 3437, -5456, -5456, + -5456,106588, -5456, -5456, 3539, -5456, 2159, -5456, 64938, 64938, + 88458, 9291,107078, 1373, 3558, -5456, -5456,112888, -5456, 88458, + 85518, 88458, 88458, 3598, 88458, 77678,107568,108058, 1628, 1722, + 3599, 88458, 78168, 3600, -5456, 3475, 88458, -5456, -5456, 61018, + 64938, 88458, 990, 60528, -5456, 3591, -5456, 88458, -5456, 970, + -5456, 88458, 4453, 3560, -5456, -5456, 3434, 3444, 88458, 289, + 1197, 3031, 3730, 88458, 88458, 3349, 2169, 64938, 88458, 60528, + -5456, 3578, 97, 64938, 88458, 77188, -5456, 3581, -5456, 80618, + 3670, -5456, 3352, 2226, 2561, 1952, 3352, 64938, 88458, -5456, + 3352, 88458, 98258, -5456, 64938, 1342, -5456, 64938, 88458, 77188, + -5456, 3583, 3522, 64938, 88458, 19902, -5456, -5456, -5456, 368, + -5456, -5456, -5456, -5456, -5456, 88458, 88458, 368, 88458, 88458, + 368, 1466, -5456, 64938, 88458, -5456, -5456, -5456, 3480, 64938, + 88458, 88458, 249, 88458, -5456, 88458, 64938, 3409, 88458, 88458, + -5456, -5456, 88458, 8144, 88458, 88458, 88458, 88458, 88458, 88458, + 64938, 88458, -5456, -5456, 1119, 1440, 1772, 1860, 1708, 88458, + 3679, 88458,108548, 64938, 88458, 88458, 1164, 88458, 60528, 1947, + -5456, -5456, 3492, -5456, 64938, 1342, -5456, 9887, 88458, 88458, + 88458, 3450, 3456, 287, 3544, -5456, -5456, -5456, 866, 866, + 3588, -5456, 33622, 33622, 32098, 3376, -5456, -5456, 33622, 2784, + -5456, -5456, -5456, 1047, 3853, 1047,109038, 1047, 1047, 3672, + 3441, 3443, 1047, 1047, 1047, 3663, 1047, 1047, 1047, 88458, + 3563, -5456, -5456, 3563, 876, 33622,112888, 88458, -5456, 2173, + -5456, 3396, -5456, -5456, 60528, 88458, 767, 957, 3746, 3611, + 72288, 1526, 3734, 88458, 3445, 88458, 3866, 3489, -4, -5456, + 1526, 88458, -5456, 3234, 74248, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, 88458, -5456, -5456, 3736, 88458, 42690, 3584, -5456, + 1164, 2750, 2750, 2750, 2750, 3399, 2750, 88458, 3527, 3753, + 1526, 3402, 3756, -5456, 2888, 3759, 114, 88458, 3624, 72288, + 3465, 3447, 3638, 3882, 2226, 1164, 3643, 3631, -5456, 56130, + -5456, 2750, 3898, 27045, 5399, 5984, 3632, 3695, -5456, -5456, + 3639, 962, 88458, 3741, 3742, 3764, -5456, 225, -5456, 3895, + 1750, 3765, 327, -5456, 328, -5456, 2790, -5456, 88458, -5456, + 88458, 88458, 88458, 88458, 330, -5456, -5456, 328, 2790, 328, + 270, -5456, 3702, 327, 2790, 3554, 3769, 353, -5456, 379, + -5456, 3644, 270, -5456, 3658, 2226, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, 2177, -5456, 88458, -5456, 3745, 3748, 3749, + 3750, 3751, 3436, 3440, 3466, 88458, 3448, 3436, 368, 3452, + 3453, -5456, 3448, 3448, 3436, 2910, 2910, 3436, 3440, 63958, + 3883, 60528, -5456, -5456, 3517, 3458, 3776, 232, -5456, 893, + 1319, 3689, -5456, -5456, -5456, -5456,112888, -5456, 64938, 3482, + -5456, -5456, -5456, 3659, 3460, 63958, 270, 345, -5456, 68858, + 88458,112888, 68858, 3666, 68858, 68858,112888, 88458, 88458, 2183, + -5456, 1924, -5456, 2005, 33622, 198, -5456, 15873, 2200, 33622, + 3459, 3461, -5456, 3782, -5456, -5456, -5456, -5456, -5456, -5456, + 3464, 3784, -5456, 2201, 2212,112888, 2236, 3468, 16480, -5456, + 3467, 215, 3660, 6237, 3504, 2214, 3469, 272, -5456, 6237, + 1005, 2227, 3472, 3473, 6746, 6659, 3479, 16678, 3463, 3483, + 3484, 3478, 39210, 39210, 28029, 1033, -5456, 39210, 3485, 3655, + 2243, 15077, 3486, 3490, 16815, 32606, 33622, 32606, 32606, 16913, + 3491, 3495, -5456, 3829, -5456, 2247, 60528, 3647, 17451, 2248, + -5456, 33622, 60528, 6986, 33622, -5456, 33622, -5456, 3496, -5456, + -5456, 1439, 1439, 1439, 10031, -5456, 3499, -5456, 39210, 39210, + -5456, 1883, 28029, -5456, -5456, 3793, -5456, -5456, 274, -5456, + -5456, -5456, -5456, -5456, 3579, -5456, -5456, -5456, 3693, 2123, + 2828, 52675, 10421, 33622, 288, 33622, 3240, 33622, 3552, 1439, + 1439, 1439, 483, 483, 263, 263, 263, 2098, 507, -5456, + -5456, -5456, 3502, 3505, 3454, 3506, 33622, -5456, 3559, 48124, + -5456, 2188, 2367, 88458, 3255, 3990, 6137, -5456, -5456, -5456, + 3319, 729, 3319, -5456, 1670, 2643, 1130, 58077, -5456, -5456, + -5456, -5456, -5456, -5456, 88458, 19614, -5456, -5456, 3738, 3508, + 2249, -5456, -5456, 2643, -5456, -5456, 2330, 2330, 3511, -5456, + 3516, -5456, -5456, -5456, -5456, -5456, -5456, -5456, 3503, -5456, + -5456, -5456, 43184, 3837, 3514, 41702, 86008, 3518, 2550, -5456, + 86008, 86498, 86008, -5456, 3509, -5456, -5456, 1934, 33622, 3851, + -5456, -5456, -5456, 33622, -5456, -5456, 1191, 3553, 772, 117, + 2529, 2529, 2310, 853, -5456, -5456, 3603, -5456, 33622, 2494, + -5456, 2520, -5456, -5456, -5456, -5456, 2910, -5456, 3796, -5456, + -5456, -5456, 42196, 3586, 3601, 1381, 46148, 3760, -5456, 88458, + 42196, -5456, 88458, 366, -5456, 3545, -5456, -5456, -5456, -5456, + -5456, -5456,110508, 1933, -5456,114316, -5456,114316, -5456, 1933, + 3997, -5456,110508, 1895, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, 64938, 64938, 3766, + 88458, 3771, 3767, 33622, 273, 88458, 3547, 3557, 1449, 3854, + 3561, -5456, 3909, 270, -5456, -5456, 3640, -5456, 19614, -5456, + -5456, -5456, -5456, -5456, 64938, 88458, -5456, 68368, -5456, -5456, + 112888, -5456, -5456, 88458, 88458, -5456, -5456, -5456,112888, -5456, + -5456, -5456, 88458, 854, 3645, 3646, 88458, -5456, 1343, 3288, + 10377, 88458, 88458, 88458, 3860, -5456, -5456, -5456, -5456, 3790, + -5456, 3920, -5456,110508, -5456, 2790, 1392, 3651, 3031, 3800, + -5456, 3928, 3680, -5456, 3698, 807, -5456, -5456, 3708, -5456, + -5456, -5456, -5456, 3932, 270, 3933, 270, 88458, 88458, 88458, + 88458, 3712, -5456, -5456, -5456, -5456, 3713, 3852, -5456, 60528, + 60528, 60528, 2259, -5456, -5456, 1164, -5456, -5456, -5456, -5456, + -5456, -5456, 3889, -5456, 2264, -5456, 1361, 88458, -5456, -5456, + -5456, -5456, -5456, 3937, 64938, 88458, 10659, 88458, 88458, 88458, + 3801, 1881, 1126,112888, -5456,111936, -5456, -5456, 2266, -5456, + 3592, 88458, 3673, 64938, 3653, -5456, -5456, -5456, 3940, 2226, + 3726, 76208, 3634, 3634, 2075, -5456, -5456, -5456, -5456, -5456, + 3862, 3788, -5456, 1110, 3791, 64938, 3662, -5456, -5456, -5456, + -5456, 3954, 3686, -5456, -5456, 3692, 1233, 3031, 2888, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, 3720, -5456, + -5456, -5456, -5456, 1201, 1201, -5456, -5456, -5456, 1201, 1531, + 410, 1301, 3031, -5456, 1362, 372, 3696, -5456, 3697, -5456, + -5456, -5456, 3869, 3872, 3873, 3700, 3701, 3757, 3703, 3704, + 3761, -5456, 3705, 3763, 3709, 3768, 3710, 4011, 270,112888, + 3861, 1164, 3777, 3988, 270, -5456, 3717, -5456, 3721, -5456, + 2286, 4102, -5456, 88458, -5456, 404, 1302, 3031, -5456, 3723, + -5456, 64938, 88458, -5456, -5456, -5456, 33622, 3637, 3649, 3652, + 19614, 19614, 33622, -5456, -5456, 19614, 3642, -5456, -5456, -5456, + -5456,112888, -5456, 88458, 3944, -5456, -5456, 1047, 88458, 88458, + -5456, -5456, -5456, 88458, -5456, -5456, -5456, 3946, -5456, 267, + 267, -5456, -5456, 3975, 7709, 3654, 335, -5456, 60528, 49112, + 3088, 826, 1790, -5456, 68368, 88458, 68368, -5456, 957, 3870, + 88458, 88458, 88458, 3657, 3676, -5456, -5456, -5456, -5456, 64938, + 1066, 64938, 2643, -5456, -5456, 3735, -5456, 88458, 2226, 4173, + 4008, 3409, -5456, 4139, 3223, 1001, 1794, 338, 2838, 4076, + 2560, 33622, 384, -5456, -5456, 1934, 88458, 3447, -5456, -5456, + -5456, -5456, 1164, -5456, 3675, 3678, -5456, 88458, 4022, 88458, + 88458, 88458, 88458, 3482, 3681, 88458, 3682,112888, 88458, 2197, + 3026, 4160, 4047, 2066, 3465, 3779, 4049, 80618, 3706, 2296, + -5456, -5456, 962, -5456, 2298, 171, -5456, 1164, 68368,110984, + 4036, -5456, 617, 5984, -5456, -5456, 617, 953, 88458, -5456, + -5456, -5456, -5456, 3921, 2273, -5456, 4024, -5456, -5456, 2066, + -5456,112888, 3699, -5456, 2303, -5456, -5456, -5456, 353, 3770, + 270, 3773, 270, -5456, -5456, -5456, -5456, 88458, -5456, 88458, + 63468, -5456, -5456, 88458, -5456, 4059, -5456, -5456, 3843, 3844, + 3845, 3846, 3848, 88458, 3436, -5456, 3711, 88458, 88458, 64938, + 1649, -5456, -5456, 64938, 423, -5456, 188, -5456, 80618, 3840, + -5456, -5456, -5456, -5456, 4073, 4075, -5456, -5456, -5456, 1128, + -5456, 75228, 438, -5456, 64938, 4009, 4010, 4015, 4017, 368, + 4018, 4019, 4023, 4025, 4029, -5456, -5456, -5456, 3718, 17503, + 33622, -5456, 4087,112888, -5456, 8075, -5456, -5456, 33622, -5456, + 33622, -5456, -5456, 3468, 4026, 3894, -5456, -5456, 3958, 3959, + 33622, 3894, 4198, 1012, 33622, 33622, -5456, -5456, 3963, 3965, + 33622, 2123, 2123, -5456, -5456, -5456, -5456, 2339, 33622, -5456, + 33622, -5456, -5456, 25065, 4250, 4250, 3747,112888, 39210, 39210, + 39210, 39210, 1442, 2877, 39210, 39210, 39210, 39210, 39210, 39210, + 39210, 39210, 39210, 39210, 551, -5456, 3955, 33622, 33622, 33114, + -5456, -5456,112888, 3752, 3491, 3754, 3758, 33622, -5456, -5456, + -5456, 2305, 40714, 3774, 60528, -5456, 33622, 15309, 2309, 3803, + 17590, 1934, 8264, 2544, 33622, 1054, 2461, 33622, 2320, 33622, + -5456, -5456, -5456, -5456, 4089, -5456, -5456, -5456, -5456, -5456, + -5456, 3992, 2123, -5456, 3823, 3830, -5456, 33622, 3775, 3340, + 39210, 39210, 4413, -5456, 4444, 33622, 28029, -5456, 3588, -5456, + 25579, 3778, 33622,110018, -5456, -5456, 762, 762, 762, 762, + -5456, 88458, 88458, 88458, 3851, 3783, 3851, 178, 3785, -5456, + -5456, -5456, -5456, 2066, -5456, 3772, -5456, -5456, -5456, -5456, + -5456, 86008, 86498, 86008, 3781, 41208, 26074, 2550, 3786, 88458, + -5456, -5456, 3797, 42196, 4052, 3968, -5456, 42196, 3968, 1546, + 3968, 4053, 3863, 48618, -5456, -5456, 3798, -5456, 3976, -5456, + 1882, 19614, 4220, 4094, -5456, 3799, -5456, 3553, 298, -5456, + -5456, -5456, 883, -5456, 3859, -5456, -5456, -5456, 3518, 35146, + 3929, -5456, -5456, -5456, 3834, 2337, -5456, -5456, 4203, 3929, + -5456, 2376, -5456, 2338, 47630, 3586, 33622, 1934, 2343, 1901, + -5456, -5456,110508, -5456, 3856, 2790, 2790, 1436, 3436, 4128, + 1436, 8985, -5456, -5456, 43678, 88458, 88458, -5456, 88458, 88458, + 1543, 88458, -5456, 88458, -5456, -5456, -5456, 4263, 3855, 3858, + 4080, -5456, 2631, -5456, -5456, 64938, 88458, -5456, -5456, -5456, + 424, 1335, 3031, -5456, 3887, -5456, -5456, 4105, 88458, -5456, + 4258, 3900, 88458, 4165, 88458, 86988, -5456, 4235, 1543, 3922, + 4144, 1804, 3026, 373, 4137, -5456, 1897, -5456, -5456, 3888, + -5456, 88458, -5456, 88458, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, 3947, -5456, -5456, -5456, -5456, 61018, -5456, -5456, 88458, + -5456, 60528, 49112, 60528, -5456, 88458, -5456, 1541, 428, 1336, + 3031, -5456, 3901, -5456, 4170, 3904, 3905, 3961, 194, 941, + 3907, 3908, 3964, 3825, 3826, 3827, -5456, 60528, 49621, 3987, + 88458, 2790, 3831, 3875, 88458, 3634, 87478, -5456, 3833, -5456, + -5456, 3634, 249, 2552, -5456, -5456, -5456, 1164, 2790, 1164, + 88458, 88458, 88458, 88458, 249, -5456, -5456, -5456, 4288, 3931, + 88458, 88458, 88458, 88458, -5456, 3897, -5456, -5456, -5456, 88458, + 88458, 4183, 231, 2138, 64938, 88458, 88458, 64938, 88458, 88458, + 88458, 88458, 88458, 88458, 88458, 4057, -5456, 4277, 4202, 2289, + 4245, 3923, 88458, -5456, 88458, 1164, -5456, 3288, 88458, 88458, + 88458, 88458, -5456, -5456, -5456, -5456, -5456, 3588, -5456, 3849, + 4138, 1047, -5456, 4143, 4145, 4146, 1047, -5456, -5456, 1790, + -5456, 511, 88458, -5456, 2235, 88458, -5456, -5456, -5456, 3799, + 2377, 2526, -5456, -5456, -5456, -5456, -5456, -5456, 3864, 88458, + 88458, 39210, -5456, 439, 1805, 1101, -5456, 4135, 88458, 3083, + -5456, -5456, -5456, 244, 88458, -5456, -5456, -5456, -5456, 3865, + -5456, 879, 3681, -5456, 4152, 72288, 2790, 64938, 64938, 2790, + -5456,112888, 3868, 3447, -5456, 501, 3941, -5456, 64938, 1001, + 109528, 3221, 3899, 4077, 11193, 42196, 42690, 1201, -5456, 3871, + 3867, -5456, -5456, 88458, 3870, 63468, 2352, 2888, 4337, 1204, + 2127, -5456, 73758, 4066, 3681, 4152, -5456, 3026, 4090, 4092, + -5456, 2066, 88458, 3482, 3447, 1164, 88458, 3358, 49112, -5456, + 4387, 2304, -5456,110508, 33622, 33622, -5456, 3874, -5456, 3876, + 5984, -5456, 3953, 3878, 4348, 33622, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 3966, 3884, 88458, 88458, 962, 88458, + -5456, 3885, 3765, -5456, 3765, -5456, 88458, -5456, 88458, -5456, + 270, -5456, 4020, 270, 88458, 88458, 88458, 88458, 88458, 88458, + 3436, 368, 3453, -5456, -5456, 4221, 63958, 4219, -5456, 60528, + -5456, -5456, -5456, -5456, -5456, 2357, 88458, -5456, -5456, -5456, + 4291, 4230, 270, 419, 1049, 1049, 1049, 1049, 4185, 1049, + 1049, 1049, 1049, 1049, -5456, 33622, 19614, -5456, 3893, -5456, + 19614, 19614, -5456, 4265, 3896, 4124, 4126, -5456, 3902, 33622, + 3894, -5456, -5456, 4127, 4129, -5456, 3894, 3894, 3906, 11296, + 18324, -5456, 2375, 33622, -5456, 873, 873, 873, 2475, 4241, + -5456, 2672, 873, 873, 873, 496, 496, 276, 276, 276, + 4250, 551, 18366, 18734, 19084, 3911, -5456, -5456, -5456, 3491, + -5456, 35654, 1134, 4359, 40220, -5456, -5456, -5456, 3951, 3960, + 3913, -5456, 33622, 36162, 3914,114792, 4116, -5456, -5456, 1435, + 33622, 33622, 4780, -5456, 10572, 33622, -5456, -5456, 4199, 4204, + 4780, 530, 33622, 3101, 3677, 33622, 33622, 4745, 11446, 3925, + -5456, 2388, 33622, 11537, 4118, -5456, 88458, 88458, 88458, 88458, + -5456, -5456, -5456, 4094, 2559, 4094, 1164, 3926, -5456, -5456, + -5456, -5456, 61508, 3924, 3647, 86008, 3936, 88458, 2550, 42196, + -5456, -5456, 1712, -5456, 42196, 4212, -5456, 42196, 68858, -5456, + 88458, 3938, 88458, -5456, 1777, 33622, 3972, 52675, -5456, -5456, + -5456, -5456, 4021, -5456, 4164, 19614, 30574, -5456, 2066, 2433, + 88458, 1934, 103, -5456, 33622, 3939, 88458, -5456, 3929, 19614, + -5456, 4013, 2390, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + 4034, 74248, 4282, -5456, 33622, 2401, -5456, 3993, 4384, 218, + 2403, 2414, 1543, -5456, 2420, -5456, 1983, 4259, 476, -5456, + 270, -5456,112888, 88458, 88458, 88458, 2958, -5456, -5456, 88458, + 88458, 88458, 88458, -5456, -5456, 64938, 88458, -5456, 88458, -5456, + -5456, -5456, 87968, -5456, 3870, 249, 439, 4274, 4275, 4186, + -5456, 368, -5456, 439, 4187, 249, -5456, -5456, -5456, -5456, + 3395, -5456,112888, 270, 270, -5456, -5456, -5456, -5456, -5456, + 3971, -5456, 4409, 4058, 88458, 88458, 88458, 88458, 88458, 64938, + 88458, 88458, 2643, 2643,112888, 3962, -5456, 2643, 2643, 3969, + -5456, 64938, 88458, 88458, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, 4050, -5456, 33622, 4410, -5456, + -5456, -5456, -5456, -5456, 33622, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, 64938, 88458, 4056, -5456, + 4063, -5456, 844, -5456, -5456, 88458, 88458, 88458, 88458, 4331, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, 4341, 88458, -5456, -5456, 1164, 1164,112888, 270, 270, + -5456, -5456, -5456, 4067, -5456, -5456, 3989, 4281, 1047, -5456, + 1047, 1047, 1047, -5456, 3994, -5456, 1790, 4382, -5456, 1543, + 1781, 4333, -5456, 33622, -5456, 1312, 2475, -5456, 4391, 4474, + -5456, -5456, -5456, -5456, 3409, 2226, 3409, -5456, -5456, 68858, + 414, -5456, 4315, 767, 60528, 4224, 72288, 1362, 1937, 4002, + 4136, -5456, 2790, 2790, 4068, 88458, 4479, -5456, -5456, -5456, + -5456, -5456, -5456, 64938, 3653, -5456, 4244, 1215, 4351, 88458, + 42690, -5456, 3518, -5456, -5456, -5456, 1164, -5456, -5456, 4148, + 3447, -5456, 1986, 88458, 4238, 72288, 3482, 2424, -5456, -5456, + -5456, 4061, 4473, 3465, -5456, 1362, 4066, -5456, -5456, 4449, + 4117, 4064, 4501, -5456, 4117, 4369, 4249, 4032, -5456, 3706, + -5456, 88458, -5456, 19614, 19614, 1164,115268, 617,112888, 4380, + -5456, 19614, 88458, 922, 4035, 4206, -5456, 4346, 270, 2435, + -5456, 270, 270, -5456, 88458, -5456, 3436, 3436, 3436, 3436, + 3436, -5456, 4251, -5456, -5456, -5456, -5456, 4336, -5456, 63958, + -5456, 270, -5456, -5456, -5456, -5456, -5456, -5456, 1049, -5456, + -5456, -5456, -5456, -5456, 19614, -5456, 88458, -5456, -5456, -5456, + -5456, -5456, 3270, 4042, -5456, -5456, 4043, 4044, -5456, -5456, + 33622, -5456, 11948, 39210, 4385, -5456, 33622, 33622, 33622, -5456, + 4048, 2444, 2457, -5456, -5456, 1134, -5456, 4359, -5456, -5456, + -5456, 12019, 4107, 19614, 4166, 4054, 1813, 4780, 4780, 10572, + -5456, -5456, 4780, 33622, 33622, 4780, 4780, 33622, -5456, -5456, + -5456, 12088, -5456, 4508, 3588, -5456, -5456, -5456, -5456, 3972, + -5456, -5456, 3972, -5456, 4194, -5456, 2472, 4532, 38194, 4490, + -5456, 88458, 2484, -5456, 33622, 4060, -5456, -5456, 42196, 1712, + 4062, 2497, 88458, 2498,112888, 36670, 19614, 88458, 3588, 4070, + -5456, 88458, 2907, -5456, 1381, -5456, -5456, 4481, 43678, 4439, + 19172, 33622, -5456, -5456, -5456, -5456, 63958, 4285, 63958, 1543, + 12366, 4377, 43678, 53693, 88458, -5456, 88458, -5456, 4233, 4377, + 4377, -5456, -5456, -5456, -5456, -5456, -5456, 4072, -5456, -5456, + -5456, -5456, 4155, -5456, -5456, 1078, 3451, -5456, -5456, -5456, + -5456, -5456, 4551, 4436, 4440, -5456, -5456, -5456, -5456, -5456, + 4277, -5456, -5456, 49112, 64938, 88458, -5456, 4171, -5456, -5456, + -5456, -5456, -5456, -5456, 45654, 52675, -5456, 194, 4084, 4086, + 941, -5456, -5456, -5456, 88458, 12452, 4088, 12643, 1195, 3451, + 88458, 88458, 4096, 4097, 4099, 1691, 1495, 1843, 3436, 4425, + 88458, -5456, -5456, -5456, 4277, -5456, -5456, 88458, -5456, 1047, + -5456, -5456, -5456, -5456, 60528, -5456, 2208, 3994, 1164, 68858, + 4562, 4562, 12688, 4317, -5456, -5456, 451, 4154, 4349, 4154, + 4100, 88458, 244, 4101, 2499, -5456, 88458, 4103, 4234, 2229, + 2229, 88458, 88458, 88458, 2503, 2066, 2790, 3875, 1001, 4461, + 72288, 4507, 3870, 395, -5456, 88458, 4582, 88458, 3482, 3681, + 88458, 4109, -5456, -5456, 73758, 4325, 3088, 88458, 2197, 4066, + 3465, 280, 88458, -5456, 346, -5456, 2066, -5456, 88458, 80618, + 43678, 4451, -5456,114316, -5456, 2505, -5456, -5456, -5456, 4189, + 20728, 3319, 4232, 4236, 4119, 2044, 4466, 88458, 1181, -5456, + -5456, -5456, -5456, -5456, -5456, 88458, 438, -5456, -5456, -5456, + -5456, -5456, -5456, 19337, -5456, 3060, 39210, 19614, 19614, 19614, + 33622, -5456, 33622, -5456, -5456, -5456, -5456, 124, -5456, -5456, + 4434, 4130, 4780, 4780, 4780, -5456, 33622, 223, -5456, -5456, + 1371, 4529, 3509, 61508, 4132, -5456, 39210, 2510, -5456, 1120, + 88458, 2511, -5456, 19614, 88458, -5456, -5456, 33622, -5456, 2517, + -5456, 4134, 1088, 4140, 24037, 4142, -5456, -5456, -5456, -5456, + -5456, 19614, 4147, -5456, 4603, 1590, -5456, -5456, 4193, 88458, + 2518, -5456, 126, 905, 4177, -5456, 19614, 1649, 1436, 469, + 4384, 4141, 3409, -5456, 4149, -5456, -5456, 1107, 3026, 88458, + 3409, 3409, -5456, 88458, 4239, -5456, 3088, 4460, -5456, -5456, + 4201, -5456, 1196, 3451, 88458,112888, -5456, 166, 4488, -5456, + 112888,112888, -5456, -5456, -5456, 33622, -5456, 4242, -5456, -5456, + -5456, 33622, 33622, 71308, -5456, -5456, 88458, 88458, 88458, 88458, + 88458, -5456, 270, -5456, -5456, 2523, -5456, 44666, -5456, -5456, + 3216, 1164, 3216, 1941, -5456, -5456, 3216, 3216, -5456, 3319, + -5456, 4562, 1393, -5456, -5456, 4389, 4156, 33622, 4458, -5456, + 1351, 4372, -5456, 4157, -5456, 68858, 4664, -5456, 60528, 3681, + 4152, 88458, -5456, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 2530, 3870, 4509, 3447, 4064, -5456, + 88458, 4205, -5456, 42196, 3870, 2066, 2127, -5456, 4066, 3681, + 4152, -5456, -5456, 4159, 4092, 3465, 2197, 4305, -5456, 4308, + -5456, 4606, 4383, 4608, 3482, -5456, 3358, 2531, 88458, -5456, + -5456, 5984,115268,112888, -5456, -5456, -5456, 4168, 4550, 4218, + 4222, -5456, -5456, -5456, 2044, -5456, 773, 4549, 4225, -5456, + 4240, 88458, -5456, -5456, 3870, 270, 33622, 3060, 2532, 2536, + 4237, -5456, -5456, -5456, 3491, 37178, 37178, 37178, 4176, 4531, + 4534, 88458, -5456, -5456, -5456, 88458, 2475, 4184, 38194, 60528, + 2537, -5456,112412, -5456, 2538, 2543, -5456, 33622, 4190, 33622, + -5456, 36670, 88458, 4192, 3294, 2066, -5456, 3319, 43678, -5456, + 4321, 4667, 4452, -5456, -5456, 4535, -5456, -5456, 88458, 4154, + 52675, 3553, 1107, 2226, 4154, 4154, -5456, 88458, 4156, 33622, + -5456, 4290, -5456, -5456, 2569, 1752, 4371, 4371, 2582, 2588, + 12782, 88458, 2597, 2606, -5456, 2607, 2643, 3440, 1843, 3440, + -5456, 3436, -5456, -5456, 60528, -5456, 64448, -5456, -5456, -5456, + 1164, -5456, 1164, 4430, 88458, 55163, 1164, 1164, -5456, -5456, + -5456, -5456, 4511, -5456, 2888, -5456, 13217, 4299, -5456, -5456, + -5456, 532, -5456, 4424, 4426, -5456, 4207, -5456, 2614, -5456, + 1362, 4340, 3870, -5456, -5456, 88458, 4685, 4687, -5456, 1304, + 88458, 3518, -5456, 4064, 3482, 3465, 1362, 4066, 3088, 44172, + 4117, 2197, 4092, -5456, -5456, 4428, -5456, 4432, -5456, 4215, + 4538, -5456, 1707, 617, -5456, -5456, -5456, 375, 4558, 4566, + -5456, -5456, -5456, 3216, -5456, 787, 4231, 4585, -5456, -5456, + -5456, -5456, 19614, -5456, -5456, -5456, 38702, 4378, 254, 15848, + 4596, -5456, 4596, 4596, -5456, 4689, 4690, 1213, 2618, 40220, + -5456, -5456, -5456, 88458, 4448, 343, 4713, 4406, 2620, 36670, + 2624, -5456, -5456, -5456, -5456, -5456, -5456, -5456, 47630, 33622, + 4339, 4667, 63958, 2625, 3634, 4246, -5456, 3553, 4349, -5456, + -5456, 3451, -5456, 19614, 88458, 68858, 4700, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, 3451, 4338, -5456, -5456, 71308, -5456, + 88458, -5456, -5456, 2630, -5456, -5456, -5456, 88458, 4035, -5456, + 4035, -5456, -5456, -5456, 2683, 4358, 88458, 1111, 1111, 4643, + -5456, 4319, -5456, 4255, -5456, 4768, 4392, 88458, -5456, -5456, + 194, 2066, 72288, 3870, -5456, -5456, 2197, 4066, 3465, 33622, + 2644, -5456, 4384, 218, -5456, 4092, 4117, -5456, -5456, 43678, + 4262, 3083, 4636, -5456, -5456, -5456, 1865, 68858, 68858, 88458, + -5456, -5456, -5456, 33622, 244, 4742, -5456, -5456, -5456, -5456, + -5456, 1206, -5456, -5456, -5456, 88458, 88458, 88458, -5456, 3647, + -5456, -5456, 39210, 39210, 4493, -5456, 343, -5456, 88458, -5456, + 4266, -5456, -5456, 2645, -5456, 1396, 19614, 390, 4357, 469, + -5456, -5456, -5456, -5456, 4372, 1543, 1543, -5456, 3451, -5456, + 88458, -5456, 4268, -5456, -5456, -5456, 64448, 4035, -5456, -5456, + -5456, -5456, 4760, -5456, 985, -5456, -5456, -5456, -5456, 88458, + 3870, 3962, 4064, -5456, 4092, 3465, 2197, 13565, -5456, 44172, + 88458, 88458, 4117, -5456, 2659, 43678, 3447, 4418, -5456, 2429, + -5456, -5456, -5456, -5456, -5456, -5456, -5456, 417, 4272, 4276, + -5456, -5456, 13697, 68858, 37686, 4427, -5456, 4489, -5456, 1249, + 1350, 1920, 4714, 2475, 2475, -5456, -5456, -5456, 33622, -5456, + -5456, -5456, 4515, 4414, -5456, -5456, 1548, -5456, 1543, -5456, + -5456, -5456, 33622, -5456, -5456, 2226, 2226, 3870, -5456, -5456, + 4117, 2197, 4092, 4384, -5456, -5456, -5456, -5456, 4538, -5456, + 2677, 4117, 4225, 2324, -5456, -5456, 2356, 2592, 4373, 4624, + -5456, 4289, -5456, -5456, -5456, 88458, 88458, 61998, 88458, 88458, + 13897, -5456, 47630, 4520, 187, -5456, 1543, 2685, -5456, -5456, + -5456, -5456, 4092, 4117, 88458, 3083, -5456, 43678, 3319, 4652, + -5456, 2429, 4412, 4416, 60038, -5456, -5456, 320, 4691, -5456, + 2694, -5456, 4296, -5456, 4361, 1381, 4301, 88458, -5456, -5456, + 4117, -5456, -5456, 3447, -5456, -5456, 244, -5456, 4345, 4350, + -5456, 2696, -5456, -5456, -5456, -5456, 33622, 61998, -5456, -5456, + 4360, 33622, 2698, -5456, 4117, 68858, 4645, 4646, -5456, 60038, + 866, 4368, 4376, 2713, 786, 3319, 4313, 68858, 68858, -5456, + 4314, 88458, -5456, -5456, 1381, -5456, -5456, 60038, -5456, -5456, + 2559, -5456, 4374, 2714, 4376, -5456, -5456 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -5539, -5539, -5539, 3812, -558, -5539, -5539, -958, -449, 3054, - -1132, -5539, -5539, -5539, 1347, -5539, -5539, -5539, -5539, 3776, - -5539, 1733, -2853, -5539, -5539, 134, 3732, -1362, 128, 3383, - 1415, -5539, -981, -5539, -5539, -617, 3, -5539, 3737, 311, - -5539, -5539, -5539, -5539, -5539, -5539, -5539, -5539, -811, 1851, - -5539, 1937, 1216, -922, -3407, -5539, -5539, -1482, -3692, -5539, - 514, -5539, 540, -4715, -1027, -5539, -5539, -5539, 1841, -5539, - -5539, -5539, 1788, 1016, -452, -5539, -5539, -5539, -5539, -5539, - -5539, -866, -5539, -5539, -1130, 7, -640, -2891, -4223, -5539, - -5539, 364, -493, -1475, -5539, 559, -5539, -4550, -5539, -106, - -2629, -4246, -5539, -5539, -5539, -467, -1437, 1314, -5539, -730, - -1136, 1664, -2616, -983, -5539, -340, -3495, -1104, -878, -875, - -1014, -4276, -4768, -5539, -5539, -1133, -3679, -5037, -5287, -4789, - -4583, 1325, -5539, -134, 369, -5539, 8, -3607, -3670, 13, - 344, -5539, 15, 17, -5539, 362, -808, -968, -1567, -5539, - -931, -5539, -5539, -5539, -3385, -5539, -5539, -5539, 144, -5539, - -5539, -5539, -5539, 402, -5539, -5539, -5539, -5539, -5539, -5539, - -2577, 1813, 1814, -5539, -4072, -5539, -927, -5539, 567, -3412, - 1245, -5539, -5539, 1010, 3808, 387, -5539, -5539, -5539, -5539, - -5539, -5539, -1766, -5539, -5539, -5539, -5539, -112, -437, -5539, - -5539, -5539, -5539, -5539, -5539, -5539, 18, -5539, 971, 326, - -5539, -5539, -724, -5539, -5539, -5539, -5539, -5539, -5539, -1187, - -5057, -1295, -1276, -5539, -3410, -5539, -5539, -5539, -411, -5539, - -5539, -5539, -5539, -5539, -868, -5539, 1065, -4071, -5539, -5539, - 363, -5539, -5539, -5539, -5539, -5539, -986, -347, 2991, -5539, - -581, -783, -5539, -5539, -5539, -346, -5539, -5539, -5539, -5539, - -5539, -507, -1284, 4801, 4187, -1096, 5912, -833, -578, -5539, - -5539, -5539, -2654, -5539, -5539, -4144, -5539, 4792, 2532, 386, - 19, -5539, -1, 89, 3659, -5539, 933, -1151, -3063, 325, - -543, -5539, -5539, -5539, -3034, -5539, -5539, -5539, -5539, -4015, - 21, -5539, -714, -5539, -4291, -5075, -4498, -4021, -1157, -5539, - -5391, -4162, -4299, -3991, -5539, 1840, -5539, -5539, -548, -192, - 2964, -5539, -1456, 2187, -1410, -5539, -2461, 382, 1409, 2970, - -3220, -130, 2961, -2951, -5539, -717, 1001, -5539, -436, -3740, - -5539, -5539, -5539, -2674, -673, -5539, -5539, 1560, 572, -5539, - -5539, -5539, -5539, -620, 2938, -182, -5539, -5539, 4157, -5539, - -4843, -5539, 4127, -5539, -5539, -5539, -5539, 2857, 2860, -5539, - -5539, -1443, 1173, -5539, -836, -5539, -5539, 1946, 599, -5539, - -5539, -5539, -5539, 1258, -530, -5539, -5539, -5539, -5539, -5539, - -5539, -5539, -975, -1175, -5539, -5539, -4772, -5539, -5539, -5539, - -5539, -5539, 2298, -947, -742, 4024, 747, 24, -5223, -5539, - -5539, -925, -5539, 3379, -5539, -5539, -5539, -5539, -5539, 384, - 385, -5539, -5539, -5539, -5539, -3752, -5539, -5539, -4931, -5539, - -5539, 1927, -5539, -5539, 931, 6, 3087, -5539, -5539, -5539, - -11, -5539, -5539, -1013, 2274, -5539, -2360, -5539, -586, -5539, - -5539, -1881, 26, -4273, -5539, 5, -5539, -5539, -4938, -1180, - 205, -5539, -5539, -3924, 9, -5539, -5539, -5539, -5539, -4941, - -5539, 11, -5394, 742, -3272, -5539, 1, -5539, -495, -870, - -5539, -5539, -5539, -3729, 28, 36, -5539, -5539, 4, 301, - -46, -44, -12, 2, 121, 3493, -5539, -5539, -5539, -4674, - 3537, -5539, -4, -857, 4834, 4836, -5539, -881, -158, -5539, - 1512, -704, -2549, 3459, 3462, -5539, 1501, 2283, -2425, -2431, - -5539, -1012, -845, -680, -5539, -5539, -5539, -5539, -1489, -698, - -2552, -5539, 3460, -5539, -5539, -5539, -2317, -3298, -3207, 1537, - -3224, -3117, -5539, 823, 804, -951, -187, 104, -1462, -778, - 1723, -5539, -5539, 1545, -431, -5539, -5539, -429, -3221, 766, - -5539, -4466, -2774, 1548, -1110, -826, -5539, -956, -5539, -651, - 894, 3510, -813, -5539, -5539, -788, 11796, -5539, -5539, -5539, - 12693, 13876, -5539, -5539, 14176, 14911, -5539, -589, 14965, 11704, - -779, -1910, -149, 16754, -1853, 2858, 93, -5539, -2914, -2012, - -5539, -5539, -5539, -395, 908, 612, -5539, -4486, -4346, -5539, - -5539, -2098, -5539, -657, -5539, -656, -5539, -5539, -5539, -3053, - -5436, -3047, 2415, -5539, -5539, -5539, -199, -5539, 16612, -3212, - -5539, -306, -982, -1574, 2888, -3009, -1896, -5539, -5539, -5539, - -3073, -5539, -5539, -5539, -635, 1642, -5539, -5539, 1746, -5539, - -5539, -5539, -952, 1983, -759, -1165, 1647, 4028, -766, 2421, - -782, 15836, -652, 12002, -1273, -5539, 5473, -5538, 828, 6895, - 37, -108, 6649, -598, 2331, 2818, -5539, -5539, 5134, 3814, - -572, -959, -5539, -6, 13133, 10090, -3618, -5539 + -5456, -5456, -5456, 3930, -569, -1721, -5055, -1119, 6184, -5456, + -5456, -950, -685, 3165, -1745, -5456, -5456, -5456, 1376, -5456, + -5456, -5456, -5456, 3892, -5456, -2899, -5456, -5456, 177, 3850, + -1366, 131, 3470, 1475, -5456, -993, -5456, -5456, -630, 1, + -5456, 3857, 505, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + -5456, -855, 1930, -5456, 2023, 1273, -3211, -5456, -5456, -1505, + -3726, -5456, 540, -5456, 568, -4805, -1052, -5456, -5456, -5456, + 1918, -5456, -5456, -5456, 1869, 1068, -463, -5456, -5456, -5456, + -5456, -5456, -5456, -889, -5456, -5456, -1160, 8, -649, -2933, + -4300, -5456, -5456, 392, -502, -1480, -5456, 590, -5456, 592, + -5456, -4846, -5456, -98, -2660, -2472, -5456, -5456, -5456, -472, + -1451, 1375, -5456, -738, -1133, 1745, -2344, -1007, -5456, -350, + -3557, -1131, -900, -898, -1041, -4338, -4860, -5456, -5456, -1161, + -3768, -5142, -5385, -4874, -5084, 1382, -5456, -131, 396, -5456, + 9, -3645, -3728, 10, 371, -5456, 11, 13, -5456, 388, + -832, -963, -1579, -5456, -823, -5456, -5456, -5456, -3432, -5456, + -5456, -5456, 167, -5456, -5456, -5456, -5456, 432, -5456, -5456, + -5456, -5456, -5456, -5456, -3110, 1892, 1893, -5456, -4329, -5456, + -927, -5456, 595, -3474, 1305, -5456, -5456, 1064, 3915, 412, + -5456, -5456, -5456, -5456, -5456, -5456, -1783, -5456, -5456, -5456, + -5456, -108, -449, -5456, -5456, -5456, -5456, -5456, -5456, -5456, + 14, -5456, 1029, 354, -5456, -5456, -741, -5456, -5456, -5456, + -5456, -5456, -5456, -1208, -5155, -1311, -1292, -5456, -3475, -5456, + -5456, -5456, -423, -5456, -5456, -5456, -5456, -5456, -699, -5456, + 1127, -4141, -5456, -5456, 397, -5456, -5456, -5456, -5456, -5456, + -1014, -359, 3089, -5456, -599, -807, -5456, -5456, -5456, -358, + -5456, -5456, -5456, -5456, -5456, -505, -1239, 4915, 4292, -1100, + 9317, -830, -564, -5456, -5456, -5456, -2756, -5456, -5456, -4253, + -5456, 4906, 2546, 1477, 17, -5456, -2, 82, 3728, -5456, + 995, -1153, -3091, 357, -560, -5456, -5456, -5456, 355, -5456, + -1951, -5456, -5456, -5456, -5456, -4089, 18, -5456, -4365, -5181, + -4600, -4104, -1171, -5456, -4378, -5113, -4058, -5456, 1925, -5456, + -5456, -562, -184, 3063, -5456, -1465, 2263, -1421, -5456, -2478, + 425, 1474, 3077, -3276, -93, 3067, -2988, -5456, -732, 1069, + -5456, -443, -3758, -5456, -5456, -5456, -2754, -683, -5456, -5456, + 1624, 766, -5456, -5456, -5456, -5456, -635, 3040, -191, -5456, + -5456, 4270, -5456, -4951, -5456, 4243, -5456, -5456, -5456, -5456, + -5456, -5456, -5456, -5456, -5456, -1473, 1237, -5456, -828, -5456, + -5456, 2030, 634, -5456, -5456, -5456, -5456, 1322, -509, -5456, + -5456, -5456, -5456, -5456, -5456, -5456, -992, -1185, -5456, -5456, + -4492, -5456, -5456, -5456, -5456, -5456, 2317, -945, -737, 4153, + -230, 19, -5314, -5456, -5456, -1178, -5456, 3488, -5456, -5456, + -5456, -5456, -5456, 415, 418, -5456, -5456, -5456, -5456, -3906, + -5456, -5456, -5027, -5456, -5456, 2009, -5456, -5456, 966, 6, + 3186, -5456, -5456, -5456, -26, -5456, -5456, -1008, 2359, -5456, + -2387, -5456, -591, -5456, -5456, -1905, 21, -4347, -5456, 12, + -5456, -5456, -5044, -1190, 226, -5456, -5456, -3976, 15, -5456, + -5456, -5456, -5456, -5053, -5456, 16, -4744, 776, -3322, -5456, + 2, -5456, -500, -884, -5456, -5456, -5456, -3866, 23, 33, + -5456, -5456, 4, 334, -49, -46, -23, 5, 139, 3597, + -5456, -5456, -5456, -4325, 3641, -5456, -9, -857, 4959, 4961, + -5456, -886, -146, 377, 1579, -707, -2586, 3548, 3565, -5456, + 1565, 2378, -2457, -2453, -5456, -1251, -859, -690, -5456, -5456, + -5456, -5456, -1813, -691, -2594, -5456, 3567, -5456, -5456, -5456, + -2358, -3360, -3262, 1610, -3274, -3197, -5456, 860, 847, -1215, + -182, 49, -1482, -781, 1529, -5456, -5456, 1616, -434, -5456, + -5456, -430, -3281, 808, -5456, -4576, -2798, 1625, -1113, -835, + -5456, -967, -5456, -657, 3667, 3623, -816, -5456, -5456, -789, + 12773, -5456, -5456, -5456, 12919, 13933, -5456, -5456, 14697, 14950, + -5456, -579, 15425, 12713, -787, -1925, 614, 17470, -1748, 2328, + 94, -5456, -2966, -2295, -5456, -5456, -5456, -393, 963, 699, + -5456, -5456, -4587, -4424, -5456, 2509, -2335, -5456, -661, 1698, + -660, -5456, -5456, -5456, -2702, -5455, -2846, 2515, -5456, -5456, + -5456, -176, -5456, 17280, -3242, -5456, -826, -1013, -1596, 3000, + -3089, -1911, -5456, -5456, -5456, -3094, -5456, -5456, -5456, -2791, + 1723, -5456, -5456, 1845, -5456, -5456, -5456, -953, 2083, -758, + -1172, 1729, -1906, -3031, -5456, -1926, 1740, -2182, -5456, -1914, + 1816, 1045, -5456, -1615, -5456, 4174, -788, 2528, -783, 16521, + -689, 10673, -1276, -5456, 261, -5001, 1665, 7219, 24, -128, + 680, -276, 2443, 3011, -5456, -5456, 5100, 6943, -578, -969, + -5456, -6, 13850, 11185, -3663, -5456 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -2829 +#define YYTABLE_NINF -2896 static const yytype_int16 yytable[] = { - 622, 184, 191, 71, 186, 180, 175, 80, 83, 181, - 900, 183, 970, 84, 934, 85, 1613, 86, 106, 124, - 1559, 129, 975, 191, 159, 980, 178, 736, 185, 969, - 1686, 911, 1445, 1075, 1343, 805, 1200, 1201, 1202, 1782, - 1898, 840, 1206, 1666, 627, 888, 2856, 1331, 2647, 2683, - 1431, 678, 1433, 3452, 1416, 1771, 1396, 2749, 1618, 763, - 1021, 1952, 1372, 1678, 1776, 763, 2778, 922, 1112, 2741, - 1387, 1388, 3392, 1842, 1166, 1999, 3393, 1992, 1220, 1395, - 1371, 1359, 4047, 3755, 4049, 3915, 3012, 3786, 3838, 1784, - 1173, 3896, 1464, 1402, 2761, 2750, 4111, 4411, 4462, 618, - 4263, 3140, 1815, 4170, 3165, 4191, 1820, 2924, 978, 4650, - 1147, 1824, 770, 1114, 1555, 2647, 2817, 2817, 4724, 3670, - 2817, 1834, 1000, 4360, 1160, 806, 4689, 1042, 4684, 4215, - 4087, 4217, 4125, 3777, 1854, 4424, 3234, 4437, 3236, 1577, - 5064, 4070, 2579, 1157, 1594, 1174, 232, 913, 836, 4947, - 4926, 5357, 4936, 2732, 4749, 5261, 4100, 3079, 1145, 5453, - 1021, 1149, 4887, 799, 905, 1887, 2886, 2887, 5254, 3202, - 833, 851, 5222, 1612, 5133, 825, 5076, 1527, 5078, 914, - 3387, 3315, 1644, 3303, 3384, 3418, 3420, 4020, 3305, 5505, - 5384, 622, 1671, 5112, 4131, 4124, 4421, 3638, 4665, 2882, - 622, 945, 1351, 1890, 4935, 5673, 1438, 1827, 622, 1894, - 945, 622, 1441, 2732, 2712, 5492, 684, 1522, 1021, 1905, - 5253, 5023, 1851, 1908, 945, 3960, 2913, 1911, 3363, 1913, - 2732, -2433, 5406, 745, 684, 1921, 4085, -2471, 4090, -2496, - 637, 1927, -2325, -2534, 1930, 5109, 2538, 1114, -2325, 5416, - 5417, -2325, -2325, 5661, 3960, -2285, 2893, 1880, 1522, 1850, - -2326, -2285, 6043, 1522, -2178, 1371, -2326, 1384, 1385, -2326, - -2326, -2178, 1021, 2584, -1931, -1898, -1911, 1394, 745, 1880, - -1931, -1898, -1911, -1936, -2357, 3714, 3009, 3717, 3718, -1936, - 4447, 1229, 3722, 3723, 3724, 745, 3726, 3727, 3728, 920, - 3913, 187, 843, 1101, -1926, -2436, 684, 915, 3774, 5444, - -1926, 3149, 2046, 3149, 1181, 1880, 745, 1880, 3695, 5598, - 1494, -2704, 187, 3244, 1807, 1880, 2051, -2704, 684, 993, - -2704, -2704, 1021, 2582, 2501, 1185, 684, 3244, -1939, 1880, - -1939, 3464, 2501, 5863, -1939, 4918, -1939, 684, 1347, 2677, - 1880, 3108, 5119, 4166, 5092, 2691, 3900, 899, -141, 2544, - 1556, 2955, 5442, 5641, -141, 5276, 745, 3284, 2678, 2817, - 4948, 4994, 4995, 4996, 3285, 4998, 4999, 5000, 5001, 5002, - 5176, 5250, 3021, 1880, 4923, 1864, 684, 1453, 5815, 3021, - 1196, 3745, 2546, 1976, 916, 3042, 2685, 5823, 5932, 5572, - 2027, 5968, -2494, 5633, 5177, 751, 3291, 5383, 3022, 2051, - 4924, 751, 1678, 751, 2590, 3022, 2802, 751, 3043, 1776, - 5908, 5909, 635, 5561, 2686, 2978, 2520, 2679, 5405, 752, - 3389, 2533, 2533, 917, 1495, 752, 1829, 752, 1494, 3366, - 5215, 752, 2544, 5803, 6044, 1812, 679, 2680, 1114, 1507, - 5595, 1204, 1362, 2597, 970, -2197, 1771, 5675, 751, 3584, - 2727, 2898, -2197, 4651, 2752, 6037, 4348, 2586, 4287, 3010, - 1387, 1388, 5223, 1397, 1005, 2546, 1596, 4115, 634, 751, - 5135, 2515, 752, 1556, 684, 5493, 5412, 5140, 4408, 745, - 2516, 1395, 912, 4897, 1398, 2689, 5642, 2051, 5481, 2539, - 5829, 3746, 1984, 752, 970, 2752, 2677, 2752, 2692, 5413, - 1402, 3960, 1399, 4116, 2779, 1597, 2880, 4288, 4283, 3130, - 5224, 4457, 194, 3668, 2752, 4652, 1363, 5910, 6080, 3367, - 2544, 1929, 5830, 2752, 3585, 2752, 1896, 3390, 1225, 1205, - 1377, 2752, 1881, 1069, 2979, 1906, 2752, 2013, 3292, 1079, - 2043, 2598, 1495, 2667, 2803, 2728, 5634, 1896, 5216, 5969, - 6031, 1092, 3451, 2546, 1881, 5573, 195, 685, 5093, 1197, - 3358, 5643, 2719, 915, 1006, 1776, 4376, 2687, 2504, 5824, - 3044, 5954, 2726, 3901, 2679, 6020, 1239, 1454, 4898, 3960, - 6045, 1936, 5955, -2829, -2829, -2829, 5632, 2681, 2517, 2693, - 1881, 3023, 1881, 4925, 2680, 2956, 1973, 4360, 5234, 5277, - 1881, 5338, 3109, 4167, 6041, 5973, 1996, 1983, 3933, -437, - 5445, -2178, 918, 1205, 1881, 1007, 945, 5786, 2581, 844, - 5450, 1993, 1205, 4784, 1106, 1881, 1896, 5814, 4499, 1052, - 191, 3011, 1053, 1049, 6046, 945, -2494, 1050, 3131, 1051, - 2851, 945, 1566, 2854, 3465, 2894, 2762, 1977, 1384, 1385, - 916, 1114, 4448, 945, 3696, 4127, 1013, 5178, 1881, 2841, - 1014, 1496, 2844, 2845, 5120, 4899, 2779, 5972, 5304, 945, - 5769, 1231, 3245, 1008, 622, 1394, 900, 638, 6019, 888, - 2717, 3747, 2861, 622, 945, 864, 4025, 2922, 2923, 1882, - 622, 1977, 945, 622, 4896, 3970, 3971, 3972, 3973, 3974, - 3975, 2682, 3308, 3161, 2823, 888, 945, 2518, 5668, 1382, - -2494, 1889, 1813, 3332, 3286, 1177, 945, 2796, 2557, 680, - 2921, 6049, -2494, 191, 1497, 2780, -2433, 2513, -2325, 3975, - 4694, 2624, -2471, 5912, -2496, 4944, 5098, 2625, -2534, 1013, - 2585, -2285, 2795, 1014, 2681, 1446, -2326, 1893, 1013, 1904, - 757, 758, 1014, 4791, 2874, 2875, 4943, 1926, 5902, 4795, - -1931, 1386, 1390, 1813, 4340, 4341, 5931, 757, 758, -1936, - 3748, 1929, 1114, 1178, 945, 1183, 2840, 1187, 681, -2357, - 1114, 1114, 1896, 1191, 1813, 1397, 1194, 1397, 757, 758, - -1926, 2912, 2047, 2562, 2563, 2929, 2736, 622, 622, 5875, - -2436, 2488, -2197, 945, 1586, 3097, 1398, -2704, 1398, 4458, - 4409, 2690, 5879, 4360, 2502, 4499, 682, 1486, 683, 3081, - 4409, 2899, 6065, 4900, 1399, 970, 1401, 1587, 945, 1794, - 622, 4087, 2881, 1799, 4284, 1800, -141, -141, 1557, 1558, - 762, 1361, 1798, 5292, 2965, 3132, 762, 913, 1677, 2736, - 2900, 3493, 3107, 888, 2943, 1933, 3966, 5975, 2682, 4630, - 3569, 5580, 4321, 4634, 3122, 3133, 2736, 4532, 4711, 4377, - 4421, 4512, 1208, 4754, 5813, 622, 1468, 932, 918, 914, - 2966, 2485, 2486, 2487, 2488, 1789, 5956, 2780, 945, 2781, - 785, 2779, 5807, 4901, 184, 191, 71, 186, 180, 175, - 80, 83, 181, 4171, 183, 4674, 84, -1751, 85, 5850, - 86, 106, 124, 4402, 129, 684, 1065, 159, 2782, 178, - 1479, 185, 5997, 3167, 4855, 5963, 4859, 6018, 5795, 187, - 5671, 1487, 5787, 4105, 1208, 874, 1831, 4621, 3384, 4623, - 2804, 1346, 1128, 2783, 5806, 1356, 4133, 4054, 4134, 2498, - 4858, 4278, 4279, 1880, 2983, 1675, 4280, 3842, 1378, 2763, - 2973, 1557, 1558, -1898, 1469, 906, 3063, 2483, 2484, 2485, - 2486, 2487, 2488, 2764, 3070, 2765, 3561, 3902, 786, 3358, - 4816, 2711, 2777, 3972, 3973, 3974, 3975, 4463, 6074, 5743, - 777, 684, 2042, 4877, 5748, 5749, 622, 622, 1772, 1655, - 5889, 684, 5998, 5528, 945, 1656, 2853, 1650, 3484, 622, - 5486, 5538, 1450, 5542, 888, 622, 5911, 1470, 2779, 622, - 1873, 622, 187, 899, 5499, 888, 5851, 1501, 5903, 4782, - 751, 907, 5500, 3484, 1874, 4762, 2766, 2586, 1005, 2820, - 953, 888, 2824, 5920, 3843, -1898, 3551, 954, 955, 956, - 1651, 2781, 773, 3733, 752, 4335, -2829, -2829, -2829, 3970, - 3971, 3972, 3973, 3974, 3975, 3335, 5389, 4923, 5585, 3396, - 2560, 3422, 5717, 2779, 4464, 2779, 4689, 4967, 4128, -1751, - 2782, 1776, 6009, 5543, 622, 1362, 622, 622, 5999, 4400, - 1875, 3485, 684, 4924, 2779, 1488, 6069, 4506, 4267, 908, - 4912, 3552, 3242, 2901, 1846, 2783, 908, 799, 1636, 908, - 4885, 5981, 2780, 1657, -689, 1471, 3485, 3529, 1406, 1777, - 3956, 3025, 1778, 1468, 1182, 1184, 1186, 945, 3336, 1188, - 1189, 1190, 1676, 6093, 1489, 5920, 2633, 684, 1006, 1195, - 787, 5925, 4878, 1239, 2777, 6101, 3960, 1847, 1915, 4763, - 3961, 3962, 3963, 2974, 5480, 622, 4817, 1239, 6010, 1363, - 3960, 2873, -2281, 4171, 3961, 3962, 3963, 1578, 1490, 191, - 933, 1225, 5654, 2779, 6017, 3119, 3120, 2666, 3530, 5852, - 5529, 788, 789, 4584, 5853, 3562, 6024, 2859, 945, 1007, - 1876, 1916, 912, 1407, 187, 4193, 1021, 888, 5501, 945, - 3553, 5667, 5670, 5682, 3903, 5890, 1938, 5271, 1940, 1066, - 1942, 1469, 1944, 945, 1946, 1947, 1948, 945, 5240, -1898, - 6050, 1950, 5539, 4690, 5653, 1652, 3417, 5594, 1832, 622, - 2695, 2883, 4465, 5925, 6000, 1129, 1491, 2499, 1881, 2780, - 2696, 2902, 1872, 1410, 5252, 5920, 5246, 1008, 1877, 909, - 6072, 3397, 900, 4507, 5669, 4764, 1408, 3734, 3844, 1409, - 622, 3512, 3494, 3710, 1470, 5104, 3083, 2779, 3488, 2779, - 4357, 2043, 3845, 4991, 6084, 5745, 2781, 1658, 790, 6045, - 3423, 1579, 1476, 3424, 1477, 5891, 5801, 3060, 622, 622, - 622, 2982, 622, 3488, 2780, 3106, 2780, 3344, 5710, 3111, - 3056, 3072, 4466, 4886, 3118, 2782, 5495, 3121, 3219, 4194, - 3601, 2928, 622, 5892, 3078, 2780, 1659, 2779, 3698, 40, - 4098, 5496, 1848, 3358, 5845, 1100, 3358, 4872, 5934, 1653, - 2783, 3964, 3077, 3269, 3058, 1813, 3957, 3958, 945, 3090, - 3570, 3977, 5578, 5925, 3705, 1878, 945, 945, 6001, 3071, - 1660, 5945, 3073, 3965, 2542, 44, 1896, 6002, 2914, 5694, - 4454, 970, 1471, 2732, 4268, 2846, 1917, 3965, 3554, 2777, - 622, 1410, 3358, 1047, 1013, 2984, 2591, 2592, 1014, 2596, - 3358, 3141, 4008, 4009, -1752, 783, 5097, 4767, 1101, 4052, - 3193, 5657, 784, 5065, 2780, 3014, 1406, 48, 3602, 1772, - 5665, 2697, 3110, 2781, 2600, 5695, 3116, 3117, 914, 914, - 49, 914, 2987, 3495, 5068, 3571, 622, -1898, 3126, 5072, - 622, 622, 5074, 3966, 1472, -1898, 1849, 1386, -1898, 1415, - 4390, -1898, 2782, 50, 4276, 3175, 622, 3966, 684, 811, - 2698, 2856, 888, 5711, 3176, 1580, 3220, 4106, 807, 2601, - 5703, 3398, 3603, 3099, 5415, 1583, 4984, 2783, 2781, 1473, - 2781, 1544, 5219, 1474, 4653, 1170, 4988, 35, 187, 1896, - 1918, 1407, 1102, 3270, 5712, 730, 5935, 3099, 3271, 2781, - 3160, 4241, 1411, 4873, 1581, 3786, 3099, 2782, 2780, 2782, - 2780, 3338, 4957, 2988, 2600, 15, 2777, 1475, 3101, 5497, - 3654, 4768, 785, 2847, 3127, 1412, 3655, 2848, 2782, 888, - 3304, 3604, 2783, 4286, 2783, 3272, 4195, 4196, 1582, 4360, - 959, 960, 961, 962, 963, 964, 965, 966, 967, 1476, - 20, 1477, 2001, 2783, 1408, 5020, 810, 1409, 2780, 2601, - 5736, 1450, 1776, 1450, 812, 1232, 4197, 3177, 194, 3124, - 888, 2777, 2010, 2777, 1937, 834, -1752, 1939, 2781, 1941, - 2603, 1943, 5485, 1945, 762, 5494, 762, 1949, 762, 3439, - 5412, 3827, 2777, 5797, 762, 1192, 1193, 1479, 4543, 1126, - 4544, 1478, 1479, 888, 5746, 4183, 3484, 2782, 1599, 3804, - 786, 846, 195, 5413, 1896, 4242, 2686, 3904, 5241, 2040, - -2309, 2602, 4391, 1568, -166, 1126, 1410, 4323, 3314, 4713, - 1600, 1771, 2783, 2647, 3656, 1929, 1434, 2647, 3605, 4107, - 2604, 1103, 3178, 3967, 3968, 3969, 3970, 3971, 3972, 3973, - 3974, 3975, 4917, 4727, -166, 1005, 4654, 3967, 3968, 3969, - 3970, 3971, 3972, 3973, 3974, 3975, 5021, 3102, 945, 1410, - 2603, 2777, 2781, 1176, 2781, 3440, 1479, 4756, 1104, 4184, - 1479, 1601, 3273, 622, 622, 622, 5623, 4728, 5625, 3485, - 4849, 3497, 5629, 5630, 1544, 4853, 1569, 3905, 1428, 3437, - 3103, 2782, 3162, 2782, 3164, 3179, 1615, 3609, 3180, 1436, - 3171, 3059, 4697, 3104, 970, 970, 3186, 3187, 3188, 1434, - 5062, 5460, 2781, 4867, 3486, 1435, 2783, 3207, 2783, 2051, - 2604, 1217, 3069, 3222, 3660, 32, 4545, 1105, 1586, 1106, - 5901, 912, 912, 1107, 912, 1616, 4914, 5388, 3105, 3438, - 4868, 2782, 2877, 4876, 4077, 1006, 5979, 5980, 1437, 5821, - 3606, 1587, 3052, 3487, 5871, 2777, 40, 2777, 3607, 4729, - 1602, 3608, 787, 3661, 4357, 5461, 2783, 3683, 5462, 4243, - 1411, 1832, 945, 1656, 5463, 1373, 3498, 3609, 1218, 762, - 3531, 5420, 1436, 5660, 888, 2546, 4698, 40, 3657, 631, - 4780, 1239, 44, 1429, 3960, 888, 1007, 3662, 3961, 3962, - 3963, 4697, 5464, 788, 789, 2777, 4281, 1772, 4244, 1603, - 3181, 888, 1832, 1604, 5674, 40, 3593, 4585, 3558, 4078, - 4752, 970, 4361, 44, 40, 631, 5971, 3658, 2855, 1396, - 945, 1437, 5681, 1935, 48, 1423, 1778, 2506, 945, 632, - 3388, 3532, 4245, 3360, 3582, 1617, 945, 49, 762, 4699, - 3320, 44, 4079, 4700, 1008, 4290, 3488, 1929, 6051, 5465, - 44, 3659, 1606, 902, 888, 48, 5334, 4080, 4870, 4364, - 50, 3620, 5466, 622, 3321, 904, 622, 4081, 5116, 888, - 4282, 1657, 888, 888, 5467, 4698, 622, 622, 56, 945, - 945, 4127, 5983, 48, 4753, 2827, 5527, 3447, 6016, 2671, - 2830, 622, 48, 945, 622, 4082, 49, 1608, 2507, 1358, - 2672, 3451, 3621, 888, 888, 49, 945, 945, 903, 56, - 3624, 3182, 1813, 3627, 1793, 989, 5291, 4366, 2673, 50, - 1609, 4498, 4666, 1239, 3510, 1802, 3960, 191, 50, 4871, - 3961, 3962, 3963, 3582, 5828, 650, 5822, 56, 4699, 5117, - 1611, 1810, 4700, 4225, 622, 990, 56, -1075, 622, 622, - 1434, 1239, 5552, 5755, 3960, 4226, 3860, 2524, 3961, 3962, - 3963, 4149, 919, 3091, 2904, 3092, 4499, 3093, 2910, 3094, - 4357, 3095, -1722, 1052, 191, 3096, 1053, 1049, -1722, 5805, - 3146, 1050, 622, 1051, 622, 5221, 3786, 5804, 4083, 622, - 622, 3965, 6053, 951, 2647, 652, 622, 622, 622, 3743, - 2525, 622, 1455, 622, 2647, 622, 622, 622, 622, 622, - 622, 3663, 5207, 622, 4078, 622, 622, 4369, 3619, 622, - 1646, 194, 5626, 1436, 5245, 4524, 5756, 5627, 5366, 1465, - 5368, 3699, 3700, 3701, 5652, 888, 622, 622, 622, 4182, - 920, 1456, 5232, 2856, 5516, -1722, 3669, 4079, 930, 2051, - 3596, 1586, 5886, 622, 3358, 1772, 3644, 4004, 3358, 1647, - 4370, 3966, 4636, 1648, 5468, 195, 2865, 5469, 1466, 3145, - 5203, 3135, 4081, 2674, 1587, 1457, 4371, 3594, 5628, 3595, - 1392, 1393, 2544, 1621, 2915, 2647, 3854, 5685, 1114, 928, - 3689, -462, -141, 1649, -1722, 2866, 4485, 1980, 4539, 4540, - 4541, 4542, 1467, 5204, 4546, 4547, 4548, 4549, 4550, 4551, - 4552, 4553, 4554, 4555, 3705, 2546, 2769, 35, 5904, 3852, - 4330, 2817, 1622, 2916, 3858, 3358, 3859, 3790, 3791, 3792, - 3793, 4196, 3795, 3965, 5702, 3507, 3865, 2846, 2810, 3866, - 4238, 3867, 3868, 2926, 2927, 3870, 684, 2826, 1599, 3873, - 2770, 3874, 1352, 4361, 3876, 2834, 1623, 3823, 5520, 4362, - 4740, 3965, 4594, 4595, -1102, 4619, 663, 3601, 664, 4690, - 1600, 3887, 4363, 5664, 4372, 762, 2757, 1624, 2758, 4239, - 762, 762, 5521, 4690, 5194, 2917, 5195, 5196, 5197, 4285, - 5211, 3761, 5213, 4083, 1828, 2769, 622, 1013, 2918, 5574, - 4364, 1014, 4365, 3966, 40, 3635, 5631, 3636, 2561, 1586, - -462, 3640, 5985, 4240, 5974, 3664, 952, 2568, 3917, 2569, - 650, 1601, 4077, 2572, 5575, 3666, 187, 2919, 6003, 2770, - 2578, 3966, 1587, 4130, 4322, 1093, 622, -1675, 5869, 2759, - 44, 1093, 1625, 3323, 995, 1985, 2752, 5533, 1778, 3665, - -1675, 650, 6004, 1852, 3994, 3602, -1675, 2753, 4366, 3667, - 4001, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, - 1067, 1094, 1068, 187, -1069, 2847, 1853, 1094, 1460, 2848, - 652, 5089, 48, 1397, 1626, 1923, 4367, 4733, 3816, 622, - -604, 1627, 1354, 233, 1628, 49, -1902, 4078, 1071, 636, - 1072, 4818, -1902, -1675, 1398, 1397, 1095, 728, 1924, 3603, - 1602, 652, 4403, 1461, 1004, 2510, 1589, 1462, 50, 3221, - 4433, 762, 1401, -1675, 4819, 808, 1398, 3929, 5873, 5874, - 4079, 762, 2555, 4835, 5412, 1663, 56, 3778, 1667, 5735, - 4690, 2752, 6091, 4470, 6094, 4080, -1127, -1127, 4471, 40, - 6073, 1463, 2760, 4368, 1096, 4081, 4836, 5413, 4369, 1603, - 1096, -1909, 3762, 1604, 6105, 654, 4137, -1909, 3604, 2533, - 1012, 1386, -1675, 2580, 5597, 1192, 1193, 4673, 2855, 5601, - 5602, -1675, 1386, 4082, 2580, 44, 3358, 3358, 1055, -1899, - -1900, -1903, 1057, 3, 4, -1899, -1900, -1903, 5062, 2541, - 1062, 4370, 1778, 3967, 3968, 3969, 3970, 3971, 3972, 3973, - 3974, 3975, 1606, 4048, 3337, 3339, 3340, 4371, 762, 3911, - 3912, 762, 762, -1901, 4077, 3930, 1076, 48, 4676, -1901, - 3931, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, - 49, 5916, 29, 2000, 1089, 56, 684, 3886, 2788, 5961, - 2800, 663, 2044, 664, 745, 1629, 2789, 1608, 730, 1386, - 1098, 1415, 745, 50, 622, 622, 622, 622, 622, 622, - 622, 622, 622, -603, 622, 3605, 4083, 1097, 15, 668, - 1609, 56, 663, 622, 664, 4103, 622, 684, 5379, 5380, - 1630, 745, 684, 4581, 1631, -1102, 684, 970, 4797, 4078, - 1611, 4866, 5055, 3474, 4951, 3478, 3479, 667, 3250, 4471, - 1828, -2277, 1099, 20, 3477, 4372, 1013, -2278, 1199, 3763, - 1014, -1675, 1013, 4155, 1199, 1576, 1014, 622, 1632, 5422, - 1593, 622, 4079, 1116, 622, 1633, 622, 40, 3316, 622, - 4059, 4060, 6012, 622, 760, 3, 4, 4080, 5686, 1013, - 760, -2285, 1120, 1014, 4172, 4050, 1127, 4081, 3255, 3256, - 3257, 3258, 3471, 1386, 1772, 2580, 622, 3986, 3764, 3988, - 3989, 2554, 4132, 44, 2555, 3047, 2588, 3048, 3087, 1778, - 4201, 2555, 4039, 622, 4040, 4082, 3098, -1675, 3100, 3099, - 4093, 3099, 622, 622, 4205, 3138, 4207, 3606, 3139, 1137, - -1675, 3319, 3358, 1136, 1929, 3607, -1675, 1143, 3608, 3358, - 4677, 1154, 5069, 762, 3358, 48, 4678, 3358, 631, 945, - 4739, 3400, 3324, 4679, 3506, 2555, 888, 2581, 49, 1161, - 888, 888, 5953, -1674, 1776, 3228, 4023, 945, 3231, 745, - 3409, 945, 4919, 2555, 1171, 945, -1674, 4690, 5840, 5841, - 29, 50, -1674, -1675, 945, 4419, 3504, 3576, 4680, 3505, - 3577, 3441, 1199, 3444, 3739, 3356, 1203, 3740, 5867, 5917, - 1198, 4175, 945, -1675, 2938, 622, 4357, 1210, 4083, 3878, - 4681, 3928, 3099, 1207, 2555, 2949, 622, 5582, 888, 622, - 3937, 622, 622, 2555, 888, 5587, 5588, 3944, 32, -1674, - 2555, 2967, 4721, 4730, 3945, 4737, 945, 2555, 3946, 3979, - 3600, 2555, 2555, 3993, 3998, 2647, 2555, 3999, 4057, -1674, - 4712, 2555, -1675, 4430, 1213, 4431, 945, 945, 1114, 40, - 4218, -1675, 1215, 4219, 4223, 888, 4249, 4224, 4309, 4250, - 4319, 3385, 3386, 4250, 4316, 40, 1216, 4233, 5811, 4442, - -1746, -1746, 4443, 4511, 3041, -1750, -1750, 1772, 945, 4406, - 4445, 1772, 1218, 4446, 4476, 44, 5070, 4477, -1674, 3053, - 1222, 2965, 1126, 3057, 1502, 1223, 4378, -1674, 4755, 4564, - 4141, 44, 4565, 5940, 5941, 945, 2050, 1772, 1224, 2051, - 3686, 945, 1226, 6054, 4575, 5567, 5508, 4576, 4587, 4661, - 1227, 2555, 4662, 3076, 1126, 945, 1225, 48, 3492, 1503, - 4667, 731, 945, 4668, 4672, 945, 4920, 3424, 1228, 3099, - 49, 945, 2544, 48, 1233, 4985, 3173, 3174, 1977, -2829, - 1357, 4138, 4139, 3189, 3190, 5008, 49, 5048, 2555, 3250, - 2555, 945, 4159, 50, 1360, 5100, 5106, 945, 3424, 5107, - 4860, 4258, 4861, 6095, 945, 2546, 4264, -1749, -1749, 50, - 4349, 732, 897, 898, 4013, 3235, 4014, 1235, 945, 5113, - 1504, -1675, 3099, 3349, 1364, 1365, 5114, 56, -1414, 3099, - -1414, 945, 4041, 1366, 4042, 3959, 1772, 1114, 3358, 5011, - 4015, 5012, 945, 3634, 4690, 5115, 5247, 3987, 3099, 5248, - 5245, 3252, 906, 3253, 1370, 5284, 1505, 3591, 4477, 1374, - 622, 622, 622, 1379, 1380, -1723, 622, -1674, 187, 5301, - 1386, -1723, 5302, 4291, 4010, 1382, 5303, 3254, 4478, 2555, - 4480, 5321, 4482, 4011, 5322, 3237, 5331, 1013, 4937, 1929, - 1420, 1014, 1506, 622, 888, 4663, 5317, 5337, 5339, 5318, - 4416, 4416, 1772, 3921, 1389, 3923, 3924, 5455, 5475, 5509, - 5456, 3099, 5510, 5550, 5556, 1390, 5551, 1929, 907, -2829, - 5559, 1403, 5570, 4416, -2829, 5571, 4038, 4254, 4930, 5616, - 3827, 4518, 5617, 5811, 1508, 622, 1432, 5656, -1723, 4690, - 2509, 6026, 1420, 6027, 3255, 3256, 3257, 3258, 1420, 4271, - -1663, 4016, 4692, 4693, 1405, 5733, 4696, 4017, 1421, 1447, - 5683, -2829, 3918, 5571, 3805, 1239, 1510, 888, 3960, 1448, - 1449, 888, 3961, 3962, 3963, 4615, 2647, 4617, 4570, 1452, - 4396, 3255, 3256, 3257, 3258, 1458, 1415, -1723, 3259, 3260, - 5706, 5038, 2586, 3999, 3261, 5707, 908, 5721, 2555, 5725, - 5722, 3358, 1929, 5726, 1499, 1528, 2555, 970, 35, 5754, - 2734, 5760, 3139, 1512, 3139, 5761, 2551, 5764, 3139, 1525, - 2555, 3358, 1513, 5765, 5766, 5793, 2555, 5767, 5794, 5846, - 1514, 1530, 4416, 5860, 3356, 3358, 2555, 5862, 2735, 5868, - 2555, 5883, 3099, 1678, 5884, 5906, -2327, 1531, 5907, 4690, - 1516, 5952, 5982, 6022, 5564, 5571, 6023, 945, 6048, 1517, - 4502, 2555, 6067, 1518, 6077, 5722, 5054, 6078, 5057, 4379, - 4635, 4381, 4638, 888, 6083, 945, 4410, 4662, 1599, 1570, - 6092, 1776, 945, 2555, 1566, 1571, 622, 2050, 888, 622, - 2051, 622, 622, 888, 1572, 900, 6104, 5295, 1583, 6078, - 1600, 622, 1585, 4389, 4018, 4392, 622, 1595, -2829, 4099, - 2626, 1598, 2629, 4739, 1114, 4019, 1114, 1519, 2586, 1620, - 1637, 1638, 1654, 2544, 1665, 1668, 1664, 1673, 1674, 1786, - -2829, 5914, 1788, 622, 622, 622, 909, 1790, 622, 1795, - 1801, 3262, 1806, 900, 1809, 1811, 622, 622, 622, 622, - 1816, 1601, 3263, 4451, 1819, 1821, 2546, 1772, 1813, 1830, - 1835, 1836, 622, 1772, 1838, 622, -186, 622, 1839, 1841, - 5426, 1843, 1844, 4493, 1855, 3965, 1862, 1866, 4731, 622, - 622, 1870, 213, 622, 1879, 5132, 1884, 1885, 1886, 1888, - 1891, 1892, 3358, 1895, 1896, 1903, 1907, 1909, 1114, 1910, - 1912, 1914, 622, 1920, 622, 3558, 622, 4750, -2829, 1922, - 1925, 1928, 1919, 1931, 1932, 1934, 5427, 1951, 1982, 2483, - 2484, 2485, 2486, 2487, 2488, 4022, 622, 1988, 1990, 1991, - 1997, 3582, 1998, 4044, 4045, 4046, 2005, 2006, 2007, 2008, - 1602, 5428, 900, 2009, 945, 3966, 56, 2011, 2012, 1599, - 3358, 2013, 2014, 2027, 2494, 4510, 2514, 2015, 2016, 5429, - 4779, 187, 2017, 5430, 2019, 2020, 2021, 2022, 2023, 2024, - -2829, 1600, 4708, 4964, 2025, -2829, 2026, 2496, 2029, 622, - 2030, 2031, 622, 2050, 2581, 5431, 2051, 2527, 5432, 1603, - 2032, 2033, 900, 1604, 622, 2034, 2035, 4188, 2036, 622, - 2498, 2499, 2536, 5433, 2558, 2509, 2559, 2564, 2855, 2576, - 2566, 2567, -2829, 2570, 622, 2571, 2573, 2574, 2582, 2544, - 2575, 2577, 1601, 4732, 4854, 1435, -2829, 2589, 622, 2620, - 2691, 2632, 6052, 4841, 1437, 2622, 622, 2634, 3331, 3333, - 2637, 2635, 1606, 2636, 3341, 2653, 2655, 2656, 888, 2580, - 2654, 888, 2546, 888, 2657, 2658, 2659, 2660, 888, 2661, - 2662, 2663, 2669, 2688, 2694, 2700, 2714, 2551, -2607, 2718, - 2721, 2720, 2725, 945, 945, 2738, 3383, 3383, 3356, 622, - 2722, 3356, 2755, 5535, 2744, 2724, 2742, 1608, 4733, 4846, - 2743, 2756, 2767, 5434, 2776, 2785, 2771, 2774, 2775, 2787, - 945, 2790, 2791, 945, 2792, 2797, 888, 2773, 2777, 3358, - 1609, 1602, 5549, 2786, 888, 2801, 2798, 2807, 2808, 2811, - 2825, 4593, 2821, 2822, 2835, 2828, 2831, 3356, 2832, 2837, - 1611, 2838, 2842, 2849, 2850, 3356, 2852, 2857, 762, 888, - 2858, 1544, 2040, 2863, 5435, 3967, 3968, 3969, 3970, 3971, - 3972, 3973, 3974, 3975, 2867, 2864, 2869, 2871, 2895, -2829, - 1603, 2878, 2876, 2879, 1604, 2870, -2829, -2607, 2872, 2884, - 2896, -2829, 2925, 2937, 2939, 1772, 1772, 1772, 2903, 2855, - 2885, 2897, 4099, 4734, 2908, 2932, 5267, 2940, 2953, 2958, - 2040, 2959, 2954, 2960, 2941, 2942, 2946, 2947, 2948, 3358, - 945, 4973, 2950, 4981, 4975, 2951, 2952, 2961, -2829, 888, - 2968, 888, 3250, 1606, 2969, 2972, 645, 2977, -2607, 945, - 2985, 2996, 3516, 1617, 3000, 3001, 3004, 3020, 4032, 3013, - 4990, -2607, 3016, 3019, 3040, 3046, 3029, -2607, 3473, 3050, - 3062, 945, -2607, 3064, 3481, 3066, 3065, 3067, -2607, 3080, - 3123, -2607, 3112, 3148, 2051, -2607, 3136, 3167, 1608, -2829, - 3223, 3243, 3229, 2551, 3268, 3288, 3033, 3037, 3289, 3055, - 2483, 2484, 2485, 2486, 2487, 2488, 1410, 3307, 3172, 3327, - 3249, 1609, 3311, 3312, -2607, 3514, 4064, 3325, 3266, 4069, - 4536, 3233, 3313, 3310, 3329, 3326, 3330, 3328, 3342, 3334, - 3358, 1611, 3343, 4735, -2607, 888, 4736, 907, 3360, 3377, - 3378, 762, 3365, 3379, 3380, 3401, 3394, 3402, 3413, 762, - 3414, 3416, 762, 3433, 4563, 3442, 3445, 945, 3447, 3449, - 3450, 3456, 622, 3461, 762, 3349, 3466, 3467, 622, 899, - 3472, 1239, 3469, 3349, 3960, 3480, 3501, 888, 3961, 3962, - 3963, 2586, 3496, -2607, 1354, -2829, -2607, 3513, 3503, 3520, - 3533, 3538, -2607, 3559, 3565, 3539, 3566, 5039, 3572, 1358, - 3575, 4606, 3567, 3592, 1772, 888, 3614, 3583, 3593, 3672, - 945, 3590, 945, 3613, 3630, 3685, 1832, 3697, 3706, 3713, - 3719, 908, 3720, 3721, 3725, 945, 3753, 945, 3730, 5228, - 3752, 3741, 3767, 3771, 3773, 3693, 5033, 1239, 3694, 3769, - 3960, 3788, 2777, 3781, 3961, 3962, 3963, 622, 3794, -2607, - 5121, 3799, 3800, 3801, 3802, 3803, 3807, 3812, 3814, 5080, - 3810, 3815, 4892, 4893, 3818, 3819, 3824, 3839, 3840, 3841, - 5139, 3849, 3850, 888, 3851, 3853, 3358, 3855, 3869, 3871, - 3872, 4930, 3875, 3877, 3880, -2829, 3881, 3882, 1929, 4436, - 3883, 5145, 5146, 3884, 945, 888, 2483, 2484, 2485, 2486, - 2487, 2488, 3895, 1926, 777, 3885, 4976, 4977, 4978, 4979, - 4980, 3149, 3897, 3899, 3906, 3890, 3909, 888, 3914, 3916, - 3922, 3898, 3941, 3943, 3737, 4473, 3956, 2050, 1893, 3889, - 2051, 1205, -2607, 3939, 3940, 887, 945, -2170, 3992, 3995, - 4007, 3942, 4012, 4035, 4031, 4600, 3947, 3948, 3952, 4021, - 3954, 3955, 3698, 3978, 4033, 945, -2607, 4030, -2607, -2607, - 3983, 3984, 5087, 2544, 5584, 3358, 2555, 3991, 5201, 4006, - -2829, 3358, 4034, 4037, 4055, 4056, 4061, 945, 4067, 4062, - 945, 3965, 4063, 4068, 4095, 4108, 5189, 5190, 4110, 4121, - 4076, 4091, 4114, 4440, 4101, 4112, 2546, 622, -2607, 4135, - 888, -2607, -2607, -2607, 4140, 622, 4142, 622, 4143, 4129, - 762, 4151, 4147, 4154, 4156, 622, 4179, 622, 4180, 4168, - 622, 4169, 4181, 4186, 888, 622, 622, 622, 622, 4185, - 4148, 622, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 4187, 4188, 4192, 622, 622, 622, -2829, 4152, 888, - 4203, 3966, 4204, 4206, 622, 900, 4212, 4214, 4222, 622, - 4213, 1772, 4228, 622, 4237, 4596, 4251, 5946, 5947, 4253, - 4255, 622, 1208, 4257, 622, 4265, 622, 4259, 4261, 4272, - 4266, 3358, 4270, 4273, 4308, 4274, 622, 4275, 4294, 622, - 622, 4277, 4292, 4295, 622, 622, 4099, 4293, 4296, 5084, - 4299, 622, 4297, 3907, 4311, 4608, 4609, 4610, 4611, 4302, - -2829, 4298, 4300, 4315, 4301, -2829, 5283, 3966, 3920, 5285, - 5286, 4303, 4099, 3925, 4304, 2893, 4305, 1052, 191, 4306, - 1053, 1049, 622, 4313, 4327, 1050, 5290, 1051, 4328, 4307, - 622, 4317, 4318, 4334, 622, 4324, 4329, 4331, 4339, 4345, - 4347, 4387, -2829, 4382, 4394, 4388, 4397, 4398, 4401, 4405, - 4415, 4416, 4418, 4425, 4434, 4428, 4435, 4439, 4441, 4438, - 5267, 4455, 4469, 4472, 4479, 4475, 622, 4487, 4488, 4481, - 4489, 4490, 4491, 4492, 4494, 4501, 187, 4503, 4504, 5130, - 4505, 4514, 4515, 622, 4516, 4517, 4519, 4520, 4521, 888, - 4522, 4523, 2000, 4527, 3960, -2169, 4051, 2551, 762, 4590, - 4537, 622, 4560, 4561, 4589, 5212, 4577, 4562, 4607, 4631, - 4569, 4592, 187, 4620, 4058, 4601, 4639, 4632, 4640, 4645, - 4646, 4616, 945, 5179, 5180, 4624, 5182, 4618, 4647, 3356, - 4655, 4627, 4658, 3356, 4629, 4644, 4660, 4664, 4649, 4675, - 4683, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, - 1532, 4704, 4707, 4714, 4715, 4717, 1533, 4720, 4705, 4718, - 4104, 4104, 5354, 4725, 4706, 4726, 4742, 4745, 5172, 4758, - 4757, 4759, 4761, 1772, 4760, 4771, 2856, 4772, 1772, 888, - 1772, 4773, 4774, 4775, 4776, 4785, 4788, 4787, 4794, -2829, - 4806, 4807, 4812, 4815, 4831, 4832, 4834, 4732, 4847, 5425, - 3356, 1535, 4099, 4837, 1772, 888, 4848, 3967, 3968, 3969, - 3970, 3971, 3972, 3973, 3974, 3975, 4850, 4851, 4852, 5019, - 4863, 4884, 4889, 4909, 4874, 4895, 4910, 4903, 4922, 4932, - 4915, 4938, 3829, 4949, 4939, 4956, 4916, 4955, 4958, 4960, - 4959, 4962, 4963, 4974, 4968, 4982, 4987, 4989, 4997, 5010, - 5004, 945, 5022, -2171, 945, 2613, 1502, 1536, 5005, 5025, - 5026, 5073, 4796, 5016, 1537, 5230, 5027, 1538, 5031, 5044, - 5059, 5063, 5082, 5066, 4805, 5077, 5086, 5096, 5610, 5099, - 5612, 5101, 5103, 5108, 2050, 5109, 5118, 2051, 5085, -2829, - 5136, 1503, 2040, 5137, 1539, 5147, 5138, 5141, 5148, 5149, - 2483, 2484, 2485, 2486, 2487, 2488, 5168, 5170, 5161, 5174, - 5164, 5183, 5175, 5184, 5191, 5202, 5193, 187, 622, 5192, - 2544, 5205, 5198, 5209, 5210, 5217, 4160, -2829, 1540, 5220, - 1532, 5226, 5225, 5229, 4163, 5233, 1533, 3349, 5235, 5227, - 5239, 3349, 5244, 5249, 945, 945, 5251, 5255, 888, 5256, - 5258, 1639, 1504, 2546, 5260, 945, 5262, 5263, 5264, 5273, - 3099, 5279, 622, 622, 5281, 5288, 5289, 5307, 5716, 5296, - 1532, 5306, 945, 5314, 5330, 5308, 1533, 5300, 5323, 5309, - 5319, 1535, 5329, 5333, 5358, 5330, 5336, 5361, 1505, 5378, - 5355, 1639, 5367, 1641, 5541, 888, 5370, 1542, 4941, 5382, - 888, 622, 622, 5472, 5620, 5742, 5579, 1543, 5381, 5385, - 970, 5386, 622, 5387, 5418, 5398, 1544, 5399, 5403, 3830, - 5409, 1535, 4597, 5392, 1506, 5410, 5440, 4873, 1545, 4246, - 5411, 4248, 5446, 5448, 5451, 1640, 5454, 1536, 5458, 5478, - 5459, 5479, 5483, 5490, 1537, 5488, 5506, 1538, 5374, 5511, - 5525, 5777, 5779, 945, 5622, 5517, 5518, 5519, 5615, 5540, - 5544, 3356, 3356, 5548, 5560, 5562, 1508, -2829, 5566, 887, - 1547, 1548, -2829, 5568, 1539, 1640, 5564, 1536, 5565, 622, - 5581, 5583, 5362, 5598, 1537, 5590, 5591, 1538, 5604, 5635, - 5592, 622, 5640, 5637, 5650, 887, 5644, 5648, 1510, 5395, - 5658, 1549, 5663, 5672, 5676, 5677, 5678, 5679, 1540, -2829, - 5390, 5680, 5689, 5690, 1539, 5691, 5692, 5697, 5699, 622, - 5714, 5715, 622, 5701, 5728, 4310, 5718, 5708, 5738, 762, - 622, 622, 4602, 888, 5741, 5737, 5740, 5753, 622, 622, - 35, 5757, 5776, 622, 5782, 3831, 5785, 622, 1540, 5788, - 622, 622, 4393, 5720, 1513, 622, 5790, 5796, 5792, 5799, - 5800, 622, 1514, 5819, 2551, 5818, 5816, 4332, 5817, 1550, - 2735, 5704, 5826, 1641, 5827, 5833, 5843, 1542, 622, 5844, - 5832, 5856, 1516, 5858, 5849, 622, 5842, 1543, 5865, 5870, - 622, 1517, 5878, 622, 622, 1518, 1544, 5880, 5771, 5887, - 5885, 622, 5786, 5787, 5896, 5895, 5897, 5913, 1545, 5915, - 5933, 5938, 622, 1641, 3832, 5948, 5951, 1542, 5425, 5959, - 622, 5965, 5967, 5986, 5088, 5090, 5992, 1543, 5993, 5783, - 5996, 6005, 6007, 6028, 6008, 6029, 1544, 6030, 6032, 6033, - 622, 5557, 5102, 887, 6055, 6042, 6066, 1642, 1545, 1519, - 1547, 1548, 4127, 3833, 6057, 6058, -2829, 6068, 888, 6075, - 6076, 6070, 6086, 3514, 6081, 6087, 6090, 5942, 5943, 3349, - 6045, 945, 6096, 6103, 6099, 1422, 5513, 3356, 3775, 1529, - 2909, 1643, 1635, 3564, 3356, 4053, 1634, 3642, 3645, 3356, - 1547, 1548, 3356, 4198, 2050, 187, 888, 2051, 4748, 4741, - 5881, -2829, -2829, -2829, 3684, 3732, 2535, 4474, 4344, 5437, - 762, 5770, 4891, 945, 5966, 5489, 4738, 5471, 888, 5208, - 4145, 3643, 5134, 3879, 5872, 945, 5614, 5372, 5962, 5791, - 2544, 5789, 5142, 5894, 5977, 4150, 5237, 2545, 4913, 4942, - 4883, 622, 4921, 5751, 3750, 3751, 4746, 4216, 622, 1550, - 4404, 4908, 5231, 1619, 5477, 4444, -2829, 4966, 5693, 6025, - 945, 6102, 6088, 2546, 5452, 4350, 4950, 2483, 2484, 2485, - 2486, 2487, 2488, 5899, 5397, 5600, 2976, 5759, 5400, 726, - 779, 1045, 4495, 5577, 4983, 6021, 1688, 3779, 4952, 1550, - 4528, 888, 3039, 4136, 3419, 3035, 4461, 5687, 5514, 5609, - 3051, 3068, 3143, 1115, 887, 3144, 1155, 4314, 3682, 4777, - 5919, 4260, 6056, 1114, 4538, 887, 5747, 622, 1367, 4969, - 3709, 2668, 4970, 3364, 1974, 2934, 6071, 5091, 5576, 4669, - 5866, 887, 2556, 622, 813, 2505, 814, 4097, 1772, 4559, - 3203, 4109, 3374, 5861, 5730, 4071, 4637, 5335, 4622, 3224, - 4065, 5547, 5546, 4066, 4670, 6039, 5848, 945, 5949, 2617, - 5719, 2616, 2621, 5771, 622, 5536, 2565, 4571, 5731, 970, - 5732, 3293, 3209, 4028, 3934, 3708, 4026, 2547, 3362, 1418, - 3302, 0, 2548, 0, 0, 0, 5242, 0, 0, 0, - 0, 0, 3349, 0, 0, 0, 0, 3349, 0, 0, - 3349, 0, 0, 0, 0, 5960, 2050, 0, 4099, 2051, - 888, 0, 888, 0, 0, 0, 0, 0, 0, 2550, - 970, 187, 187, 5744, 0, 0, 5394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5396, 0, 0, - 0, 0, 2544, 945, 0, 0, 0, 0, 0, -2829, - 0, 0, 0, 0, 0, 0, 5537, 0, 0, 0, - 0, 622, 0, 3356, 622, 0, 0, 622, 622, 622, - 0, 5439, 0, 0, 2551, 2546, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, - 5558, 0, 622, 622, 0, 0, 622, 2042, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1114, 0, 0, - 0, 0, 0, 762, 0, 0, 0, 622, 0, 0, - 0, 0, 0, 622, 0, 0, 0, 622, 0, 0, - 0, 6064, 0, 888, 622, 0, 0, 0, 0, 762, - 0, 0, 0, 6079, 5042, 0, 0, 622, 0, 0, - 622, 0, 0, 762, 0, 945, 0, 945, 0, 0, - 0, 622, 0, 5605, 5606, 762, 2553, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6064, - 0, 0, 5356, 0, 0, 0, 0, 0, 0, -2829, - 0, 0, 0, 0, -2829, 0, 0, 6064, 0, 0, - 620, 888, 945, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 622, 0, 0, 0, 0, 772, 0, 774, - 0, 0, 0, 780, 0, 0, 3356, 0, 794, 802, - 772, -2829, 809, 0, 0, 802, 802, 0, 839, 0, - 842, 1192, 1193, 0, 0, 0, 3356, 896, 896, 896, - 0, 0, 1772, 0, 0, 5609, 0, 622, 6089, 0, - 3356, 0, 0, 0, 0, 0, 2479, 0, 0, 0, - 0, 0, 0, 0, -2829, -2829, -2829, 2483, 2484, 2485, - 2486, 2487, 2488, 187, 0, 0, 2551, 0, 0, 0, - 0, 0, 0, 5476, 5709, 0, 0, 0, 6014, 6015, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5727, 0, 5729, 0, 622, 0, - 0, 888, 0, 0, 5502, 0, 0, 0, 0, 762, - 0, 0, 2652, 0, 0, 184, 191, 71, 186, 180, - 175, 80, 83, 181, 0, 183, 0, 84, 4894, 85, - 622, 86, 106, 124, 622, 129, 622, 900, 159, 0, - 178, 0, 185, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1114, 0, 0, 0, 622, 0, -2829, 622, - 0, 1532, 762, 0, 0, 0, 0, 1533, 0, 0, - 622, 620, 925, 925, 0, 0, 925, 622, 0, 2652, - 936, 0, 839, 0, 0, 972, 0, 0, 936, 0, - 0, 936, 0, 0, 839, 0, 925, 3356, 0, 839, - 0, 0, 0, 925, 0, 839, 0, 5504, 0, 0, - 0, 0, 1535, 0, 3349, 0, 0, 0, 0, 0, - 887, 0, 0, 0, 970, 0, 0, 888, 0, 0, - 0, 0, 888, 888, 0, 0, 0, 622, 0, 0, - 0, 0, 0, 622, 622, 945, 0, 0, 0, 0, - 0, 0, 0, 887, 0, 3356, 0, 0, -2829, 945, - 0, 0, 0, 0, 0, 0, 0, 0, 1536, 2483, - 2484, 2485, 2486, 2487, 2488, 1537, 0, 0, 1538, 622, - 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, - 1772, 0, 0, 0, 0, 0, 0, 3376, 0, 0, - 0, 0, 0, 0, 0, 1539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 622, 0, 0, 0, 619, - 0, 0, 0, 0, 0, 0, 0, 5666, 0, 0, - 0, 0, 0, 1688, 1688, 1688, 0, 0, 0, 1540, - 0, 0, 0, 0, 888, 888, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, - 187, 0, 0, 0, 622, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 622, 1772, 0, 0, 888, - 0, 0, 0, 762, 622, 0, 622, 0, 622, 762, - 0, 187, 5877, 762, 1641, 622, 0, 0, 1542, 0, - 0, 0, 5734, 0, 3356, 187, 0, 0, 1543, 0, - 0, 0, 0, 0, 0, 0, 622, 1544, 0, 0, - 5158, 5159, 0, 0, 0, 5162, 5163, 0, 5122, 1545, - 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, - 0, 1772, 0, 945, 0, 887, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 887, 0, 0, 5926, 5927, 5144, 0, 1669, 0, - 0, 1547, 1548, 0, 2040, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5160, 6013, - 0, 0, 0, 0, 3356, 0, 622, 0, 0, 0, - 923, 0, 1670, 1502, 0, 0, 0, 0, 0, 935, - 0, 0, 0, 0, 887, 0, 0, 935, 0, 0, - 935, 0, 0, 0, 0, 0, 0, 0, 0, 887, - 0, 0, 887, 887, 622, 622, 622, 0, 1503, 0, - 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, - 0, 5188, 622, 887, 887, 945, 0, 0, 0, 0, - 1550, 0, 0, 0, 0, 0, 0, 0, 622, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 945, 0, 0, 6082, 3356, 0, 1024, 0, 1504, - 0, 0, 0, 839, 0, 925, 0, 925, 0, 0, - 925, 0, 3349, 0, 187, 0, 0, 972, 0, 0, - 0, 0, 1082, 0, 925, 0, 0, 0, 0, 0, - 925, 0, 622, 0, 5900, 1505, 0, 0, 0, 0, - 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, - 622, 622, 0, 0, 620, 0, 622, 191, 622, 5924, - 5921, 0, 0, 936, 5922, 1688, 5923, 972, 1688, 0, - 936, 1506, 0, 936, 622, 622, 0, 0, 0, 0, - 0, 0, 5272, 0, 0, 0, 0, 0, 0, 925, - 0, 0, 0, 2050, 0, 887, 2051, 0, 0, 187, - 0, 5991, 0, 0, 0, 0, 0, 0, 945, 1507, - 0, 0, 0, 1508, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6097, 6098, 0, 0, 0, 2544, - 0, 622, 0, 0, 0, 0, -2829, 622, 0, 0, - 0, 3356, 839, 0, 1509, 1510, 0, 0, 0, 191, - 0, 5924, 5921, 0, 0, 622, 5922, 1221, 5923, 0, - 0, 0, 2546, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 622, 0, 1337, 1337, 0, - 839, 802, 0, 1511, 0, 802, 0, 35, 0, 622, - 0, 0, 1512, 0, 0, 0, 0, 0, 0, 839, - -2828, 1513, 0, 4310, 839, 762, 0, 0, 0, 1514, - 1337, 0, 0, 0, 0, 0, 0, 1515, 0, 0, - 622, 0, 0, 0, 0, 0, 0, 622, 0, 1516, - 3356, 0, 0, 0, 0, 1532, 3356, 0, 1517, 0, - 0, 1533, 1518, 0, 3244, 0, 0, 622, 0, 0, - 0, 0, 0, 0, 1772, 1337, 1534, 0, 0, 191, - -2609, 5924, 5921, 0, 0, 0, 5922, 0, 5923, 839, - 0, 0, 0, 0, 0, 0, -2829, 0, 0, 0, - 0, -2829, 839, 0, 0, 0, 1535, 3203, 3203, 622, - 622, 0, 3203, 0, 622, 0, 1519, 839, 622, -2828, - 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, - 622, 622, 0, 0, 0, 0, 839, 0, -2829, 0, - 1772, 925, 925, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 0, 3203, 3203, 0, 0, 0, 0, 0, - 924, 926, 1536, 0, 929, 0, 3356, 0, 0, 1537, - -2828, 0, 1538, 802, 802, 0, 187, 0, 0, -2609, - 0, 0, 0, -2828, 987, 0, 0, 0, 0, -2828, - 0, 997, 0, 2551, -2828, 0, 1337, 1337, 0, 1539, - -2828, 0, 0, -2828, 0, 0, 0, -2828, 0, 620, - 0, 925, 0, 923, 0, 936, 0, 0, 972, 936, - 0, 936, 935, 0, 0, 0, 925, 0, 0, 935, - -2609, 0, 935, 1540, 0, 0, -2828, 0, -2828, 0, - 0, 0, 0, -2609, 0, 0, 0, 0, 0, -2609, - 839, 0, 0, 0, -2609, 0, -2828, 925, 925, 0, - -2609, 0, 0, -2609, 0, 0, 0, -2609, 5990, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 839, 839, - 839, 0, 925, 0, 620, -2829, 620, 620, 0, 0, - 0, 0, 0, 0, 0, 0, -2609, 0, 1541, 0, - 0, 0, 1542, 762, 0, -2828, 0, 0, -2828, 0, - 0, 0, 1543, 0, -2828, 0, -2609, 0, 0, 0, - 925, 1544, 925, 925, 0, 0, 0, 0, 0, 1532, - 0, 0, 0, 1545, 0, 1533, 0, 1980, 0, 0, - 0, 0, 1980, 1980, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1337, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -2609, 1688, 0, -2609, 0, - 0, -2828, 1546, 0, -2609, 1547, 1548, 0, 187, 0, - 1535, 1954, 0, 1954, 0, -2829, 0, 839, 0, 772, - 0, 0, 0, 0, 0, 0, 2483, 2484, 2485, 2486, - 2487, 2488, 0, 839, 0, 0, 1549, 0, 0, 1989, - 0, 0, 839, 0, 0, 1995, 0, 0, 0, 0, - 0, 0, 0, 3245, 0, 0, 0, 0, 0, 1337, - 0, -2609, 0, 0, 0, 0, 1536, 0, 0, 0, - 0, 0, 0, 1537, 0, 0, 1538, 0, 0, 0, - 0, 0, 0, 0, -2828, 5688, 0, 0, 0, 0, - 1337, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1539, 1550, 0, 0, 0, -2828, 0, - -2828, -2828, 0, 0, 0, 0, 777, 5768, 1337, 1337, - 1337, 0, 1337, 0, 0, 1532, 0, 0, 0, 5724, - 0, 1533, 0, 0, 0, -2625, 3415, 1540, 1599, 0, - 2652, 3421, 1337, 0, -2609, 0, 0, 0, 0, 0, - 0, 0, 0, -2828, 0, -2828, -2828, 0, 0, 0, - 1600, 0, 0, 0, 0, 0, 0, 0, -2609, 0, - -2609, -2609, 0, 0, 0, 0, 1535, 0, 923, 0, - 0, 0, 839, 0, 935, 0, 0, 0, 935, 0, - 935, 0, 0, 0, 0, 0, 0, 0, 887, 0, - 1337, 0, 1641, 0, 887, 0, 1542, 0, 0, 0, - -2609, 1601, 0, -2609, -2609, -2609, 1543, 0, 0, 0, - 0, 0, 0, 0, 0, 1544, 0, 0, 0, 0, - 0, 0, 1536, 1056, -2625, 1059, 0, 1545, 1061, 1537, - 0, 0, 1538, 0, 0, 887, 1337, 0, 0, 0, - 1337, 1337, 1086, 1865, 0, 1867, 1868, 0, 1090, 0, - 0, 839, 839, 839, 2631, 0, 1337, 0, 0, 1539, - 0, 0, 0, 0, 0, 0, 2715, 0, 0, 1547, - 1548, 0, 0, 0, 0, -2625, 0, 0, 0, 802, - 0, 0, 0, 0, 0, 0, 0, 0, -2625, 0, - 1602, 0, 0, 1540, -2625, 0, 0, 0, 0, -2625, - 2716, 0, 0, 0, 0, -2625, 0, 0, -2625, 0, - 0, 0, -2625, 0, 2723, 0, 0, 0, 0, 802, - 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 839, 2751, 0, 0, 1603, - 0, -2625, 0, 1604, 839, 0, 0, 925, 0, 0, - 0, 0, 0, 0, 0, 0, 1502, 0, 1605, 0, - 0, -2625, 1542, 0, 0, 0, 0, 0, 1550, 0, - 0, 0, 1543, 0, 972, 0, 839, 0, 0, 802, - 0, 1544, 2819, 2819, 0, 0, 2819, 0, 0, 0, - 0, 1503, 1606, 1545, 0, 0, 802, 0, 0, 839, - 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, - -2625, 0, 1688, -2625, 0, 0, 0, 0, 0, -2625, - 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, - 0, 0, 1607, 0, 0, 1547, 1548, 1608, 0, 0, - 0, 0, 839, 0, 887, 0, 0, 0, 0, 0, - 0, 0, 1504, 0, 925, 925, 925, 925, 839, 0, - 1609, 0, 0, 0, 0, 0, 1610, 0, 0, 0, - 0, 0, 839, 0, 0, 0, -2625, 0, 0, 0, - 1611, 0, 0, 1337, 1337, 1337, 0, 0, 1505, 3203, - 3203, 3203, 3203, 0, 0, 3203, 3203, 3203, 3203, 3203, - 3203, 3203, 3203, 3203, 3203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2652, 0, 0, - 0, 2652, 0, 4567, 1506, 0, 943, 0, 6062, 0, - 0, 777, 0, 0, 1550, 979, 0, 0, 0, 1564, - 1565, 0, 0, 0, 0, 0, 0, 0, 0, 1001, - 0, 0, 0, 3203, 3203, 0, 0, 0, 0, -2625, - 0, 0, 1507, 0, 0, 0, 1508, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6062, 0, 0, 0, - 0, 839, 688, -2625, 0, -2625, -2625, 0, 0, 0, - 0, 776, 839, 0, 6062, 0, 4626, 1573, 1510, 0, - 925, 925, 0, 0, 0, 0, 0, 0, 0, 1791, - 0, 0, 0, 0, 0, 0, 925, 0, 0, 0, - 0, 0, 0, 887, 1803, -2625, 0, 0, -2625, -2625, - -2625, 0, 0, 0, 839, 2819, 1574, 0, 887, 0, - 35, 0, 0, 887, 0, 1512, 0, 0, 0, 0, - 925, 925, 925, 925, 1513, 1825, 1826, 0, 0, 839, - 0, 0, 1514, 0, 0, 0, 839, 0, 0, 0, - 1575, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1863, 0, 1516, 620, 0, 0, 620, 0, 0, 0, - 0, 1517, 0, 0, 0, 1518, 936, 936, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 972, 972, 0, - 0, 936, 0, 0, 936, 0, 0, 0, 0, 0, - 1900, 1902, 0, 0, 0, 0, 0, 0, 0, 925, - 925, 0, 0, 0, 2050, 0, 925, 2051, 839, 0, - 0, 2052, 2053, 2054, 0, 0, 0, 0, 0, 1519, - 0, 0, 0, 0, 0, 1954, 0, 0, 0, 0, - 2543, 0, 925, 0, 936, 0, 0, 3115, 936, 936, - 2544, 839, 839, 0, 925, 0, 0, 2545, 0, 0, - 0, 839, 0, 0, 0, 0, 0, 0, 839, 0, - 0, 0, 0, 0, 772, 772, 0, 0, 3151, 0, - 0, 0, 1337, 2546, 1337, 0, 0, 0, 0, 1337, - 1337, 0, 0, 0, 0, 0, 1337, 1337, 1337, 0, - 0, 1337, 0, 1337, 972, 1337, 1337, 1337, 1337, 1337, - 1337, 3829, 0, 1337, 0, 1337, 1337, 0, 2050, 1337, - 0, 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, - 0, 0, 0, 0, 0, 1502, 1337, 1337, 1337, 0, - 0, 0, 0, 0, 2543, 0, 0, 0, 0, 0, - 0, 0, 0, 1337, 2544, 0, 0, 0, 0, 0, - 0, 2545, 0, 0, 0, 0, 0, 0, 1532, 0, - 1503, 0, 3203, 0, 1533, 0, 0, 0, 2652, 0, - 0, 3421, 0, 3421, 0, 0, 0, 2546, 2652, 0, - 0, 0, 0, 925, 0, 0, 0, 2547, 0, 0, - 0, 0, 2548, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1535, - 0, 0, 0, 0, 2549, 2238, 0, 0, 0, 0, - 0, 1504, 0, 0, 0, 0, 887, 0, 0, 2550, - 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, - 1070, 0, 0, 0, 0, 0, 1070, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1505, 1070, 2652, - 0, 0, 0, 0, 0, 1536, 0, 0, 0, 0, - 2290, 2050, 1537, 0, 2051, 1538, 0, 0, 2052, 2053, - 2054, 0, 0, 0, 2551, 0, 1337, 2552, 3830, 0, - 0, 2547, 923, 1506, 0, 923, 2548, 2543, 0, 0, - 0, 0, 1539, 0, 0, 935, 935, 2544, 0, 0, - 0, 0, 0, 0, 2545, 0, 0, 0, 2549, 2238, - 935, 0, 0, 935, 0, 0, 1337, 0, 0, 887, - 0, 887, 0, 2550, 0, 1508, 1540, 0, 0, 0, - 2546, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5024, 1510, 0, 0, - 2733, 0, 0, 935, 2290, 0, 2553, 935, 935, 1337, - 0, 0, 0, 0, 0, 0, 0, 0, 2551, 0, - 0, 2552, 0, 0, 0, 2772, 0, 0, 0, 0, - 0, 1541, 0, 0, 0, 1542, 0, 0, 0, 35, - 0, 0, 0, 0, 1512, 1543, 0, 0, 0, 0, - 0, 0, 0, 1513, 1544, 887, 0, 0, 0, 0, - 0, 1514, 0, 0, 0, 0, 1545, 0, 0, 2735, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1516, 1688, 0, 2547, 0, 0, 0, 1688, 2548, - 1517, 0, 0, 0, 1518, 0, 0, 887, 0, 0, - 1046, 0, 2862, 0, 0, 2793, 2479, 0, 1547, 1548, - 2553, 2549, 2238, 3832, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 0, 0, 3421, 2550, 3949, 0, 0, - 3950, 0, 2888, 2889, 2890, 2891, 0, 0, 0, 2794, - 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, - 1113, 688, 3833, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2290, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2551, 0, 0, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 887, 1337, 0, 0, 0, 0, 0, - 0, 0, 839, 1337, 0, 0, 1337, 1550, 0, 0, - 2479, 0, 0, 839, 0, 3421, 0, 0, 2480, 2481, - 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, - 0, 0, 0, 0, 3951, 0, 0, 887, 0, 0, - 0, 0, 0, 0, 0, 839, 1212, 1337, 0, 0, - 925, 1337, 0, 0, 1337, 0, 1337, 0, 0, 1337, - 0, 0, 0, 1337, 0, 0, 0, 0, 0, 0, - 0, 0, 1230, 2553, 0, 0, 0, 0, 2944, 2945, - 1340, 0, 0, 1349, 1113, 1353, 3359, 0, 0, 0, - 0, 0, 839, 839, 2962, 0, 0, 0, 0, 0, - 0, 0, 0, 1337, 0, 0, 0, 0, 0, 0, - 0, 0, 1337, 1337, 0, 0, 0, 0, 0, 0, - 887, 0, 0, 0, 0, 0, 839, 0, 3005, 3006, - 3007, 3008, 0, 0, 3403, 0, 3408, 0, 0, 0, + 632, 71, 184, 1702, 186, 191, 175, 904, 80, 83, + 84, 85, 180, 86, 106, 181, 183, 124, 129, 159, + 973, 178, 938, 185, 1393, 1629, 191, 746, 1080, 1347, + 979, 1461, 1799, 984, 808, 974, 844, 1359, 1206, 1207, + 1208, 637, 1916, 915, 1212, 892, 773, 1172, 688, 1788, + 2892, 2719, 773, 2683, 1447, 1682, 1449, 1412, 3510, 2814, + 3186, 1432, 1634, 1388, 1026, 1118, 3450, 1793, 2785, 1694, + 1970, 3844, 1212, 1403, 1404, 3451, 2777, 3813, 2018, 4134, + 2797, 4136, 1411, 1859, 2010, 1387, 3048, 3896, 982, 1418, + 1375, 1179, 4198, 840, 3972, 3177, 4350, 2786, 4278, 1480, + 628, 2960, 1004, 2002, 926, 780, 4524, 2004, 3202, 3236, + 2005, 2006, 2853, 2853, 4257, 1832, 2853, 1120, 809, 1837, + 2683, 4498, 3240, 3835, 1841, 4302, 1571, 4304, 3232, 4758, + 4797, 3728, 1575, 1628, 1851, 4511, 4447, 4174, 4549, 1047, + 4212, 4792, 1660, 4157, 3287, 917, 3289, 5189, 1871, 909, + 1180, 1593, 1687, 3696, 1151, 2615, 1610, 1155, 3115, 2922, + 2923, 3067, 5057, 5036, 1026, 2768, 803, 1163, 918, 232, + 5488, 4859, 4997, 837, 5201, 5028, 5203, 5046, 3360, 1905, + 5387, 5507, 1543, 3362, 4187, 2918, 5380, 5585, 3442, 855, + 3372, 632, 5348, 1367, 3445, 5376, 4218, 4006, 4211, 5237, + 632, 949, 1801, 5515, 3476, 3478, 1538, 1454, 632, 5637, + 949, 632, 2949, 4172, 5045, 4177, 4508, 1026, 829, 3772, + 4101, 3775, 3776, 1457, 949, 2768, 3780, 3781, 3782, -2489, + 3784, 3785, 3786, 4773, 694, 755, 5624, 3421, 4008, 5810, + 5379, -2531, 2768, -2556, -2380, 1120, 5538, 1538, -2594, 5146, + -2380, 694, 1538, -2380, -2380, 5582, -2381, -2413, 647, 924, + 755, 2574, -2381, 1502, 3832, -2381, -2381, 629, 755, 3862, + 1026, 1387, -2340, 694, 997, 2748, 2074, -2769, -2340, 5548, + 5549, 1400, 1401, -2769, 2713, 3182, -2769, -2769, 1187, 4037, + 1898, 1410, 4534, 1867, 5798, 4018, -1939, 3255, 5234, -1906, + 3045, 1009, -1939, 2714, 1377, -1906, -1919, -2493, 6174, -1944, + 2580, -1934, -1919, 4090, 694, -1944, 2703, -1934, 755, -1947, + 2069, 1824, 694, 3415, 1484, -1947, 694, 3297, 2537, 1994, + 1026, -1947, 2537, 3297, 187, 1898, 5735, -1947, 1191, 3212, + 2929, 3990, 694, 2582, 2788, 1510, 5992, 2713, 3213, 1363, + 4591, 1951, 5105, 5106, 5107, 187, 5109, 5110, 5111, 5112, + 5113, 3144, 2715, 2727, 2620, 919, 2853, 2551, 2788, 1572, + 694, 2788, 4872, 1572, 3753, 755, 2552, 1503, -150, 755, + 5574, 1844, 2716, 1829, -150, 3167, 3960, 5058, -2336, 2534, + 903, 5975, 1898, 1898, 5721, 1898, 1238, 1868, 3480, 694, + 5217, 4926, 5670, 1010, -2554, 761, 5627, 5964, 3009, 5709, + 5675, 3392, 5631, 1485, 5516, -1760, 1052, 761, 1898, 761, + 5632, 5628, 4987, 5977, 761, 2715, 2788, 5956, 3272, 762, + 1694, 1107, 1846, 761, 1793, 2626, 3447, 2916, 4258, 2838, + 2937, 762, 1153, 762, 1898, 2716, 3014, 1120, 762, 3642, + 645, 5341, 3214, 3163, 920, 1210, 1166, 762, 927, 1511, + 1011, 1881, 1788, 3178, 5993, 4759, 1486, 939, 1849, 2560, + 5732, 761, 2901, 4977, 4063, 939, 4065, 4066, 939, 1403, + 1404, 3393, 2622, 761, 5812, 2553, 2788, 974, 4592, 5944, + 644, 3046, 2788, 4873, 40, 762, 2074, 2065, 6175, 921, + 4978, 2902, 4009, 4370, 1411, 5260, 2788, 762, 1176, 4037, + 2788, 4435, 2561, 1898, 3168, 3651, 6091, 1418, 1012, 5625, + 2074, 3974, 2575, 783, 2728, 916, 3643, 6092, 3215, -2200, + 2580, 44, 5007, 1074, 1898, 4760, -2200, 974, 4377, 1084, + 2717, 3339, 2618, 919, 3448, 1211, 847, 3164, 3340, 1504, + 2556, 1098, 194, 1914, 2580, 2569, 2569, 1378, 2725, 4019, + 4495, -2219, 5676, 2582, 4037, 4091, 2066, 3015, -2219, 5342, + 6052, 5613, 1487, 48, 3273, 2934, 2596, 5710, 4988, 5978, + 2839, 2938, 1242, 1899, 868, 4927, 49, 2582, 1505, -1760, + 1793, 5965, 1954, 5677, 5633, 2540, 195, 1426, 3216, 5244, + 4874, 3217, 3160, 2717, 1017, 3010, 3160, 5629, 1018, 5887, + 50, 3481, 2554, 2015, 3482, 5671, 2729, 3160, 5218, 6132, + 5769, 3160, 3961, 1506, 4593, 5994, 5469, 5008, 1899, 56, + 5995, 3145, 920, 1379, 2702, 5884, 949, 1106, 2798, -441, + 5889, 5890, 2669, 2617, 5576, 1235, 6176, 4092, 1995, 4447, + 1057, 1241, 1058, 191, 3002, 949, 2718, -2554, 5927, 6110, + 1054, 949, 2753, 1055, 1056, 1120, 3204, 3047, 2815, 5955, + 4544, 4427, 4428, 949, 2887, 4894, 4535, 2890, 1400, 1401, + 2895, 1582, 2958, 2959, 1995, 1899, 1899, 2535, 1899, 949, + 922, 2948, 1507, 904, 632, 3298, 2755, 1693, 4258, 892, + 1107, 4110, 6177, 632, 949, 1512, 2762, 2593, 2897, 1410, + 632, 1899, 949, 632, 3218, 3551, 5009, 648, 3627, 2718, + 1183, 5910, 1830, 5434, 2831, 892, 949, 6153, 6109, 3169, + 3754, 1017, 4093, -2554, 4010, 1018, 949, 1899, 3389, 1211, + 2549, 1492, 3415, 1493, 1900, -2554, 191, -2489, 2957, 2930, + 3170, 2832, 1398, -2380, 2660, 767, 768, 5006, 5805, -2531, + 3365, -2556, 4802, 767, 768, -2381, -2594, 6180, 1830, 1513, + 2661, 1462, 1112, 2917, 2522, -2413, 5808, 3198, 6054, 1017, + 1184, -2340, 1189, 1018, 1193, 1108, -2769, 4052, 4901, 949, + 1197, 4020, 1120, 2877, 4905, 5053, 2880, 2881, 5054, 2876, + 1120, 1120, 5223, 1200, 6044, -1939, 1899, 2772, 1402, 1413, + 1414, 632, 632, 767, 768, 1406, 2965, 949, -1944, 6073, + -1934, 1413, 1414, 2070, 689, -2493, 3219, 1899, 1415, 2598, + 2599, 2538, 3803, 4408, 4280, 6196, 3133, 1214, 6017, 4371, + 1417, 6093, 949, 3117, 632, 1602, 1907, 1911, 1815, 1922, + 1830, 6021, 1811, 4819, 2621, 5418, 1816, 4864, 1817, 917, + 2772, 3001, 1017, 974, 1211, 4447, 1018, 892, 922, 1603, + 1573, 1574, 1944, 1924, 1573, 1574, 3143, 2772, 4174, -150, + -150, 5010, 918, 1249, 848, 4214, 4037, 947, 3158, 632, + -2896, -2896, -2896, 1214, 2726, -2200, 983, 2816, 1947, 2859, + 5717, 4738, 949, 4496, 6112, 4742, 3161, 3341, 71, 184, + 1005, 186, 191, 175, 4496, 80, 83, 84, 85, 180, + 86, 106, 181, 183, 124, 129, 159, -2219, 178, 4508, + 185, 5245, 1495, 4638, 1991, 4489, 5954, 1806, 1914, 4365, + 4366, 1109, 4589, 3804, 4367, 2001, 4782, 5948, 4281, 2910, + 2911, 2840, 5011, 1914, 4729, 2935, 4731, 4586, 4969, 2799, + 936, 927, 2011, 2815, 4965, 6100, 5577, 1914, 1848, 6152, + 939, 1466, 4622, 2800, 3442, 2801, 4545, 939, 1110, 4192, + 939, 4463, 187, 5928, 2936, 5936, 1517, 4141, 4586, 2979, + 1394, 2519, 2520, 2521, 2522, 6115, 6116, 4220, 1362, 4221, + 4968, 5947, 1372, 3416, 4049, 4050, 4051, 4052, 3324, 2747, + 632, 632, 1789, 2517, 2518, 2519, 2520, 2521, 2522, 949, + 5302, 4422, 3235, 1891, 632, 1070, 1134, 2991, 4018, 892, + 632, 6205, 912, 5612, 632, 4008, 632, 1892, 2802, 1111, + 892, 1112, 4253, 1249, 5303, 1113, 4037, 3962, 3619, 1239, + 4038, 4039, 4040, 694, 3522, 694, 892, 4047, 4048, 4049, + 4050, 4051, 4052, 2817, 1249, 2622, 2721, 4037, 1671, 5618, + -1759, 4038, 4039, 4040, 1672, 187, 903, 4487, 2815, 4550, + 1469, 3791, 6053, 1202, 2909, 3497, 2856, 6045, 3900, 2860, + 2050, 4690, 2818, 1893, 2722, 694, 4892, 6224, 5402, 6182, + 632, 3023, 632, 632, 1594, 4215, 6105, 3415, 1560, 5858, + 3415, 3609, 1666, 1793, 3395, 690, 694, 2819, 1863, 4877, + 3667, 2815, 4354, 2815, 803, 1652, 3295, 5077, 4797, 1510, + 1249, 6200, 5521, 4037, 6005, 5022, 6168, 4038, 4039, 4040, + 3061, 3805, 5831, 949, 910, 3542, 3712, 2633, 3424, 3325, + 3019, 4193, 3713, 4328, 3326, 1667, 5970, 3415, 2813, 3454, + 5689, 1864, 5711, 4282, 4283, 3415, 3020, 3610, 4551, 912, + 694, 632, 4043, 3498, 1422, 691, 6031, 3901, 6117, 787, + 6232, 4761, 1673, 3024, 3078, 3345, 3050, 5712, 191, 5971, + 5832, 3199, 2816, 3201, 4284, 1894, 6211, 4995, 3327, 3208, + 3667, 957, 3155, 3156, 949, 3223, 3224, 3079, 958, 959, + 960, 3241, 911, 892, 692, 949, 693, 1026, 1595, 1956, + 3260, 1958, 2815, 1960, 4982, 1962, 3275, 1964, 1965, 1966, + 1426, 3806, 949, 4041, 1968, 3543, 6151, 949, 3425, 916, + 4878, 187, 4599, 1511, -1759, 6176, 1422, 6158, 2964, 632, + 1423, 4477, 5791, 2634, 3509, 2723, 4042, 3119, 2815, 1895, + 3714, 3475, 1830, 937, 1205, 3620, 1203, 4329, 4798, 5804, + 1849, 5819, 6106, 3611, 904, 5378, 5794, 4042, 3552, 6181, + 2992, 1890, 5807, 3963, 632, 5802, 3142, 4033, 1470, 5790, + 3147, 927, 4019, 3792, 4464, 3154, 912, 939, 3157, 4009, + 3833, 939, 3570, 939, 5366, 2066, 6203, 2816, 5372, 5397, + 6075, 4254, 2889, 632, 632, 632, 5304, 632, 5229, 5806, + 1424, 4444, 1423, 1425, 695, 4194, 2815, 2815, 1071, 1135, + 6215, 3346, 4043, 4552, 3768, 5840, 5102, 632, 1668, 3018, + 3401, 1075, 3092, 4042, 1865, 3659, 3328, 1075, 3094, 3455, + 2816, 5403, 2816, 4043, 1674, 4762, 3628, 1896, 2817, 1075, + 2815, 2815, 3126, 3107, 949, 2578, 3109, 1883, 3763, 1885, + 1886, 3080, 949, 949, 3113, 3523, -2896, -2896, -2896, 4047, + 4048, 4049, 4050, 4051, 4052, 3756, 4448, 2818, 4983, 6032, + 1596, 6076, 1424, 1675, 4996, 1425, 632, 4355, 6172, 3902, + 2627, 2628, 6082, 2632, 4553, 2768, 4600, 1691, 3246, 5715, + 974, 4541, 2819, 3903, 3546, 641, 3146, 1933, 40, 4043, + 3152, 3153, 3416, 918, 918, 1789, 918, 2919, 1676, 1597, + 4478, 5679, 3715, 4451, 3660, 993, 1426, 5770, 913, 4330, + 794, 4139, 632, 3612, 1669, 1450, 632, 632, 2074, 2073, + 1866, 2816, 2074, 2813, 5222, 44, -2896, -2896, -2896, 5660, + 1934, 5190, 632, 5938, 1598, 5514, 994, 642, 892, 6033, + 2950, 3716, 3553, 2817, 6062, 2892, 5698, 5193, 4331, 5143, + 2763, 1640, 5197, 4374, 6077, 5199, 2580, 2816, 3661, 3137, + 4185, 3542, 4453, 2581, 2542, 3057, 5033, 48, 6034, 793, + 1009, 5680, 2818, 1224, 4034, 4035, 3717, 3057, 1426, 4054, + 49, 3197, 1466, 4332, 1466, 2582, 2817, 187, 2817, 2582, + 5345, 3058, 5034, 2636, 795, 3361, 1452, 2819, 5778, 3659, + 3844, 3542, 4375, 3058, 50, 892, 4044, 4045, 4046, 4047, + 4048, 4049, 4050, 4051, 4052, 2818, 1641, 2818, 1427, 3662, + 4085, 4086, 5067, 3456, 3819, 2816, 2816, 4044, 4045, 4046, + 4047, 4048, 4049, 4050, 4051, 4052, 2543, 6062, 2813, 2637, + 2819, 3629, 2819, 1428, 6050, 6051, 892, 2764, 4649, 2882, + 4650, 3543, 5537, 5731, 1599, 2020, 1692, 1793, 1642, 2816, + 2816, 5771, 5144, 1225, 5333, 1643, 5033, 1914, 1644, 4456, + 5987, 1495, 1010, 2032, 5877, 2029, 1495, 4363, 3885, 892, + 4447, 2813, 5626, 2813, 6043, 4784, 3544, 2817, 3660, 660, + 1427, 3543, 5034, 4044, 4045, 4046, 4047, 4048, 4049, 4050, + 4051, 4052, 6078, 2636, 2583, 906, 6135, 3096, 5661, 2584, + 5617, 6067, 4457, 1935, -697, 3138, 2818, 1788, 2683, 814, + 3555, 3108, 2683, 2817, 5760, 3545, 5762, 2063, 4458, 1011, + 5766, 5767, 3663, 5886, 3114, 4959, 4805, 838, 5779, 6062, + 4963, 2819, 3661, 1849, 949, 4373, 4410, -1906, 3139, 2637, + 1495, 2639, 2818, 2586, 1495, 6143, 662, 772, 3964, 632, + 632, 632, 3140, 772, 963, 964, 965, 966, 967, 968, + 969, 970, 971, 2913, 4270, 5027, 2731, 2819, 1182, 4821, + 4866, 6108, 2813, 3495, 1914, 1914, 2732, 1012, 3059, 5035, + 1947, 2817, 2817, 4165, 4651, 2883, 3820, 3095, 3141, 2884, + 5360, 3105, 3135, 3662, 6067, 6154, -2364, 6136, 2587, 850, + -175, 2638, 2640, 5024, 5780, 974, 974, 3556, 2813, 1936, + 2818, 2818, 4806, 3718, 1450, 2817, 2817, 4166, 4459, -1906, + 3546, 1223, 1226, 6144, 2882, 2707, 5187, 1645, 3135, 3380, + 3965, -175, 4744, 1374, 815, 2819, 2819, 2708, 6150, 4271, + 916, 916, -466, 916, 2818, 2818, 3664, 3416, 4168, 949, + 3416, 2639, 3719, 1009, 3665, 2709, 4202, 3666, 194, 4986, + 3546, 892, 1646, 1227, 4785, 1228, 1647, 3088, 1444, 2819, + 2819, 4786, 892, 4164, 1389, 811, 2813, 2813, 4787, 5942, + 1560, 4807, 2805, 1378, 1789, 4808, 3505, 3720, 892, 6013, + 4805, 2589, 1631, 4203, 4444, 1452, 6067, 3416, 907, 4636, + 4637, 1648, 195, 4368, 3616, 3416, 3663, 949, 1649, 5547, + 2813, 2813, 2640, 4862, 4788, 949, 1602, 5811, 2806, 673, + 4890, 674, 1412, 949, 1484, 3418, 4312, 974, 3415, 3135, + 3640, 1632, 3415, 923, 1439, 3446, 4789, 5962, 4313, 816, + 1603, 5797, 892, 3496, 1453, 2733, 1584, 1845, -1084, 4165, + 3821, 632, 1450, 2073, 632, 1010, 2074, 892, 1451, 1379, + 892, 892, 3509, -466, 632, 632, 5818, 949, 949, 4170, + 2883, 1235, 3678, 1445, 2884, 4214, 4806, 194, 4369, 632, + 4697, 949, 632, 4166, 2734, 2722, 3568, 5969, 4863, 4980, + 2580, 892, 892, 2513, 949, 949, 5465, -2896, 4167, 3415, + 3822, -1906, -2896, -2896, -2896, 2517, 2518, 2519, 2520, 2521, + 2522, 6119, 1011, 1485, 4168, 1830, 660, 2710, 191, 5329, + 1585, 195, 4837, 2582, 4236, 694, 924, 5544, 2788, 3640, + 3664, 1368, 632, 1452, 3741, 5659, 632, 632, 3665, 2789, + 1672, 3666, 4169, 1633, 3227, 4807, 1523, 40, 3127, 4808, + 3128, 5545, 3129, 5330, 3130, 641, 3131, 4838, 3918, 3587, + 3132, 4981, 1057, 4590, 1058, 191, 1486, 3183, 5416, 5194, + 1012, 632, 1054, 632, 1947, 1055, 1056, 5439, 632, 632, + 3677, 4602, 1453, 662, 44, 632, 632, 632, 632, 632, + 632, 632, 4087, -612, 632, 3801, 632, 5946, 632, 632, + 632, 632, 632, 632, 3172, 1476, 632, 908, 632, 632, + 4444, 2683, 632, 6184, 3844, 5896, 3679, 1471, 3702, 5520, + 3726, 2683, 3588, 5347, 3682, 5963, 48, 3685, 892, 632, + 632, 632, 3757, 3758, 3759, 4170, 5945, 4614, -2896, 4624, + 1477, 932, -1683, -2896, 1478, 4628, 4839, 632, 1673, 1789, + 5349, 5440, 3747, 3589, 3187, -1683, 1472, 3654, 4269, 2892, + 3727, -1683, 5371, 5552, 4627, 2863, 4635, 5241, 4631, 4632, + 2866, 2074, 1487, 4081, 5789, 3652, 5358, 3653, 934, 1479, + 5648, 4585, 56, 1481, 3722, 2788, -1730, -2896, 1120, 5897, + 1099, 1473, -1730, 955, 1662, 5497, 2796, 5499, 1099, 5350, + 3912, 5367, 2683, -1906, 1637, 2580, 1612, 4572, 6058, 29, + -1683, -1906, 2951, 1402, -1906, 1431, 3590, -1906, 927, 3723, + 3763, 927, 1482, 5544, 5822, 5195, 4417, 1100, 4586, 2853, + 956, 939, 939, 1663, 1488, 1100, -1683, 1664, 2582, 5242, + 6046, 1008, 2587, 1638, 2940, 1613, 939, 5545, 2946, 939, + 35, 2952, 3956, 2793, 4325, 2794, 673, 1483, 674, 999, + 3415, 3415, 5320, 1101, 5321, 5322, 5323, -1730, 1665, 1489, + 1947, 4490, 3724, 1490, 3693, 1016, 3694, 35, 1639, 2805, + 3698, 2862, 1602, 5763, 678, -1683, 3721, 4372, 5764, 5839, + 5337, 632, 5339, 4326, -1683, 1188, 1190, 1192, 4727, 939, + 1194, 1195, 1196, 939, 939, 40, 1603, 3725, 1491, 1869, + 1201, 1102, 4798, 5801, 4283, 2806, -1730, 1062, 2795, 1102, + 5592, -1682, 1602, 2953, 5558, -150, 4798, 1794, 4327, 1060, + 1795, 1941, 4409, 1870, -1682, -2896, 2954, 6111, 632, 5765, + -1682, 1492, 44, 1493, 4850, 3377, 1603, 187, 5768, 1370, + 4645, 4646, 4647, 4648, 4217, 1942, 4652, 4653, 4654, 4655, + 4656, 4657, 4658, 4659, 4660, 4661, 2955, 4071, 4928, 3378, + 5559, 1067, 2546, 4078, 5593, 5544, 5652, 5594, 4945, 1413, + 1414, 1081, 233, 5595, 48, 3945, 3874, 6011, 646, -1682, + 6121, 632, 4929, 1494, 187, 5560, 738, 49, 1415, 5545, + 5653, 4946, 3848, 3849, 3850, 3851, 6222, 3853, 6225, 6137, + -1910, 5596, 1095, 5561, 812, -1682, -1910, 5562, 2846, 1605, + 2943, 50, 4703, 4704, 5262, 4520, 40, 3226, 6236, 3, + 4, 5267, 3881, 6138, 3836, 2870, -1683, -2896, 1679, 5563, + 6059, 1683, 2824, 5564, 1072, 3274, 1073, -1683, 755, 2517, + 2518, 2519, 2520, 2521, 2522, 1017, 1104, -2340, 5565, 1018, + -1683, 1413, 1414, 44, -1682, 4224, -1683, 1408, 1409, 5597, + 1402, 4781, 2616, -1682, 6015, 6016, 1402, 1076, 2616, 1077, + 1417, 772, 5598, 772, 4798, 772, 5876, 1953, 4036, -611, + 1795, 772, 1198, 1199, 740, 5599, 5734, 3415, 3986, 1103, + 4064, 5738, 5739, 2591, 3415, 48, 40, 1017, 1402, 3415, + 1431, 1018, 3415, 910, 15, -1683, 3944, 6204, 49, 2003, + -2332, 2019, 1795, 56, -1917, 1017, -1731, 1205, 2066, 1018, + -1917, 1249, -1731, 1105, 4037, 4135, 4088, 4164, 4038, 4039, + 4040, -1683, 50, 44, -1907, 1249, 1122, 5187, 4037, 20, + -1907, -1908, 4038, 4039, 4040, 5566, -1911, -1908, 4691, -1909, + 1126, 56, -1911, 3565, -1683, -1909, 740, 1133, 632, 632, + 632, 632, 632, 632, 632, 632, 632, -1683, 632, 3987, + 4121, 911, 694, -1683, 3988, 48, 15, 1142, 2067, 632, + -1683, 2825, 632, 3022, 4190, 1143, 6098, 755, 49, -1683, + 755, 3039, 2577, 1149, 2569, 1795, 5567, -1731, 3416, 2943, + 694, 3535, 3416, 4165, 1167, -1682, 4687, 3532, 694, 3536, + 3537, 20, 50, 5554, 4907, 694, 974, 1402, 770, 2616, + 4557, 5180, -1683, 632, 770, 4558, 3303, 632, 2962, 2963, + 632, 56, 632, -2333, 3373, 632, 4378, 4166, 1017, 632, + 1205, 3083, 1018, 3084, 3097, 4104, -1731, 4105, -1683, 4146, + 4147, 5061, 4167, 1592, 2590, 912, 4558, 2591, 1609, 4126, + 1789, 4127, 632, 3309, 3310, 3311, 3312, 1160, 4168, 3416, + 772, 2943, 4259, 2624, 6146, 3123, 1795, 4137, 2591, 632, + 3134, 3136, 5600, 3135, 3135, 5601, 5094, 3175, 632, 632, + 3176, 3376, 1177, 4219, 1947, 3529, 4169, -1683, 4288, 641, + 3564, 4164, 5101, 5823, 755, 3381, -1683, 3467, 2591, 4180, + 2591, 1955, -1134, -1134, 1957, 949, 1959, 3458, 1961, 4517, + 1963, 4518, 892, 4774, 1967, 3562, 892, 892, 3563, 3443, + 3444, -1683, 32, 949, 4042, 3634, 4108, 949, 3635, 3797, + 772, 949, 3798, 3936, 2617, 4262, 3135, 1204, 4042, 3985, + 949, 1793, 2591, 4976, 5123, 4849, 3499, 4970, 3502, 4971, + 5126, 5127, 3413, 29, 40, 1209, 3994, 4001, 949, 2591, + 2591, 632, 5029, 1615, 6090, 3415, 4506, 4165, 4002, 1213, + 4016, 2591, 632, 3756, 892, 632, 3658, 632, 632, 4170, + 892, 1205, 4798, 4023, 5214, 1616, 2591, 913, 5719, 1017, + 1216, 44, 949, 1018, 32, 3281, 5724, 5725, 3284, 4056, + 4043, 4166, 2591, 4070, 4075, 4144, 2591, 4076, 2591, 3, + 4, 4320, 949, 949, 4043, 4305, 4167, 4840, 4306, 4846, + 4310, 892, 4336, 4311, 1219, 4337, 40, 4820, 4128, 1120, + 4129, 6009, 4168, 48, 4829, 4444, 1617, 741, -1683, 3550, + 1221, 2683, 4406, 1789, 949, 4337, 49, 1789, 5134, 40, + 5135, 4228, 4529, 40, 4532, 4530, 3744, 4533, 4601, 4563, + 4169, 4670, 4564, 44, 4671, 4681, 1413, 1414, 4682, 3001, + 50, 949, 4493, 1789, -1754, -1754, 4693, 949, 2073, 2591, + 6160, 2074, 6161, 5952, 5448, 4865, 44, 5449, 1222, 742, + 44, 949, 4465, 4769, 4775, 1232, 4770, 4776, 949, 4780, + 1233, 949, 3482, -1758, -1758, 48, 1017, 949, 5030, 1436, + 1018, 3135, 1436, 5096, -1671, 2580, 1995, 6185, 49, 629, + 3416, 3416, -2896, 4723, 1236, 4725, 1618, 949, 48, -1757, + -1757, 5131, 48, 949, 2591, 5510, 5511, 4246, 3649, 5704, + 949, 49, 50, 3415, 5170, 49, 5225, 2591, 2582, 3482, + 5179, 4345, 5182, 4170, 949, 5640, 4351, 5231, 3303, 5238, + 5232, 56, 3135, 3415, 1234, 50, 3692, 949, 1615, 50, + 5239, 1237, 1789, 3135, 6226, 1243, 5240, 3415, 949, 3135, + 5373, 1373, 1619, 5374, 56, -1421, 1620, -1421, 56, 1120, + 1616, 5410, 3406, 4743, 4564, 4746, 632, 632, 632, 1235, + 5431, 2891, 632, 5432, 4044, 4045, 4046, 4047, 4048, 4049, + 4050, 4051, 4052, 5433, 5852, 5853, 2591, 4107, 4044, 4045, + 4046, 4047, 4048, 4049, 4050, 4051, 4052, 1245, 5452, 632, + 892, 5453, 2662, 4798, 2665, 1622, 1380, 187, 1789, 927, + 5462, 1617, 939, 1947, 939, 939, 5983, 5984, 3978, 5371, + 3980, 3981, 5047, 5468, 5470, 5587, 4503, 4503, 5588, 5607, + 1376, 5641, 3135, -2896, 5642, 1381, 5687, 5693, -2896, 5688, + 1947, 632, 1382, 5696, 5707, 4771, 4503, 5708, 772, 5753, + 1624, 1390, 5754, 772, 772, 1398, 5793, 5820, 5843, 2545, + 5708, 4076, 5844, 5862, 5866, 2591, 5863, 1947, 1395, 5867, + 3863, 5040, 2591, 892, 1625, 901, 902, 892, 3885, 1386, + 1249, 2597, -2896, 4037, 1405, 1396, 1419, 4038, 4039, 4040, + 2604, 1402, 2605, 5952, 1627, 5895, 2608, 1406, 3176, 4798, + 4483, 1618, 1421, 2614, 1436, 3415, 3975, 4436, 5901, 1448, + 1463, 3176, 4800, 4801, 5902, 4676, 4804, 3176, 1437, 1468, + 5874, 1249, 2683, 5905, 4037, 1464, 2591, 3416, 4038, 4039, + 4040, 1465, 5906, 5907, 3416, 2591, 5908, 2587, 2622, 3416, + 5934, 3413, 3416, 5935, 5988, 1544, 6002, 4503, 5163, 2591, + 6004, 6010, 1474, 2591, 3135, 974, 6025, 1619, 1431, 6026, + 1515, 1620, 1541, 949, -2382, 1789, 4608, 4497, 3415, 1546, + 6048, 6089, 4448, 6049, 5701, 1547, 2891, 1582, 4449, 1587, + 892, 1586, 949, 1588, 4466, 6118, 4468, 4595, 5708, 949, + 1599, 4450, 1601, 632, 772, 892, 632, 1611, 632, 632, + 892, 4798, 1694, 6156, 772, 1614, 6157, 1636, 632, 6028, + 1622, 6179, 1653, 632, 2591, 904, 1654, 4642, 1670, 4451, + 6198, 4452, 6208, 5863, 6214, 6209, 1680, 4770, 1684, 892, + -2896, 4225, 4226, 3394, 3396, 3397, 1120, 1793, 1120, 6223, + 6235, 1681, 2591, 6209, 1689, 1690, 1805, 1803, 1198, 1199, + 1807, 4669, 1812, 1818, 1823, 1624, 632, 632, 632, 1826, + 4186, 632, 1828, 904, 4580, -2668, 1833, 1836, 4538, 632, + 632, 632, 632, 1838, 2622, 1830, 1847, 1852, 4453, 1625, + 1789, 4849, 1853, -137, 1855, 632, 1789, 1856, 632, 1858, + 632, 772, 1860, -2896, 772, 772, 1861, 1872, 1879, 1627, + 1881, 1884, 632, 632, 4711, 1888, 632, 4454, 629, 213, + 1897, 6056, 1902, 1903, 1904, 1906, 1910, 1909, 1913, 1914, + 1120, 1921, 1925, 1927, 1928, 1930, 1932, 632, 3415, 632, + 1938, 632, -2896, 1937, 4042, 1940, 1943, -1109, 1946, 1949, + 1950, 1952, 1969, 4841, 2517, 2518, 2519, 2520, 2521, 2522, + 632, 2000, 3616, 2007, 4860, 4131, 4132, 4133, 5257, 2009, + 2073, 3468, 2012, 2074, 2016, -2668, 904, 2017, 2024, 4043, + 2025, 949, 2026, 2027, 2028, 56, 2030, 4341, 3640, 3484, + 4455, 2031, 2050, 3487, 2032, 4456, 2033, 3490, 2034, 2035, + 2036, 2528, 2037, 2038, 2039, 5425, 2040, 2580, 2042, 4358, + 187, 2530, 2043, 2044, -2896, 2045, 632, 2046, 2047, 632, + 4043, 2048, 2049, 2532, 3515, 3416, -2668, 904, 2052, 2534, + 2053, 2054, 632, 3415, 2055, 660, 2056, 632, 4457, -2668, + 2582, 2057, 4816, 5074, 2058, -2668, 2535, 2059, 2550, 2545, + 2617, -2668, 632, 2563, 4458, 1615, 2572, -2668, 3557, -1082, + -2668, 2594, 2595, 2600, -2668, 2602, 632, 2603, 2606, 2607, + 927, 2609, 2610, 939, 632, 939, 939, 1616, 1075, 2611, + 2612, 2613, 2618, 2625, 1451, 5665, 892, 2656, 1453, 892, + 2658, 892, 2668, 2670, -2668, 2616, 892, 772, 2671, 4964, + 4951, 2672, 662, 2673, 2689, 2690, 2696, 2691, 2692, 4702, + 3607, 949, 949, 2693, 2694, 6183, 3413, 632, 2695, 3413, + -2668, 2697, 2698, 2699, 2705, 2724, 2730, 2736, 1617, 2750, + 2754, 2756, 2757, 2758, 3415, 4889, 2760, 3636, 949, 2761, + 2774, 949, 2778, 3645, 892, 2780, 2791, 2779, 2792, 2807, + 2803, 4956, 892, 2810, 4459, -2896, 664, 3655, 2812, 2809, + -2896, 2813, 2811, 4476, 1075, 4479, 3413, 3668, 2821, -2668, + 2822, 2823, -2668, 3673, 3413, 2826, 2827, 892, -2668, 2833, + 2834, 2828, 2847, 4044, 4045, 4046, 4047, 4048, 4049, 4050, + 4051, 4052, 2837, 3686, 2843, 4843, 2844, 2861, 2871, 3689, + 2857, 2878, 2885, 3416, -2896, 2888, 3695, 2903, 2063, 1560, + 2905, 2858, 2864, 1789, 1789, 1789, 2867, 2868, 1618, 2907, + 3710, 2912, 2914, 3416, 4044, 4045, 4046, 4047, 4048, 4049, + 4050, 4051, 4052, 3735, 2873, -2668, 2874, 3416, 949, 2931, + 3956, 2915, 2932, 4186, 1075, 2886, 2893, 892, 2894, 892, + 2939, 2899, 2900, 2906, 2908, 2920, 2063, 949, 2921, 2587, + 2933, 2944, 2961, 2968, 2976, 5393, 2973, 2975, 2977, 2978, + 2982, 2983, 2984, 2986, 1619, 673, 2989, 674, 1620, 949, + 3303, 2987, 2988, 629, 3415, 2990, 629, 2994, -1109, 2995, + 2996, 2997, 787, 2891, 3004, 3005, 4117, 655, 5667, 3008, + 677, 3021, 3013, 1845, 3032, 1633, 3305, 1249, 3306, 3036, + 4037, 3037, 3210, 3211, 4038, 4039, 4040, 3040, 4603, 3049, + -2668, 3052, 3055, 3242, 3243, 3056, 3065, 1622, 5686, 3069, + 3073, 3076, 3307, 629, 5164, 4094, 3082, 4095, 878, 3086, + 3098, 629, 3091, 892, -2668, 3100, -2668, -2668, 3101, 3103, + 3102, 3116, -2896, 3148, 3159, 3288, 4151, 3173, 3185, 4156, + 3209, 4096, 3204, 3276, 3282, 949, 2074, 3296, -2668, 3286, + 632, 3323, 1624, 3343, 3415, 3302, 632, 3364, 5091, 3321, + 3415, 3348, 3349, 3368, 3367, 892, 3399, 3382, -2668, 3369, + 3370, -2668, -2668, -2668, 3383, 3416, 1625, 3308, 1426, 3384, + 3386, 2649, 3385, 3387, 3391, 3400, 3406, 3436, 3418, 3423, + 903, 911, 1789, 892, 3406, 3437, 1627, 3435, 949, 3438, + 949, 3452, 3459, 3460, 3471, 3472, 3308, 3474, 3491, 3500, + 3503, 3505, 3507, 949, 3508, 949, 3514, 3519, 2622, 3524, + 3538, 3525, 3527, 3530, 3309, 3310, 3311, 3312, 3554, 3559, + 1370, 3313, 3314, 1374, -2896, 632, 3561, 3315, 3416, 3952, + 3571, 3578, 3591, 3596, 3597, 5142, 2517, 2518, 2519, 2520, + 2521, 2522, 3617, 3309, 3310, 3311, 3312, 3623, 3968, 3630, + 4097, 892, 3415, 3624, 3625, 3952, 4098, 3688, 3633, 5156, + 3650, 3651, 5354, 3730, 3672, 3641, 3743, 4523, 3648, 3751, + 3671, 1849, 949, 892, 3755, 3752, 5086, 5087, 5088, 5089, + 5090, 912, 3764, 3771, 3778, 3777, 3779, 5205, 3783, 3788, + 4042, 3799, 3810, 3811, 3825, 892, 3829, 3831, 3839, 3858, + 3827, 3857, 3860, 4560, 3852, 3861, 3865, 3859, 3868, 3870, + 3872, 3846, 3873, 5040, 949, 3876, 4527, 3882, 3877, 3897, + 3898, 3899, 3907, 3908, 3909, 3911, 3913, 3927, 3929, 3930, + 3935, 3933, 3943, 949, 3953, 3938, 3957, 949, 3939, 3940, + 3941, 3942, 3959, 3966, 3969, 1947, 3971, 3979, 3998, 1944, + 4000, 4004, 4015, 4012, -2192, 4069, 4072, 1911, 949, 4089, + 3948, 3947, 4709, 3958, 4103, 3996, 4043, 3997, 5212, 1211, + 3999, 4115, 3756, 4007, 632, 4017, 3316, 892, 4024, 4025, + -2670, 4084, 632, 4033, 632, 4029, 4142, 3317, 3416, 4031, + 4032, 4055, 4060, 5722, 632, 4178, 4061, 1214, 632, 632, + 2591, 4068, 4083, 4154, 632, 4099, 5327, 4116, 5266, 4150, + 4118, 4120, 632, 4143, 632, 4148, 4100, 632, 4122, 4155, + 4149, 892, 632, 632, 632, 632, 4182, 4163, 632, 632, + 632, 632, 632, 632, 632, 632, 632, 632, 4188, 4197, + 4216, 632, 632, 632, 4195, 4199, 892, 4208, 4222, 4238, + 4201, 632, 4234, 4227, 4230, 4241, 632, 904, 1789, 4243, + 632, 4229, 4235, 4266, 4255, 4256, 4239, 4267, 632, 4268, + 4272, 632, 4273, 632, 4274, 4279, 4275, 4290, 4291, 4293, + -2670, 4299, 4300, 3416, 4309, 4301, 4315, 4338, 4324, 4344, + 4346, 632, 4340, 4348, 632, 632, 4342, 4352, 4353, 632, + 632, 4357, 4359, 4360, 632, 4361, 632, 4716, 4717, 4718, + 4719, 4362, 5209, 4364, 4381, 4379, 4380, 4382, 4383, 4384, + 4385, 4386, 4387, 4388, 4390, 4389, 4186, 4391, 4392, 4394, + 4395, -2670, 4393, 4398, 4402, 1057, 4404, 1058, 191, 632, + 4405, 2929, 4411, 4414, -2670, 1054, 4418, 632, 1055, 1056, + -2670, 632, 4186, 4432, 4400, 4415, -2670, 4421, 4416, 4426, + 4434, 4469, -2670, 4474, 4481, -2670, 4484, 1615, 4485, -2670, + 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4488, + 4492, 4502, 4505, 632, 3416, 4475, 4512, 4503, 4515, 1616, + 4521, 5002, 5003, 4522, 4244, 4526, 4542, 187, 4525, -2670, + 632, 4528, 4559, 4556, 4562, 4574, 892, 4575, 4576, 4577, + 4578, 5393, 4579, 4566, 4596, 4832, 4568, 4597, 632, 4598, + 4581, 2019, 4604, 4605, 4617, -2670, 5305, 5306, 4606, 5308, + 4607, 4609, 4610, 187, 6083, 6084, 4611, 5338, 4612, 949, + 1617, 4842, 4613, 4623, 3225, 4625, 4626, 3413, 2727, 4629, + 4633, 3413, 4634, 4037, -2191, 4695, 4643, 4683, 4666, 4698, + 4667, 3388, 3390, 4696, 4668, 4740, 4699, 3398, 4739, 4747, + 4753, 4754, 4748, 4755, -2670, 4763, 4728, -2670, 5447, 4766, + 4675, 4701, 4768, -2670, 4772, 4783, 4732, 4712, 4791, 4724, + 1789, 4726, 4735, 4812, 4316, 1789, 892, 1789, 4813, 3441, + 3441, 4814, 4737, 4752, 4757, 4815, 4822, 4843, 4823, 4825, + 4826, 4828, 5485, 4832, 4836, 4835, 4855, 4852, 3413, 4868, + 4867, 1789, 892, 4869, 4870, 4871, 4881, 4882, 4883, 4895, + 1618, 4884, 4885, 4886, 3416, 2892, 4897, 4898, 4904, 4916, + -2670, 4917, 4186, 4925, 4941, 5557, 4922, 4942, 4944, 4842, + 4999, 4958, 4947, 3234, 3234, 4957, 4960, 4984, 4961, 4962, + 5013, 772, 1132, 3256, 5020, 5019, 4906, 5032, 949, 4973, + 4994, 949, 3277, 5005, 5042, 5048, 5026, 5025, 4915, 5049, + 5059, 5066, 5068, 5065, 5070, 5072, 1619, 5069, 1132, 5073, + 1620, 5078, 3160, 5092, 5084, 5098, 5099, 787, 5108, 5115, + 5116, 5119, 5118, 5120, 5124, 2891, 5125, 5133, 5121, 4844, + 5145, 5148, 5128, 2073, 629, -2193, 2074, 5139, 629, 5150, + 5149, 4412, 5160, 5154, 3416, -2670, 5173, 5161, 5198, 5188, + 3416, 5169, 5184, 5207, 5221, 632, 5747, 5210, 5749, 1622, + 2063, 5191, 5224, 5202, 2073, 3574, 5211, 2074, 5228, -2670, + 2580, -2670, -2670, 5226, 5234, 5233, 5243, -2896, 5263, 5264, + 5274, 949, 949, 5265, 5268, 892, 5273, 187, 5275, 5294, + 1548, 5287, 949, -2670, 5296, 5300, 1549, 5309, 5290, 632, + 632, 2580, 5301, 2582, 1624, 629, 5317, 3406, -2896, 949, + 5310, 3406, 5461, -2670, 5319, 5318, -2670, -2670, -2670, 5324, + 5328, 5331, 5335, 5461, 5336, 5343, 5346, 5351, 1625, 5355, + 5352, 5353, 892, 5361, 2582, 5051, 5359, 892, 632, 632, + 5370, 1551, 5365, 5375, 5377, 5381, 5384, 5382, 1627, 632, + 4845, 5386, 3416, 4275, 772, 5388, 5389, 5390, 5857, 5255, + 5399, 5414, 772, 5405, 3135, 772, 5407, 5415, 5420, 5421, + 5422, 5426, 4705, 5430, 5757, 5436, 5437, 772, 5604, 5446, + 5438, 5450, 5454, 5460, 5489, 5464, 5492, 5467, 5501, 5509, + 949, 974, 5498, 1789, 5513, 5883, 5486, 1552, 5512, 3413, + 3413, 5517, 5518, 4706, 1553, 5550, 5519, 1554, 5505, 5530, + 5524, 5531, 5572, 5535, 4983, 5580, 5669, 5578, -2896, 632, + 2943, 5541, 5542, -2896, 5543, 5583, 5586, 5610, 5591, 5590, + 5674, 5611, 5615, 632, 1555, 5620, 5622, 5638, 5643, 4584, + 5649, 5918, 5920, 4588, 5650, 5651, 5657, 632, 5672, -2896, + 5298, 5695, 5681, 5703, -2896, 5493, 5673, 5685, 2065, 5697, + 5527, 5705, 2813, 5728, 5729, 5699, 5718, -2896, 5735, 5727, + 1556, 5701, 5741, 5777, 5720, 632, 5702, 5772, 632, 5781, + 5787, 5774, 5795, 5785, 5809, 5813, 632, 632, 5814, 892, + 5815, 5800, 5817, 5816, 632, 632, 5826, 5827, -2896, 632, + 5828, 5834, 5854, 5836, 5829, 5845, 632, 5838, 5855, 632, + 632, 5856, 1810, 5859, 5879, 5869, 632, 4123, 5878, 5881, + 5894, 5882, 2587, 1819, 5898, 5742, 5743, 5917, 5923, 5926, + 5861, 5929, 5933, 5931, 5937, 5940, 632, 5941, 5957, 1827, + 5959, 1657, 5958, 632, 5759, 1558, 5967, 5356, 632, 5960, + 5974, 632, 632, 2587, 5968, 1559, 5973, 5976, 5981, 632, + 5985, 5986, 5991, 5998, 1560, 2073, 629, 629, 2074, 6000, + 632, 6020, 6012, 5912, 6007, 6029, 1561, 6022, 632, 5927, + 5928, 6037, 5213, 5215, 6038, 5694, 6039, 6055, 6057, 6074, + 6085, 6088, 6096, 6102, 6027, 5557, 6104, 6122, 632, 5227, + 2073, 6128, 2580, 2074, 6134, 6129, 6133, 6139, 6141, -2896, + 6163, 6142, 6162, 6173, 6164, -2896, 892, 6186, 1563, 1564, + 6188, 5924, 6197, 772, 6189, 4214, 6201, 6206, 6212, 949, + 6199, 6221, 6207, 6217, 6218, 2582, 3413, 2580, 6227, 3406, + 6230, 5645, 6234, 3413, -2896, 6176, -2896, 1438, 3413, 1545, + 1565, 3413, 4140, 3703, 1651, 3622, 892, 2945, 4285, 2571, + 1650, 4858, 6079, 6080, 4851, 187, 6023, 3742, 4431, 5261, + 2582, 5751, 3790, 949, 5569, 5911, 6103, 5001, 892, 5269, + -2895, 5868, 5621, 5870, 4847, 949, 4848, 5334, 5603, 4232, + 3937, 6014, 5503, 6099, 5932, 5930, 1998, 6036, 6114, 5363, + 4237, 632, 5023, 5052, 5167, 5031, 5892, 4993, 632, 3808, + 3809, 4856, 4491, 5018, 1635, 4303, 5357, -2896, 5609, 1566, + 949, 4531, 5076, 5830, 6159, 3297, 6233, 6219, 5584, 2517, + 2518, 2519, 2520, 2521, 2522, 4437, 6041, 5060, 5529, 5737, + 5900, 3012, 5532, 736, 789, 4817, 1050, 5714, -2896, 1992, + -2896, 892, 4582, 5093, 5095, -2896, 3477, 6155, 3837, 3075, + 2517, 2518, 2519, 2520, 2521, 2522, 4223, 5646, 5062, 5824, + 3071, 3104, 4548, 3434, 3087, 5746, 1121, 632, 3740, 4401, + -2895, 4887, 1161, 4347, 6061, -2896, 6187, 5079, 3767, 1120, + -2896, 2970, 5080, 632, 3422, 5888, 2704, 6202, 1789, -2896, + 4777, 1383, 2592, 629, 5713, 2541, 5216, 6008, 5522, 817, + 629, 818, 4184, 4196, 2653, 629, 5122, 949, 629, 5200, + 6003, 5871, 4730, 3432, 632, 4158, 4745, 5466, 4152, 5684, + 2652, -2895, 5683, 4778, -2896, 2657, 6170, 4153, 5990, 6086, + 4138, 5860, 772, 5912, -2895, 2601, 5368, 5668, 3344, 4677, + -2895, 5872, 4119, 5873, 2587, 3347, -2895, 3262, 4145, 4113, + 3991, 3766, -2895, 4111, 4102, -2895, 4022, 974, 4630, -2895, + 892, 0, 892, 3359, 4930, 0, 3420, 4933, 0, 1434, + 0, 0, 0, 3406, 0, 0, 0, 0, 3406, 2587, + 0, 3406, 0, 0, 0, 5885, 0, 0, 0, -2895, + 0, -2895, 0, 949, 5528, 4191, 4191, 4186, 0, 0, + 5526, 0, 187, 187, 0, 0, 630, 0, 0, 974, + 0, 0, 0, 0, 3413, -2895, 0, 0, 0, 0, + 0, 0, 0, 782, 632, 784, 0, 632, 0, 790, + 632, 632, 632, 0, 798, 806, 810, -2896, 813, 0, + 0, 806, 806, 0, 843, 5571, 846, 0, 0, 0, + 0, 0, 0, 900, 900, 900, 0, 632, 632, 0, + 0, 632, 0, 0, -2895, 0, 0, -2895, 5015, 0, + 0, 0, -2896, -2895, 0, 0, 0, 0, 1120, 0, + 0, 0, 632, 6210, 0, 2943, 0, 0, 632, 0, + 0, 0, 632, 0, 0, 6195, 0, 0, 892, 632, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 632, 0, 0, 632, 0, 0, 0, 0, + 949, 0, 949, 0, 0, 0, 632, 0, 0, 0, + -2895, 0, 0, 0, 0, 0, 0, 0, 0, -2896, + 6195, 0, 0, 0, 5487, 0, 0, 0, 0, 2836, + 5340, 2517, 2518, 2519, 2520, 2521, 2522, 0, 6195, 0, + 0, 0, 0, 0, 0, 0, 3952, 892, 949, 0, + 0, 0, 0, 0, -2896, 0, 6147, 0, 632, 0, + 0, 629, 0, 3298, 0, 0, 2517, 2518, 2519, 2520, + 2521, 2522, 3413, 0, 0, 0, 0, 630, 929, 929, + 0, 0, 929, 0, 0, 0, 940, 0, 843, 0, + 0, 976, 3413, 0, 940, -2895, 0, 940, 1789, 0, + 843, 0, 929, 632, 6220, 843, 3413, 0, 0, 929, + 5746, 843, 0, 0, 0, 0, 0, 0, 0, -2895, + 0, -2895, -2895, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5608, + 0, 0, 0, -2895, 0, 0, 187, 6148, 6149, 0, + 0, 0, 0, 0, 0, 6213, 0, 0, 0, 0, + 0, 0, 0, 0, 632, 0, -2895, 892, -2895, -2895, + 5634, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 71, 184, 0, 186, 191, 175, 0, 80, 83, + 84, 85, 180, 86, 106, 181, 183, 124, 129, 159, + 632, 178, 0, 185, 632, 904, 632, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5636, 3887, + 632, 0, 0, 0, 0, 0, 0, 632, 1120, 0, + 632, 0, 0, 0, 0, 0, 0, 0, 0, 629, + 0, 632, 0, 1518, 772, 0, 0, 0, 632, 0, + 0, 0, 0, 0, 2974, 0, 0, 0, 0, 629, + 0, 0, 0, 0, 3413, 2985, 0, 4480, 0, 0, + 0, 0, 0, 629, 0, 0, 0, 0, 1519, 0, + 0, 3003, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, + 0, 0, 0, 0, 892, 892, 0, 0, 0, 632, + 0, 0, 3406, 0, 0, 632, 632, 949, 0, 0, + 0, 0, 0, 0, 974, 939, 0, 3413, 0, 5281, + 1548, 949, 0, 0, 0, 3077, 1549, 0, 0, 1520, + 0, 5291, 0, 0, 0, 0, 0, 0, 0, 0, + 3089, 632, 0, 1132, 3093, 0, 0, 0, 0, 632, + 3256, 3256, 1789, 0, 0, 3256, 0, 0, 0, 0, + 939, 0, 0, 0, 0, 0, 1521, 0, 0, 0, + 0, 1551, 0, 0, 3112, 1132, 0, 632, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5803, + 0, 0, 0, 0, 0, 0, 3256, 3256, 0, 0, + 0, 0, 0, 0, 3888, 0, 892, 892, 0, 1522, + 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, + 0, 629, 0, 0, 0, 0, 0, 1552, 0, 0, + 632, 0, 0, 0, 1553, 0, 0, 1554, 1548, 632, + 632, 632, 0, 0, 1549, 0, 0, 0, 0, 0, + 0, 1524, 632, 1789, 0, 0, 892, 0, 0, 187, + 0, 632, 0, 632, 1555, 632, 0, 0, 0, 0, + 0, 0, 632, 0, 0, 0, 0, 3413, 0, 5875, + 0, 6019, 0, 1526, 629, 0, 0, 0, 0, 1551, + 187, 0, 0, 632, 0, 0, 0, 0, 0, 0, + 1556, 0, 0, 0, 187, 0, 0, 0, 0, 0, + 0, 3290, 0, 1029, 0, 0, 0, 0, 1789, 843, + 949, 929, 0, 929, 0, 35, 929, 0, 0, 0, + 3889, 0, 0, 976, 0, 0, 0, 0, 1087, 1529, + 929, 0, 0, 0, 0, 1552, 929, 0, 1530, 3952, + 0, 0, 1553, 6068, 6069, 1554, 2771, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1532, 0, + 630, 1657, 3413, 632, 0, 1558, 0, 1533, 2063, 940, + 0, 1534, 1555, 976, 0, 1559, 940, 0, 0, 940, + 0, 0, 0, 0, 1560, 0, 0, 0, 0, 0, + 0, 3890, 0, 0, 0, 929, 1561, 0, 0, 0, + 632, 0, 0, 0, 0, 0, 5786, 0, 1556, 0, + 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 632, 0, 0, 1535, 0, 0, 0, + 3891, 0, 0, 632, 629, 1685, 949, 0, 1563, 1564, + 0, 0, 0, 0, 0, 0, 0, 0, 843, 632, + 0, 0, 0, 0, 0, 0, 0, 1231, 0, 0, + 0, 0, 949, 3413, 0, 0, 3952, 0, 3952, 0, + 1686, 0, 0, 0, 0, 0, 0, 1353, 1353, 1657, + 843, 806, 0, 1558, 0, 806, 0, 0, 0, 0, + 0, 0, 0, 1559, 0, 0, 0, 0, 0, 843, + 0, 0, 1560, 632, 843, 6042, 0, 3406, 0, 187, + 1353, 0, 0, 632, 1561, 0, 0, 0, 0, 0, + 0, 632, 632, 0, 0, 0, 0, 632, 0, 629, + 6066, 191, 0, 0, 0, 0, 0, 772, 6063, 1566, + 0, 6064, 6065, 0, 0, 0, 632, 632, 0, 0, + 0, 0, 0, 2751, 0, 1353, 1563, 1564, 0, 0, + 0, 0, 0, 772, 0, 0, 0, 0, 0, 843, + 6127, 0, 0, 0, 0, 0, 0, 772, 0, 0, + 949, 0, 843, 0, 3887, 0, 0, 0, 2752, 772, + 0, 0, 0, 6228, 6229, 0, 0, 843, 0, 187, + 0, 0, 0, 632, 0, 0, 0, 0, 1518, 632, + 0, 0, 0, 3413, 0, 0, 843, 0, 0, 0, + 0, 929, 929, 6066, 191, 0, 0, 632, 632, 0, + 629, 6063, 0, 0, 6064, 6065, 0, 0, 0, 0, + 0, 0, 632, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 806, 806, 0, 632, 1566, 0, 0, + 0, 0, 0, 0, 0, 1198, 1199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1353, 1353, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 630, 632, 929, 0, 0, 0, 940, -2686, 0, 976, + 940, 0, 940, 3413, 1520, 0, 0, 929, 0, 3413, + 0, 632, 0, 0, 0, 0, 939, 0, 1789, 0, + 0, 0, 0, 0, 0, 6066, 191, 0, 0, 0, + 0, 843, 0, 6063, 0, 0, 6064, 6065, 929, 929, + 0, 1521, 0, 0, 0, 0, 0, 0, 0, 0, + 632, 632, 0, 772, 0, 632, 0, 0, 0, 632, + 843, 843, 843, 1789, 929, 0, 630, 0, 630, 630, + 0, 632, 632, 0, 0, 0, 0, 0, 0, 3888, + 629, 1789, 0, 0, 1522, 0, 0, 0, 939, 939, + 0, 0, 0, 0, 0, 0, 0, -2686, 0, 0, + 0, 0, 929, 0, 929, 929, 772, 2073, 0, 0, + 2074, 3413, 0, 0, 2075, 2076, 2077, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1524, 0, 0, 0, + 0, 0, 0, 0, 2579, 187, 0, 1353, 0, 0, + 0, 0, 0, 0, 2580, 0, 0, 0, -2686, 0, + 0, 2581, 0, 0, 0, 0, 0, 0, 1526, 0, + 187, -2686, 0, 1972, 0, 1972, 0, -2686, 0, 843, + 629, 782, 0, -2686, 0, 0, 629, 2582, 0, -2686, + 0, 0, -2686, 0, 0, 0, -2686, 0, 0, 0, + 0, 0, 0, 0, 6131, 2008, 0, 843, 0, 0, + 35, 2014, 0, 0, 0, 1528, 0, 0, 3234, 0, + 0, 0, 0, 0, 1529, 1353, -2686, 0, 0, 0, + 0, 0, 0, 1530, 0, 0, 3256, 3256, 3256, 3256, + 0, 2771, 3256, 3256, 3256, 3256, 3256, 3256, 3256, 3256, + 3256, 3256, -2686, 1532, 0, 0, 0, 0, 0, 0, + 1353, 0, 1533, 6126, 0, 0, 1534, 0, 6167, 0, + 4673, 0, 0, 0, 0, 0, 0, 3531, 0, 0, + 0, 0, 0, 3539, 0, 0, 3890, 0, 629, 1353, + 1353, 1353, 0, 1353, 0, 0, 0, 0, 0, 0, + 0, -2686, 2583, 0, -2686, 0, 0, 2584, 3256, 3256, + -2686, 0, 0, 1353, 0, 0, 0, 0, 0, 0, + 0, 1535, 0, 0, 3572, 3891, 0, 0, 6167, 0, + 2585, 2264, 0, 0, 0, 0, 6216, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 939, 939, + 0, 2586, 0, 4734, 843, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 187, 0, -2686, 0, 0, + 772, 0, 1353, 0, 0, 0, 772, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2322, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2587, 5284, 5285, 2588, + 0, 0, 5288, 5289, 0, 0, 0, 0, 1353, 0, + 0, 0, 1353, 1353, 787, 0, 0, 0, 0, 0, + 0, 0, 3952, 843, 843, 843, 2667, 0, 1353, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -2686, 0, 1518, 0, 0, 0, 0, 0, + 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -2686, 0, -2686, -2686, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, + 0, 0, 0, 0, 0, 0, 2759, 0, 0, 2589, + -2686, 806, 0, 0, 929, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 843, 2787, 0, + -2686, 0, 0, -2686, -2686, -2686, 843, 0, 0, 929, + 0, 0, 0, 3795, 0, 0, 0, 0, 0, 2073, + 0, 0, 2074, 0, 0, 0, 2075, 2076, 2077, 0, + 1520, 0, 0, 0, 0, 0, 976, 0, 843, 0, + 0, 806, 0, 0, 2855, 2855, 2579, 0, 2855, 0, + 0, 0, 0, 0, 0, 0, 2580, 0, 806, 0, + 0, 843, 0, 2581, 843, 0, 0, 1521, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2513, 0, 0, 0, 0, 929, 0, 0, 2582, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 0, 0, 0, 0, 843, 0, 2073, 4014, 0, 2074, + 1522, 0, 0, 2075, 2076, 2077, 929, 929, 929, 929, + 843, 0, 0, 0, 0, 0, 0, 0, 0, 3256, + 0, 0, 0, 2579, 843, 0, 0, 0, 0, 0, + 0, 0, 0, 2580, 0, 1353, 1353, 1353, 1523, 0, + 2581, 0, 1524, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2582, 0, 0, 0, + 0, 0, 0, 1525, 1526, 0, 0, 0, 0, 0, + 0, 0, 0, 3967, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2583, 0, 0, 0, 3977, 2584, + 0, 0, 0, 3982, 0, 0, 0, 0, 0, 0, + 0, 0, 1527, 0, 0, 0, 35, 0, 0, 0, + 0, 1528, 2585, 2264, 0, 0, 0, 0, 0, 0, + 1529, 0, 4003, 0, 843, 0, 0, 0, 0, 1530, + 0, 0, 0, 2586, 0, 843, 0, 1531, 0, 0, + 0, 0, 0, 929, 929, 0, 0, 0, 0, 1532, + 0, 0, 0, 0, 0, 0, 0, 0, 1533, 929, + 0, 0, 1534, 0, 0, 0, 0, 0, 772, 0, + 0, 2583, 0, 0, 2322, 0, 2584, 843, 2855, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2587, 0, + 0, 2588, 0, 929, 929, 929, 929, 0, 0, 2585, + 2264, 0, 843, 0, 0, 0, 0, 0, 0, 843, + 0, 0, 3068, 0, 0, 0, 0, 1535, 0, 0, + 2586, 0, 0, 0, 891, 0, 2073, 630, 0, 2074, + 630, 0, 5147, 2075, 2076, 2077, 0, 0, 0, 0, + 940, 940, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 976, 976, 2579, 0, 940, 0, 0, 940, 0, + 0, 2322, 0, 2580, 0, 0, 0, 0, 0, 0, + 2581, 0, 0, 929, 929, 2587, 0, 0, 2588, 0, + 929, 2589, 843, 2073, 0, 0, 2074, 0, 0, 0, + 2075, 2076, 2077, 0, 0, 0, 2582, 0, 0, 1972, + 0, 0, 0, 0, 0, 0, 929, 0, 940, 0, + 2579, 3151, 940, 940, 0, 843, 843, 0, 929, 0, + 2580, 0, 0, 0, 0, 843, 0, 2581, 0, 0, + 0, 0, 843, 0, 0, 843, 3068, 0, 0, 782, + 0, 0, 782, 3188, 0, 0, 0, 1353, 0, 1353, + 0, 0, 0, 2582, 1353, 1353, 0, 0, 0, 0, + 0, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 2589, 0, + 1353, 0, 1353, 976, 1353, 1353, 1353, 1353, 1353, 1353, + 0, 0, 1353, 2513, 1353, 1353, 0, 0, 1353, 0, + 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, + 2522, 0, 0, 0, 0, 1353, 1353, 1353, 4028, 0, + 0, 2583, 0, 0, 0, 0, 2584, 0, 0, 0, + 0, 0, 0, 1353, 0, 0, 0, 4247, 0, 0, + 0, 0, 0, 0, 0, 4250, 0, 0, 0, 2585, + 2264, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, + 2586, 0, 0, 929, 0, 0, 698, 0, 2583, 0, + 2513, 0, 0, 2584, 0, 786, 0, 0, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, + 0, 0, 4026, 0, 0, 4027, 2585, 2264, 0, 0, + 0, 2322, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2587, 0, 2586, 2588, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4333, 0, 4335, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1908, 0, 0, 0, 0, + 0, 1912, -136, 0, 0, 0, 0, 0, 2322, 0, + 0, 1923, 0, 0, 0, 1926, 0, 1353, 0, 1929, + 0, 1931, 2587, 0, 1, 2588, 0, 1939, 0, 0, + 0, 0, 0, 1945, 0, 2, 1948, 3, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 0, 0, 2589, 0, + 0, 0, 0, 0, 1353, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4397, 7, 0, 8, + 9, 0, 0, 0, 0, 0, 10, 0, 11, 0, + 0, 5909, 0, 0, 0, 0, 0, 0, 0, 0, + 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2589, 0, 1353, 4419, 14, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, + 0, 3256, 0, 18, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, + 2513, 0, 0, 0, 0, 0, 22, 0, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, + 0, 0, 0, 0, 23, 4079, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3256, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3572, 0, 0, 2513, 0, 0, + 0, 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, 3285, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, + 0, 0, 0, 0, 27, 0, 0, 0, 4561, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1548, 0, + 0, 0, 0, 0, 1549, 0, 29, 0, 0, 0, + 0, 0, 0, 0, 1353, 1353, 1353, 1353, 1353, 1353, + 1353, 1353, 1353, 0, 1353, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 843, 1353, 0, 0, 1353, 0, + 0, 0, 0, 0, 0, 843, 0, 0, 891, 1551, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4618, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 32, 33, 0, 34, 891, 0, 0, 843, 35, 1353, + 0, 0, 929, 1353, 36, 0, 1353, 37, 1353, 0, + 0, 1353, 0, 0, 38, 1353, 0, 0, 0, 0, + 0, 39, 40, 0, 4644, 1552, 0, 0, 0, 41, + 0, 0, 1553, 42, 0, 1554, 0, 0, 3417, 2073, + 0, 0, 2074, 43, 843, 843, 2075, 2076, 2077, 4665, + 0, 0, 0, 0, 0, 1353, 0, 0, 0, 44, + 0, 0, 1555, 0, 1353, 1353, 2579, 0, 0, 0, + 0, 0, 0, 0, 3256, 0, 2580, 0, 843, 45, + 0, 0, 0, 2581, 0, 0, 3461, 0, 3466, 0, + 46, 0, 0, 0, 0, 0, 47, 0, 1556, 0, + 0, 48, 0, 0, 3256, 0, 0, 0, 0, 2582, + 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, + 782, 0, 0, 0, 0, 0, 891, 0, 50, 0, + 51, 52, 53, 54, 55, 0, 0, 1353, 0, 6193, + 0, 0, 0, 0, 0, 0, 0, 56, 630, 0, + -136, 940, 976, 940, 940, 0, 0, 929, 0, 1557, + 843, 0, 0, 1558, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1559, 1051, 0, 0, 0, 0, 0, + 0, 806, 1560, 0, 6193, 0, 0, 0, 0, 1548, + 0, 0, 2787, 0, 1561, 1549, 0, 0, 0, 0, + 3575, 843, 6193, 0, 0, 0, 0, 3586, 0, 0, + 1655, 0, 0, 0, 2583, 0, 843, 0, 0, 2584, + 0, 0, 0, 0, 1119, 698, 0, 0, 0, 0, + 0, 0, 0, 2829, 0, 0, 1563, 1564, 843, 0, + 1551, 0, 2585, 2264, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, + 0, 0, 0, 2586, 0, 0, 0, 0, 2830, 1704, + 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, + 0, 0, 0, 0, 1656, 929, 1552, 0, 929, 891, + 0, 0, 0, 1553, 2322, 0, 1554, 0, 0, 0, + 0, 0, 0, 0, 0, 891, 0, 0, 2587, 0, + 1218, 2588, 0, 0, 843, 843, 3256, 0, 0, 0, + 0, 0, 0, 1555, 0, 0, 0, 1566, 0, 3729, + 1240, 3732, 3734, 0, 0, 0, 0, 0, 1356, 0, + 0, 1365, 1119, 1369, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1556, + 0, 0, 1353, 1353, 1353, 0, 0, 0, 1353, 0, + 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, + 0, 0, 0, 0, 0, 2073, 0, 0, 2074, 929, + 0, 0, 2075, 2076, 2077, 1353, 0, 929, 0, 0, + 3099, 2589, 0, 0, 0, 0, 0, 0, 3106, 0, + 2787, 0, 2579, 0, 0, 843, 0, 0, 0, 0, + 0, 3834, 2580, 0, 782, 0, 0, 0, 0, 2581, + 1657, 0, 0, 0, 1558, 0, 929, 3845, 0, 0, + 0, 0, 0, 0, 1559, 0, 0, 3729, 5004, 0, + 0, 0, 0, 1560, 0, 2582, 0, 929, 0, 3867, + 0, 0, 891, 0, 0, 1561, 0, 0, 0, 0, + 0, 1548, 0, 0, 0, 0, 0, 1549, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5989, 0, 0, + 0, 0, 1655, 0, 0, 0, 0, 0, 929, 0, + 929, 0, 929, 2513, 1658, 0, 0, 1563, 1564, 0, + 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, + 2522, 0, 1551, 0, 0, 4433, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1972, 0, 0, 0, 1659, + 0, 0, 0, 0, 1119, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2583, 0, 0, 0, 2073, 2584, 1656, 2074, 1552, 0, + 0, 2075, 2076, 2077, 0, 1553, 0, 0, 1554, 630, + 929, 0, 940, 0, 940, 940, 0, 929, 2585, 2264, + 0, 2579, 0, 0, 1353, 0, 0, 0, 1566, 1353, + 0, 2580, 0, 0, 1518, 1555, 0, 0, 2581, 2586, + 3256, 3256, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2582, 0, 0, 0, 0, 1519, + 0, 1556, 1353, 1353, 1353, 0, 0, 1353, 0, 0, + 2322, 0, 0, 0, 0, 1353, 1353, 1353, 1353, 0, + 0, 0, 0, 0, 2587, 0, 0, 2588, 0, 0, + 0, 1353, 0, 0, 1353, 0, 1353, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1353, 1353, + 0, 0, 1353, 0, 0, 0, 0, 0, 0, 0, + 1520, 0, 0, 0, 0, 0, 0, 2688, 0, 0, + 0, 976, 1657, 1353, 0, 1353, 1558, 1353, 0, 0, + 0, 0, 0, 0, 0, 1997, 1559, 0, 0, 0, + 0, 1518, 0, 0, 0, 1560, 1353, 1521, 0, 4125, + 0, 0, 0, 843, 0, 0, 0, 1561, 0, 2583, + 0, 0, 1119, 0, 2584, 0, 0, 2589, 0, 0, + 0, 0, 0, 0, 843, 0, 1519, 0, 0, 5247, + 0, 0, 0, 0, 2688, 0, 0, 2585, 2264, 0, + 1522, 0, 0, 0, 0, 0, 3700, 0, 0, 1563, + 1564, 0, 630, 0, 0, 3417, 4162, 0, 2586, 0, + 4162, 4176, 4162, 0, 0, 0, 0, 0, 1353, 5270, + 0, 0, 0, 1353, 0, 891, 0, 0, 0, 0, + 0, 3701, 1524, 0, 0, 0, 0, 1520, 1353, 0, + 0, 5286, 0, 0, 2068, 0, 0, 0, 0, 2322, + 0, 0, 3417, 2071, 0, 0, 4207, 0, 891, 4210, + 3417, 0, 3466, 2587, 1526, 0, 2588, 0, 2539, 2513, + 0, 0, 0, 0, 1521, 0, 0, 0, 2514, 2515, + 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, 1119, + 0, 4619, 2558, 2559, 0, 0, 0, 1119, 1119, 0, + 1566, 0, 0, 1353, 0, 0, 35, 0, 2770, 0, + 0, 1528, 0, 0, 5314, 0, 0, 1522, 0, 0, + 1529, 0, 0, 0, 0, 0, 0, 0, 0, 1530, + 0, 0, 0, 929, 929, 0, 0, 2771, 1704, 1704, + 1704, 0, 0, 0, 0, 0, 0, 0, 0, 1532, + 0, 0, 0, 0, 0, 1523, 2589, 0, 1533, 1524, + 0, 0, 1534, 0, 0, 0, 0, 699, 0, 0, + 0, 0, 3189, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1548, 0, 0, 0, 0, 0, 1549, + 1589, 1526, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1535, 0, 0, + 0, 0, 0, 702, 3190, 0, 0, 0, 0, 1590, + 0, 0, 0, 35, 1551, 5398, 0, 0, 1528, 703, + 0, 843, 0, 0, 0, 0, 0, 1529, 0, 0, + 891, 2855, 0, 0, 0, 0, 1530, 1034, 2513, 0, + 3371, 891, 0, 0, 1591, 0, 0, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 1532, 891, 0, 0, + 4686, 3191, 0, 0, 0, 1533, 0, 0, 0, 1534, + 1552, 0, 706, 0, 0, 0, 0, 1553, 0, 0, + 1554, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, + 3192, 0, 0, 0, 0, 0, 0, 1555, 0, 0, + 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1535, 0, 891, 1037, 0, 891, + 891, 0, 2896, 0, 0, 0, 1353, 0, 0, 0, + 2904, 0, 1353, 1556, 0, 0, 0, 0, 0, 0, + 0, 4397, 0, 929, 0, 0, 0, 0, 3193, 0, + 891, 891, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 843, 843, 843, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, + 0, 0, 0, 0, 1557, 0, 0, 0, 1558, 0, + 0, 1353, 0, 0, 0, 0, 0, 0, 1559, 0, + 0, 0, 0, 0, 0, 0, 0, 1560, 0, 1972, + 843, 843, 0, 0, 0, 843, 0, 0, 0, 1561, + 0, 0, 0, 0, 0, 213, 3194, 843, 1704, 717, + 0, 0, 0, 0, 0, 0, 0, 1704, 0, 0, + 1704, 0, 0, 0, 0, 2073, 0, 0, 2074, 0, + 0, 0, 2075, 2076, 2077, 0, 1041, 0, 1562, 3195, + 0, 1563, 1564, 0, 0, 0, 721, 891, 0, 0, + 0, 0, 2579, 722, 0, 0, 723, 0, 0, 0, + 0, 0, 2580, 929, 0, 0, 0, 0, 0, 2581, + 0, 0, 0, 1565, 0, 724, 0, 3151, 4583, 0, + 0, 0, 1043, 0, 0, 0, 0, 0, 843, 726, + 0, 0, 1044, 0, 0, 2582, 728, 0, 0, 0, + 0, 843, 0, 0, 0, 3033, 0, 0, 0, 3038, + 0, 3196, 0, 0, 0, 0, 0, 0, 0, 0, + 1353, 0, 0, 0, 0, 0, 0, 0, 1353, 0, + 1353, 0, 0, 0, 0, 0, 0, 733, 0, 0, + 1353, 0, 1566, 0, 1353, 1353, 0, 0, 0, 0, + 1353, 0, 0, 0, 0, 0, 0, 0, 1353, 0, + 1353, 0, 0, 1353, 0, 0, 0, 0, 1353, 1353, + 1353, 1353, 0, 0, 1353, 1353, 1353, 1353, 1353, 1353, + 1353, 1353, 1353, 1353, 0, 0, 0, 1353, 1353, 1353, + 0, 0, 0, 0, 0, 0, 0, 1353, 0, 0, + 0, 0, 1353, 0, 0, 0, 1353, 0, 0, 0, + 2583, 0, 0, 0, 1353, 2584, 0, 1353, 0, 1353, + 0, 0, 1998, 0, 0, 0, 0, 1998, 1998, 0, + 0, 0, 0, 0, 0, 0, 0, 1353, 2585, 2264, + 1353, 1353, 0, 0, 0, 1353, 1353, 0, 0, 0, + 1353, 0, 1353, 4715, 0, 0, 0, 0, 0, 2586, + 0, 843, 843, 843, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3222, + 0, 4162, 4176, 4162, 0, 1353, 4162, 0, 0, 4736, + 0, 0, 0, 3417, 0, 0, 0, 3417, 0, 0, + 2322, 3910, 0, 4751, 0, 0, 3916, 0, 3917, 0, + 0, 0, 0, 0, 2587, 0, 0, 2588, 3923, 0, + 0, 3924, 0, 3925, 3926, 0, 0, 3928, 0, 1353, + 0, 3931, 0, 3932, 0, 0, 3934, 0, 0, 0, + 5825, 0, 0, 0, 3466, 0, 1353, 0, 1548, 0, + 0, 0, 0, 0, 1549, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4799, 1972, 1972, 0, 0, 1972, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1518, 0, 0, 0, 0, 0, 0, 5865, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1551, + 3973, 0, 0, 0, 2787, 4831, 0, 2589, 0, 0, + 0, 0, 0, 0, 0, 0, -136, 1519, 0, 0, + 0, 0, 0, 4854, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 0, 3, 4, 0, 0, 1552, 0, 0, 0, 0, + 0, 0, 1553, 0, 0, 1554, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, 4903, 0, 1520, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 1555, 8, 9, 0, 0, 0, 0, 0, + 10, 0, 11, 0, 0, 0, 0, 0, 0, 2513, + 0, 1704, 0, 0, 12, 1521, 13, 0, 2514, 2515, + 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 1556, 0, + 0, 4793, 4948, 14, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 928, 930, 0, 0, 933, + 0, 16, 0, 17, 0, 0, 0, 18, 1522, 0, + 0, 0, 0, 19, 0, 929, 0, 0, 0, 991, + 0, 20, 0, 21, 0, 0, 1001, 0, 0, 929, + 22, 1353, 0, 0, 0, 0, 0, 0, 843, 0, + 0, 0, 0, 0, 4992, 0, 1523, 0, 23, 1657, + 1524, 0, 0, 1558, 0, 2787, 0, 0, 0, 0, + 0, 0, 0, 1559, 0, 24, 0, 0, 0, 0, + 843, 0, 1560, 0, 0, 3417, 3845, 0, 0, 0, + 0, 1606, 1526, 3729, 1561, 0, 0, 0, 0, 0, + 0, 0, 5041, 0, 0, 0, 0, 0, 0, 0, + 0, 3473, 843, 0, 0, 2688, 3479, 0, 0, 0, + 0, 0, 25, 26, 1353, 1353, 0, 0, 27, 0, + 1607, 0, 0, 3567, 35, 1353, 1563, 1564, 0, 1528, + 0, 0, 28, 0, 0, 0, 1972, 843, 1529, 0, + 0, 0, 0, 0, 0, 0, 0, 1530, 0, 0, + 29, 0, 0, 0, 843, 1608, 0, 0, 1565, 0, + 0, 0, 0, 891, 0, 0, 0, 1532, 0, 891, + 0, 0, 0, 0, 0, 0, 1533, 4242, 0, 0, + 1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 1353, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 1353, + 891, 0, 0, 0, 32, 33, 0, 34, 0, 0, + 0, 0, 35, 1353, 0, 0, 0, 1566, 36, 0, + 0, 37, 0, 0, 0, 1535, 0, 0, 38, 0, + 0, 0, 0, 0, 0, 39, 40, 0, 4292, 0, + 4294, 1353, 0, 41, 1353, 0, 3366, 42, 0, 0, + 0, 0, 1353, 1353, 0, 0, 0, 43, 0, 0, + 1353, 1353, 0, 0, 0, 1353, 0, 0, 0, 0, + 0, 0, 1353, 44, 0, 1353, 1353, 0, 0, 0, + 0, 0, 1353, 0, 0, 0, 843, 843, 843, 843, + 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, + 0, 0, 630, 0, 46, 4162, 0, 0, 0, 3417, + 47, 0, 0, 0, 3417, 48, 0, 3417, 630, 0, + 3729, 0, 5204, 0, 0, 1353, 0, 976, 49, 0, + 0, 0, 0, 0, 0, 0, 1353, 0, 0, 0, + 4207, 0, 0, 0, 1353, 0, 3466, 0, 2073, 0, + 0, 2074, 50, 0, 0, 2075, 2076, 2077, 0, 0, + 0, 782, 0, 0, 1353, 0, 0, 0, 0, 0, + 0, 56, 0, 0, -136, 2579, 0, 1704, 0, 0, + 0, 0, 4396, 0, 1548, 2580, 0, 0, 4403, 0, + 1549, 0, 2581, 0, 0, 1119, 0, 0, 2787, 0, + 0, 0, 5259, 0, 0, 0, 0, 0, 0, 891, + 0, 0, 0, 0, 0, 0, 0, 0, 2582, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1551, 0, 0, 1061, 0, + 1064, 0, 0, 1066, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1369, 0, 0, 1092, 0, 0, + 0, 0, 0, 1096, 0, 0, 0, 1353, 0, 0, + 0, 0, 0, 0, 1353, 0, 0, 0, 0, 0, + 0, 0, 2688, 0, 0, 0, 2688, 0, 0, 0, + 0, 1552, 0, 0, 0, 0, 0, 929, 1553, 0, + 0, 1554, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2073, 929, 0, 2074, 0, 0, 0, 2075, 2076, + 2077, 0, 0, 0, 0, 0, 0, 0, 1555, 0, + 0, 0, 0, 2583, 1369, 0, 0, 0, 2584, 0, + 0, 0, 0, 1353, 0, 0, 0, 0, 2580, 0, + 0, 0, 0, 0, 0, 2581, 0, 0, 1369, 630, + 0, 2585, 2264, 0, 1556, 0, 2787, 0, 0, 0, + 0, 0, 4565, 0, 4567, 1972, 4569, 0, 0, 0, + 0, 2582, 2586, 0, 0, 0, 0, 0, 0, 891, + 3845, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 929, 891, 3867, 0, 0, 0, 891, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2322, 0, 3738, 0, 0, 0, 0, + 0, 843, 0, 0, 0, 1657, 0, 2587, 891, 1558, + 2588, 0, 843, 0, 0, 0, 0, 0, 0, 1559, + 0, 0, 0, 0, 0, 0, 0, 0, 1560, 0, + 0, 0, 3770, 0, 3770, 0, 3770, 3770, 0, 0, + 1561, 3770, 3770, 3770, 0, 3770, 3770, 3770, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2583, 0, 0, 0, + 1353, 2584, 0, 1353, 0, 0, 1353, 1353, 1353, 3745, + 0, 0, 1563, 1564, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2585, 2264, 0, 0, 0, 3847, + 2589, 0, 0, 1353, 1353, 0, 0, 1353, 0, 0, + 0, 0, 0, 0, 3746, 2586, 0, 0, 1580, 1581, + 0, 0, 0, 0, 3875, 0, 0, 0, 1353, 0, + 0, 0, 0, 0, 1353, 0, 0, 0, 3417, 0, + 0, 0, 5204, 0, 0, 1353, 0, 5484, 0, 0, + 0, 0, 0, 0, 0, 0, 2322, 0, 4799, 0, + 0, 1353, 0, 0, 0, 0, 0, 0, 0, 0, + 2587, 0, 4799, 976, 929, 0, 929, 0, 0, 0, + 0, 0, 0, 1566, 0, 0, 0, 0, 0, 1808, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2513, 0, 1820, 0, 0, 0, 0, 0, + 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 2967, 0, 940, 976, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1842, 1843, 0, 0, 0, + 0, 0, 0, 0, 1548, 0, 0, 0, 0, 0, + 1549, 0, 0, 0, 0, 2688, 0, 0, 3479, 0, + 3479, 1880, 0, 2589, 0, 2688, 0, 0, 0, 940, + 0, 2073, 0, 0, 2074, 0, 0, 0, 2075, 2076, + 2077, 4992, 0, 0, 0, 0, 843, 0, 0, 0, + 0, 843, 0, 0, 0, 1551, 0, 0, 2579, 0, + 2787, 1918, 1920, 0, 0, 0, 0, 0, 2580, 0, + 843, 0, 0, 891, 5041, 2581, 0, 5623, 0, 0, + 0, 891, 0, 0, 0, 0, 0, 0, 929, 843, + 4799, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2582, 0, 0, 0, 0, 2688, 0, 0, 0, + 0, 1552, 0, 0, 0, 0, 0, 0, 1553, 0, + 0, 1554, 0, 0, 0, 2513, 1353, 0, 0, 0, + 1353, 0, 1353, 0, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, 0, 0, 0, 1353, 0, 1555, 0, + 0, 0, 0, 630, 0, 0, 1353, 0, 0, 0, + 5692, 0, 0, 0, 0, 0, 0, 1353, 0, 0, + 0, 0, 0, 0, 1353, 0, 891, 0, 891, 0, + 0, 0, 2073, 0, 1556, 2074, 1119, 0, 0, 2075, + 2076, 2077, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, + 0, 0, 0, 0, 0, 0, 2583, 0, 0, 2580, + 0, 2584, 0, 0, 0, 0, 2581, 0, 0, 0, + 0, 0, 0, 0, 0, 1353, 0, 0, 0, 0, + 0, 1353, 1353, 0, 2585, 2264, 929, 929, 929, 929, + 0, 0, 2582, 0, 0, 1657, 0, 0, 0, 1558, + 0, 0, 0, 0, 0, 2586, 0, 0, 0, 1559, + 0, 0, 891, 0, 0, 0, 0, 1353, 1560, 0, + 0, 638, 0, 0, 0, 630, 1548, 687, 638, 0, + 1561, 0, 1549, 739, 0, 638, 0, 0, 0, 1704, + 0, 638, 0, 792, 0, 1704, 2322, 0, 0, 0, + 843, 0, 0, 3417, 891, 0, 0, 0, 0, 0, + 2587, 0, 854, 854, 0, 0, 0, 0, 0, 4260, + 0, 0, 1563, 1564, 0, 0, 0, 1551, 843, 0, + 0, 0, 3479, 0, 0, 0, 1119, 0, 0, 0, + 0, 0, 0, 0, 5083, 0, 0, 5085, 0, 0, + 0, 0, 0, 0, 4261, 0, 1353, 2583, 0, 0, + 0, 0, 2584, 0, 0, 1353, 1353, 1353, 0, 0, + 0, 1972, 0, 0, 0, 3729, 5100, 0, 1353, 0, + 0, 0, 0, 1552, 0, -2896, -2896, 1353, 0, 1353, + 1553, 1353, 5484, 1554, 0, 0, 0, 0, 4799, 0, + 891, 0, 0, 2589, 0, 0, 2586, 0, 1972, 0, + 976, 0, 0, 0, 4308, 0, 0, 0, 0, 1353, + 1555, 0, 3479, 1566, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2769, 0, 0, 891, 0, 0, -2896, 0, 0, + 0, 0, 0, 0, 1972, 1972, 1556, 0, 0, 0, + 0, 2587, 0, 931, 0, 0, 2808, 935, 0, 0, + 0, 0, 4356, 0, 0, 978, 0, 0, 980, 0, + 0, 985, 986, 0, 989, 929, 992, 0, 0, 998, + 0, 1000, 0, 0, 0, 0, 0, 0, 0, 5953, + 0, 0, 0, 0, 0, 2513, 0, 0, 0, 0, + 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, 0, 0, 0, 891, 1657, 0, 0, + 0, 1558, 0, 0, 0, 0, 1353, 0, 0, 0, + 4399, 1559, 0, 2898, 0, 0, 0, 0, 0, 1353, + 1560, 0, 0, 5692, 2589, 0, 0, 0, 0, 1353, + 0, 0, 1561, 0, 0, 0, 0, 0, 3466, 1353, + 891, 0, 0, 2924, 2925, 2926, 2927, 0, 0, 0, + 0, 0, 0, 0, 5246, 940, 3770, 0, 0, 0, + 0, 0, 0, 0, 0, 891, 0, 0, 4430, 4430, + 929, 4318, 0, 0, 1563, 1564, 0, 1972, 4446, 0, + 0, 0, 0, 1119, 0, 1119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5271, 5272, 0, + 0, 0, 2787, 0, 0, 0, 4319, 0, 0, 1353, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4799, + 0, 0, 0, 0, 0, 0, 2513, 940, 940, 6071, + 0, 4501, 0, 1353, 0, 2514, 2515, 2516, 2517, 2518, + 2519, 2520, 2521, 2522, 0, 1972, 1972, 6081, 0, 0, + 0, 0, 1353, 1353, 0, 0, 0, 0, 6087, 0, + 0, 0, 0, 0, 0, 0, 4537, 1119, 0, 0, + 0, 0, 0, 0, 0, 1566, 0, 0, 0, 0, + 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2980, 2981, 5315, 5316, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2998, 0, 0, 5953, + 929, 929, 0, 0, 0, 4799, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2688, 0, 0, 0, 0, + 0, 0, 0, 630, 1353, 0, 0, 0, 0, 0, + 3041, 3042, 3043, 3044, 0, 0, 0, 0, 1353, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1353, 2073, 0, 0, 2074, 0, 0, 0, + 2075, 2076, 2077, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2579, 0, 0, 0, 0, 6165, 6166, 630, 6169, 5692, + 2580, 0, 3466, 0, 0, 0, 0, 2581, 0, 0, + 0, 0, 0, 0, 929, 3479, 0, 4799, 0, 0, + 0, 3118, 5409, 0, 0, 5411, 5412, 3122, 0, 0, + 0, 0, 0, 2582, 0, 0, 0, 4207, 0, 0, + 0, 3479, 0, 0, 0, 5417, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1353, 630, 0, 0, + 0, 1353, 4688, 0, 0, 630, 2073, 0, 0, 2074, + 0, 0, 0, 2075, 2076, 2077, 1028, 940, 940, 0, + 0, 6231, 0, 0, 0, 0, 0, 1065, 0, 0, + 0, 1069, 0, 2579, 0, 0, 0, 0, 1082, 1083, + 0, 0, 1089, 2580, 1093, 1094, 0, 0, 0, 0, + 2581, 0, 0, 0, 0, 0, 0, 0, 0, 1116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2582, 1129, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2583, 0, + 0, 941, 951, 2584, 0, 0, 0, 0, 1157, 941, + 1159, 951, 941, 0, 0, 0, 0, 0, 0, 0, + 1175, 0, 0, 0, 0, 951, 2585, 2264, 0, 0, + 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2586, 0, 0, + 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, + 3300, 0, 0, 0, 0, 0, 2073, 0, 0, 2074, + 0, 0, 0, 2075, 2076, 2077, 0, 0, 0, 0, + 0, 3479, 0, 0, 0, 0, 2688, 0, 2322, 0, + 0, 0, 0, 2579, 0, 0, 0, 0, 0, 0, + 0, 2583, 2587, 2580, 0, 2588, 2584, 0, 0, 0, + 2581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2585, + 2264, 0, 0, 0, 854, 0, 2582, 0, 0, 0, + 0, 4446, 0, 0, 0, 0, 0, 0, 0, 0, + 2586, 0, 0, 0, 0, 0, 0, 2073, 0, 0, + 2074, 0, 0, 0, 2075, 2076, 2077, 4893, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4908, 0, 2579, 0, 4909, 0, 4910, 0, + 0, 2322, 0, 0, 2580, 2589, 0, 0, 0, 0, + 0, 2581, 0, 0, 0, 2587, 0, 0, 2588, 0, + 0, 0, 0, 0, 0, 0, 0, 1509, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2582, 0, 0, + 0, 0, 0, 0, 4950, 0, 0, 0, 891, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3770, 2583, 0, 0, 0, 3770, 2584, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2585, + 2264, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1688, 0, 5716, 0, 0, 0, 2513, 2589, 0, + 2586, 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 1809, 0, 0, 5021, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1821, 0, 1822, 0, 0, 0, 0, 0, 0, + 0, 2322, 2583, 1825, 0, 0, 5752, 2584, 0, 0, + 1835, 0, 0, 0, 5055, 2587, 0, 4446, 2588, 0, + 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, + 2585, 2264, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2586, 0, 1887, 0, 1889, 0, 0, 0, 0, + 2513, 0, 0, 0, 0, 891, 0, 0, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, + 0, 0, 5129, 0, 0, 0, 0, 891, 0, 0, + 0, 0, 2322, 5104, 5104, 5104, 5104, 951, 5104, 5104, + 5104, 5104, 5104, 0, 0, 0, 2587, 0, 2589, 2588, + 0, 0, 0, 0, 0, 0, 951, 0, 0, 5841, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 638, + 0, 638, 0, 638, 951, 638, 0, 638, 638, 638, + 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 1993, 0, 0, 0, + 891, 0, 0, 0, 941, 951, 0, 0, 0, 3300, + 0, 941, 0, 951, 941, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 2589, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2513, 0, 0, 5181, 0, 5183, 0, 0, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2073, 0, + 0, 2074, 5168, 0, 0, 2075, 2076, 2077, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 2579, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2580, 0, 0, 0, 0, + 0, 0, 2581, 0, 0, 0, 0, 0, 951, 5396, + 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2582, 2073, + 0, 2513, 2074, 951, 0, 0, 2075, 2076, 2077, 0, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 0, 0, 0, 5172, 0, 0, 2579, 0, 0, 0, + 0, 0, 0, 0, 3540, 0, 2580, 0, 854, 0, + 0, 0, 0, 2581, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 0, 0, 0, 0, 2073, 2582, + 0, 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2579, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2580, 0, 0, 0, 0, + 0, 0, 2581, 2583, 0, 0, 0, 891, 2584, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5312, 5313, 0, 0, 2582, 0, + 0, 2585, 2264, 0, 0, 0, 0, 3770, 0, 3770, + 3770, 3770, 0, 0, 0, 0, 0, 0, 2749, 0, + 0, 0, 2586, 6097, 0, 0, 0, 0, 0, 0, + 0, 0, 3680, 1791, 0, 3683, 0, 0, 0, 0, + 951, 0, 0, 0, 2583, 0, 3479, 0, 0, 2584, + 0, 941, 0, 0, 0, 941, 0, 941, 0, 0, + 0, 0, 0, 2322, 0, 0, 0, 0, 0, 0, + 0, 0, 2585, 2264, 0, 5364, 0, 2587, 0, 0, + 2588, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2841, 0, 0, 2586, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2583, 5392, 0, 0, 0, 2584, 0, + 0, 0, 0, 3774, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2322, 0, 3787, 0, 0, 0, + 0, 2585, 2264, 0, 3796, 0, 0, 0, 2587, 0, + 0, 2588, 0, 0, 0, 0, 0, 5104, 0, 0, + 0, 0, 2586, 0, 951, 0, 3479, 0, 0, 0, + 2589, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3840, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2322, 3864, 0, 2073, 0, 0, 2074, + 0, 0, 0, 2075, 2076, 2077, 0, 2587, 0, 0, + 2588, 0, 0, 0, 0, 951, 0, 0, 0, 0, + 0, 0, 0, 2579, 0, 0, 951, 0, 0, 0, + 0, 2589, 0, 2580, 0, 0, 0, 3919, 0, 3921, + 2581, 0, 0, 951, 0, 0, 0, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2513, 0, 0, 0, 2582, 0, 0, 0, + 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 2073, 0, 5424, 2074, 0, 0, 891, 2075, + 2076, 2077, 0, 891, 891, 0, 2971, 0, 0, 0, + 2589, 0, 0, 0, 0, 0, 0, 0, 0, 2579, + 0, 0, 4446, 0, 0, 0, 0, 0, 0, 2580, + 0, 0, 0, 0, 0, 0, 2581, 3976, 0, 0, + 0, 3007, 0, 2513, 3983, 0, 0, 0, 0, 0, + 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, + 2522, 0, 2582, 0, 0, 5435, 0, 0, 3770, 0, + 0, 0, 0, 0, 0, 0, 0, 5570, 0, 0, + 0, 0, 0, 0, 0, 951, 0, 3072, 0, 0, + 0, 2583, 0, 951, 951, 0, 2584, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3090, 0, 0, + 0, 0, 2513, 0, 0, 5396, 891, 0, 0, 2585, + 2264, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 0, 3110, 5445, 3111, 0, 0, 0, 0, + 2586, 0, 0, 0, 0, 0, 1791, 0, 0, 0, + 3120, 0, 3121, 0, 0, 0, 0, 0, 638, 0, + 638, 0, 638, 0, 638, 891, 638, 0, 0, 0, + 638, 0, 0, 0, 0, 0, 0, 2583, 0, 0, + 0, 2322, 2584, 2073, 0, 0, 2074, 0, 0, 0, + 2075, 2076, 2077, 0, 0, 2587, 0, 0, 2588, 0, + 0, 0, 0, 0, 0, 2585, 2264, 3180, 0, 0, + 2579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2580, 0, 0, 0, 0, 0, 2586, 2581, 2073, 0, + 0, 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2582, 0, 2579, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2580, 0, 2322, 0, 0, + 0, 0, 2581, 0, 0, 0, 0, 0, 0, 0, + 0, 2587, 0, 0, 2588, 0, 0, 0, 2589, 0, + 0, 0, 0, 0, 890, 0, 0, 0, 2582, 0, + 0, 0, 0, 0, 0, 0, 1119, 0, 0, 0, + 5761, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2073, 0, 0, 2074, 0, 0, 0, 2075, + 2076, 2077, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2579, + 0, 0, 0, 0, 881, 0, 0, 0, 0, 2580, + 0, 0, 0, 0, 0, 0, 2581, 0, 2583, 0, + 0, 0, 0, 2584, 2589, 0, 0, 0, 0, 0, + 4248, 4249, 0, 0, 0, 0, 0, 0, 0, 0, + 2513, 0, 2582, 0, 0, 951, 2585, 2264, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, + 0, 0, 5500, 2583, 0, 0, 0, 2586, 2584, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2585, 2264, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2322, 0, + 0, 0, 2586, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2587, 0, 0, 2588, 2513, 0, 0, 0, + 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, + 2519, 2520, 2521, 2522, 0, 0, 0, 0, 5534, 0, + 883, 0, 0, 2322, 0, 1119, 0, 2583, 0, 5915, + 951, 5916, 2584, 0, 0, 5921, 5922, 2587, 0, 0, + 2588, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2585, 2264, 0, 0, 0, + 0, 0, 0, 0, 0, 1791, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2586, 0, 0, 0, + 0, 0, 0, 0, 0, 2589, 0, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, + 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2589, 2587, 0, 0, 2588, 0, 0, 0, 0, 0, + 4420, 0, 0, 0, 0, 941, 941, 0, 951, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 941, 0, 951, 941, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 951, 951, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2513, 0, 1704, + 0, 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, 5536, + 0, 0, 0, 941, 0, 0, 0, 941, 941, 0, + 0, 0, 0, 0, 2589, 0, 0, 0, 0, 0, + 0, 0, 2513, 0, 0, 0, 0, 0, 0, 0, + 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 0, 0, 5575, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2073, 0, 0, + 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, 0, + 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, + 4573, 0, 0, 0, 2579, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2580, 0, 0, 0, 0, 0, + 0, 2581, 0, 0, 0, 0, 2513, 0, 0, 0, + 1791, 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, + 2519, 2520, 2521, 2522, 0, 0, 0, 2582, 5903, 0, + 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, + 2738, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3469, 3470, 0, 2739, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 702, 0, 0, 3485, 3486, 0, 3488, 3489, 0, + 0, 0, 3492, 3493, 0, 0, 0, 703, 0, 0, + 0, 0, 0, 6194, 0, 0, 2539, 3504, 0, 0, + 0, 0, 0, 0, 3513, 1034, 0, 0, 3516, 3517, + 0, 0, 3520, 3521, 0, 0, 0, 0, 0, 3526, + 0, 0, 2583, 0, 0, 0, 0, 2584, 890, 2740, + 0, 3541, 0, 0, 0, 0, 0, 0, 6194, 0, + 706, 0, 0, 3558, 0, 0, 0, 0, 3560, 707, + 2585, 2264, 0, 0, 890, 0, 6194, 0, 0, 5181, + 0, 0, 708, 3566, 0, 0, 0, 0, 2741, 0, + 0, 2586, 3573, 0, 0, 3577, 0, 3579, 3582, 3584, + 0, 0, 0, 0, 3592, 3595, 0, 0, 881, 0, + 0, 0, 0, 0, 3608, 1037, 0, 0, 0, 0, + 3618, 0, 0, 0, 3621, 0, 0, 0, 0, 0, + 0, 0, 2322, 0, 881, 0, 3631, 3632, 0, 0, + 0, 3637, 0, 0, 0, 0, 2587, 3646, 3647, 2588, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3656, 0, 0, 3657, 0, 0, 0, 712, 0, + 0, 3669, 3670, 0, 0, 0, 0, 3674, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3681, + 0, 0, 3684, 0, 0, 0, 0, 3687, 0, 0, + 0, 0, 0, 3690, 3691, 2073, 0, 0, 2074, 2742, + 0, 3697, 2075, 2076, 2077, 3699, 890, 0, 0, 3706, + 3707, 3708, 3709, 0, 3711, 0, 0, 0, 0, 0, + 0, 0, 2579, 0, 0, 0, 0, 3736, 3737, 2589, + 3739, 0, 2580, 213, 2743, 0, 0, 717, 0, 2581, + 0, 3748, 3749, 3750, 883, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1041, 2582, 881, 2744, 0, 0, + 883, 0, 0, 0, 721, 0, 0, 0, 0, 0, + 0, 722, 0, 0, 723, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3802, 0, + 0, 0, 0, 724, 0, 0, 3826, 0, 0, 0, + 1043, 0, 0, 0, 0, 0, 0, 726, 0, 0, + 1044, 0, 0, 0, 728, 3838, 0, 2073, 0, 0, + 2074, 2513, 2745, 0, 2075, 2076, 2077, 0, 0, 2746, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 0, 0, 0, 5925, 2579, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2580, 733, 0, 0, 890, 0, + 0, 2581, 4972, 0, 0, 3906, 0, 0, 0, 890, + 2583, 0, 0, 0, 0, 2584, 4974, 0, 0, 0, + 0, 0, 0, 0, 3920, 890, 3922, 2582, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2585, 2264, + 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, + 0, 1791, 0, 0, 0, 0, 0, 0, 881, 2586, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 881, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2322, 0, 0, 0, 0, 0, 951, 0, 0, 0, + 0, 0, 0, 0, 2587, 0, 0, 2588, 0, 0, + 0, 3984, 0, 0, 951, 0, 0, 0, 951, 0, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, + 0, 951, 2583, 0, 0, 0, 0, 2584, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2073, 0, 951, + 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, 0, + 2585, 2264, 0, 0, 0, 0, 941, 0, 941, 941, + 0, 0, 890, 0, 2579, 0, 0, 0, 0, 0, + 0, 2586, 0, 951, 2580, 0, 0, 0, 0, 0, + 0, 2581, 0, 0, 883, 0, 0, 2589, 0, 0, + 0, 0, 0, 951, 951, 883, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2582, 0, 0, + 0, 883, 2322, 0, 884, 0, 0, 0, 0, 0, + 0, 0, 881, 0, 1791, 951, 2587, 0, 1791, 2588, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 1791, 0, 0, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 951, + 0, 0, 951, 0, 0, 0, 0, 950, 951, 2513, + 0, 0, 0, 0, 0, 0, 950, 0, 2514, 2515, + 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 951, 0, + 950, 6113, 0, 0, 951, 0, 2557, 0, 0, 2589, + 0, 951, 2583, 0, 0, 0, 0, 2584, 0, 0, + 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 951, 0, + 2585, 2264, 0, 1791, 0, 0, 0, 0, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, + 0, 2586, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4233, 0, + 0, 0, 2322, 0, 0, 0, 0, 890, 0, 1791, + 0, 2513, 0, 0, 0, 0, 2587, 0, 4245, 2588, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 0, 0, 0, 6130, 0, 4252, 0, 0, 0, 4252, + 0, 0, 0, 0, 4263, 4264, 4265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5307, 0, 0, 881, 0, 0, + 0, 0, 0, 0, 890, 0, 0, 0, 0, 5311, + 4295, 4296, 4297, 4298, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2589, + 4314, 0, 0, 0, 0, 890, 0, 0, 4317, 0, + 4321, 4322, 4323, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 881, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 951, 0, 1791, 0, 0, 0, + 5369, 0, 0, 0, 0, 881, 0, 0, 0, 0, + 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 0, 941, 0, 941, + 941, 0, 0, 0, 0, 0, 0, 0, 881, 0, + 0, 2513, 0, 883, 0, 0, 0, 0, 0, 0, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 0, 0, 0, 6171, 0, 0, 4407, 0, 0, 0, + 0, 0, 0, 0, 0, 4413, 0, 0, 0, 0, + 0, 0, 699, 0, 0, 0, 0, 1030, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4423, 4424, 0, 0, 0, 4425, 0, 0, 0, + 883, 1791, 0, 0, 0, 0, 0, 1791, 0, 0, + 0, 0, 0, 0, 0, 1031, 0, 0, 4467, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 702, 1032, + 0, 0, 950, 0, 0, 0, 0, 0, 0, 0, + 1033, 883, 0, 0, 703, 0, 0, 0, 0, 0, + 0, 950, 0, 0, 0, 0, 0, 950, 0, 0, + 890, 0, 1034, 0, 0, 0, 0, 0, 0, 950, + 4504, 890, 0, 0, 883, 4510, 0, 0, 0, 0, + 0, 4516, 0, 0, 0, 950, 1035, 890, 0, 0, + 0, 5506, 951, 5508, 0, 0, 0, 706, 0, 0, + 950, 0, 0, 0, 0, 0, 707, 0, 950, 0, + 0, 4555, 0, 0, 0, 0, 0, 0, 0, 708, + 881, 0, 950, 0, 0, 1036, 0, 0, 0, 0, + 0, 881, 950, 0, 0, 0, 0, 0, 0, 0, + 4570, 890, 4571, 0, 0, 0, 0, 881, 0, 0, + 0, 0, 1037, 0, 0, 0, 890, 0, 0, 890, + 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, + 0, 0, 0, 1038, 0, 950, 0, 0, 0, 0, + 890, 890, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 881, 0, 0, 884, 712, 0, 0, 0, 0, + 0, 0, 0, 950, 0, 0, 881, 0, 0, 881, + 881, 0, 951, 951, 0, 0, 0, 0, 0, 0, + 0, 0, 2073, 0, 0, 2074, 0, 0, 950, 2075, + 2076, 2077, 0, 0, 0, 5635, 1039, 0, 0, 951, + 881, 881, 951, 0, 0, 0, 0, 0, 0, 2579, + 0, 0, 0, 3424, 0, 0, 883, 0, 0, 2580, + 715, 0, 0, 0, 0, 0, 2581, 883, 0, 0, + 213, 1040, 0, 0, 717, 0, 0, 0, 886, 0, + 0, 0, 0, 883, 0, 0, 0, 0, 950, 0, + 0, 0, 2582, 0, 0, 0, 0, 0, 0, 0, + 0, 1041, 0, 0, 1042, 0, 0, 0, 720, 0, + 0, 721, 0, 0, 1791, 1791, 1791, 890, 722, 0, + 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 884, 883, 0, 951, + 724, 0, 0, 3425, 0, 0, 0, 1043, 0, 0, + 0, 0, 883, 0, 726, 883, 883, 1044, 951, 0, + 0, 728, 0, 0, 0, 0, 0, 0, 0, 1045, + 0, 730, 0, 0, 0, 0, 1046, 881, 0, 0, + 951, 0, 0, 0, 0, 0, 883, 883, 0, 0, + 0, 0, 0, 0, 5748, 0, 5750, 0, 1790, 0, + 0, 0, 733, 0, 0, 950, 0, 2583, 0, 0, + 0, 0, 2584, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2585, 2264, 0, 0, 0, + 0, 4803, 0, 0, 4810, 0, 4811, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2586, 0, 0, 4818, + 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, + 0, 4824, 0, 0, 0, 4827, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4853, 0, 0, 2322, 884, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, + 0, 2587, 4857, 1791, 2588, 0, 0, 0, 4861, 951, + 0, 951, 0, 883, 0, 884, 0, 0, 0, 950, + 0, 887, 0, 0, 951, 0, 951, 0, 0, 0, + 0, 0, 0, 4896, 0, 0, 0, 4900, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4911, 4912, 4913, 4914, 0, 0, 0, + 0, 0, 0, 4918, 4919, 4920, 4921, 0, 0, 0, + 0, 0, 4923, 4924, 0, 0, 0, 0, 4931, 4932, + 950, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 0, 0, + 0, 950, 0, 951, 2589, 0, 0, 4949, 0, 0, + 0, 4952, 4953, 4954, 4955, 0, 0, 2073, 950, 0, + 2074, 0, 0, 950, 2075, 2076, 2077, 0, 0, 0, + 0, 0, 0, 0, 0, 4252, 0, 0, 0, 0, + 0, 0, 5939, 0, 2579, 951, 0, 0, 0, 0, + 0, 0, 0, 4975, 2580, 0, 0, 0, 0, 0, + 0, 2581, 0, 0, 951, 3426, 0, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 884, 0, 0, 0, 0, 2582, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2513, 0, 0, 0, + 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, + 2519, 2520, 2521, 2522, 0, 0, 0, 0, 0, 5056, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 950, 0, 0, 0, 0, 0, 0, 6024, 950, 950, + 0, 0, 4252, 0, 0, 0, 0, 0, 0, 5081, + 0, 5082, 0, 0, 0, 0, 0, 4057, 0, 0, + 0, 0, 0, 4058, 0, 0, 0, 0, 0, 1791, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5097, + 0, 0, 2583, 0, 0, 0, 0, 2584, 0, 0, + 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2585, 2264, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2073, + 0, 2586, 2074, 0, 0, 0, 2075, 2076, 2077, 0, + 0, 0, 0, 0, 0, 0, 0, 6101, 0, 0, + 0, 0, 0, 0, 0, 0, 2579, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2580, 0, 0, 0, + 0, 0, 2322, 2581, 0, 0, 0, 1092, 1092, 0, + 0, 0, 0, 0, 0, 0, 2587, 0, 0, 2588, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2582, + 0, 890, 0, 0, 0, 890, 890, 0, 0, 0, + 0, 0, 886, 0, 0, 0, 0, 884, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 881, 0, 890, 0, 881, 881, 0, 0, 890, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4059, + 0, 1092, 0, 0, 884, 0, 889, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5248, 5249, 5250, 0, + 0, 1791, 5251, 5252, 5253, 5254, 1791, 0, 1791, 5256, + 890, 0, 0, 0, 2583, 0, 0, 0, 0, 2584, + 0, 0, 0, 881, 0, 884, 0, 0, 0, 881, + 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, + 950, 0, 2585, 2264, 0, 0, 0, 5276, 5277, 5278, + 5279, 5280, 0, 5282, 5283, 0, 0, 0, 884, 0, + 0, 0, 0, 2586, 0, 5292, 5293, 0, 0, 0, + 881, 0, 0, 0, 0, 0, 0, 0, 0, 951, + 886, 2513, 951, 0, 0, 0, 0, 0, 0, 0, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, + 5299, 0, 0, 0, 2322, 0, 0, 883, 0, 0, + 0, 883, 883, 0, 0, 0, 0, 0, 2587, 0, + 0, 2588, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4678, 0, 0, 0, + 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 887, 0, 0, 0, 883, + 0, 0, 951, 951, 0, 883, 0, 0, 0, 0, + 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, + 1790, 887, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 5362, 0, 0, 0, 0, 0, 0, 0, + 0, 2589, 0, 950, 0, 0, 883, 0, 0, 890, + 0, 950, 0, 0, 0, 0, 0, 0, 4679, 950, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, + 884, 0, 0, 886, 0, 0, 0, 0, 0, 0, + 0, 884, 0, 0, 0, 0, 0, 5413, 0, 886, + 0, 0, 0, 950, 950, 0, 0, 884, 0, 881, + 0, 951, 0, 0, 1791, 0, 0, 950, 0, 0, + 0, 0, 890, 0, 0, 0, 890, 0, 0, 5419, + 950, 950, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2513, 0, 0, 0, 0, 0, 0, + 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, + 2522, 884, 0, 887, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 884, 0, 0, 884, + 884, 0, 881, 0, 0, 0, 881, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2073, 0, + 0, 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, + 884, 884, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2073, 638, 2579, 2074, 0, 0, 890, + 2075, 2076, 2077, 0, 0, 2580, 0, 0, 0, 0, + 0, 0, 2581, 0, 890, 0, 0, 0, 0, 890, + 2579, 0, 0, 3993, 0, 883, 886, 0, 0, 0, + 2580, 0, 0, 0, 0, 0, 0, 2581, 2582, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, + 0, 0, 0, 0, 0, 1790, 0, 0, 5523, 881, + 0, 0, 0, 2582, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 881, 0, 0, 5533, 0, 881, + 0, 0, 0, 5539, 5540, 0, 0, 0, 0, 0, + 0, 0, 0, 5551, 0, 887, 0, 0, 883, 0, + 5553, 0, 883, 0, 0, 0, 887, 0, 881, 0, + 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, + 951, 0, 887, 0, 0, 0, 0, 5979, 0, 0, + 0, 0, 0, 0, 0, 5605, 5606, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5614, 0, + 5616, 0, 0, 2583, 0, 0, 0, 0, 2584, 0, + 0, 0, 0, 0, 951, 5630, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 951, 0, 2583, 0, + 0, 2585, 2264, 2584, 0, 0, 0, 0, 0, 0, + 4252, 0, 0, 0, 0, 0, 0, 0, 5664, 0, + 0, 0, 2586, 0, 0, 883, 2585, 2264, 0, 0, + 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, + 883, 0, 0, 0, 0, 883, 0, 2586, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 889, 0, 0, 2322, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 883, 0, 0, 2587, 0, 0, + 2588, 0, 0, 0, 0, 0, 889, 0, 2322, 0, + 0, 0, 5706, 0, 0, 0, 0, 0, 0, 887, + 0, 886, 2587, 5980, 0, 2588, 0, 0, 0, 1791, + 0, 0, 0, 0, 0, 890, 5726, 0, 890, 0, + 890, 0, 0, 0, 0, 890, 0, 5733, 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, 0, 0, 0, 0, 0, 0, 0, 886, 0, + 2589, 0, 0, 890, 0, 881, 0, 0, 881, 0, + 881, 890, 0, 0, 0, 881, 0, 0, 0, 0, + 0, 0, 0, 0, 5792, 2589, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 890, 0, 0, 886, + 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, + 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, + 0, 881, 886, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4252, 0, 881, 0, 0, 0, + 0, 0, 2513, 0, 0, 0, 890, 0, 890, 0, + 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 0, 0, 0, 0, 0, 2513, 0, 0, + 0, 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, 0, + 0, 883, 0, 0, 883, 0, 883, 0, 0, 0, + 5891, 883, 0, 0, 0, 0, 881, 0, 881, 0, + 0, 951, 0, 951, 5904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2050, 0, 0, 2051, 0, 0, - 0, 2052, 2053, 2054, 0, 0, 0, 0, 0, 887, - 0, 0, 0, 2479, 0, 0, 772, 0, 772, 0, - 2543, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, - 2544, 0, 0, 0, 0, 1337, 0, 2545, 0, 0, - 0, 0, 0, 0, 0, 0, 620, 0, 3082, 936, - 972, 936, 936, 2050, 3086, 925, 2051, 0, 839, 0, - 2052, 2053, 2054, 2546, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3203, 802, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2544, - 2751, 0, 0, 0, 0, 0, 2545, 0, 3517, 839, - 0, 0, 0, 0, 0, 3528, 0, 0, 0, 0, - 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, - 0, 0, 2546, 0, 0, 1113, 0, 0, 0, 0, - 0, 3203, 0, 0, 0, 0, 839, 0, 0, 0, - 0, 0, 0, 2050, 0, 0, 2051, 0, 0, 0, - 2052, 2053, 2054, 0, 0, 0, 0, 839, 0, 2652, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2543, - 802, 0, 0, 0, 0, 0, 0, 2547, 0, 2544, - 0, 0, 2548, 0, 0, 0, 2545, 0, 0, 0, - 0, 0, 2050, 925, 0, 2051, 925, 0, 0, 2052, - 2053, 2054, 0, 0, 2549, 2238, 0, 0, 0, 0, - 0, 0, 2546, 0, 0, 0, 0, 0, 0, 2550, - 0, 0, 839, 839, 0, 0, 0, 0, 2544, 0, - 0, 3247, 0, 0, 0, 2545, 2547, 3671, 0, 3674, - 3676, 2548, 0, 0, 0, 0, 0, 0, 0, 3421, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2290, 2546, 0, 2549, 2238, 619, 0, 0, 0, 0, - 1337, 1337, 1337, 0, 2551, 3421, 1337, 2552, 2550, 0, - 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 925, 0, 0, - 0, 0, 0, 1337, 0, 925, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1979, 0, 0, 2751, 2290, - 0, 0, 0, 839, 0, 0, 2547, 0, 0, 3776, - 0, 2548, 772, 2551, 0, 0, 0, 0, 1113, 0, - 0, 0, 0, 0, 925, 3787, 0, 0, 0, 0, - 0, 0, 0, 2549, 2238, 3671, 0, 0, 0, 0, - 0, 0, 0, 0, 3203, 925, 2553, 3809, 2550, 0, - 0, 0, 0, 0, 0, 2547, 0, 0, 0, 0, - 2548, 0, 0, 0, 0, 923, 0, 0, 935, 0, - 935, 935, 0, 3203, 0, 0, 0, 0, 0, 0, - 0, 0, -2829, -2829, 0, 0, 925, 0, 925, 2290, - 925, 0, 0, 0, 0, 2045, 0, 2550, 887, 0, - 0, 0, 0, 2551, 2048, 2553, 2552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2503, 0, - 0, 0, 0, 1954, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -2829, 1113, - 0, 0, 2522, 2523, 0, 3421, 2479, 1113, 1113, 0, - 2652, 0, 2551, 0, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 0, 0, 0, 0, 0, 0, 0, - 4002, 0, 0, 0, 0, 0, 620, 925, 0, 936, - 0, 936, 936, 0, 925, 0, 0, 0, 0, 0, - 0, 1337, 0, 0, 0, 2553, 1337, 0, 0, 0, - 0, 0, 0, 2907, 0, 2479, 0, 0, 0, 0, - 0, 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2487, 2488, 0, 1337, 1337, 1337, 0, 0, 1337, 0, - 0, 0, 0, 0, 0, 0, 1337, 1337, 1337, 1337, - 0, 0, 0, 0, 2553, 0, 0, 0, 0, 0, - 0, 0, 1337, 0, 0, 1337, 0, 1337, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337, - 1337, 0, 0, 1337, 0, 0, 0, 0, 0, 0, - 1532, 0, 0, 887, 0, 0, 1533, 0, 0, 0, - 972, 0, 1337, 1599, 1337, 2479, 1337, 0, 0, 3203, - 0, 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2487, 2488, 0, 0, 2931, 1600, 1337, 0, 0, 0, - 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1535, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 839, 0, 0, 2479, 0, 0, 0, 3247, 0, - 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, - 2488, 0, 0, 0, 619, 0, 1601, 0, 0, 620, - 0, 0, 3359, 4075, 0, 2986, 0, 4075, 4089, 4075, - 0, 0, 0, 3003, 1337, 0, 0, 1536, 0, 1337, - 0, 2907, 0, 0, 1537, 0, 0, 1538, -136, 0, - 0, 0, 2860, 0, 1337, 0, 0, 0, 887, 0, - 2868, 0, 0, 0, 0, 0, 0, 0, 3359, 0, - 1, 0, 4120, 0, 1539, 4123, 3359, 0, 3408, 0, - 2, 0, 3, 4, 0, 3061, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, - 5, 0, 0, 0, 0, 1602, 0, 0, 1540, 0, - 6, 0, 2907, 0, 0, 0, 5847, 0, 887, 1337, - 0, 0, 7, 0, 8, 9, 0, 0, 0, 0, - 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 13, 0, 925, - 925, 0, 0, 0, 1603, 0, 0, 0, 1604, 0, - 0, 0, 0, 3482, 14, 923, 0, 15, 935, 0, - 935, 935, 0, 1605, 0, 0, 0, 1542, 0, 0, - 0, 0, 16, 0, 17, 0, 0, 1543, 18, 0, - 0, 887, 0, 0, 19, 0, 1544, 0, 0, 0, - 0, 0, 20, 0, 21, 0, 0, 1606, 1545, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1502, 0, 0, 0, 24, 0, 3617, 3203, 3203, - 1547, 1548, 1608, 0, 0, 0, 0, 839, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2819, 0, 0, - 0, 0, 0, 0, 2997, 1609, 1503, 0, 3002, 0, - 0, 3618, 0, 0, 0, 25, 26, 0, 0, 0, - 0, 27, 0, 0, 0, 1611, 0, 0, 0, 0, - 0, 3622, 0, 0, 3625, 28, 0, 0, 0, 0, - 5270, 0, 887, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1504, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1550, - 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, - 0, 619, 0, 0, 0, 0, 0, 30, 0, 0, - 0, 0, 1337, 1505, 0, 0, 0, 0, 1337, 0, - 0, 31, 0, 0, 0, 0, 0, 32, 33, 925, - 34, 0, 3716, 0, 0, 35, 0, 0, 0, 0, - 0, 36, 0, 0, 37, 3729, 0, 619, 0, 1506, - 0, 38, 0, 3738, 0, 619, 0, 39, 40, 0, - 0, 0, 0, 0, 0, 41, 839, 839, 839, 42, - 0, 0, 0, 887, 0, 0, 0, 0, 0, 43, - 0, 0, 0, 839, 0, 0, 3185, 1507, 0, 0, - 0, 1508, 3782, 0, 44, 0, 0, 1337, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3806, 45, 1954, 839, 839, 0, 0, - 0, 839, 1590, 1510, 0, 46, 0, 0, 0, 0, - 0, 47, 0, 839, 0, 0, 48, 0, 0, 0, - 0, 3421, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 3861, 0, 3863, 0, - 0, 1591, 0, 0, 0, 35, 0, 0, 0, 0, - 1512, 0, 50, 51, 52, 53, 54, 55, 0, 1513, - 0, 0, 0, 0, 0, 0, 0, 1514, 0, 925, - 56, 0, 0, -136, 0, 1592, 0, 0, 0, 0, - 0, 0, 0, 3115, 4496, 0, 0, 1516, 0, 0, - 0, 0, 839, 0, 0, 0, 1517, 0, 0, 0, - 1518, 0, 0, 2050, 0, 839, 2051, 0, 839, 0, - 2052, 2053, 2054, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3919, 0, 1337, 0, 2543, - 0, 0, 3926, 0, 0, 1337, 0, 1337, 0, 2544, - 0, 3421, 0, 0, 0, 1337, 2545, 1337, 0, 0, - 1337, 0, 0, 0, 1519, 1337, 1337, 1337, 1337, 0, - 0, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 0, 2546, 0, 1337, 1337, 1337, 0, 0, 0, - 0, 0, 0, 0, 1337, 0, 0, 0, 0, 1337, - 0, 0, 0, 1337, 0, 0, 0, 0, 0, 0, - 0, 1337, 0, 0, 1337, 0, 1337, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1337, 0, 0, 1337, - 1337, 0, 0, 0, 1337, 1337, 0, 0, 0, 4604, - 0, 1337, 0, 0, 0, 0, 0, 0, 839, 839, - 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4075, 4089, - 4075, 0, 1337, 4075, 0, 0, 4628, 887, 0, 0, - 3359, 0, 887, 887, 3359, 0, 0, 0, 0, 0, - 4643, 0, 0, 0, 0, 0, 2547, 0, 0, 0, - 0, 2548, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1337, 0, 0, 0, - 0, 0, 0, 2549, 2238, 0, 0, 0, 0, 0, - 0, 3408, 0, 1337, 0, 0, 0, 0, 2550, 0, - 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, - 2702, 4691, 1954, 1954, 3410, 0, 1954, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3426, 0, 0, 0, 3429, 0, 0, 2290, - 3432, 0, 0, 0, 0, 0, 0, 0, 2703, 0, - 0, 2751, 4723, 2551, 5270, 887, 2552, 0, 0, 0, - 0, 692, 0, 0, 0, 0, 0, 3457, 0, 0, - 4744, 0, 0, 0, 0, 0, 0, 693, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1029, 0, 0, 0, 887, - 0, 3499, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4161, 4162, 2704, - 0, 1070, 0, 4793, 0, 0, 0, 0, 0, 0, - 696, 0, 0, 2050, 0, 0, 2051, 0, 0, 697, - 2052, 2053, 2054, 0, 0, 2553, 3309, 0, 0, 0, - 0, 0, 698, 3549, 0, 0, 0, 2705, 0, 2543, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2544, - 0, 0, 0, 0, 0, 0, 2545, 0, 0, 4838, - 3578, 0, 0, 1032, 0, 0, 3587, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3597, 0, 2546, 0, 0, 0, 0, 1070, 0, 0, - 3610, 0, 925, 0, 0, 0, 3615, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 925, 0, 1337, 0, - 702, 0, 0, 0, 0, 839, 3628, 0, 0, 0, - 0, 4882, 3631, 0, 0, 2479, 0, 0, 0, 3637, - 0, 0, 2751, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2487, 2488, 0, 3652, 0, 0, 3232, 839, 0, 0, - 0, 2706, 3359, 3787, 0, 0, 3677, 0, 0, 619, - 3671, 0, 0, 619, 0, 0, 0, 1070, 0, 4931, - 0, 0, 0, 0, 0, 1113, 0, 0, 0, 839, - 0, 0, 0, 0, 0, 213, 2707, 0, 0, 707, - 0, 1337, 1337, 0, 0, 0, 2547, 0, 0, 0, - 0, 2548, 1337, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1954, 839, 0, 1036, 0, 0, 2708, - 0, 0, 0, 2549, 2238, 711, 0, 0, 0, 0, - 619, 839, 712, 0, 1353, 713, 0, 4333, 2550, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2050, - 0, 0, 2051, 0, 714, 0, 2052, 2053, 2054, 0, - 0, 1038, 0, 0, 0, 0, 0, 716, 0, 1337, - 1039, 0, 0, 0, 718, 2543, 0, 0, 0, 2290, - 0, 1337, 2709, 0, 0, 2544, 0, 0, 0, 2710, - 0, 0, 2545, 2551, 0, 0, 2552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337, - 0, 0, 1337, 0, 1353, 723, 0, 0, 2546, 0, - 1337, 1337, 0, 0, 0, 0, 0, 0, 1337, 1337, - 0, 0, 0, 1337, 0, 0, 0, 1337, 1353, 0, - 1337, 1337, 0, 0, 0, 1337, 5047, 0, 0, 0, - 0, 1337, 839, 839, 839, 839, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, - 0, 4075, 0, 0, 0, 3359, 0, 0, 0, 0, - 3359, 0, 3894, 3359, 620, 2553, 3671, 0, 5079, 0, - 0, 1337, 0, 972, 0, 0, 0, 4486, 0, 0, - 3908, 0, 1337, 0, 0, 3680, 4120, 3894, 0, 0, - 1337, 0, 3408, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, - 1337, 0, 2547, 0, 0, 0, 0, 2548, 0, 0, - 0, 0, 3712, 0, 3712, 0, 3712, 3712, 0, 0, - 0, 3712, 3712, 3712, 0, 3712, 3712, 3712, 0, 2549, - 2238, 0, 0, 0, 2751, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2550, 0, 0, 0, 0, 0, - 5143, 0, 0, 0, 0, 2479, 0, 0, 0, 1688, - 0, 619, 619, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2487, 2488, 0, 0, 0, 0, 4346, 0, 0, 3789, - 0, 0, 0, 0, 0, 2290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1532, 0, 2551, - 0, 1337, 2552, 1533, 3817, 0, 0, 0, 1337, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 925, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 925, 2050, 1535, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2543, 0, 0, 0, 1337, 0, 2050, - 0, 0, 2051, 2544, 0, 0, 2052, 2053, 2054, 0, - 2545, 2553, 0, 620, 0, 0, 0, 0, 0, 0, - 2751, 0, 0, 0, 1536, 2543, 0, 0, 0, 1954, - 0, 1537, 0, 0, 1538, 2544, 2546, 0, 0, 0, - 0, 0, 2545, 0, 3787, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 925, 0, 3809, - 0, 1539, 0, 0, 0, 0, 0, 0, 2546, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1532, 839, 0, 0, 0, 0, - 1533, 0, 0, 0, 0, 1540, 839, 619, 0, 0, - 0, 0, 0, 0, 619, 0, 0, 0, 0, 619, - 0, 2479, 619, 5075, 0, 4157, 0, 0, 0, 2480, - 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, - 0, 0, 4529, 0, 0, 1535, 0, 0, 0, 0, - 0, 1337, 0, 0, 1337, 0, 0, 1337, 1337, 1337, - 2547, 0, 0, 0, 0, 2548, 0, 0, 0, 0, - 1641, 0, 0, 0, 1542, 0, 0, 0, 0, 0, - 0, 0, 1337, 1337, 1543, 0, 1337, 2549, 2238, 0, - 0, 0, 2547, 1544, 0, 0, 0, 2548, 0, 0, - 0, 1536, 2550, 0, 0, 1545, 0, 1337, 1537, 0, - 0, 1538, 0, 1337, 0, 1113, 0, 3359, 0, 2549, - 2238, 5079, 0, 0, 1337, 4229, 5353, 0, 0, 0, - 0, 0, 0, 0, 2550, 0, 0, 4691, 1539, 0, - 1337, 0, 0, 2290, 3509, 0, 0, 1547, 1548, 0, - 0, 4691, 972, 925, 0, 925, 0, 2551, 0, 0, - 2552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4862, 0, 1540, 0, 0, 2290, 0, 0, 1549, 0, - 0, 0, 0, 0, 4864, 0, 0, 0, 0, 2551, - 0, 0, 2552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 936, 972, 0, 0, 937, 947, 0, 0, - 0, 0, 0, 0, 937, 0, 947, 937, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 947, 0, 0, 0, 0, 0, 0, 1641, 0, 0, - 0, 1542, 0, 0, 0, 0, 1550, 936, 0, 2553, - 0, 1543, 4325, 0, 0, 0, 0, 0, 0, 4882, - 1544, 0, 5214, 0, 839, 0, 0, 0, 0, 839, - 0, 0, 1545, 0, 1113, 0, 0, 0, 2751, 0, - 0, 2553, 0, 0, 0, 0, 0, 0, 839, 0, - 0, 0, 4931, 619, 0, 5491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 925, 839, 4691, 0, - 0, 3687, 0, 0, 1547, 1548, 0, 0, 0, 0, - 0, 0, 0, 1532, 0, 1532, 0, 0, 0, 1533, - 0, 1533, 0, 0, 0, 0, 0, 0, 0, 0, - 1337, 0, 0, 0, 1337, 3688, 1337, 0, 0, 2479, - 0, 0, 4221, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 620, 0, 0, 1337, - 4580, 0, 0, 5555, 1535, 0, 1535, 0, 0, 0, - 1337, 2479, 0, 0, 0, 0, 0, 1337, 0, 2480, - 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, - 0, 0, 4685, 0, 0, 0, 0, 0, 0, 0, - 4269, 0, 0, 1550, 0, 0, 0, 0, 0, 0, - 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, - 1536, 2907, 1536, 0, 0, 0, 0, 1537, 0, 1537, - 1538, 0, 1538, 0, 0, 0, 0, 1337, 0, 0, - 4497, 0, 0, 1337, 1337, 0, 619, 0, 925, 925, - 925, 925, 0, 0, 0, 0, 0, 1539, 0, 1539, - 0, 0, 0, 0, 0, 4513, 619, 0, 4312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337, - 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, - 0, 1540, 0, 1540, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 839, 0, 3712, 3359, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4343, 4343, 0, 0, - 0, 935, 0, 0, 0, 0, 4359, 0, 0, 0, - 839, 1113, 0, 1113, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1641, 0, 1641, 0, - 1542, 0, 1542, 0, 0, 0, 0, 0, 1337, 0, - 1543, 0, 1543, 0, 1337, 0, 935, 0, 1954, 1544, - 0, 1544, 3671, 0, 0, 1337, 0, 0, 0, 4414, - 0, 1545, 0, 1545, 1337, 0, 1337, 0, 1337, 5353, - 0, 0, 0, 0, 0, 4691, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1954, 0, 972, 0, 0, - 0, 0, 947, 0, 4450, 1113, 1337, 0, 0, 5181, - 4173, 0, 4231, 1547, 1548, 1547, 1548, 619, 0, 0, - 0, 947, 0, 0, 5185, 0, 0, 947, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, - 0, 1954, 1954, 0, 4174, 0, 4232, 0, 0, 0, - 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, - 947, 0, 925, 0, 0, 619, 937, 0, 947, 937, - 2050, 0, 0, 2051, 0, 0, 5812, 2052, 2053, 2054, - 0, 0, 947, 0, 0, 0, 0, 4709, 0, 0, - 0, 0, 947, 0, 0, 0, 2543, 0, 0, 0, - 0, 0, 1550, 0, 1550, 5243, 2544, 0, 0, 0, - 0, 0, 0, 2545, 1337, 1337, 1337, 0, 0, 0, - 0, 0, 1337, 0, 0, 0, 5555, 0, 0, 0, - 0, 0, 1337, 0, 0, 0, 0, 0, 0, 2546, - 0, 3408, 1337, 0, 0, 0, 0, 0, 0, 0, - 947, 0, 0, 0, 0, 0, 2050, 0, 936, 2051, - 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, 0, - 0, 4582, 0, 925, 0, 0, 0, 0, 0, 947, - 1954, 0, 2543, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2544, 0, 0, 0, 5649, 0, 0, 2545, - 0, 0, 0, 0, 947, 2751, 0, 0, 0, 0, - 0, 0, 1337, 0, 0, 0, 4820, 0, 0, 4823, - 0, 0, 4691, 0, 619, 2546, 0, 0, 0, 0, - 936, 936, 5929, 0, 0, 0, 1337, 0, 1337, 0, - 0, 0, 0, 0, 0, 0, 0, 1954, 1954, 5944, - 0, 0, 0, 2547, 1337, 1337, 0, 0, 2548, 0, - 5950, 0, 0, 0, 947, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2549, 2238, 925, 0, 0, 0, 0, 0, 0, 0, - 0, 5375, 0, 5376, 0, 2550, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5812, 925, 925, 619, 0, 0, 4691, 0, 0, - 4905, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 620, 2290, 2907, 0, 2547, - 0, 0, 0, 0, 2548, 0, 0, 0, 0, 0, - 2551, 0, 0, 2552, 0, 1337, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2549, 2238, 0, 1337, - 0, 0, 0, 0, 1774, 0, 0, 0, 0, 0, - 947, 2550, 0, 0, 0, 0, 0, 0, 0, 0, - 4359, 937, 0, 0, 0, 937, 0, 937, 0, 0, - 1337, 0, 0, 0, 0, 6034, 6035, 620, 6038, 5555, - 0, 0, 3408, 0, 0, 619, 4783, 0, 3894, 0, - 0, 0, 2290, 0, 925, 0, 0, 4691, 0, 0, - 0, 4798, 0, 0, 0, 4799, 2551, 4800, 0, 2552, - 0, 0, 2553, 0, 5503, 0, 0, 0, 0, 0, - 4120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337, - 620, 0, 0, 0, 1337, 0, 0, 0, 620, 0, - 0, 0, 0, 4840, 0, 0, 0, 0, 0, 0, - 936, 936, 0, 0, 6100, 0, 0, 935, 0, 3712, - 0, 0, 0, 947, 3712, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2553, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2479, 0, 0, 0, 0, 0, 0, 0, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, - 0, 619, 0, 4911, 947, 0, 0, 0, 0, 935, - 935, 0, 0, 0, 0, 947, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, - 0, 0, 0, 947, 0, 0, 0, 5611, 0, 5613, - 0, 0, 0, 4945, 0, 0, 4359, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2479, 0, - 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, - 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 0, 5006, - 619, 0, 0, 0, 0, 0, 619, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5995, 0, 0, 0, 5155, 4993, - 4993, 4993, 4993, 0, 4993, 4993, 4993, 4993, 4993, 0, - 5165, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, 2054, - 0, 0, 0, 0, 947, -136, 0, 0, 0, 0, - 0, 0, 947, 947, 0, 0, 2543, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2544, 1, 0, 0, - 0, 0, 0, 2545, 0, 0, 6036, 2, 0, 3, - 4, 0, 2050, 0, 0, 2051, 0, 0, 0, 2052, - 2053, 2054, 0, 0, 0, 0, 619, 5, 0, 2546, - 0, 0, 0, 0, 0, 1774, 0, 6, 2543, 0, - 0, 5056, 0, 5058, 0, 0, 0, 0, 2544, 7, - 0, 8, 9, 0, 0, 2545, 0, 0, 10, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 6036, - 0, 0, 12, 0, 13, 0, 0, 6085, 0, 0, - 0, 2546, 0, 0, 0, 0, 0, 0, 0, 935, - 935, 14, 0, 0, 15, 0, 0, 0, 0, 0, - 5798, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 21, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 2547, 0, 0, 0, 0, 2548, 0, - 0, 2050, 0, 0, 2051, 23, 0, 0, 2052, 2053, - 2054, 0, 0, 0, 0, 0, 0, 0, 3894, 0, - 2549, 2238, 24, 0, 0, 0, 0, 2543, 0, 0, - 0, 0, 0, 0, 0, 2550, 0, 2544, 0, 0, - 0, 0, 0, 0, 2545, 2547, 0, 0, 0, 2050, - 2548, 0, 2051, 0, 0, 0, 2052, 2053, 2054, 0, - 0, 5882, 25, 26, 0, 0, 0, 0, 27, 0, - 2546, 0, 2549, 2238, 0, 2543, 2290, 0, 0, 0, - 0, 0, 28, 0, 0, 2544, 0, 2550, 0, 0, - 2551, 0, 2545, 2552, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5186, 5187, 0, 0, 0, 0, 0, 0, 2546, 0, - 0, 0, 0, 3712, 0, 3712, 3712, 3712, 2290, 0, - 3894, 0, 3894, 0, 947, 886, 0, 0, 0, 0, - 0, 0, 2551, 0, 30, 2552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 32, 33, 0, 34, 0, 0, - 5964, 0, 35, 0, 0, 0, 0, 0, 36, 0, - 0, 37, 2553, 0, 2547, 0, 0, 0, 38, 2548, - 0, 5238, 0, 0, 39, 40, 0, 0, 0, 0, - 5978, 5978, 41, 0, 0, 0, 42, 0, 0, 0, - 0, 2549, 2238, 0, 0, 0, 43, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2550, 877, 0, 0, - 5266, 44, 2547, 0, 2553, 2050, 0, 2548, 2051, 0, - 0, 0, 2052, 2053, 2054, 0, 0, 0, 947, 0, - 0, 45, 0, 0, 0, 0, 0, 0, 0, 2549, - 2238, 2543, 46, 0, 0, 0, 0, 2290, 47, 0, - 0, 2544, 4993, 48, 2550, 0, 0, 0, 2545, 0, - 0, 2551, 2479, 1774, 2552, 0, 49, 0, 0, 0, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, - 0, 0, 0, 5043, 2546, 0, 947, 0, 0, 50, - 0, 0, 5978, 0, 947, 2290, 0, 0, 0, 0, - 0, 0, 947, 0, 0, 0, 0, 56, 0, 2551, - -136, 0, 2552, 0, 2479, 0, 0, 0, 0, 0, - 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, - 2488, 0, 0, 0, 0, 5294, 0, 0, 0, 0, - 0, 0, 937, 937, 0, 947, 947, 0, 0, 0, - 0, 0, 0, 2553, 0, 0, 0, 937, 0, 947, - 937, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 628, 0, 947, 947, 0, 0, 677, 628, 0, 0, - 0, 0, 729, 0, 628, 0, 0, 0, 0, 0, - 628, 0, 782, 0, 0, 0, 0, 0, 2547, 0, - 0, 2553, 4359, 2548, 0, 0, 0, 0, 0, 0, - 937, 850, 850, 0, 937, 937, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2549, 2238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2550, 0, 0, 0, 0, 0, 0, 0, 3712, 0, - 0, 0, 0, 2479, 0, 0, 0, 5438, 0, 0, - 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, - 0, 0, 0, 0, 5305, 0, 0, 0, 0, 0, - 0, 2290, 2050, 0, 0, 2051, 0, 0, 0, 2052, - 2053, 2054, 0, 0, 0, 2551, 0, 0, 2552, 0, - 0, 2479, 0, 0, 0, 0, 0, 0, 2543, 2480, - 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2544, 0, - 0, 1774, 5313, 0, 0, 2545, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2546, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 927, 0, 0, 0, 931, 0, 0, 0, - 0, 0, 0, 0, 974, 0, 0, 976, 0, 0, - 981, 982, 0, 985, 0, 988, 0, 2553, 994, 0, - 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, - 0, 0, 0, 0, 0, 2547, 0, 0, 0, 0, - 2548, 0, 0, 2543, 0, 0, 0, 0, 0, 0, - 1113, 0, 0, 2544, 5624, 0, 0, 2479, 0, 0, - 2545, 0, 2549, 2238, 0, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 0, 0, 0, 2550, 5316, 0, - 0, 0, 0, 0, 0, 0, 2546, 0, 2050, 0, - 0, 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2543, 0, 0, 0, 2290, 0, - 3894, 0, 0, 0, 2544, 0, 0, 0, 0, 886, - 0, 2545, 2551, 0, 0, 2552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 886, 0, 2546, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, - 2547, 0, 0, 0, 0, 2548, 0, 0, 0, 0, - 0, 0, 0, 2543, 0, 0, 0, 0, 0, 0, - 0, 877, 0, 2544, 2553, 0, 0, 2549, 2238, 0, - 2545, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2550, 0, 1113, 0, 0, 877, 5774, 0, - 5775, 0, 0, 0, 5780, 5781, 2546, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2547, 0, 0, 0, 0, 2548, 0, 0, 0, - 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2551, 2549, 2238, - 2552, 0, 0, 886, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2550, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2479, 0, 0, 0, 0, 0, - 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, - 2488, 0, 0, 0, 0, 5369, 0, 0, 0, 0, - 0, 0, 0, 0, 2290, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1023, 0, 0, 2551, 0, - 2547, 2552, 0, 0, 0, 2548, 1060, 0, 0, 0, - 1064, 0, 0, 0, 0, 0, 0, 1077, 1078, 2553, - 0, 1084, 0, 1087, 1088, 877, 0, 2549, 2238, 0, - 1774, 0, 0, 0, 0, 0, 0, 0, 1110, 0, - 0, 0, 2550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1123, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1151, 0, 1153, - 0, 0, 0, 2290, 0, 947, 0, 0, 0, 1169, - 2553, 0, 0, 0, 886, 0, 0, 2551, 0, 0, - 2552, 0, 0, 947, 879, 886, 0, 947, 0, 0, - 0, 947, 0, 0, 0, 0, 0, 0, 0, 2479, - 947, 886, 628, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 947, 1113, - 5402, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 937, 0, 937, 937, 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, 877, 0, 0, 2553, - 2479, 0, 947, 947, 0, 0, 0, 877, 2480, 2481, - 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 850, - 0, 5404, 0, 877, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1774, 947, 0, 0, 1774, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, - 2051, 947, 0, 1774, 2052, 2053, 2054, 947, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 947, 0, 2543, 0, 0, 0, 886, 947, 0, - 0, 947, 0, 2544, 0, 6063, 0, 947, 0, 2479, - 2545, 2503, 1493, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 947, 0, 0, - 5443, 0, 0, 947, 2050, 0, 2546, 2051, 0, 0, - 947, 2052, 2053, 2054, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6063, 947, 0, 0, 0, 0, 0, - 2543, 0, 0, 0, 0, 0, 0, 947, 0, 0, - 2544, 6063, 1774, 0, 5056, 0, 0, 2545, 947, 0, - 0, 0, 0, 0, 0, 0, 1672, 0, 0, 877, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2546, 0, 0, 0, 0, 0, 0, - 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1804, 0, 1805, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1808, 1774, 0, - 0, 2521, 0, 0, 1818, 0, 0, 0, 0, 0, - 2547, 0, 0, 0, 0, 2548, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2549, 2238, 0, - 0, 0, 0, 0, 0, 0, 1869, 0, 1871, 0, - 0, 0, 2550, 0, 0, 0, 0, 0, 2050, 0, - 0, 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2547, 0, 0, - 0, 0, 2548, 0, 2543, 0, 0, 0, 0, 0, - 0, 0, 0, 2290, 2544, 0, 0, 0, 0, 0, - 0, 2545, 886, 0, 2549, 2238, 0, 2551, 0, 0, - 2552, 0, 0, 0, 0, 0, 0, 0, 0, 2550, - 0, 0, 628, 0, 628, 0, 628, 2546, 628, 0, - 628, 628, 628, 0, 0, 0, 0, 628, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1975, - 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, - 2290, 0, 1987, 0, 0, 0, 0, 0, 0, 886, - 0, 947, 0, 0, 2551, 0, 0, 2552, 947, 0, - 0, 0, 0, 0, 0, 937, 0, 937, 937, 0, - 0, 0, 0, 0, 877, 0, 0, 0, 0, 2553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2050, 0, - 0, 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, - 0, 2547, 0, 886, 0, 0, 2548, 0, 0, 0, - 0, 0, 0, 1774, 2543, 0, 0, 0, 0, 1774, - 0, 877, 0, 0, 2544, 0, 2553, 0, 2549, 2238, - 0, 2545, 0, 0, 0, 0, 0, 0, 0, 0, - 946, 0, 0, 2550, 0, 0, 0, 0, 0, 946, - 0, 0, 0, 0, 0, 0, 0, 2546, 0, 2479, - 0, 0, 877, 946, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 0, - 5762, 850, 0, 0, 2290, 0, 0, 0, 879, 0, - 0, 0, 0, 0, 0, 877, 0, 0, 2551, 0, - 947, 2552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2479, 0, 0, 0, - 0, 0, 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 0, 0, 0, 0, 5784, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2547, 0, 0, 0, 0, 2548, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2553, 0, 0, 0, 886, 0, 0, 0, 2549, 2238, - 0, 2713, 0, 0, 0, 886, 0, 0, 0, 0, - 0, 0, 0, 2550, 0, 0, 0, 0, 0, 0, - 0, 886, 0, 0, 0, 0, 0, 0, 0, 947, - 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, - 2054, 0, 0, 0, 2290, 0, 947, 0, 0, 947, - 0, 0, 879, 0, 0, 0, 0, 2543, 2551, 0, - 0, 2552, 0, 2805, 886, 0, 0, 2544, 0, 0, - 0, 0, 0, 0, 2545, 0, 877, 0, 0, 886, - 2479, 0, 886, 886, 0, 0, 0, 877, 2480, 2481, - 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, - 2546, 5976, 0, 877, 0, 0, 0, 0, 2050, 0, - 0, 2051, 0, 886, 886, 2052, 2053, 2054, 0, 0, - 0, 1774, 1774, 1774, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2543, 0, 0, 0, 3366, 0, - 0, 0, 0, 0, 2544, 0, 947, 0, 0, 0, - 2553, 2545, 0, 0, 0, 0, 877, 0, 0, 0, - 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, - 0, 877, 0, 0, 877, 877, 0, 2546, 0, 0, - 0, 0, 2050, 0, 0, 2051, 0, 947, 0, 2052, - 2053, 2054, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 877, 877, 0, 2543, 0, - 0, 0, 0, 879, 2547, 0, 0, 0, 2544, 2548, - 0, 0, 0, 0, 879, 2545, 0, 0, 3367, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 879, 2549, 2238, 0, 0, 886, 0, 0, 0, 0, - 2479, 2546, 0, 0, 0, 946, 2550, 0, 2480, 2481, - 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, - 0, 5994, 0, 947, 946, 0, 0, 0, 2935, 0, - 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2547, 946, 0, 0, 0, 2548, 2290, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, - 0, 2551, 0, 2971, 2552, 0, 0, 0, 2549, 2238, - 1774, 0, 0, 946, 0, 0, 947, 0, 947, 0, - 0, 946, 0, 2550, 0, 0, 0, 877, 0, 0, - 0, 947, 0, 947, 0, 946, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 946, 3032, 0, 3036, 0, - 0, 0, 0, 0, 0, 2547, 0, 0, 0, 0, - 2548, 0, 0, 0, 2290, 0, 0, 0, 3054, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2551, 0, - 0, 2552, 2549, 2238, 0, 0, 879, 0, 0, 0, - 0, 0, 0, 2553, 3074, 0, 3075, 2550, 0, 0, - 947, 0, 0, 946, 0, 0, 0, 880, 0, 0, - 0, 3084, 0, 3085, 0, 0, 0, 0, 0, 628, - 0, 628, 0, 628, 0, 628, 0, 628, 0, 0, - 0, 628, 946, 0, 0, 0, 0, 0, 2290, 0, - 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2551, 0, 0, 2552, 0, 946, 0, 0, - 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, - 2553, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4572, 0, 0, 947, 0, 0, 947, 0, 0, 0, - 0, 0, 0, 2479, 0, 0, 0, 0, 0, 0, - 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, - 0, 0, 0, 0, 6040, 0, 0, 946, 0, 0, - 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, 2054, - 3368, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2553, 0, 2543, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2544, 0, 0, 0, - 0, 4573, 0, 2545, 0, 0, 0, 1774, 0, 0, - 2479, 0, 0, 0, 0, 0, 0, 0, 2480, 2481, - 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 2546, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, 2054, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2543, 1773, 0, 0, - 0, 879, 0, 946, 0, 0, 2544, 0, 0, 0, - 0, 0, 0, 2545, 2479, 0, 0, 0, 0, 0, - 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, - 2488, 0, 0, 0, 0, 0, 0, 0, 0, 2546, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3980, - 0, 0, 0, 0, 3981, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, - 0, 0, 0, 2547, 0, 0, 0, 882, 2548, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2549, 2238, 0, 0, 0, 0, 0, 0, 947, 879, - 0, 0, 0, 0, 0, 2550, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 946, 0, 5936, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2547, 0, 0, 2290, 0, 2548, 1774, - 0, 0, 0, 0, 1774, 0, 1774, 0, 0, 0, - 2551, 0, 0, 2552, 0, 0, 0, 0, 0, 0, - 2549, 2238, 0, 0, 0, 0, 0, 946, 0, 0, - 1774, 0, 0, 0, 0, 2550, 886, 0, 946, 0, - 886, 886, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 946, 0, 0, 0, 946, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2290, 947, 0, 0, - 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2551, 0, 0, 2552, 0, 0, 0, 0, 886, 0, - 0, 0, 3982, 0, 886, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5937, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, - 0, 0, 877, 877, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 886, 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, 947, 0, 879, 0, 0, 0, 946, 0, 0, - 0, 947, 2553, 0, 879, 946, 946, 0, 0, 0, - 877, 0, 0, 0, 0, 0, 877, 0, 947, 0, - 879, 0, 2479, 0, 0, 0, 0, 0, 0, 0, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 877, 1773, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, - 0, 880, 0, 0, 0, 0, 0, 0, 879, 0, - 0, 879, 879, 0, 0, 0, 0, 0, 0, 947, - 0, 689, 2479, 0, 0, 0, 690, 880, 0, 0, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, - 0, 0, 879, 879, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 691, 0, 0, 0, 3411, 3412, - 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3427, 3428, 0, - 3430, 3431, 0, 693, 886, 3434, 3435, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3446, 694, 0, 0, 0, 0, 0, 3455, 0, 0, - 0, 3458, 3459, 0, 0, 3462, 3463, 0, 0, 0, - 0, 0, 3468, 0, 0, 695, 0, 0, 0, 0, - 0, 0, 0, 0, 3483, 0, 696, 0, 0, 0, - 0, 0, 0, 0, 0, 697, 3500, 0, 0, 0, - 0, 3502, 0, 0, 0, 0, 0, 886, 698, 0, - 0, 886, 0, 699, 879, 880, 3508, 0, 0, 0, - 700, 0, 0, 0, 0, 3515, 877, 0, 3519, 0, - 3521, 3524, 3526, 0, 0, 0, 0, 3534, 3537, 701, - 0, 0, 0, 0, 0, 0, 0, 3550, 0, 0, - 0, 0, 0, 3560, 0, 0, 0, 3563, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 946, 0, 3573, - 3574, 0, 0, 0, 3579, 0, 0, 947, 0, 0, - 3588, 3589, 0, 0, 0, 0, 702, 0, 0, 0, - 0, 0, 0, 0, 3598, 0, 0, 3599, 0, 877, - 0, 0, 0, 877, 3611, 3612, 0, 0, 0, 0, - 3616, 0, 0, 886, 0, 0, 0, 0, 0, 947, - 0, 0, 3623, 0, 0, 3626, 0, 703, 886, 0, - 3629, 947, 0, 886, 0, 0, 3632, 3633, 0, 0, - 704, 882, 0, 0, 3639, 0, 0, 0, 3641, 0, - 0, 705, 3648, 3649, 3650, 3651, 0, 3653, 0, 0, - 0, 213, 706, 0, 0, 707, 947, 882, 0, 0, - 3678, 3679, 0, 3681, 0, 0, 880, 0, 0, 0, - 0, 946, 0, 0, 3690, 3691, 3692, 880, 0, 0, - 0, 0, 708, 0, 0, 709, 0, 0, 0, 710, - 0, 711, 0, 880, 0, 877, 0, 0, 712, 0, - 0, 713, 0, 0, 0, 0, 1773, 0, 0, 0, - 877, 0, 0, 0, 0, 877, 0, 0, 0, 0, - 714, 0, 883, 0, 0, 0, 0, 715, 0, 946, - 0, 3744, 0, 716, 1774, 0, 717, 946, 0, 3768, - 718, 0, 0, 0, 0, 946, 0, 0, 719, 0, - 720, 0, 0, 947, 0, 721, 0, 0, 3780, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, - 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, - 0, 723, 0, 0, 0, 0, 0, 0, 946, 946, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 946, 0, 0, 882, 0, 0, 3848, 0, - 0, 0, 0, 0, 0, 946, 946, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3862, 0, 3864, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2050, 0, 0, 2051, 0, 0, - 0, 2052, 2053, 2054, 0, 0, 0, 0, 886, 0, - 0, 886, 0, 886, 0, 0, 0, 0, 886, 0, - 2543, 0, 0, 3936, 0, 0, 2050, 0, 0, 2051, - 2544, 0, 0, 2052, 2053, 2054, 0, 2545, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2543, 3927, 0, 0, 0, 0, 0, 0, - 0, 0, 2544, 2546, 0, 0, 886, 0, 0, 2545, - 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, - 0, 947, 0, 947, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1773, 2546, 882, 0, 0, 886, - 877, 0, 0, 877, 0, 877, 0, 882, 0, 0, - 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 882, 0, 0, 0, 0, 947, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 937, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, - 0, 0, 0, 0, 0, 0, 877, 0, 0, 886, - 0, 886, 0, 0, 0, 0, 0, 2547, 1774, 0, - 0, 0, 2548, 937, 0, 0, 0, 0, 0, 0, - 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2549, 2238, 0, 0, 0, 2547, - 0, 0, 0, 0, 2548, 0, 0, 0, 0, 2550, - 0, 0, 0, 0, 880, 879, 0, 0, 0, 879, - 879, 0, 0, 0, 0, 0, 2549, 2238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2550, 0, 0, 0, 0, 0, 0, 0, 0, - 2290, 877, 0, 877, 0, 886, 0, 0, 0, 0, - 0, 0, 0, 0, 2551, 0, 0, 2552, 0, 882, - 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, - 0, 880, 2290, 879, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2551, 886, 0, 2552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3953, 0, - 0, 0, 880, 0, 879, 886, 0, 0, 0, 4146, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 877, 0, 4158, - 0, 0, 0, 0, 0, 880, 2553, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4165, 0, 0, 0, - 4165, 0, 0, 0, 0, 4176, 4177, 4178, 0, 0, - 0, 947, 0, 0, 0, 0, 0, 0, 2553, 877, - 0, 0, 0, 886, 0, 947, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4208, 4209, 4210, 4211, 886, 0, 877, 0, 0, - 0, 0, 0, 0, 0, 0, 1774, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, - 0, 4227, 0, 0, 0, 0, 0, 0, 0, 4230, - 0, 4234, 4235, 4236, 0, 0, 2479, 0, 0, 0, - 0, 0, 0, 0, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 877, 883, 0, 2479, 0, - 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, - 2484, 2485, 2486, 2487, 2488, 0, 0, 877, 0, 0, - 0, 0, 883, 0, 882, 0, 0, 0, 0, 0, - 886, 0, 1774, 0, 0, 0, 0, 0, 0, 877, - 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 886, 0, 880, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, - 0, 0, 0, 0, 0, 0, 885, 4320, 0, 886, - 0, 0, 0, 880, 0, 0, 4326, 0, 0, 0, - 0, 882, 0, 0, 0, 0, 0, 1774, 0, 947, - 0, 0, 0, 1773, 0, 0, 0, 0, 0, 0, - 0, 0, 4336, 4337, 0, 0, 879, 4338, 0, 0, - 879, 0, 877, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 882, 0, 0, 0, 880, 0, 0, 4380, - 0, 0, 0, 0, 0, 0, 877, 0, 0, 0, - 0, 880, 0, 0, 880, 880, 0, 0, 946, 0, - 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, - 883, 877, 0, 0, 0, 0, 946, 0, 0, 0, - 946, 0, 0, 0, 946, 880, 880, 0, 0, 0, - 0, 4417, 0, 946, 0, 0, 4423, 0, 0, 0, - 0, 0, 4429, 0, 0, 0, 0, 0, 0, 0, - 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 947, 879, 0, 885, 0, 0, 0, 0, 886, - 0, 0, 4468, 0, 937, 0, 0, 879, 0, 0, - 0, 0, 879, 0, 0, 946, 0, 947, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4483, 0, 4484, 0, 946, 946, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1773, 946, 0, 0, - 1773, 0, 0, 0, 4509, 0, 937, 937, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 880, 0, 886, - 0, 877, 0, 0, 946, 0, 1773, 0, 0, 0, - 946, 883, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 883, 0, 946, 886, 0, 0, 0, 0, - 0, 946, 0, 0, 946, 0, 882, 0, 883, 0, - 946, 0, 0, 0, 947, 0, 0, 882, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 946, 0, 0, 882, 0, 885, 946, 0, 0, 0, - 0, 0, 0, 946, 0, 0, 885, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 946, 0, 0, - 0, 877, 885, 0, 0, 0, 0, 0, 0, 0, - 946, 0, 0, 0, 0, 1773, 0, 0, 0, 0, - 0, 946, 0, 0, 950, 0, 882, 877, 0, 0, - 0, 0, 0, 0, 0, 0, 984, 0, 0, 0, - 0, 882, 0, 0, 882, 882, 0, 1003, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 882, 882, 0, 886, 0, - 0, 1773, 0, 0, 0, 0, 0, 879, 0, 0, - 879, 0, 879, 0, 0, 0, 0, 879, 0, 0, - 1774, 0, 0, 0, 883, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, - 886, 0, 0, 4695, 0, 0, 4702, 0, 4703, 0, - 0, 0, 0, 0, 0, 879, 0, 0, 1774, 0, - 0, 4710, 0, 879, 0, 0, 937, 937, 885, 0, - 0, 0, 0, 4716, 0, 0, 1774, 4719, 0, 0, - 877, 0, 0, 0, 0, 0, 0, 0, 879, 0, - 0, 0, 0, 0, 0, 0, 4743, 0, 689, 0, - 0, 0, 0, 3152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4747, 0, 0, 882, 0, 0, - 4751, 0, 0, 0, 0, 0, 0, 877, 0, 0, - 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4786, 946, 0, 0, 4790, - 0, 0, 0, 0, 692, 3153, 0, 0, 879, 0, - 879, 0, 0, 0, 946, 4801, 4802, 4803, 4804, 0, - 693, 946, 0, 886, 0, 4808, 4809, 4810, 4811, 0, - 0, 0, 0, 0, 4813, 4814, 0, 0, 1029, 0, - 4821, 4822, 0, 4824, 4825, 4826, 4827, 4828, 4829, 4830, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4839, - 0, 0, 3154, 4842, 4843, 4844, 4845, 0, 0, 0, - 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, - 0, 0, 697, 0, 0, 0, 0, 4165, 0, 0, - 0, 0, 0, 0, 0, 698, 1773, 0, 0, 0, - 3155, 0, 1773, 0, 879, 4865, 0, 0, 0, 883, - 0, 0, 0, 0, 0, 877, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 879, 0, 886, 0, - 0, 3156, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 702, 879, 0, 883, 0, 0, 0, - 0, 4946, 0, 946, 0, 0, 886, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 886, 1022, - 0, 0, 0, 0, 4165, 1054, 0, 883, 0, 0, - 0, 4971, 0, 4972, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 877, 0, 879, 0, 0, 4986, 0, 0, 213, 3157, - 883, 0, 707, 0, 0, 0, 0, 0, 880, 0, - 0, 0, 880, 880, 879, 0, 0, 0, 0, 0, - 0, 885, 0, 0, 0, 0, 0, 0, 877, 1036, - 0, 886, 3158, 0, 0, 0, 879, 0, 711, 0, - 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, - 877, 0, 0, 0, 885, 0, 0, 0, 0, 0, - 0, 0, 946, 946, 0, 0, 0, 714, 0, 0, - 880, 0, 0, 0, 1038, 0, 880, 0, 0, 0, - 716, 0, 0, 1039, 0, 0, 0, 718, 0, 946, - 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 880, 0, 879, - 0, 0, 0, 877, 0, 0, 0, 2050, 723, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, - 0, 0, 1344, 879, 0, 0, 0, 0, 0, 0, - 0, 0, 886, 2543, 0, 0, 3985, 0, 0, 0, - 0, 1369, 0, 2544, 1773, 1773, 1773, 0, 879, 0, - 2545, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, - 0, 883, 0, 0, 0, 0, 2546, 5123, 5124, 5125, - 0, 0, 883, 5126, 5127, 5128, 5129, 0, 946, 0, - 5131, 0, 0, 0, 0, 0, 0, 0, 883, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 946, 1427, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 877, 885, 5150, 5151, 5152, 5153, - 5154, 0, 5156, 5157, 0, 0, 885, 0, 0, 0, - 0, 0, 0, 0, 5166, 5167, 0, 0, 0, 0, - 0, 883, 885, 886, 0, 0, 0, 0, 1563, 0, - 0, 0, 0, 0, 0, 0, 883, 0, 0, 883, - 883, 0, 0, 0, 0, 0, 0, 0, 0, 5173, - 0, 0, 0, 0, 0, 0, 0, 0, 882, 0, - 2547, 0, 882, 882, 0, 2548, 946, 0, 879, 0, - 883, 883, 0, 0, 0, 885, 880, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2549, 2238, 0, - 885, 886, 0, 885, 885, 0, 0, 0, 0, 0, - 0, 0, 2550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1773, 0, 877, 0, 0, 0, 946, - 882, 946, 0, 0, 885, 885, 882, 0, 0, 0, - 0, 0, 0, 0, 946, 0, 946, 0, 0, 0, - 0, 0, 1823, 2290, 0, 0, 0, 0, 0, 880, - 0, 5236, 0, 880, 0, 0, 0, 2551, 879, 0, - 2552, 0, 0, 0, 0, 0, 0, 882, 0, 0, - 1857, 1860, 1861, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 877, 879, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 883, 946, 0, 0, 0, 0, 0, 0, - 0, 886, 0, 0, 0, 0, 5287, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, - 2054, 0, 0, 0, 0, 946, 0, 0, 0, 2553, - 0, 0, 0, 0, 0, 880, 885, 2543, 0, 0, - 0, 0, 0, 0, 946, 0, 0, 2544, 0, 0, - 880, 0, 0, 0, 2545, 880, 0, 0, 0, 1344, - 0, 0, 0, 0, 0, 0, 946, 0, 0, 946, - 0, 0, 0, 0, 0, 1986, 0, 0, 0, 0, - 2546, 0, 0, 877, 1344, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 879, 628, 0, - 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, - 0, 0, 886, 886, 0, 0, 0, 0, 0, 2479, - 0, 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 0, - 1773, 0, 0, 0, 879, 0, 882, 0, 0, 879, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5391, 0, 0, 0, 3990, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5401, 0, 0, 0, 2547, 0, 5407, 5408, 0, 2548, - 0, 0, 0, 0, 0, 0, 5419, 0, 0, 877, - 0, 0, 0, 5421, 877, 877, 0, 0, 0, 0, - 0, 2549, 2238, 0, 2537, 0, 0, 0, 0, 882, - 0, 0, 0, 882, 0, 886, 2550, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5473, 5474, - 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, - 2051, 5482, 0, 5484, 2052, 2053, 2054, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2290, 5498, 886, - 0, 0, 0, 2543, 0, 0, 3997, 0, 0, 0, - 0, 2551, 879, 2544, 2552, 0, 0, 0, 0, 0, - 2545, 0, 0, 4165, 2628, 0, 0, 0, 0, 0, - 880, 5532, 0, 880, 0, 880, 0, 0, 0, 0, - 880, 946, 0, 0, 0, 0, 2546, 877, 0, 0, - 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 882, 0, 0, 0, 0, 882, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, - 0, 877, 1773, 0, 0, 0, 880, 1773, 0, 1773, - 5569, 0, 0, 2553, 0, 0, 0, 2745, 0, 0, - 0, 0, 0, 0, 0, 0, 2768, 0, 0, 0, - 0, 880, 0, 1773, 5589, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5596, 0, 0, 879, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2806, 0, - 0, 0, 0, 0, 2818, 2818, 0, 0, 2818, 0, - 2547, 0, 0, 0, 0, 2548, 0, 0, 0, 0, - 946, 2836, 0, 946, 2839, 879, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2549, 2238, 0, - 0, 880, 0, 880, 0, 0, 0, 879, 0, 0, - 0, 5655, 2550, 2479, 0, 0, 0, 0, 0, 0, - 0, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2892, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2290, 2911, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2551, 0, 0, - 2552, 0, 0, 946, 946, 0, 0, 0, 0, 0, - 879, 4165, 0, 0, 946, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, - 0, 946, 0, 883, 0, 0, 0, 883, 883, 0, - 0, 0, 0, 0, 0, 0, 0, 1320, 1320, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, - 882, 0, 5750, 882, 0, 882, 0, 0, 0, 0, - 882, 0, 0, 0, 0, 0, 5763, 885, 0, 2553, - 0, 885, 885, 2933, 0, 883, 0, 880, 0, 0, - 0, 883, 0, 0, 2936, 0, 0, 0, 0, 0, - 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1320, 0, 0, 882, 0, - 0, 879, 0, 0, 0, 0, 882, 0, 0, 0, - 0, 0, 883, 0, 0, 5802, 2980, 2818, 0, 885, - 2050, 0, 0, 2051, 0, 885, 0, 2052, 2053, 2054, - 0, 882, 0, 0, 0, 880, 0, 0, 0, 0, - 0, 3015, 0, 0, 0, 0, 2543, 0, 3028, 0, - 0, 0, 0, 0, 0, 0, 2544, 880, 0, 2479, - 0, 0, 0, 2545, 0, 0, 885, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 880, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2546, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 882, 0, 882, 0, 5876, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1685, 1689, 0, 0, - 3089, 0, 879, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5888, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5898, 0, - 0, 0, 0, 1344, 1344, 0, 0, 0, 0, 0, - 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, - 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, - 879, 0, 0, 0, 0, 0, 0, 882, 0, 0, - 946, 0, 0, 2547, 0, 0, 0, 0, 2548, 0, - 0, 880, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, - 2549, 2238, 0, 0, 0, 0, 0, 0, 0, 882, - 0, 0, 946, 0, 0, 2550, 0, 0, 0, 5970, - 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, - 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, - 0, 0, 2490, 0, 0, 0, 2290, 0, 0, 946, - 0, 0, 0, 0, 883, 0, 0, 0, 883, 0, - 2551, 0, 0, 2552, 0, 0, 0, 0, 0, 0, - 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 882, 0, 0, 2490, 0, - 0, 0, 0, 0, 0, 0, 0, 2050, 885, 2003, - 2051, 0, 885, 0, 2052, 2053, 2054, 882, 0, 0, - 0, 880, 0, 0, 0, 0, 0, 1773, 0, 0, - 0, 0, 0, 2543, 0, 0, 4579, 0, 0, 882, - 2018, 0, 0, 2544, 0, 0, 946, 0, 0, 0, - 2545, 0, 2553, 0, 0, 0, 0, 0, 0, 0, - 883, 0, 0, 0, 0, 0, 0, 0, 2037, 2038, - 2039, 0, 2041, 0, 0, 883, 2546, 0, 0, 0, - 883, 0, 0, 0, 4525, 0, 0, 0, 0, 0, - 0, 0, 2497, 0, 0, 0, 879, 0, 0, 0, - 0, 879, 879, 0, 0, 0, 0, 0, 0, 0, - 0, 880, 0, 0, 885, 0, 0, 0, 0, 0, - 0, 0, 882, 0, 0, 0, 0, 0, 0, 885, - 0, 0, 946, 0, 885, 0, 0, 880, 0, 0, - 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, - 0, 0, 2479, 0, 0, 0, 0, 0, 0, 0, - 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 0, - 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2547, 0, 0, 0, 0, 2548, 2595, 0, 0, 0, - 2607, 2612, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 879, 0, 0, 2549, 2238, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 946, 0, 946, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, - 880, 0, 0, 0, 0, 0, 0, 2551, 0, 0, - 2552, 946, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, - 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 882, 0, 0, 0, 0, 0, 880, 0, 0, - 0, 0, 880, 0, 0, 883, 0, 0, 883, 0, - 883, 1773, 0, 0, 3301, 883, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3306, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2553, - 0, 0, 0, 0, 0, 0, 0, 1427, 0, 885, - 0, 0, 885, 883, 885, 0, 0, 0, 0, 885, - 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, - 0, 0, 0, 0, 1427, 1427, 0, 882, 0, 0, - 0, 0, 0, 1685, 1685, 1685, 0, 885, 0, 0, - 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 880, 0, 0, 1344, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2479, - 885, 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 883, 0, 883, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 885, 0, 885, 0, 946, 0, 0, 2050, 0, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 946, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 882, 0, 0, 2543, 0, 0, 0, 0, 0, 0, - 880, 0, 883, 2544, 0, 0, 0, 0, 0, 1773, - 2545, 3518, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3540, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 2546, 882, 880, 0, - 0, 0, 882, 0, 883, 0, 0, 0, 3568, 0, - 2490, 0, 0, 0, 3204, 0, 885, 0, 0, 0, - 880, 0, 0, 0, 0, 0, 0, 0, 0, 2490, - 2490, 2490, 883, 2490, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 885, 0, - 0, 0, 0, 0, 0, 1773, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2050, 0, 0, 2051, - 0, 0, 0, 2052, 2053, 2054, 885, 0, 0, 0, - 0, 5007, 0, 880, 3646, 3647, 0, 0, 0, 0, - 883, 0, 2543, 0, 0, 0, 0, 0, 0, 0, - 2547, 0, 2544, 0, 0, 2548, 0, 0, 0, 2545, + 0, 0, 890, 0, 0, 0, 0, 0, 0, 883, + 0, 0, 0, 0, 0, 0, 0, 883, 0, 951, + 889, 0, 0, 0, 0, 0, 1790, 0, 0, 941, + 0, 889, 0, 5943, 0, 0, 0, 0, 0, 0, + 0, 0, 883, 0, 890, 0, 0, 889, 0, 0, + 2073, 887, 0, 2074, 0, 0, 0, 2075, 2076, 2077, + 0, 0, 881, 0, 886, 0, 0, 0, 0, 1791, + 0, 0, 890, 0, 941, 886, 0, 2579, 0, 0, + 0, 950, 0, 0, 0, 0, 0, 2580, 0, 0, + 0, 886, 887, 0, 2581, 0, 0, 0, 0, 950, + 0, 0, 0, 950, 881, 0, 0, 950, 0, 0, + 0, 0, 883, 0, 883, 0, 950, 0, 0, 0, + 2582, 0, 0, 0, 0, 887, 0, 6018, 0, 0, + 0, 0, 881, 0, 950, 0, 0, 0, 0, 0, + 890, 0, 0, 0, 0, 886, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6030, + 886, 0, 890, 886, 886, 0, 0, 0, 950, 0, + 6040, 884, 0, 0, 0, 884, 884, 0, 0, 0, + 0, 0, 0, 0, 890, 0, 0, 0, 950, 950, + 0, 0, 0, 0, 886, 886, 0, 0, 0, 0, + 881, 0, 0, 0, 889, 0, 0, 0, 883, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1790, + 950, 0, 881, 1790, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 884, 0, 2583, 0, 0, 0, 884, + 2584, 0, 0, 0, 881, 0, 0, 950, 2073, 1790, + 883, 2074, 0, 950, 0, 2075, 2076, 2077, 0, 0, + 0, 0, 0, 2585, 2264, 0, 890, 950, 0, 0, + 0, 0, 6107, 0, 950, 2579, 0, 950, 883, 0, + 884, 0, 0, 950, 2586, 2580, 0, 0, 951, 954, + 0, 0, 2581, 0, 0, 0, 0, 0, 0, 0, + 0, 988, 951, 950, 0, 0, 0, 0, 0, 950, + 890, 0, 1007, 0, 0, 0, 950, 887, 2582, 0, + 0, 0, 0, 0, 0, 2322, 881, 0, 887, 0, + 950, 886, 0, 1791, 0, 890, 0, 0, 0, 2587, + 0, 0, 2588, 950, 887, 0, 883, 0, 1790, 0, + 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, + 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2073, 0, 0, 2074, 0, + 883, 0, 2075, 2076, 2077, 881, 0, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2579, 887, 1790, 4062, 887, 887, 0, 0, + 0, 0, 2580, 0, 0, 0, 0, 0, 0, 2581, + 0, 0, 2589, 2583, 1791, 0, 0, 0, 2584, 0, + 0, 0, 0, 0, 0, 0, 0, 887, 887, 0, + 0, 0, 0, 0, 0, 2582, 0, 0, 0, 889, + 0, 2585, 2264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, - 1773, 0, 946, 0, 0, 882, 0, 2549, 2238, 3170, - 0, 0, 0, 0, 883, 2546, 0, 0, 0, 0, - 0, 3191, 2550, 3192, 885, 3194, 0, 0, 3208, 3211, - 3216, 0, 0, 0, 0, 0, 3225, 0, 0, 3230, - 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3238, 3239, 3240, 0, - 0, 0, 0, 2290, 0, 3770, 0, 0, 885, 0, - 0, 0, 0, 3241, 0, 0, 0, 2551, 0, 0, - 2552, 0, 0, 0, 880, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, - 0, 0, 0, 0, 0, 2050, 0, 0, 2051, 0, - 5013, 0, 2052, 2053, 2054, 0, 0, 0, 0, 0, - 0, 883, 0, 0, 946, 0, 0, 0, 0, 2547, - 882, 2543, 0, 0, 2548, 0, 0, 0, 0, 0, - 0, 2544, 0, 0, 0, 0, 883, 0, 2545, 0, - 946, 885, 0, 0, 0, 0, 2549, 2238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 882, 2553, - 0, 2550, 0, 0, 2546, 885, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 0, 880, 0, 0, 0, 0, - 0, 0, 2290, 0, 0, 0, 3248, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2551, 0, 0, 2552, - 0, 0, 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, 0, 882, 5014, 0, 0, 946, 0, 2479, - 0, 0, 0, 880, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 2547, 0, - 0, 0, 0, 2548, 0, 0, 883, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3267, - 0, 0, 0, 0, 0, 2549, 2238, 0, 2553, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2550, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 0, 0, 0, 0, 0, 2490, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4043, 0, 882, 2551, 883, 0, 2552, 0, - 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1427, 0, 0, 0, 0, 0, 0, - 0, 0, 883, 1773, 0, 0, 0, 0, 2479, 0, - 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, - 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, - 0, 1773, 0, 0, 0, 0, 885, 0, 0, 2490, - 0, 0, 0, 0, 2490, 0, 0, 2553, 0, 1773, - 0, 0, 0, 0, 3274, 3275, 3276, 3277, 3278, 3279, - 3280, 3281, 3282, 0, 3283, 0, 0, 0, 0, 0, - 0, 0, 0, 1320, 0, 882, 1685, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, - 0, 0, 0, 0, 880, 880, 0, 2050, 0, 0, - 2051, 0, 0, 0, 2052, 2053, 2054, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3241, 0, 0, - 0, 3248, 0, 2543, 3265, 883, 3267, 0, 0, 3318, - 0, 0, 0, 2544, 0, 0, 0, 0, 0, 0, - 2545, 0, 0, 882, 0, 0, 0, 2479, 0, 0, - 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 0, 0, 2546, 0, 0, 0, - 0, 0, 883, 0, 0, 0, 0, 883, 0, 885, - 0, 0, 2038, 2039, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, - 0, 885, 0, 0, 0, 5015, 0, 0, 0, 4252, - 0, 0, 0, 0, 0, 2050, 0, 0, 2051, 2818, - 0, 880, 2052, 2053, 2054, 0, 0, 0, 0, 0, - 0, 0, 0, 882, 0, 3460, 0, 0, 0, 0, - 0, 2543, 0, 0, 0, 0, 0, 0, 0, 0, - 2547, 2544, 0, 0, 0, 2548, 0, 0, 2545, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2549, 2238, 0, - 883, 0, 0, 0, 2546, 0, 0, 0, 0, 0, - 0, 0, 2550, 0, 0, 0, 0, 0, 0, 0, - 0, 2050, 0, 0, 2051, 0, 0, 0, 2052, 2053, - 2054, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2543, 0, 0, - 0, 0, 0, 2290, 885, 0, 0, 2544, 0, 0, - 0, 0, 0, 0, 2545, 0, 0, 2551, 0, 0, - 2552, 0, 0, 0, 0, 0, 0, 0, 0, 882, - 0, 0, 0, 0, 882, 882, 0, 0, 0, 0, - 2546, 0, 0, 0, 0, 0, 0, 0, 4384, 4385, - 4386, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4395, 0, 0, 2547, 0, - 0, 0, 0, 2548, 0, 883, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2549, 2238, 0, 4420, 4422, - 0, 0, 0, 4427, 0, 0, 0, 0, 0, 2553, - 2550, 0, 0, 883, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 885, - 5534, 0, 0, 0, 0, 883, 0, 0, 0, 0, - 3702, 3703, 1685, 0, 0, 0, 3707, 882, 0, 0, - 0, 2290, 0, 0, 2547, 0, 0, 0, 0, 2548, - 0, 0, 0, 0, 0, 2551, 0, 885, 2552, 0, - 0, 0, 0, 3736, 0, 0, 0, 0, 0, 0, - 0, 2549, 2238, 0, 0, 0, 0, 0, 0, 885, - 0, 882, 0, 0, 0, 0, 2550, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4508, 883, 2479, - 1344, 0, 0, 0, 0, 0, 0, 2480, 2481, 2482, - 2483, 2484, 2485, 2486, 2487, 2488, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2290, 0, 0, - 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, - 0, 2551, 0, 0, 2552, 0, 0, 2553, 0, 0, - 0, 0, 885, 2490, 2490, 0, 2490, 0, 0, 0, - 0, 3204, 3204, 0, 3976, 0, 3204, 0, 0, 0, - 2490, 0, 0, 2490, 0, 0, 0, 0, 2490, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, - 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, - 2490, 2490, 2490, 2490, 0, 0, 0, 3204, 3204, 0, - 2490, 0, 0, 0, 0, 0, 0, 0, 0, 883, - 0, 0, 5362, 0, 0, 0, 0, 2490, 0, 2490, - 4612, 4613, 4614, 2553, 0, 0, 2490, 2490, 2490, 2490, - 2490, 2490, 2490, 2490, 2490, 2490, 0, 2479, 0, 0, - 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 0, 0, 0, 0, 0, 0, - 0, 3932, 0, 885, 0, 0, 3938, 0, 0, 0, - 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2050, 0, 0, 2051, 0, - 0, 0, 2052, 2053, 2054, 2041, 0, 0, 0, 0, - 0, 640, 0, 0, 0, 0, 3216, 0, 3216, 3216, - 0, 2543, 0, 0, 0, 0, 0, 0, 0, 641, - 0, 2544, 4000, 2479, 0, 4003, 0, 4005, 2545, 0, - 883, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, - 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2546, 0, 0, 643, 0, 0, - 0, 0, 4024, 0, 4027, 0, 4029, 0, 0, 0, - 0, 0, 0, -868, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 885, 0, 0, 0, 0, 0, - 0, 644, 0, 0, 0, 0, 0, 645, 883, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2490, 0, 0, 646, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, - 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, - 0, 0, 885, 0, 4094, 0, 650, 0, 0, 2595, - 651, 0, 0, 0, 0, 0, 0, 0, 2547, 0, - 0, 0, 0, 2548, 2612, 0, 0, 0, 0, -1069, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2549, 2238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2550, 0, 0, 0, 0, 0, 652, 0, 883, 0, - 0, 0, 0, 0, 0, 0, -604, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4144, - 0, 0, 0, 0, 0, 0, 0, 4875, 0, 0, - 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2551, 0, 653, 2552, 0, - 654, 0, 885, 0, 0, 0, 0, 0, 0, 4907, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, - 0, 3028, -462, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, - 0, 658, 0, 0, 883, 0, 4965, 0, -462, 883, - 883, 659, 0, 0, 2490, 2490, 0, 2553, 0, 2490, - 0, 0, 0, 3089, 0, 0, 0, 0, 0, 0, - 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, - 0, 0, 0, -462, 0, 0, 662, 663, 2490, 664, - 665, 0, 0, 0, 0, 0, 0, 0, 885, 0, - 0, 0, 0, 885, 885, 666, 0, 0, 0, 0, - 0, 0, 667, 0, 0, 668, 0, 0, 669, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2479, 0, 0, - 0, 0, 883, 0, 0, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5050, 5051, 5052, 5053, 0, 0, - 0, 0, 1685, 0, 0, 0, 0, 0, 1685, 0, + 0, 0, 2586, 2073, 0, 0, 2074, 0, 0, 884, + 2075, 2076, 2077, 0, 0, 890, 0, 0, 0, 1791, + 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, + 2579, 0, 0, 0, 0, 0, 883, 0, 0, 0, + 2580, 0, 0, 2322, 0, 0, 889, 2581, 0, 0, + 0, 0, 0, 4004, 2513, 0, 0, 2587, 0, 0, + 2588, 883, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, + 2521, 2522, 0, 2582, 0, 881, 0, 0, 0, 4030, + 0, 0, 884, 0, 0, 0, 884, 889, 0, 950, + 2583, 1790, 0, 0, 0, 2584, 0, 0, 0, 0, + 0, 0, 0, 0, 887, 890, 0, 0, 950, 0, + 0, 0, 0, 0, 0, 950, 0, 0, 2585, 2264, + 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 890, 0, 0, 0, 0, 0, 0, 0, 2586, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 2589, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 941, 0, 0, 0, 0, 881, 0, 0, 0, 4067, + 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, + 2322, 0, 0, 0, 0, 0, 0, 0, 2583, 884, + 0, 881, 0, 2584, 2587, 0, 0, 2588, 0, 0, + 0, 0, 0, 0, 884, 0, 1790, 0, 0, 884, + 0, 0, 1790, 0, 0, 0, 2585, 2264, 0, 0, + 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 941, 941, 0, 0, 0, 2586, 884, 0, + 0, 0, 0, 0, 1027, 0, 0, 0, 0, 0, + 1059, 0, 2513, 0, 0, 0, 0, 0, 0, 0, + 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, + 0, 0, 0, 0, 890, 0, 0, 0, 2322, 0, + 0, 0, 0, 0, 0, 0, 0, 2589, 0, 0, + 0, 951, 2587, 0, 0, 2588, 0, 950, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 883, 889, 0, 0, 0, 0, 0, 0, 0, + 0, 890, 0, 889, 0, 0, 890, 0, 0, 0, + 0, 0, 0, 0, 881, 0, 0, 883, 0, 889, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 881, 0, 0, 0, 2589, 881, 0, 0, 2513, + 0, 0, 0, 889, 0, 0, 0, 0, 2514, 2515, + 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 889, 0, + 0, 889, 889, 0, 0, 0, 0, 0, 0, 0, + 0, 1360, 0, 0, 0, 0, 0, 950, 950, 1791, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1385, 0, 889, 889, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 950, 886, 0, 950, 0, 886, + 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1791, 0, 0, 0, 890, 0, + 883, 0, 941, 941, 0, 884, 0, 2513, 884, 0, + 884, 0, 1791, 0, 0, 884, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, 0, + 1443, 0, 0, 0, 0, 0, 0, 886, 0, 0, + 0, 0, 0, 886, 0, 0, 0, 883, 0, 1790, + 1790, 1790, 883, 0, 0, 0, 0, 0, 881, 0, + 0, 2073, 0, 884, 2074, 0, 0, 0, 2075, 2076, + 2077, 884, 0, 0, 950, 0, 0, 1579, 0, 0, + 0, 0, 0, 0, 886, 0, 0, 0, 2579, 0, + 0, 4074, 0, 950, 0, 0, 884, 0, 2580, 889, + 0, 0, 0, 0, 0, 2581, 0, 0, 0, 0, + 0, 0, 0, 2073, 0, 950, 2074, 0, 0, 0, + 2075, 2076, 2077, 0, 0, 890, 0, 0, 0, 0, + 0, 2582, 0, 0, 0, 0, 0, 0, 0, 0, + 2579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2580, 0, 0, 0, 0, 0, 0, 2581, 0, 0, + 0, 0, 0, 0, 0, 890, 884, 0, 884, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2582, 0, 881, 0, 890, 0, 0, + 0, 0, 1840, 0, 0, 0, 0, 0, 0, 0, + 2073, 950, 0, 2074, 883, 0, 0, 2075, 2076, 2077, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1874, 1877, 1878, 0, 881, 0, 2579, 887, 0, + 4685, 0, 887, 887, 0, 0, 0, 2580, 0, 0, + 0, 0, 0, 0, 2581, 0, 2583, 881, 1790, 0, + 0, 2584, 0, 0, 950, 0, 950, 0, 0, 0, + 890, 0, 884, 0, 0, 0, 0, 0, 0, 950, + 2582, 950, 0, 0, 2585, 2264, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 887, 0, 0, 886, 0, 2586, 887, 0, 2583, 0, + 0, 0, 0, 2584, 884, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 881, 0, 0, 0, 0, 0, 2585, 2264, 0, 0, + 1360, 883, 884, 0, 0, 0, 2322, 887, 950, 0, + 0, 0, 0, 0, 0, 0, 0, 2586, 0, 0, + 2587, 0, 0, 2588, 0, 0, 0, 0, 1360, 0, + 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, + 886, 883, 0, 0, 0, 0, 0, 0, 0, 0, + 950, 890, 0, 0, 0, 2583, 0, 0, 2322, 0, + 2584, 0, 0, 883, 0, 0, 0, 0, 0, 950, + 884, 0, 2587, 950, 0, 2588, 0, 0, 0, 0, + 0, 0, 0, 2585, 2264, 0, 0, 0, 0, 0, + 0, 0, 884, 0, 950, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2586, 0, 0, 0, 0, 0, + 0, 881, 0, 2589, 884, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4407, 0, 0, - 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, - 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3976, - 3976, 0, 0, 3204, 3204, 3204, 3204, 0, 0, 3204, - 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3976, - 689, 0, 0, 0, 0, 1025, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2490, 0, 1, 2490, 0, 2490, 0, 0, - 3976, 3976, 0, 0, 2, 0, 3, 4, 0, 0, - 0, 0, 0, 1026, 0, 0, 2490, 3204, 3204, 2490, - 0, 2490, 0, 0, 0, 0, 692, 1027, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 1028, 0, - 0, 0, 693, 0, 0, 0, 7, 0, 8, 9, - 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, - 1029, 0, 0, 0, 0, 0, 0, 4526, 0, 12, - 0, 13, 0, 0, 0, 4530, 0, 4531, 0, 0, - 0, 0, 0, 0, 1030, 4533, 2490, 4534, 14, 0, - 0, 15, 0, 0, 0, 696, 0, 0, 0, 0, - 0, 0, 0, 0, 697, 0, 16, 0, 17, 0, - 0, 0, 18, 0, 4556, 4557, 4558, 698, 5512, 0, - 0, 0, 1031, 0, 0, 0, 20, 0, 21, 0, - 0, 0, 0, 3225, 0, 22, 2490, 0, 0, 0, - 0, 4583, 0, 0, 4586, 0, 4588, 0, 1032, 0, - 0, 0, 23, 0, 0, 0, 4591, 0, 0, 0, - 0, 0, 0, 0, 4598, 4599, 0, 5265, 0, 24, - 0, 0, 0, 1033, 0, 0, 0, 0, 5275, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 26, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 1034, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4657, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 705, 0, 0, 4671, 0, 0, 0, 0, 0, 0, - 213, 1035, 0, 0, 707, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1036, 0, 0, 1037, 31, 0, 0, 710, 0, - 711, 32, 33, 0, 34, 0, 0, 712, 0, 35, - 713, 0, 4458, 0, 0, 36, 0, 0, 37, 0, - 0, 0, 0, 0, 0, 38, 0, 0, 0, 714, - 0, 39, 40, 0, 0, 0, 1038, 0, 0, 41, - 0, 0, 716, 42, 0, 1039, 3204, 0, 0, 718, - 0, 0, 0, 43, 0, 0, 0, 1040, 0, 720, - 0, 0, 0, 0, 1041, 0, 0, 0, 44, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 45, 2490, - 723, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 5457, 0, 0, 0, - 0, 1344, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 5487, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 0, 0, 0, 0, 56, 0, 0, -136, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2490, 198, - 0, 0, 2490, 2490, 0, 2490, 2490, 0, 0, 0, - 0, 3976, 3976, 3976, 3976, 199, 0, 0, 3976, 3976, - 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 2490, 2490, - 2490, 0, 0, 200, 0, 0, 0, 0, 0, 201, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 0, 202, 2490, 0, - 2490, 4953, 4954, 2490, 0, 0, 3976, 3976, 203, 0, - 2490, 2490, 4961, 0, 5586, 0, 0, 204, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, + 0, 0, 0, 886, 0, 2322, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 886, 2587, + 0, 0, 2588, 886, 0, 2589, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2573, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, + 0, 0, 886, 0, 1790, 0, 884, 0, 4615, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2513, 887, 0, 0, 0, + 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, 0, 0, 0, 0, 0, 0, 0, + 884, 0, 0, 0, 0, 0, 0, 881, 0, 0, + 0, 0, 2589, 0, 0, 2664, 890, 883, 0, 0, + 0, 0, 0, 0, 0, 884, 0, 2513, 0, 0, + 0, 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, + 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, 887, + 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, + 0, 0, 0, 0, 0, 0, 0, 2804, 0, 0, + 0, 0, 0, 0, 2513, 0, 0, 0, 0, 0, + 0, 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, + 2521, 2522, 0, 889, 0, 950, 890, 889, 889, 2842, + 0, 0, 0, 0, 0, 2854, 2854, 0, 0, 2854, + 0, 0, 0, 883, 0, 0, 887, 0, 0, 0, + 0, 0, 2872, 0, 0, 2875, 0, 0, 0, 0, + 0, 887, 0, 0, 0, 0, 887, 0, 0, 0, + 0, 0, 0, 0, 0, 884, 1790, 0, 0, 0, + 0, 1790, 0, 1790, 0, 889, 881, 0, 0, 886, + 0, 889, 886, 0, 886, 887, 0, 0, 0, 886, + 0, 0, 0, 0, 0, 0, 0, 1790, 0, 0, + 0, 2928, 883, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2947, 0, 0, 0, 0, + 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, + 0, 0, 0, 0, 950, 886, 0, 950, 890, 0, + 0, 0, 0, 890, 890, 884, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1335, 1335, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 881, 0, + 0, 0, 0, 881, 881, 0, 0, 0, 0, 0, + 0, 0, 883, 0, 0, 2969, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2972, 950, 950, 0, + 886, 0, 886, 0, 2073, 0, 0, 2074, 950, 0, + 0, 2075, 2076, 2077, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 950, 890, 0, 0, 0, + 0, 2579, 0, 0, 0, 1335, 0, 0, 3016, 2854, + 0, 2580, 0, 0, 0, 0, 2073, 0, 2581, 2074, + 0, 0, 0, 2075, 2076, 2077, 0, 0, 0, 0, + 0, 0, 0, 3051, 0, 0, 0, 0, 0, 0, + 3064, 0, 0, 2579, 2582, 890, 0, 0, 0, 0, + 0, 0, 0, 2580, 884, 0, 881, 0, 0, 0, + 2581, 889, 887, 0, 0, 887, 886, 887, 0, 0, + 0, 0, 887, 0, 0, 0, 950, 0, 0, 1790, + 0, 0, 0, 0, 883, 0, 2582, 0, 0, 883, + 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 884, 0, 0, 0, 881, 884, 0, 886, 0, + 0, 0, 0, 3125, 0, 0, 0, 0, 0, 0, + 887, 0, 0, 0, 0, 0, 1701, 1705, 887, 0, + 0, 0, 0, 0, 889, 0, 886, 0, 889, 0, + 5130, 0, 0, 0, 0, 0, 1360, 1360, 0, 0, + 0, 0, 0, 887, 0, 0, 0, 0, 0, 2583, + 0, 0, 0, 3179, 2584, 0, 3181, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5136, 0, 0, 0, 0, 2585, 2264, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2583, 883, 0, 886, 0, 2584, 0, 2586, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 887, 0, 887, 886, 0, 0, 2585, + 2264, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 889, 0, 0, 0, 0, 0, 0, 886, 2322, + 2586, 883, 0, 0, 0, 2524, 889, 0, 884, 0, + 0, 889, 0, 2587, 0, 0, 2588, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 889, 2322, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2587, 0, 0, 2588, 0, + 0, 0, 2524, 0, 0, 950, 0, 0, 0, 887, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2589, 0, 0, 950, + 0, 887, 0, 0, 0, 2022, 0, 0, 0, 0, + 0, 950, 0, 0, 886, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2073, 884, 0, 2074, 0, 887, + 0, 2075, 2076, 2077, 0, 0, 0, 0, 2589, 886, + 2041, 0, 0, 0, 0, 0, 950, 0, 0, 0, + 0, 2579, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2580, 0, 0, 0, 884, 0, 0, 2581, 2060, + 2061, 2062, 0, 2064, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, + 0, 0, 0, 2531, 2582, 0, 0, 887, 2513, 0, + 0, 0, 0, 0, 0, 0, 0, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 887, + 0, 0, 0, 0, 1790, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2513, 887, 0, 950, 0, 0, 0, 0, 0, 2514, + 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, + 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, + 889, 0, 889, 0, 5137, 0, 0, 889, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2631, 886, + 0, 0, 2643, 2648, 0, 0, 0, 0, 0, 2583, + 0, 0, 0, 0, 2584, 0, 0, 0, 0, 0, + 0, 0, 0, 887, 0, 0, 0, 0, 0, 950, + 0, 0, 0, 0, 0, 889, 0, 2585, 2264, 0, + 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2586, 0, + 0, 2524, 0, 0, 0, 2524, 0, 887, 889, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 884, 0, 0, 0, 0, 0, 0, 0, 886, + 0, 0, 887, 0, 0, 0, 0, 0, 0, 2322, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2587, 0, 886, 2588, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3358, 0, 0, 889, 0, + 889, 0, 0, 0, 0, 0, 3363, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 950, 0, 950, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2073, 0, 0, 2074, 1443, 0, + 0, 2075, 2076, 2077, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2579, 0, 0, 950, 0, 2589, 0, 0, 0, + 0, 2580, 0, 0, 0, 0, 0, 884, 2581, 0, + 0, 0, 0, 0, 0, 1443, 1443, 0, 0, 0, + 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2582, 1701, 1701, 1701, 0, 0, + 0, 0, 887, 0, 1790, 0, 0, 0, 886, 1360, + 0, 0, 2073, 0, 0, 2074, 0, 0, 0, 2075, + 2076, 2077, 0, 0, 0, 0, 889, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 884, 0, 0, 2579, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2580, + 0, 0, 0, 0, 889, 886, 2581, 0, 2513, 0, + 886, 0, 0, 5138, 0, 0, 0, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, + 0, 0, 2582, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2583, + 0, 0, 0, 0, 2584, 0, 0, 0, 887, 0, + 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2524, 0, 0, 0, 0, 2585, 2264, 0, + 0, 0, 3576, 0, 889, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 3257, 884, 3598, 2586, 0, + 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, + 2524, 2524, 2524, 0, 2524, 0, 0, 2073, 0, 3626, + 2074, 0, 0, 0, 2075, 2076, 2077, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2583, 0, 2322, + 0, 0, 2584, 0, 2579, 0, 0, 0, 0, 0, + 0, 0, 886, 2587, 2580, 0, 2588, 0, 0, 0, + 0, 2581, 0, 950, 0, 2585, 2264, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, + 0, 0, 0, 0, 0, 0, 2586, 2582, 889, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 887, 0, 0, 0, 3704, 3705, 0, 1790, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2322, 884, 0, + 0, 0, 889, 884, 884, 0, 0, 0, 0, 0, + 0, 2587, 0, 0, 2588, 0, 2589, 0, 887, 0, + 0, 0, 0, 887, 0, 0, 0, 889, 0, 0, + 0, 0, 0, 0, 3207, 0, 0, 0, 0, 0, + 0, 0, 0, 3228, 3228, 3233, 3239, 5666, 0, 886, + 3244, 0, 3245, 0, 3247, 0, 0, 3261, 3264, 3269, + 0, 0, 0, 0, 0, 3278, 0, 0, 3283, 0, + 0, 0, 2583, 0, 0, 0, 3828, 2584, 0, 1790, + 0, 0, 0, 0, 0, 3291, 3292, 3293, 0, 886, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2585, 2264, 0, 3294, 2589, 0, 0, 0, 0, 0, + 0, 886, 0, 0, 0, 0, 884, 0, 2513, 0, + 0, 2586, 0, 0, 0, 0, 0, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, + 0, 0, 0, 0, 1790, 0, 950, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2322, 0, 2073, 884, 0, 2074, 0, 0, + 0, 2075, 2076, 2077, 0, 887, 2587, 0, 0, 2588, + 5493, 0, 0, 0, 886, 0, 0, 889, 0, 0, + 0, 2579, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2580, 0, 0, 0, 0, 2513, 0, 2581, 0, + 0, 0, 0, 0, 0, 2514, 2515, 2516, 2517, 2518, + 2519, 2520, 2521, 2522, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2582, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3301, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2589, + 0, 0, 950, 0, 0, 0, 0, 889, 0, 0, + 0, 0, 1548, 0, 0, 0, 0, 0, 1549, 0, + 0, 0, 0, 0, 3320, 1615, 0, 0, 950, 0, + 0, 0, 887, 889, 0, 886, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1616, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1551, 0, 0, 0, 0, 0, 0, + 0, 0, 887, 0, 0, 0, 0, 3322, 0, 2583, + 0, 2524, 0, 0, 2584, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 887, 0, 0, 0, 1617, 0, + 0, 2513, 0, 0, 0, 0, 0, 2585, 2264, 0, + 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 1552, + 0, 0, 0, 0, 0, 0, 1553, 0, 2586, 1554, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4130, 0, 950, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1555, 0, 0, 0, + 0, 0, 0, 0, 0, 1443, 0, 887, 0, 2322, + 0, 886, 0, 0, 0, 0, 889, 0, 0, 0, + 0, 2524, 0, 2587, 0, 0, 2588, 0, 1618, 0, + 0, 0, 1556, 2524, 0, 0, 0, 0, 2524, 1548, + 0, 0, 0, 0, 0, 1549, 0, 0, 0, 0, + 0, 0, 1615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 889, 0, 0, 0, 0, 889, 0, + 0, 0, 0, 0, 1616, 0, 0, 0, 0, 0, + 886, 0, 0, 0, 1619, 0, 0, 0, 1620, 0, + 1551, 0, 0, 0, 3329, 3330, 3331, 3332, 3333, 3334, + 3335, 3336, 3337, 1621, 3338, 0, 0, 1558, 0, 0, + 0, 0, 0, 0, 0, 1335, 2589, 1559, 1701, 0, + 0, 0, 0, 0, 1790, 1617, 1560, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 1622, 1561, 0, + 0, 0, 0, 0, 0, 0, 1552, 0, 0, 0, + 0, 0, 0, 1553, 0, 0, 1554, 0, 0, 3294, + 0, 0, 0, 3301, 0, 0, 3320, 0, 3322, 1790, + 0, 3375, 0, 0, 0, 0, 0, 1623, 0, 0, + 1563, 1564, 1624, 1555, 0, 0, 0, 1790, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 886, 0, 0, 0, 0, 0, 1625, 0, 0, 0, + 0, 0, 1626, 0, 0, 1618, 0, 0, 2513, 1556, + 889, 0, 0, 0, 2061, 2062, 1627, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, + 0, 1619, 4339, 0, 0, 1620, 0, 0, 0, 0, + 0, 1566, 2854, 0, 0, 0, 0, 0, 0, 0, + 1621, 0, 0, 0, 1558, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1559, 0, 0, 3518, 0, 0, + 0, 0, 0, 1560, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1622, 1561, 0, 0, 0, 0, + 0, 0, 886, 887, 0, 0, 0, 886, 886, 0, + 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, + 0, 0, 0, 0, 3675, 0, 0, 1563, 1564, 1624, + 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, + 0, 0, 0, 1625, 0, 0, 0, 0, 0, 3676, + 0, 0, 652, 0, 0, 0, 0, 0, 0, 889, + 0, 0, 0, 1627, 0, 653, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -876, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4471, 4472, 4473, 0, 0, 0, 0, 0, 654, + 886, 0, 0, 887, 0, 655, 0, 0, 4482, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1566, 0, + 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, + 0, 0, 889, 0, 657, 0, 0, 0, 0, 0, + 0, 4507, 4509, 658, 0, 0, 4514, 0, 0, 886, + 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, + 0, 0, 0, 0, 0, 660, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -1082, + 0, 0, 3760, 3761, 1701, 0, 0, 0, 3765, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3794, 0, 0, 0, 0, + 0, 0, 662, 0, 0, 887, 0, 0, 0, 0, + 887, 887, -612, 0, 0, 0, 0, 2524, 0, 0, + 0, 0, 1360, 889, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, + 0, 0, 0, 2524, 0, 0, 0, 0, 0, 2524, + 0, 0, 0, 663, 2524, 2524, 664, 2524, 0, 0, + 0, 0, 3257, 3257, 0, 4053, 0, 3257, 0, 0, + 0, 2524, 0, 0, 2524, 0, 0, 665, 0, 2524, + 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, + 0, 666, 0, 2524, 0, 0, 0, 0, -466, 0, + 0, 2524, 2524, 2524, 2524, 0, 0, 0, 3257, 3257, + 0, 2524, 0, 0, 0, 0, 0, 0, 667, 0, + 0, 0, 0, 887, 0, 0, 0, 0, 668, 0, + 2524, 0, 2524, 0, 0, -466, 0, 0, 669, 2524, + 2524, 2524, 2524, 2524, 2524, 2524, 2524, 2524, 2524, 0, + 0, 0, 0, 0, 0, 0, 0, 670, 0, 889, + 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, + 0, -466, 887, 0, 672, 673, 0, 674, 675, 0, + 0, 0, 4720, 4721, 4722, 2524, 0, 0, 0, 0, + 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 678, 3989, 0, 679, 0, 0, 3995, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -466, + 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2064, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3269, 0, 3269, 3269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 4077, 0, 0, 4080, 0, 4082, 0, 0, 0, + 0, 2, 0, 3, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 4109, 0, 4112, 0, 4114, 2524, 0, + 0, 0, 0, 7, 0, 8, 9, 0, 0, 0, + 0, 0, 10, 0, 11, 0, 0, 0, 889, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 17, 0, 0, 0, 18, + 0, 0, 699, 0, 0, 5644, 0, 700, 0, 0, + 0, 0, 0, 20, 0, 21, 0, 0, 4181, 0, + 0, 0, 22, 2631, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2648, 0, + 23, 0, 0, 0, 0, 701, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 702, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, + 889, 0, 0, 0, 0, 889, 889, 0, 0, 0, + 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4231, 25, 26, 0, 0, 0, 4985, + 27, 0, 0, 0, 0, 0, 705, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 706, 0, 0, + 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, + 0, 5017, 29, 0, 0, 0, 0, 0, 0, 708, + 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, + 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, + 2524, 2524, 0, 3064, 0, 2524, 0, 0, 0, 0, + 0, 0, 711, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, + 31, 0, 0, 0, 2524, 0, 32, 33, 5075, 34, + 0, 0, 0, 0, 35, 0, 0, 4545, 0, 0, + 36, 0, 0, 37, 0, 3125, 0, 0, 0, 0, + 38, 0, 0, 0, 0, 712, 0, 39, 40, 0, + 0, 0, 0, 0, 0, 41, 0, 889, 0, 42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 44, 713, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, + 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, + 715, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 213, 716, 47, 0, 717, 0, 0, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 718, 0, 0, 719, 0, 0, 0, 720, 0, + 0, 721, 0, 0, 50, 0, 1701, 0, 722, 0, + 0, 723, 1701, 0, 0, 0, 0, 5175, 5176, 5177, + 5178, 0, 0, 56, 0, 0, -136, 0, 0, 0, + 724, 0, 0, 0, 0, 0, 0, 725, 0, 0, + 0, 0, 0, 0, 726, 0, 0, 727, 0, 2524, + 0, 728, 0, 0, 0, 2524, 0, 0, 0, 729, + 0, 730, 0, 0, 0, 0, 731, 197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4494, 733, 0, 4053, 4053, 0, 0, 3257, 3257, + 3257, 3257, 0, 0, 3257, 3257, 3257, 3257, 3257, 3257, + 3257, 3257, 3257, 3257, 4053, 0, 0, 0, 198, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 199, 0, 0, 2524, 0, 0, + 2524, 0, 2524, 0, 0, 4053, 4053, 0, 0, 0, + 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2524, + 3257, 3257, 2524, 0, 2524, 0, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, + 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 0, 0, 0, 0, 0, 0, 0, 2490, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5003, - 0, 0, 0, 2490, 0, 0, 209, 0, 0, 0, - 0, 5009, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, - 0, 0, 0, 0, 5662, 0, 0, 0, 0, 0, + 4616, 2524, 208, 0, 0, 0, 0, 0, 4620, 0, + 4621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3228, 0, 0, 0, 3228, 3228, 0, 0, 0, 0, + 3239, 0, 0, 209, 0, 0, 0, 0, 4639, 0, + 4640, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 210, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4662, 4663, 4664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5028, 5030, 0, 0, 0, 0, 0, 0, 5034, 5035, - 0, 0, 5684, 5036, 0, 0, 0, 5037, 0, 211, - 5040, 5041, 0, 0, 0, 5045, 0, 0, 0, 0, - 0, 5049, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 213, 214, 0, 0, 215, 0, 0, + 0, 0, 0, 0, 0, 0, 3278, 0, 0, 0, + 0, 0, 0, 0, 4689, 0, 211, 4692, 0, 4694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5081, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1320, 0, 216, 0, 0, 217, 0, 0, - 5095, 218, 0, 219, 0, 0, 0, 0, 0, 0, - 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, - 5105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 0, 224, 225, 0, 0, 226, 0, - 0, 0, 227, 0, 0, 0, 0, 0, 3976, 0, - 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4700, 0, 0, + 212, 0, 5391, 0, 0, 4707, 4708, 0, 0, 0, + 213, 214, 4713, 5401, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, + 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, + 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5169, 0, 0, 0, 0, 0, 0, 5171, 0, + 222, 0, 0, 0, 0, 0, 0, 223, 0, 4765, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 0, + 0, 227, 0, 0, 0, 0, 4779, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 2490, 0, 0, 0, - 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 0, 5206, 0, 0, - 0, 2490, 3204, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2490, 0, 2490, 0, 0, 0, 2490, 2490, 2490, 2490, - 0, 0, 2490, 2490, 0, 0, 0, 2490, 0, 0, - 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5293, 0, 0, 0, 0, 0, 5297, 5298, 5299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2490, 0, 2490, 0, 0, 0, 0, 0, 0, - 0, 0, 5310, 5311, 0, 0, 5312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, - 0, 0, 0, 5332, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5350, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5589, 0, 0, + 0, 0, 1360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5365, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5619, 0, 0, 0, 0, 2524, 0, 0, 0, + 2524, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2524, + 2524, 0, 0, 0, 0, 4053, 4053, 4053, 4053, 0, + 0, 0, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, + 4053, 4053, 2524, 2524, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2524, + 0, 0, 2524, 0, 2524, 0, 0, 0, 0, 0, + 2524, 0, 0, 4053, 4053, 0, 0, 2524, 2524, 0, + 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5063, 5064, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5723, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2524, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 0, 3976, 3204, 2490, - 2490, 2490, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2490, 2490, 2490, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3204, 0, 0, - 3976, 0, 0, 0, 2490, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5114, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, + 0, 0, 0, 5132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5151, 5153, 0, 0, 0, 0, 0, 5821, + 5157, 5158, 0, 0, 0, 5159, 0, 0, 0, 0, + 0, 0, 5162, 0, 0, 5165, 5166, 0, 0, 0, + 0, 0, 5171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5206, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1335, 0, 0, 0, + 0, 0, 0, 0, 5220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4053, 0, 0, 0, + 0, 0, 0, 0, 5230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2524, 2524, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5295, 0, 0, + 0, 0, 0, 0, 5297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3976, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5603, 0, 0, - 0, 3976, 0, 3204, 0, 0, 0, 0, 0, 0, + 0, 0, 2524, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2524, 0, 2524, 0, 0, 0, 2524, 2524, 2524, + 0, 0, 2524, 5332, 0, 2524, 2524, 0, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5639, + 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, + 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5705, 0, + 0, 0, 0, 0, 0, 2524, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 5350, 0, + 5423, 0, 0, 0, 0, 0, 5427, 5428, 5429, 0, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5442, 5443, 0, 0, 5444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5463, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5496, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2524, 0, 4053, 3257, 2524, 2524, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2524, 2524, 2524, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3257, 0, 0, 4053, + 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3204, 3204, 5837, 5837, 5837, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, - 0, 0, 5350, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3976, 3976, - 0, 0, 5905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5930, 0, 5837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2064, 0, 0, 4053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 1236, 684, 0, 1237, 1238, 1239, - 745, 1240, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 1679, - 243, 244, 245, 0, 0, 6006, 0, 1241, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, - 264, 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, - 1248, 273, 0, 274, 275, 276, 277, 1249, 0, 1250, - 5837, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, - 301, 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 1680, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 1685, - 333, 334, 335, 336, 1261, 338, 339, 340, 341, 1262, - 1263, 343, 0, 344, 345, 346, 1264, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 1265, 0, 1266, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 381, 382, - 383, 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 1270, 401, 402, 403, 0, 404, 405, 406, 1271, - 1272, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 1273, - 426, 1274, 428, 429, 430, 431, 432, 433, 434, 435, - 1275, 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, - 1279, 445, 446, 447, 0, 448, 449, 0, 0, 1280, - 451, 452, 0, 0, 453, 454, 455, 456, 457, 458, - 1281, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 1282, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 1283, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 1284, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 1285, 529, 530, 531, 532, - 533, 534, 535, 536, 1286, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 1287, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 1288, 1289, 0, 0, 566, - 567, 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 1293, 579, 580, 581, 582, 583, - 1294, 0, 584, 585, 586, 587, 588, 589, 1295, 1681, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 1296, 1297, - 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, - 617, 1304, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1305, 1306, 1682, 0, 0, 0, 0, 0, - 0, 1308, 1683, 234, 0, 1236, 684, 0, 1237, 1238, - 1239, 745, 1240, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 1241, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 1242, 259, 1243, 1244, 0, 262, - 263, 264, 265, 266, 267, 268, 1245, 1246, 269, 270, - 1247, 1248, 273, 0, 274, 275, 276, 277, 1249, 0, - 1250, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, - 1257, 301, 302, 303, 304, 305, 306, 1258, 1259, 309, - 1260, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 860, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 1261, 338, 339, 340, 341, - 1262, 1263, 343, 0, 344, 345, 346, 1264, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 1265, 0, 1266, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 1267, 1268, 0, 1269, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 1270, 401, 402, 403, 0, 404, 405, 406, - 1271, 1272, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 1273, 426, 1274, 428, 429, 430, 431, 432, 433, 434, - 435, 1275, 437, 1276, 438, 439, 440, 441, 1277, 1278, - 443, 1279, 445, 446, 447, 0, 448, 449, 0, 0, - 1280, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 1281, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 1282, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 1283, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 1284, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 40, 524, 525, 526, 527, 528, 1285, 529, 530, 531, - 532, 533, 534, 535, 536, 1286, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 1287, 553, 0, 554, 555, 44, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 1288, 1289, 0, 0, - 566, 567, 1290, 569, 1291, 1292, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 1293, 579, 580, 581, 582, - 583, 1294, 0, 584, 585, 586, 587, 588, 1175, 1295, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 49, 598, 599, 600, 601, 602, 603, 604, 1296, - 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, 615, - 616, 617, 1304, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 1305, 1306, 0, 0, 0, 0, 0, - 0, 0, 1308, 5563, 234, 0, 1236, 684, 0, 1237, - 1238, 1239, 745, 1240, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4053, 0, 3257, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5740, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5776, 0, 0, + 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 2524, + 0, 0, 0, 0, 0, 0, 5842, 0, 0, 0, + 0, 0, 0, 0, 0, 5849, 5849, 5849, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5481, 0, 2524, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5893, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3257, 3257, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5849, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2524, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5481, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6006, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4053, 4053, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6047, + 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6072, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 234, 0, 1246, 694, + 0, 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, + 0, 0, 0, 0, 5849, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 1695, 244, 245, 246, 6140, 0, + 0, 0, 1251, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 1252, 260, + 1253, 1254, 0, 263, 264, 265, 266, 267, 268, 269, + 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, + 277, 278, 1259, 0, 1260, 0, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 297, 298, 299, 300, 1261, 1262, + 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, + 307, 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 1696, + 0, 323, 324, 864, 326, 327, 1701, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 1271, + 339, 340, 341, 342, 1272, 1273, 344, 0, 345, 346, + 347, 1274, 349, 0, 350, 0, 351, 352, 353, 0, + 354, 355, 356, 357, 358, 0, 359, 1275, 0, 1276, + 362, 363, 0, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 0, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 383, 384, 385, 386, 387, 388, + 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, 396, + 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 1284, 410, 411, 412, 0, 413, + 414, 415, 1285, 1286, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 1287, 435, 1288, 437, 438, 439, 440, 441, + 442, 443, 444, 1289, 446, 1290, 447, 448, 449, 450, + 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, 458, + 0, 0, 1294, 460, 461, 0, 0, 462, 463, 464, + 465, 466, 467, 1295, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 1296, 482, 483, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 1297, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 517, 518, 519, 520, + 521, 522, 1298, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 1299, + 539, 540, 541, 542, 543, 544, 545, 546, 1300, 548, + 0, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 1301, 563, 0, 564, 565, 1302, + 0, 566, 567, 568, 569, 570, 571, 572, 0, 573, + 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 1308, + 589, 590, 591, 592, 593, 1309, 0, 594, 595, 596, + 597, 598, 599, 1310, 1697, 601, 602, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, + 1317, 1318, 624, 625, 626, 627, 0, 1319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, + 1321, 1698, 0, 0, 0, 0, 0, 0, 1323, 1699, + 234, 0, 1246, 694, 0, 1247, 1248, 1249, 755, 1250, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 1251, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 1252, 260, 1253, 1254, 0, 263, 264, 265, + 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, 1258, + 274, 0, 275, 276, 277, 278, 1259, 0, 1260, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, + 303, 304, 305, 306, 307, 1268, 1269, 310, 1270, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 864, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 1271, 339, 340, 341, 342, 1272, 1273, + 344, 0, 345, 346, 347, 1274, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 1275, 0, 1276, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, 392, + 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 1284, 410, + 411, 412, 0, 413, 414, 415, 1285, 1286, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 1287, 435, 1288, 437, + 438, 439, 440, 441, 442, 443, 444, 1289, 446, 1290, + 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, 455, + 456, 0, 457, 458, 0, 0, 1294, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 1295, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 1296, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 1297, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 1298, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 40, 534, 535, + 536, 537, 538, 1299, 539, 540, 541, 542, 543, 544, + 545, 546, 1300, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 1301, 563, + 0, 564, 565, 1302, 44, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 1303, 1304, 0, 0, 576, 577, + 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 1308, 589, 590, 591, 592, 593, 1309, + 0, 594, 595, 596, 597, 598, 1181, 1310, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 49, + 608, 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, + 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, 627, + 0, 1319, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1320, 1321, 0, 0, 0, 0, 0, + 0, 0, 1323, 5700, 234, 0, 1246, 694, 0, 1247, + 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 1241, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 1242, 259, 1243, 1244, 0, - 262, 263, 264, 265, 266, 267, 268, 1245, 1246, 269, - 270, 1247, 1248, 273, 0, 274, 275, 276, 277, 1249, - 0, 1250, 0, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 296, 297, 298, 299, 1251, 1252, 1253, 1254, 1255, - 1256, 1257, 301, 302, 303, 304, 305, 306, 1258, 1259, - 309, 1260, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 860, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 1261, 338, 339, 340, - 341, 1262, 1263, 343, 0, 344, 345, 346, 1264, 348, - 0, 349, 0, 350, 351, 0, 352, 353, 354, 355, - 356, 0, 357, 1265, 0, 1266, 360, 361, 0, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 380, - 381, 382, 383, 384, 385, 1267, 1268, 0, 1269, 0, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 0, 0, 399, 1270, 401, 402, 403, 0, 404, 405, - 406, 1271, 1272, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 1273, 426, 1274, 428, 429, 430, 431, 432, 433, - 434, 435, 1275, 437, 1276, 438, 439, 440, 441, 1277, - 1278, 443, 1279, 445, 446, 447, 0, 448, 449, 0, - 0, 1280, 451, 452, 0, 0, 453, 454, 455, 456, - 457, 458, 1281, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 1282, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 1283, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 508, 509, 510, 511, 512, - 513, 1284, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 1285, 529, 530, - 531, 532, 533, 534, 535, 536, 1286, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 1287, 553, 0, 554, 555, 0, 556, 557, - 558, 559, 560, 561, 562, 0, 563, 1288, 1289, 0, - 0, 566, 567, 1290, 569, 1291, 1292, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 1293, 579, 580, 581, - 582, 583, 1294, 0, 584, 585, 586, 587, 588, 589, - 1295, 0, 591, 592, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, - 615, 616, 617, 1304, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1305, 1306, 0, 0, 0, 0, - 0, 0, 0, 1308, 3206, 234, 0, 1236, 684, 0, - 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 1241, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 1242, 259, 1243, 1244, - 0, 262, 263, 264, 265, 266, 267, 268, 1245, 1246, - 269, 270, 1247, 1248, 273, 0, 274, 275, 276, 277, - 1249, 0, 1250, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, 1254, - 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, 1258, - 1259, 309, 1260, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 860, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 1261, 338, 339, - 340, 341, 1262, 1263, 343, 0, 344, 345, 346, 1264, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 1265, 0, 1266, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 1267, 1268, 0, 1269, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 1270, 401, 402, 403, 0, 404, - 405, 406, 1271, 1272, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 1273, 426, 1274, 428, 429, 430, 431, 432, - 433, 434, 435, 1275, 437, 1276, 438, 439, 440, 441, - 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, 449, - 0, 0, 1280, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 1281, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 1282, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 1283, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 1284, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 1285, 529, - 530, 531, 532, 533, 534, 535, 536, 1286, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 1287, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 1288, 1289, - 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 1293, 579, 580, - 581, 582, 583, 1294, 0, 584, 585, 586, 587, 588, - 589, 1295, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, - 614, 615, 616, 617, 1304, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1305, 1306, 0, 0, 0, - 0, 0, 0, 0, 1308, 4535, 234, 0, 1236, 684, - 0, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, + 242, 243, 0, 244, 245, 246, 0, 0, 0, 0, + 1251, 0, 0, 247, 248, 249, 0, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, + 0, 263, 264, 265, 266, 267, 268, 269, 1255, 1256, + 270, 271, 1257, 1258, 274, 0, 275, 276, 277, 278, + 1259, 0, 1260, 0, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, + 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, + 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, + 1269, 310, 1270, 311, 0, 312, 313, 314, 315, 316, + 317, 318, 0, 319, 320, 321, 322, 0, 0, 323, + 324, 864, 326, 327, 0, 328, 329, 330, 0, 331, + 332, 333, 0, 334, 335, 336, 337, 1271, 339, 340, + 341, 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, + 349, 0, 350, 0, 351, 352, 353, 0, 354, 355, + 356, 357, 358, 0, 359, 1275, 0, 1276, 362, 363, + 0, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 0, 374, 375, 376, 377, 378, 379, 380, 381, + 0, 382, 383, 384, 385, 386, 387, 388, 1277, 1278, + 0, 1279, 0, 392, 393, 394, 395, 396, 397, 1280, + 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, 0, + 0, 408, 1284, 410, 411, 412, 0, 413, 414, 415, + 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 1287, 435, 1288, 437, 438, 439, 440, 441, 442, 443, + 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, + 452, 1293, 454, 455, 456, 0, 457, 458, 0, 0, + 1294, 460, 461, 0, 0, 462, 463, 464, 465, 466, + 467, 1295, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 0, 479, 480, 1296, 482, 483, 484, 485, + 486, 0, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 1297, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 0, 515, 516, 517, 518, 519, 520, 521, 522, + 1298, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 0, 534, 535, 536, 537, 538, 1299, 539, 540, + 541, 542, 543, 544, 545, 546, 1300, 548, 0, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 1301, 563, 0, 564, 565, 1302, 0, 566, + 567, 568, 569, 570, 571, 572, 0, 573, 1303, 1304, + 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, + 583, 584, 585, 586, 587, 588, 0, 1308, 589, 590, + 591, 592, 593, 1309, 0, 594, 595, 596, 597, 598, + 599, 1310, 0, 601, 602, 603, 604, 605, 606, 0, + 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, + 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, + 624, 625, 626, 627, 0, 1319, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1320, 1321, 0, + 0, 0, 0, 0, 0, 0, 1323, 3259, 234, 0, + 1246, 694, 0, 1247, 1248, 1249, 755, 1250, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 0, 244, 245, 246, + 0, 0, 0, 0, 1251, 0, 0, 247, 248, 249, + 0, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, 267, + 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, + 275, 276, 277, 278, 1259, 0, 1260, 0, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 0, 297, 298, 299, 300, + 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, + 305, 306, 307, 1268, 1269, 310, 1270, 311, 0, 312, + 313, 314, 315, 316, 317, 318, 0, 319, 320, 321, + 322, 0, 0, 323, 324, 864, 326, 327, 0, 328, + 329, 330, 0, 331, 332, 333, 0, 334, 335, 336, + 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, + 345, 346, 347, 1274, 349, 0, 350, 0, 351, 352, + 353, 0, 354, 355, 356, 357, 358, 0, 359, 1275, + 0, 1276, 362, 363, 0, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 0, 374, 375, 376, 377, + 378, 379, 380, 381, 0, 382, 383, 384, 385, 386, + 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, + 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, + 405, 406, 407, 0, 0, 408, 1284, 410, 411, 412, + 0, 413, 414, 415, 1285, 1286, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 1287, 435, 1288, 437, 438, 439, + 440, 441, 442, 443, 444, 1289, 446, 1290, 447, 448, + 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, + 457, 458, 0, 0, 1294, 460, 461, 0, 0, 462, + 463, 464, 465, 466, 467, 1295, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 0, 479, 480, 1296, + 482, 483, 484, 485, 486, 0, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 1297, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 0, 515, 516, 517, 518, + 519, 520, 521, 522, 1298, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, + 538, 1299, 539, 540, 541, 542, 543, 544, 545, 546, + 1300, 548, 0, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 1301, 563, 0, 564, + 565, 1302, 0, 566, 567, 568, 569, 570, 571, 572, + 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, + 1306, 1307, 581, 582, 583, 584, 585, 586, 587, 588, + 0, 1308, 589, 590, 591, 592, 593, 1309, 0, 594, + 595, 596, 597, 598, 599, 1310, 0, 601, 602, 603, + 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, + 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, + 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, 1319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1320, 1321, 0, 0, 0, 0, 0, 0, 0, + 1323, 4641, 234, 0, 1246, 694, 0, 1247, 1248, 1249, + 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 0, 244, 245, 246, 0, 0, 0, 0, 1251, 0, + 0, 247, 248, 249, 0, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, + 264, 265, 266, 267, 268, 269, 1255, 1256, 270, 271, + 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, 0, + 1260, 0, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 0, + 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, + 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, 310, + 1270, 311, 0, 312, 313, 314, 315, 316, 317, 318, + 0, 319, 320, 321, 322, 0, 0, 323, 324, 864, + 326, 327, 0, 328, 329, 330, 0, 331, 332, 333, + 0, 334, 335, 336, 337, 1271, 339, 340, 341, 342, + 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, 0, + 350, 0, 351, 352, 353, 0, 354, 355, 356, 357, + 358, 0, 359, 1275, 0, 1276, 362, 363, 0, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 0, + 374, 375, 376, 377, 378, 379, 380, 381, 0, 382, + 383, 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, + 0, 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, + 1283, 402, 403, 404, 405, 406, 407, 0, 0, 408, + 1284, 410, 411, 412, 0, 413, 414, 415, 1285, 1286, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 1287, 435, + 1288, 437, 438, 439, 440, 441, 442, 443, 444, 1289, + 446, 1290, 447, 448, 449, 450, 1291, 1292, 452, 1293, + 454, 455, 456, 0, 457, 458, 0, 0, 1294, 460, + 461, 0, 0, 462, 463, 464, 465, 466, 467, 1295, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 0, 479, 480, 1296, 482, 483, 484, 485, 486, 0, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 1297, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 0, + 515, 516, 517, 518, 519, 520, 521, 522, 1298, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 0, + 534, 535, 536, 537, 538, 1299, 539, 540, 541, 542, + 543, 544, 545, 546, 1300, 548, 0, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 1301, 563, 0, 564, 565, 1302, 0, 566, 567, 568, + 569, 570, 571, 572, 0, 573, 1303, 1304, 0, 0, + 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, + 585, 586, 587, 588, 0, 1308, 589, 590, 591, 592, + 593, 1309, 0, 594, 595, 596, 597, 598, 599, 1310, + 0, 601, 602, 603, 604, 605, 606, 0, 0, 607, + 0, 0, 608, 609, 610, 611, 612, 613, 614, 1311, + 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, + 626, 627, 0, 1319, 0, 0, 0, 635, 0, 0, + 0, 0, 0, 0, 0, 1320, 1321, 0, 0, 0, + 0, 0, 0, 0, 1323, 4710, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 4159, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 0, 255, 256, 257, 258, 259, + 0, 261, 262, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 272, 273, 274, 0, 275, + 276, 277, 278, 279, 0, 0, 0, 281, 282, 283, + 284, 285, 286, 0, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, -1818, 298, 299, 300, 0, + 0, 0, 0, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 325, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 0, 344, 0, 345, + 346, 347, 348, 349, 0, 350, 0, 351, 352, 0, + 0, -1818, 355, 356, 357, 358, 0, 359, 360, 0, + 361, 362, 363, 0, 364, 365, 366, 367, 368, 0, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, -1818, 384, 385, 386, 387, + 388, 389, 390, 0, 391, 0, 392, 0, 0, 395, + -1818, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 409, -1818, 411, 0, 0, + 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1818, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 0, 447, 448, 0, + 450, 0, 451, 452, 453, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 0, 466, 0, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 481, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, -1818, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 541, 542, 543, 0, 545, 546, 547, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 0, 564, 565, + 0, 0, 566, 0, 568, 569, 570, 571, 572, 0, + 573, 574, 575, 0, 0, 576, 577, 578, 579, 580, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 0, 601, 0, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 0, 0, + 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1436, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, + 0, 247, 248, 249, 0, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 857, 260, 858, 859, 0, 263, + 264, 265, 266, 267, 268, 269, 0, 0, 270, 271, + 860, 861, 274, 0, 275, 276, 277, 278, 0, 0, + 280, 0, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 0, + 297, 298, 299, 300, 0, 0, 0, 301, 0, 0, + 0, 302, 303, 304, 305, 306, 307, 862, 863, 310, + 0, 311, 0, 312, 313, 314, 315, 316, 317, 318, + 0, 319, 320, 321, 322, 0, 0, 323, 324, 864, + 326, 327, 0, 328, 329, 330, 0, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 339, 340, 341, 342, + 0, 0, 344, 0, 345, 346, 347, 865, 349, 0, + 350, 0, 351, 352, 353, 0, 354, 355, 356, 357, + 358, 0, 359, 0, 0, 0, 362, 363, 0, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 2674, + 374, 375, 376, 377, 378, 379, 380, 381, 0, 382, + 383, 2675, 385, 386, 387, 388, 866, 867, 0, 868, + 0, 392, 393, 394, 395, 396, 397, 0, 0, 0, + 0, 402, 403, 404, 405, 406, 407, 0, 0, 408, + 0, 410, 411, 412, 0, 413, 414, 415, 0, 0, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 869, 435, + 870, 437, 438, 439, 440, 441, 442, 443, 0, 0, + 446, 0, 447, 448, 449, 450, 0, 0, 452, 871, + 454, 455, 456, 0, 457, 458, 0, 0, 459, 460, + 461, 0, 0, 462, 463, 2677, 465, 466, 467, 0, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 0, 479, 480, 0, 482, 0, 484, 485, 486, 0, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 872, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 0, + 515, 516, 517, 518, 519, 520, 521, 522, 0, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 0, + 534, 535, 536, 537, 538, 0, 539, 540, 2678, 542, + 543, 544, 545, 546, 874, 548, 0, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 0, 563, 0, 564, 565, 0, 0, 566, 567, 568, + 569, 570, 571, 572, 0, 573, 875, 876, 0, 0, + 576, 577, 0, 579, 0, 0, 581, 582, 583, 584, + 585, 586, 587, 588, 0, 0, 589, 590, 591, 592, + 593, 0, 0, 594, 595, 596, 597, 598, 0, 877, + 2679, 601, 602, 603, 604, 605, 606, 0, 0, 607, + 0, 0, 608, 609, 610, 611, 612, 613, 856, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, + 626, 627, 0, 0, 0, 0, 0, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 0, 244, 245, 246, + 0, 0, 0, 0, 0, 2775, 0, 247, 248, 249, + 0, 250, 251, 252, 253, 254, 255, 256, 257, 0, + 857, 260, 858, 859, 0, 263, 264, 265, 266, 267, + 268, 269, 0, 0, 270, 271, 860, 861, 274, 0, + 275, 276, 277, 278, 0, 0, 280, 0, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 0, 297, 298, 299, 300, + 0, 0, 0, 301, 0, 0, 0, 302, 303, 304, + 305, 306, 307, 862, 863, 310, 0, 311, 0, 312, + 313, 314, 315, 316, 317, 318, 0, 319, 320, 321, + 322, 0, 0, 323, 324, 864, 326, 327, 0, 328, + 329, 330, 0, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 339, 340, 341, 342, 0, 0, 344, 0, + 345, 346, 347, 865, 349, 0, 350, 0, 351, 352, + 353, 0, 354, 355, 356, 357, 358, 0, 359, 0, + 0, 0, 362, 363, 0, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 2674, 374, 375, 376, 377, + 378, 379, 380, 381, 0, 382, 383, 2675, 385, 386, + 387, 388, 866, 867, 0, 868, 0, 392, 393, 394, + 395, 396, 397, 0, 0, 0, 0, 402, 403, 404, + 405, 406, 407, 0, 0, 408, 0, 410, 411, 412, + 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 869, 435, 870, 437, 438, 439, + 440, 441, 442, 443, 0, 0, 446, 0, 447, 448, + 449, 450, 0, 0, 452, 871, 454, 455, 456, 0, + 457, 458, 0, 0, 459, 460, 461, 0, 0, 462, + 463, 2677, 465, 466, 467, 0, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 0, 479, 480, 0, + 482, 0, 484, 485, 486, 0, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 872, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 0, 515, 516, 517, 518, + 519, 520, 521, 522, 0, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, + 538, 0, 539, 540, 2678, 542, 543, 544, 545, 546, + 874, 548, 0, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 0, 563, 0, 564, + 565, 0, 0, 566, 567, 568, 569, 570, 571, 572, + 0, 573, 875, 876, 0, 0, 576, 577, 0, 579, + 0, 0, 581, 582, 583, 584, 585, 586, 587, 588, + 0, 0, 589, 590, 591, 592, 593, 0, 0, 594, + 595, 596, 597, 598, 0, 877, 2679, 601, 602, 603, + 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, + 610, 611, 612, 613, 234, 0, 1246, 694, 0, 1247, + 1248, 1249, 755, 1250, 0, 625, 626, 627, 0, 0, + 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 0, 244, 245, 246, 0, 0, 0, 0, + 1251, 3883, 0, 247, 248, 249, 0, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, + 0, 263, 264, 265, 266, 267, 268, 269, 1255, 1256, + 270, 271, 1257, 1258, 274, 0, 275, 276, 277, 278, + 1259, 0, 1260, 0, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, + 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, + 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, + 1269, 310, 1270, 311, 0, 312, 313, 314, 315, 316, + 317, 318, 0, 319, 320, 321, 322, 0, 0, 323, + 324, 864, 326, 327, 0, 328, 329, 330, 0, 331, + 332, 333, 0, 334, 335, 336, 337, 1271, 339, 340, + 341, 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, + 349, 0, 350, 0, 351, 352, 353, 0, 354, 355, + 356, 357, 358, 0, 359, 1275, 0, 1276, 362, 363, + 0, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 0, 374, 375, 376, 377, 378, 379, 380, 381, + 0, 382, 383, 384, 385, 386, 387, 388, 1277, 1278, + 0, 1279, 0, 392, 393, 394, 395, 396, 397, 1280, + 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, 0, + 0, 408, 1284, 410, 411, 412, 0, 413, 414, 415, + 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 1287, 435, 1288, 437, 438, 439, 440, 441, 442, 443, + 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, + 452, 1293, 454, 455, 456, 0, 457, 458, 0, 0, + 1294, 460, 461, 0, 0, 462, 463, 464, 465, 466, + 467, 1295, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 0, 479, 480, 1296, 482, 483, 484, 485, + 486, 0, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 1297, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 3225, 515, 516, 517, 518, 519, 520, 521, 522, + 1298, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 40, 534, 535, 536, 537, 538, 1299, 539, 540, + 541, 542, 543, 544, 545, 546, 1300, 548, 0, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 1301, 563, 0, 564, 565, 1302, 44, 566, + 567, 568, 569, 570, 571, 572, 0, 573, 1303, 1304, + 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, + 583, 584, 585, 586, 587, 588, 0, 1308, 589, 590, + 591, 592, 593, 1309, 0, 594, 595, 596, 597, 598, + 1181, 1310, 0, 601, 602, 603, 604, 605, 606, 0, + 0, 607, 0, 49, 608, 609, 610, 611, 612, 613, + 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, + 624, 625, 626, 627, 0, 1319, 0, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1320, 1321, 0, + 0, 0, 234, 0, 1246, 694, 1323, 1247, 1248, 1249, + 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 0, 244, 245, 246, 0, 0, 0, 0, 1251, 0, + 0, 247, 248, 249, 0, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, + 264, 265, 266, 267, 268, 269, 1255, 1256, 270, 271, + 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, 0, + 1260, 0, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 0, + 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, + 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, 310, + 1270, 311, 0, 312, 313, 314, 315, 316, 317, 318, + 0, 319, 320, 321, 322, 0, 0, 323, 324, 864, + 326, 327, 0, 328, 329, 330, 0, 331, 332, 333, + 0, 334, 335, 336, 337, 1271, 339, 340, 341, 342, + 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, 0, + 350, 0, 351, 352, 353, 0, 354, 355, 356, 357, + 358, 0, 359, 1275, 0, 1276, 362, 363, 0, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 0, + 374, 375, 376, 377, 378, 379, 380, 381, 0, 382, + 383, 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, + 0, 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, + 1283, 402, 403, 404, 405, 406, 407, 0, 0, 408, + 1284, 410, 411, 412, 0, 413, 414, 415, 1285, 1286, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 1287, 435, + 1288, 437, 438, 439, 440, 441, 442, 443, 444, 1289, + 446, 1290, 447, 448, 449, 450, 1291, 1292, 452, 1293, + 454, 455, 456, 0, 457, 458, 0, 0, 1294, 460, + 461, 0, 0, 462, 463, 464, 465, 466, 467, 1295, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 0, 479, 480, 1296, 482, 483, 484, 485, 486, 0, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 1297, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 0, + 515, 516, 517, 518, 519, 520, 521, 522, 1298, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 40, + 534, 535, 536, 537, 538, 1299, 539, 540, 541, 542, + 543, 544, 545, 546, 1300, 548, 0, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 1301, 563, 0, 564, 565, 1302, 44, 566, 567, 568, + 569, 570, 571, 572, 0, 573, 1303, 1304, 0, 0, + 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, + 585, 586, 587, 588, 0, 1308, 589, 590, 591, 592, + 593, 1309, 0, 594, 595, 596, 597, 598, 1181, 1310, + 0, 601, 602, 603, 604, 605, 606, 0, 0, 607, + 0, 49, 608, 609, 610, 611, 612, 613, 614, 1311, + 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, + 626, 627, 0, 1319, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1320, 1321, 0, 0, 0, + 234, 0, 1246, 694, 1323, 1247, 1248, 1249, 755, 1250, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 1251, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 1252, 260, 1253, 1254, 3265, 263, 264, 265, + 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, 1258, + 274, 0, 275, 276, 277, 278, 1259, 0, 1260, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, + 303, 304, 305, 306, 307, 1268, 1269, 310, 1270, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 864, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 1271, 339, 340, 341, 342, 1272, 1273, + 344, 0, 345, 346, 347, 1274, 349, 0, 350, 0, + 351, 352, 353, 3266, 354, 355, 356, 357, 358, 0, + 359, 1275, 0, 1276, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, 392, + 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, + 403, 404, 405, 406, 407, 0, 3267, 408, 1284, 410, + 411, 412, 0, 413, 414, 415, 1285, 1286, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 1287, 435, 1288, 437, + 438, 439, 440, 441, 442, 443, 444, 1289, 446, 1290, + 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, 455, + 456, 0, 457, 458, 0, 0, 1294, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 1295, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 1296, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 1297, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 1298, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, + 536, 537, 538, 1299, 539, 540, 541, 542, 543, 544, + 545, 546, 1300, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 1301, 563, + 0, 564, 565, 1302, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 1303, 1304, 0, 3268, 576, 577, + 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 1308, 589, 590, 591, 592, 593, 1309, + 0, 594, 595, 596, 597, 598, 599, 1310, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, + 608, 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, + 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, 627, + 0, 1319, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1320, 1321, 0, 0, 0, 234, 0, + 1246, 694, 1323, 1247, 1248, 1249, 755, 1250, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, + 238, 239, 240, 241, 242, 243, -2222, 244, 245, 246, + 0, 0, 0, -2222, 1251, 0, 0, 247, 248, 249, + 0, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, 267, + 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, + 275, 276, 277, 278, 1259, 0, 1260, 0, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 0, 297, 298, 299, 300, + 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, + 305, 306, 307, 1268, 1269, 310, 1270, 311, 0, 312, + 313, 314, 315, 316, 317, 318, 0, 319, 320, 321, + 322, 0, 0, 323, 324, 864, 326, 327, 0, 328, + 329, 330, 0, 331, 332, 333, 0, 334, 335, 336, + 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, + 345, 346, 347, 1274, 349, 0, 350, 0, 351, 352, + 353, 0, 354, 355, 356, 357, 358, 0, 359, 1275, + 0, 1276, 362, 363, 0, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 0, 374, 375, 376, 377, + 378, 379, 380, 381, 0, 382, 383, 384, 385, 386, + 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, + 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, + 405, 406, 407, 0, 0, 408, 1284, 410, 411, 412, + 0, 413, 414, 415, 1285, 1286, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 1287, 435, 1288, 437, 438, 439, + 440, 441, 442, 443, 444, 1289, 446, 1290, 447, 448, + 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, + 457, 458, 0, 0, 1294, 460, 461, 0, 0, 462, + 463, 464, 465, 466, 467, 1295, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 0, 479, 480, 1296, + 482, 483, 484, 485, 486, 0, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 1297, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 0, 515, 516, 517, 518, + 519, 520, 521, 522, 1298, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, + 538, 1299, 539, 540, 541, 542, 543, 544, 545, 546, + 1300, 548, -2222, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 1301, 563, 0, 564, + 565, 1302, 0, 566, 567, 568, 569, 570, 571, 572, + 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, + 1306, 1307, 581, 582, 583, 584, 585, 586, 587, 588, + 0, 1308, 589, 590, 591, 592, 593, 1309, 0, 594, + 595, 596, 597, 598, 599, 1310, 0, 601, 602, 603, + 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, + 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, + 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, 1319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1320, 1321, 0, 0, 0, 234, 0, 1246, 694, + 1323, 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 625, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 0, 0, 0, 0, 1308, 4605, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 4072, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, -1810, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - -1810, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, -1810, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, -1810, 394, - 395, 396, 397, 398, 0, 0, 399, 400, -1810, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, -1810, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, -1810, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 0, 0, 0, - 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1420, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 253, 254, 255, 256, - 0, 853, 259, 854, 855, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 856, 857, 273, - 0, 274, 275, 276, 277, 0, 0, 279, 0, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 296, 297, 298, - 299, 0, 0, 0, 300, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 858, 859, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 860, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 0, 338, 339, 340, 341, 0, 0, 343, - 0, 344, 345, 346, 861, 348, 0, 349, 0, 350, - 351, 0, 352, 353, 354, 355, 356, 0, 357, 0, - 0, 0, 360, 361, 0, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 2638, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 380, 2639, 382, 383, 384, - 385, 862, 863, 0, 864, 0, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 0, 0, 399, 0, - 401, 402, 403, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 865, 426, 866, - 428, 429, 430, 431, 432, 433, 434, 0, 0, 437, - 0, 438, 439, 440, 441, 0, 0, 443, 867, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 2641, 456, 457, 458, 0, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 0, 473, 0, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 868, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 508, 509, 510, 511, 512, 513, 0, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 2642, 532, 533, 534, - 535, 536, 870, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 0, 553, - 0, 554, 555, 0, 556, 557, 558, 559, 560, 561, - 562, 0, 563, 871, 872, 0, 0, 566, 567, 0, - 569, 0, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 0, 873, 2643, 591, 592, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 852, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 615, 616, 617, 0, + 240, 241, 242, 243, -2220, 244, 245, 246, 0, 0, + 0, -2220, 1251, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 1252, 260, + 1253, 1254, 0, 263, 264, 265, 266, 267, 268, 269, + 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, + 277, 278, 1259, 0, 1260, 0, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 297, 298, 299, 300, 1261, 1262, + 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, + 307, 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 0, + 0, 323, 324, 864, 326, 327, 0, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 1271, + 339, 340, 341, 342, 1272, 1273, 344, 0, 345, 346, + 347, 1274, 349, 0, 350, 0, 351, 352, 353, 0, + 354, 355, 356, 357, 358, 0, 359, 1275, 0, 1276, + 362, 363, 0, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 0, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 383, 384, 385, 386, 387, 388, + 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, 396, + 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 1284, 410, 411, 412, 0, 413, + 414, 415, 1285, 1286, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 1287, 435, 1288, 437, 438, 439, 440, 441, + 442, 443, 444, 1289, 446, 1290, 447, 448, 449, 450, + 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, 458, + 0, 0, 1294, 460, 461, 0, 0, 462, 463, 464, + 465, 466, 467, 1295, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 1296, 482, 483, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 1297, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 517, 518, 519, 520, + 521, 522, 1298, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 1299, + 539, 540, 541, 542, 543, 544, 545, 546, 1300, 548, + -2220, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 1301, 563, 0, 564, 565, 1302, + 0, 566, 567, 568, 569, 570, 571, 572, 0, 573, + 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 1308, + 589, 590, 591, 592, 593, 1309, 0, 594, 595, 596, + 597, 598, 599, 1310, 0, 601, 602, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, + 1317, 1318, 624, 625, 626, 627, 0, 1319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, + 1321, 0, 0, 0, 234, 0, 1246, 694, 1323, 1247, + 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 0, 244, 245, 246, 0, 0, 0, 0, + 1251, 0, 0, 247, 248, 249, 0, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, + 0, 263, 264, 265, 266, 267, 268, 269, 1255, 1256, + 270, 271, 1257, 1258, 274, 0, 275, 276, 277, 278, + 1259, 0, 1260, 0, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, + 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, + 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, + 1269, 310, 1270, 311, 0, 312, 313, 314, 315, 316, + 317, 318, 0, 319, 320, 321, 322, 0, 0, 323, + 324, 864, 326, 327, 0, 328, 329, 330, 0, 331, + 332, 333, 0, 334, 335, 336, 337, 1271, 339, 340, + 341, 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, + 349, 0, 350, 0, 351, 352, 353, 0, 354, 355, + 356, 357, 358, 0, 359, 1275, 0, 1276, 362, 363, + 0, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 0, 374, 375, 376, 377, 378, 379, 380, 381, + 0, 382, 383, 384, 385, 386, 387, 388, 1277, 1278, + 0, 1279, 0, 392, 393, 394, 395, 396, 397, 1280, + 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, 0, + 0, 408, 1284, 410, 411, 412, 0, 413, 414, 415, + 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 1287, 435, 1288, 437, 438, 439, 440, 441, 442, 443, + 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, + 452, 1293, 454, 455, 456, 0, 457, 458, 0, 0, + 1294, 460, 461, 0, 0, 462, 463, 464, 465, 466, + 467, 1295, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 0, 479, 480, 1296, 482, 483, 484, 485, + 486, 0, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 1297, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 0, 515, 516, 517, 518, 519, 520, 521, 522, + 1298, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 0, 534, 535, 536, 537, 538, 1299, 539, 540, + 541, 542, 543, 544, 545, 546, 1300, 548, 0, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 1301, 563, 0, 564, 565, 1302, 0, 566, + 567, 568, 569, 570, 571, 572, 0, 573, 1303, 1304, + 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, + 583, 584, 585, 586, 587, 588, 0, 1308, 589, 590, + 591, 592, 593, 1309, 0, 594, 595, 596, 597, 598, + 599, 1310, 0, 601, 602, 603, 604, 605, 606, 0, + 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, + 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, + 624, 625, 626, 627, 0, 1319, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1320, 1321, 0, + 0, 0, 0, 0, 2019, 3200, 1323, 234, 0, 1246, + 694, 0, 1247, 1248, 1249, 755, 1250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 1251, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 1252, + 260, 1253, 1254, 0, 263, 264, 265, 266, 267, 268, + 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 1268, 1269, 310, 1270, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, 345, + 346, 347, 1274, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 1276, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 1287, 435, 1288, 437, 438, 439, 440, + 441, 442, 443, 444, 1289, 446, 1290, 447, 448, 449, + 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, + 458, 0, 0, 1294, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 1297, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 1298, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 1300, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, + 1307, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 1308, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 1310, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 624, 625, 626, 627, 0, 1319, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1320, 1321, 1322, 0, 0, 234, 0, 1246, 694, 1323, + 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 2739, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 0, 853, 259, 854, 855, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 856, 857, 273, 0, 274, 275, 276, 277, - 0, 0, 279, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 0, 0, 0, 300, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 858, - 859, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 860, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 0, 338, 339, - 340, 341, 0, 0, 343, 0, 344, 345, 346, 861, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 0, 0, 0, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 2638, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 2639, 382, 383, 384, 385, 862, 863, 0, 864, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 0, 401, 402, 403, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 865, 426, 866, 428, 429, 430, 431, 432, - 433, 434, 0, 0, 437, 0, 438, 439, 440, 441, - 0, 0, 443, 867, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 2641, - 456, 457, 458, 0, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 0, 473, 0, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 868, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 0, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 2642, 532, 533, 534, 535, 536, 870, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 0, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 871, 872, - 0, 0, 566, 567, 0, 569, 0, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 0, 873, 2643, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 0, 234, 0, 1236, 684, 0, 1237, 1238, 1239, 745, - 1240, 615, 616, 617, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 3825, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 40, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 44, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 1175, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 49, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 3212, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 3213, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 3214, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 3215, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, -2200, 243, - 244, 245, 0, 0, 0, -2200, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, -2200, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, -2198, 243, 244, 245, 0, 0, 0, - -2198, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - -2198, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 0, 0, 2000, 3163, - 1308, 234, 0, 1236, 684, 0, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 1307, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 2605, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 3704, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 3213, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 3268, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2608, 2609, 0, 0, 0, 234, 0, 3381, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 4656, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 5017, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 5029, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 5340, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 5341, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 5342, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 5343, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 5834, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 5835, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 1260, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 1276, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 1284, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 5836, - 577, 578, 0, 1293, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1305, 1306, 0, 0, 0, 234, 0, 1236, 684, - 1308, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 5835, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 5836, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 1304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 5325, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 0, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 3198, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3199, 3200, 0, 0, 0, 234, 0, 1236, 684, - 3201, 1237, 1238, 1239, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, -2829, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 5835, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 1260, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, -2829, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 0, 0, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, -2829, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 1276, 438, 439, 0, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 1280, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 1284, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, -2829, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 5836, 577, 578, 0, 1293, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, -2829, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1305, 1306, 0, 0, - 0, 234, 0, 1236, 684, 1308, 1237, 1238, 1239, 745, - 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 1241, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 1242, 259, 1243, 1244, 0, 262, 263, 264, - 265, 266, 267, 268, 1245, 1246, 269, 270, 1247, 1248, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 1258, 1259, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 1261, 338, 339, 340, 341, 1262, 1263, - 343, 0, 344, 345, 346, 1264, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 1266, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 1267, 1268, 0, 1269, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 1273, 426, - 1274, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 0, 438, 439, 440, 441, 1277, 1278, 443, 1279, - 445, 446, 447, 0, 448, 449, 0, 0, 1280, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 1283, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 3198, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 1286, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 1288, 1289, 0, 0, 566, 567, - 1290, 569, 1291, 1292, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 1295, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3199, 3200, 234, 0, 1236, 684, 0, 1237, 1238, - 3201, 745, 1240, 0, 0, 0, 0, 0, 0, 0, + 241, 242, 243, 2641, 244, 245, 246, 0, 0, 0, + 0, 1251, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 1252, 260, 1253, + 1254, 0, 263, 264, 265, 266, 267, 268, 269, 1255, + 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 1271, 339, + 340, 341, 342, 1272, 1273, 344, 0, 345, 346, 347, + 1274, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 1276, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 1277, + 1278, 0, 1279, 0, 392, 393, 394, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 1284, 410, 411, 412, 0, 413, 414, + 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 1287, 435, 1288, 437, 438, 439, 440, 441, 442, + 443, 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, + 1292, 452, 1293, 454, 455, 456, 0, 457, 458, 0, + 0, 1294, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 1297, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 1298, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, 544, 545, 546, 1300, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 1303, + 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 1308, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 599, 1310, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 624, 625, 626, 627, 0, 1319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1320, 1321, + 0, 0, 0, 234, 0, 1246, 694, 1323, 1247, 1248, + 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 1241, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 1242, 259, 1243, 1244, 0, 262, - 263, 264, 265, 266, 267, 268, 1245, 1246, 269, 270, - 1247, 1248, 273, 0, 274, 275, 276, 277, 1249, 0, - 1250, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, - 1257, 301, 302, 303, 304, 305, 306, 1258, 1259, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 860, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 1261, 338, 339, 340, 341, - 1262, 1263, 343, 0, 344, 345, 346, 1264, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 1265, 0, 1266, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 1267, 1268, 0, 1269, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 1270, 401, 402, 403, 0, 404, 405, 406, - 1271, 1272, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 1273, 426, 1274, 428, 429, 430, 431, 432, 433, 434, - 435, 1275, 437, 0, 438, 439, 440, 441, 1277, 1278, - 443, 1279, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 1281, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 1282, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 1283, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 3370, 3371, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 1285, 529, 530, 531, - 532, 533, 534, 535, 536, 1286, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 1287, 553, 0, 554, 555, 0, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 1288, 1289, 0, 0, - 566, 567, 1290, 569, 1291, 1292, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 1294, 0, 584, 585, 586, 587, 588, 589, 1295, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 1296, - 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, 615, - 616, 617, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3372, 3373, 234, 0, 1236, 684, 0, - 1237, 1238, 3201, 745, 1240, 0, 0, 0, 0, 0, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 1251, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, + 263, 264, 265, 266, 267, 268, 269, 1255, 1256, 270, + 271, 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, + 310, 1270, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 1271, 339, 340, 341, + 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 1276, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 1277, 1278, 0, + 1279, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 1287, + 435, 1288, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, 452, + 1293, 454, 455, 456, 0, 457, 458, 0, 0, 1294, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 1297, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 3225, 515, 516, 517, 518, 519, 520, 521, 522, 1298, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 1300, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 1303, 1304, 0, + 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 1308, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 1310, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 1319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1320, 1321, 0, 0, + 0, 234, 0, 1246, 694, 1323, 1247, 1248, 1249, 755, + 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 1251, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, 264, + 265, 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, + 1258, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 1268, 1269, 310, 1270, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 1271, 339, 340, 341, 342, 1272, + 1273, 344, 0, 345, 346, 347, 1274, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 1276, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 1287, 435, 1288, + 437, 438, 439, 440, 441, 442, 443, 444, 1289, 446, + 1290, 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, + 455, 456, 0, 457, 458, 0, 0, 1294, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 1297, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 1298, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 1300, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 1303, 1304, 0, 0, 576, + 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 1308, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 1310, 3762, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 0, 1319, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1320, 1321, 0, 0, 0, 234, + 0, 1246, 694, 1323, 1247, 1248, 1249, 755, 1250, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 1251, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, + 267, 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, + 0, 275, 276, 277, 278, 1259, 0, 1260, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, + 304, 305, 306, 307, 1268, 1269, 310, 1270, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 864, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, + 0, 345, 346, 347, 1274, 349, 0, 350, 0, 351, + 352, 353, 3266, 354, 355, 356, 357, 358, 0, 359, + 1275, 0, 1276, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 384, 385, + 386, 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, + 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 1284, 410, 411, + 412, 0, 413, 414, 415, 1285, 1286, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 1287, 435, 1288, 437, 438, + 439, 440, 441, 442, 443, 444, 1289, 446, 1290, 447, + 448, 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, + 0, 457, 458, 0, 0, 1294, 460, 461, 0, 0, + 462, 463, 464, 465, 466, 467, 1295, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 1296, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 1297, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 1298, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 1299, 539, 540, 541, 542, 543, 544, 545, + 546, 1300, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 1301, 563, 0, + 564, 565, 1302, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, + 579, 1306, 1307, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 1308, 589, 590, 591, 592, 593, 1309, 0, + 594, 595, 596, 597, 598, 599, 1310, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, + 619, 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, + 1319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1320, 1321, 0, 0, 0, 234, 0, 1246, + 694, 1323, 1247, 1248, 1249, 755, 1250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 1251, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 1252, + 260, 1253, 1254, 0, 263, 264, 265, 266, 267, 268, + 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 1268, 1269, 310, 1270, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, 345, + 346, 347, 1274, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 1276, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 1287, 435, 1288, 437, 438, 439, 440, + 441, 442, 443, 444, 1289, 446, 1290, 447, 448, 449, + 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, + 458, 0, 0, 1294, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 1297, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 1298, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 1300, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 1303, 1304, 3323, 0, 576, 577, 1305, 579, 1306, + 1307, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 1308, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 1310, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 624, 625, 626, 627, 0, 1319, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1320, 1321, 0, 0, 0, 234, 0, 1246, 694, 1323, + 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 1241, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 1242, 259, 1243, 1244, - 0, 262, 263, 264, 265, 266, 267, 268, 1245, 1246, - 269, 270, 1247, 1248, 273, 0, 274, 275, 276, 277, - 1249, 0, 1250, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, 1254, - 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, 1258, - 1259, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 860, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 1261, 338, 339, - 340, 341, 1262, 1263, 343, 0, 344, 345, 346, 1264, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 1265, 0, 1266, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 1267, 1268, 0, 1269, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 1270, 401, 402, 403, 0, 404, - 405, 406, 1271, 1272, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 1273, 426, 1274, 428, 429, 430, 431, 432, - 433, 434, 435, 1275, 437, 0, 438, 439, 440, 441, - 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 1281, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 1282, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 1283, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 3198, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 1285, 529, - 530, 531, 532, 533, 534, 535, 536, 1286, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 1287, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 1288, 1289, - 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 1294, 0, 584, 585, 586, 587, 588, - 589, 1295, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, - 614, 615, 616, 617, 0, 0, 234, 0, 1236, 684, - 0, 1237, 1238, 0, 745, 1240, 0, 0, 0, 0, - 0, 0, 0, 0, 3201, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 1241, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 4566, 264, 265, 266, 267, 268, 1245, - 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 1249, 0, 1250, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 1251, 1252, 1253, - 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 1261, 338, - 339, 340, 341, 1262, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 1265, 0, 1266, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 1270, 401, 402, 403, 0, - 404, 405, 406, 1271, 1272, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 1275, 437, 0, 438, 439, 440, - 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 1281, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 1282, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 3198, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 1285, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 1287, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 1294, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, - 1303, 614, 615, 616, 617, 0, 0, 234, 0, 1236, - 684, 0, 1237, 1238, 0, 745, 1240, 0, 0, 0, - 0, 0, 0, 0, 0, 3201, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 1241, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 1242, 259, - 1243, 1244, 0, 262, 263, 264, 265, 266, 267, 268, - 1245, 1246, 269, 270, 1247, 1248, 273, 0, 274, 275, - 276, 277, 1249, 0, 1250, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 1251, 1252, - 1253, 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, - 306, 1258, 1259, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 860, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 1261, - 338, 339, 340, 341, 1262, 1263, 343, 0, 344, 345, - 346, 1264, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 1265, 0, 1266, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 381, 382, 383, 384, 385, 1267, 1268, - 0, 1269, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 1270, 401, 402, 403, - 0, 404, 405, 406, 1271, 1272, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 1273, 426, 1274, 428, 429, 430, - 431, 432, 433, 434, 435, 1275, 437, 0, 438, 439, - 440, 441, 1277, 1278, 443, 1279, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 456, 457, 458, 1281, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 1282, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 1283, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 3198, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 1285, 529, 530, 531, 532, 533, 534, 535, 536, 1286, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 1287, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 1288, 1289, 0, 0, 566, 567, 1290, 569, 1291, 1292, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 1294, 0, 584, 585, 586, - 587, 588, 589, 1295, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 1296, 1297, 1298, 1299, 4625, 1300, 1301, - 1302, 1303, 614, 615, 616, 617, 0, 0, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3201, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 1246, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 1249, 0, 1250, 0, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 296, 297, 298, 299, 1251, - 1252, 1253, 1254, 1255, 1256, 1257, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 1262, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 351, 0, - 352, 353, 354, 355, 356, 0, 357, 1265, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 3345, 0, 399, 1270, 401, 402, - 403, 0, 404, 405, 406, 1271, 1272, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 1251, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 1252, 260, 1253, + 1254, 0, 263, 264, 265, 266, 267, 268, 269, 1255, + 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 1271, 339, + 340, 341, 342, 1272, 1273, 344, 0, 345, 346, 347, + 1274, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 1276, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 1277, + 1278, 0, 1279, 0, 392, 393, 394, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 1284, 410, 411, 412, 0, 413, 414, + 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 1287, 435, 1288, 437, 438, 439, 440, 441, 442, + 443, 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, + 1292, 452, 1293, 454, 455, 456, 0, 457, 458, 0, + 0, 1294, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 1297, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 1298, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, 544, 545, 546, 1300, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 1303, + 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 1308, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 599, 1310, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 624, 625, 626, 627, 0, 1319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1320, 1321, + 0, 0, 0, 234, 0, 1246, 694, 1323, 1247, 1248, + 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 1251, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, + 263, 264, 265, 266, 267, 268, 269, 1255, 1256, 270, + 271, 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, + 310, 1270, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 1271, 339, 340, 341, + 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 1276, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 1277, 1278, 0, + 1279, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 1287, + 435, 1288, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, 452, + 1293, 454, 455, 456, 0, 457, 458, 0, 0, 1294, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 1297, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 1298, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 1300, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 1303, 1304, 0, + 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 1308, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 1310, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 1319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2644, 2645, 0, 0, + 0, 234, 0, 3439, 694, 1323, 1247, 1248, 1249, 755, + 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 1251, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, 264, + 265, 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, + 1258, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 1268, 1269, 310, 1270, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 1271, 339, 340, 341, 342, 1272, + 1273, 344, 0, 345, 346, 347, 1274, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 1276, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 1287, 435, 1288, + 437, 438, 439, 440, 441, 442, 443, 444, 1289, 446, + 1290, 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, + 455, 456, 0, 457, 458, 0, 0, 1294, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 1297, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 1298, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 1300, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 1303, 1304, 0, 0, 576, + 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 1308, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 1310, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 0, 1319, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1320, 1321, 0, 0, 0, 234, + 0, 1246, 694, 1323, 1247, 1248, 1249, 755, 1250, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 1251, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, + 267, 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, + 0, 275, 276, 277, 278, 1259, 0, 1260, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 4764, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, + 304, 305, 306, 307, 1268, 1269, 310, 1270, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 864, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, + 0, 345, 346, 347, 1274, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 1275, 0, 1276, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 384, 385, + 386, 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, + 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 1284, 410, 411, + 412, 0, 413, 414, 415, 1285, 1286, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 1287, 435, 1288, 437, 438, + 439, 440, 441, 442, 443, 444, 1289, 446, 1290, 447, + 448, 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, + 0, 457, 458, 0, 0, 1294, 460, 461, 0, 0, + 462, 463, 464, 465, 466, 467, 1295, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 1296, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 1297, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 1298, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 1299, 539, 540, 541, 542, 543, 544, 545, + 546, 1300, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 1301, 563, 0, + 564, 565, 1302, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, + 579, 1306, 1307, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 1308, 589, 590, 591, 592, 593, 1309, 0, + 594, 595, 596, 597, 598, 599, 1310, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, + 619, 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, + 1319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1320, 1321, 0, 0, 0, 234, 0, 1246, + 694, 1323, 1247, 1248, 1249, 755, 1250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 1251, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 1252, + 260, 1253, 1254, 0, 263, 264, 265, 266, 267, 268, + 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 1268, 1269, 310, 1270, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, 345, + 346, 347, 1274, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 1276, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 1287, 435, 1288, 437, 438, 439, 440, + 441, 442, 443, 444, 1289, 446, 1290, 447, 448, 449, + 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, + 458, 0, 0, 1294, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 1297, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 1298, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 1300, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, + 1307, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 1308, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 1310, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 5140, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 624, 625, 626, 627, 0, 1319, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1320, 1321, 0, 0, 0, 234, 0, 1246, 694, 1323, + 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 1251, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 1252, 260, 1253, + 1254, 0, 263, 264, 265, 266, 267, 268, 269, 1255, + 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 1271, 339, + 340, 341, 342, 1272, 1273, 344, 0, 345, 346, 347, + 1274, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 1276, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 1277, + 1278, 0, 1279, 0, 392, 393, 394, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 1284, 410, 411, 412, 0, 413, 414, + 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 1287, 435, 1288, 437, 438, 439, 440, 441, 442, + 5152, 444, 1289, 446, 1290, 447, 448, 449, 450, 1291, + 1292, 452, 1293, 454, 455, 456, 0, 457, 458, 0, + 0, 1294, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 1297, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 1298, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, 544, 545, 546, 1300, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 1303, + 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 1308, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 599, 1310, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 624, 625, 626, 627, 0, 1319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1320, 1321, + 0, 0, 0, 234, 0, 1246, 694, 1323, 1247, 1248, + 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 1251, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, + 263, 264, 265, 266, 267, 268, 269, 1255, 1256, 270, + 271, 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 5471, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, + 310, 1270, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 1271, 339, 340, 341, + 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 5472, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 1277, 1278, 0, + 1279, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 1287, + 435, 1288, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 1290, 447, 448, 449, 450, 1291, 1292, 452, + 1293, 454, 455, 456, 0, 457, 458, 0, 0, 1294, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 1297, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 5473, 521, 522, 1298, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 1300, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 1303, 1304, 0, + 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 1308, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 1310, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 1319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1320, 1321, 0, 0, + 0, 234, 0, 1246, 694, 5474, 1247, 1248, 1249, 755, + 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 1251, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 5846, 1252, 260, 1253, 1254, 0, 263, 264, + 265, 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, + 1258, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 5847, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 1268, 1269, 310, 1270, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 1271, 339, 340, 341, 342, 1272, + 1273, 344, 0, 345, 346, 347, 1274, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 1276, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 1287, 435, 1288, + 437, 438, 439, 440, 441, 442, 443, 444, 1289, 446, + 1290, 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, + 455, 456, 0, 457, 458, 0, 0, 1294, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 1297, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 1298, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 1300, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 1303, 1304, 0, 0, 576, + 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, + 5848, 587, 588, 0, 1308, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 1310, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 0, 1319, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1320, 1321, 0, 0, 0, 234, + 0, 1246, 694, 1323, 1247, 1248, 1249, 755, 1250, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 1251, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, + 267, 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, + 0, 275, 276, 277, 278, 1259, 0, 1260, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 5847, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, + 304, 305, 306, 307, 1268, 1269, 310, 1270, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 864, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, + 0, 345, 346, 347, 1274, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 1275, 0, 1276, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 384, 385, + 386, 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, + 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 1284, 410, 411, + 412, 0, 413, 414, 415, 1285, 1286, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 1287, 435, 1288, 437, 438, + 439, 440, 441, 442, 443, 444, 1289, 446, 1290, 447, + 448, 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, + 0, 457, 458, 0, 0, 1294, 460, 461, 0, 0, + 462, 463, 464, 465, 466, 467, 1295, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 1296, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 1297, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 1298, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 1299, 539, 540, 541, 542, 543, 544, 545, + 546, 1300, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 1301, 563, 0, + 564, 565, 1302, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, + 579, 1306, 1307, 581, 582, 583, 584, 585, 5848, 587, + 588, 0, 1308, 589, 590, 591, 592, 593, 1309, 0, + 594, 595, 596, 597, 598, 599, 1310, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, + 619, 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, + 1319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1320, 1321, 0, 0, 0, 234, 0, 1246, + 694, 1323, 1247, 1248, 1249, 755, 1250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 1251, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 1252, + 260, 1253, 1254, 0, 263, 264, 265, 266, 267, 268, + 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 1268, 1269, 310, 5456, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, 345, + 346, 347, 1274, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 1276, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 1287, 435, 1288, 437, 438, 439, 440, + 441, 442, 443, 444, 1289, 446, 0, 447, 448, 449, + 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, + 458, 0, 0, 1294, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 1297, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 3251, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 1300, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, + 1307, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 1310, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 624, 625, 626, 627, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3252, 3253, 0, 0, 0, 234, 0, 1246, 694, 3254, + 1247, 1248, 1249, 755, 1250, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 1251, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, -2896, 1252, 260, 1253, + 1254, 0, 263, 264, 265, 266, 267, 268, 269, 1255, + 1256, 270, 271, 1257, 1258, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 5847, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 1268, 1269, 310, 1270, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 1271, 339, + 340, 341, 342, 1272, 1273, 344, 0, 345, 346, 347, + 1274, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 1276, 362, + 363, 0, 364, 365, 366, 367, 368, -2896, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 1277, + 1278, 0, 1279, 0, 392, 0, 0, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 1284, 410, 411, -2896, 0, 413, 414, + 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 1287, 435, 1288, 437, 438, 439, 440, 441, 442, + 443, 444, 1289, 446, 1290, 447, 448, 0, 450, 1291, + 1292, 452, 1293, 454, 455, 456, 0, 457, 458, 0, + 0, 1294, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 1297, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 1298, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, -2896, 545, 546, 1300, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 1303, + 1304, 0, 0, 576, 577, 1305, 579, 1306, 1307, 581, + 582, 583, 584, 585, 5848, 587, 588, 0, 1308, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 599, 1310, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 624, 625, 626, 627, 0, -2896, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1320, 1321, + 0, 0, 0, 234, 0, 1246, 694, 1323, 1247, 1248, + 1249, 755, 1250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 1251, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, + 263, 264, 265, 266, 267, 268, 269, 1255, 1256, 270, + 271, 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 1271, 339, 340, 341, + 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 1276, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 1277, 1278, 0, + 1279, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 1287, + 435, 1288, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 0, 447, 448, 449, 450, 1291, 1292, 452, + 1293, 454, 455, 456, 0, 457, 458, 0, 0, 1294, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 1297, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 3251, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 1300, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 1303, 1304, 0, + 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 1310, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3252, 3253, 234, 0, + 1246, 694, 0, 1247, 1248, 3254, 755, 1250, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 0, 244, 245, 246, + 0, 0, 0, 0, 1251, 0, 0, 247, 248, 249, + 0, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 1252, 260, 1253, 1254, 0, 263, 264, 265, 266, 267, + 268, 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, + 275, 276, 277, 278, 1259, 0, 1260, 0, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 0, 297, 298, 299, 300, + 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, + 305, 306, 307, 1268, 1269, 310, 0, 311, 0, 312, + 313, 314, 315, 316, 317, 318, 0, 319, 320, 321, + 322, 0, 0, 323, 324, 864, 326, 327, 0, 328, + 329, 330, 0, 331, 332, 333, 0, 334, 335, 336, + 337, 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, + 345, 346, 347, 1274, 349, 0, 350, 0, 351, 352, + 353, 0, 354, 355, 356, 357, 358, 0, 359, 1275, + 0, 1276, 362, 363, 0, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 0, 374, 375, 376, 377, + 378, 379, 380, 381, 0, 382, 383, 384, 385, 386, + 387, 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, + 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, + 405, 406, 407, 0, 0, 408, 1284, 410, 411, 412, + 0, 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 1275, 437, 0, 438, - 439, 440, 441, 0, 1278, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 835, 450, 451, 452, 0, 0, - 453, 454, 455, 456, 457, 458, 1281, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 1282, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 3346, 516, 517, 518, - 519, 520, 521, 522, 523, 40, 524, 525, 526, 527, - 528, 1285, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 1287, 553, 0, 554, - 555, 44, 556, 557, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 1290, 569, 1291, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 1294, 0, 584, 585, - 586, 587, 588, 1175, 590, 0, 591, 592, 593, 594, - 595, 596, 0, 0, 597, 0, 49, 598, 599, 600, - 601, 602, 603, 604, 1296, 1297, 1298, 1299, 609, 1300, - 1301, 1302, 1303, 3347, 615, 616, 617, 0, 0, 50, - 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3348, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 1246, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 1249, 0, 1250, 0, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 296, 297, 298, - 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 1262, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 351, 0, 352, 353, 354, 355, 356, 0, 357, 1265, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 3345, 0, 399, 1270, - 401, 402, 403, 0, 404, 405, 406, 1271, 1272, 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, 1275, 437, - 0, 438, 439, 440, 441, 0, 1278, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 835, 450, 451, 452, - 0, 0, 453, 454, 455, 456, 457, 458, 1281, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 1282, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 3346, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 1285, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 1287, 553, - 0, 554, 555, 0, 556, 557, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 1290, - 569, 1291, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 1294, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 592, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, 1299, - 609, 1300, 1301, 1302, 1303, 3347, 615, 616, 617, 0, - 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3348, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 1246, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 1249, 0, 1250, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 1262, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 1265, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 1270, 401, 402, 403, 0, 404, 405, 406, 1271, 1272, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 430, 431, 432, 433, 1287, 435, 1288, 437, 438, 439, + 440, 441, 442, 443, 444, 1289, 446, 0, 447, 448, + 449, 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, + 457, 458, 0, 0, 459, 460, 461, 0, 0, 462, + 463, 464, 465, 466, 467, 1295, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 0, 479, 480, 1296, + 482, 483, 484, 485, 486, 0, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 1297, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 0, 515, 516, 517, 518, + 519, 520, 521, 522, 3428, 3429, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, + 538, 1299, 539, 540, 541, 542, 543, 544, 545, 546, + 1300, 548, 0, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 1301, 563, 0, 564, + 565, 1302, 0, 566, 567, 568, 569, 570, 571, 572, + 0, 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, + 1306, 1307, 581, 582, 583, 584, 585, 586, 587, 588, + 0, 0, 589, 590, 591, 592, 593, 1309, 0, 594, + 595, 596, 597, 598, 599, 1310, 0, 601, 602, 603, + 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, + 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, + 1315, 1316, 1317, 1318, 624, 625, 626, 627, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3430, 3431, 234, 0, 1246, 694, 0, 1247, 1248, + 3254, 755, 1250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 1251, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 1252, 260, 1253, 1254, 0, + 263, 264, 265, 266, 267, 268, 269, 1255, 1256, 270, + 271, 1257, 1258, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 1268, 1269, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 1271, 339, 340, 341, + 342, 1272, 1273, 344, 0, 345, 346, 347, 1274, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 1276, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 1277, 1278, 0, + 1279, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 1287, + 435, 1288, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 0, 447, 448, 449, 450, 1291, 1292, 452, + 1293, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 1297, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 3251, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 1300, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 1303, 1304, 0, + 0, 576, 577, 1305, 579, 1306, 1307, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 1310, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 0, 0, 0, 234, 0, 1246, + 694, 0, 1247, 1248, 0, 755, 1250, 0, 0, 0, + 0, 0, 0, 0, 0, 3254, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 1251, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 1252, + 260, 1253, 1254, 0, 263, 4672, 265, 266, 267, 268, + 269, 1255, 1256, 270, 271, 1257, 1258, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 1268, 1269, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 1271, 339, 340, 341, 342, 1272, 1273, 344, 0, 345, + 346, 347, 1274, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 1276, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 1277, 1278, 0, 1279, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 1287, 435, 1288, 437, 438, 439, 440, + 441, 442, 443, 444, 1289, 446, 0, 447, 448, 449, + 450, 1291, 1292, 452, 1293, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 1297, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 3251, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 1300, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 1303, 1304, 0, 0, 576, 577, 1305, 579, 1306, + 1307, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 1310, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 624, 625, 626, 627, 0, 0, 0, + 0, 234, 0, 1246, 694, 0, 1247, 1248, 0, 755, + 1250, 0, 0, 0, 0, 0, 0, 0, 0, 3254, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 1251, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, 264, + 265, 266, 267, 268, 269, 1255, 1256, 270, 271, 1257, + 1258, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 1268, 1269, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 1271, 339, 340, 341, 342, 1272, + 1273, 344, 0, 345, 346, 347, 1274, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 1276, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 1275, - 437, 0, 438, 439, 440, 441, 0, 1278, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 1281, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 1282, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 1285, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 1287, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 1290, 569, 1291, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 1294, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 1296, 1297, 1298, - 1299, 609, 1300, 1301, 1302, 1303, 614, 615, 616, 617, - 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3783, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 1246, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 1249, 0, 1250, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, 1257, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 1262, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 1265, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 1270, 401, 402, 403, 0, 404, 405, 406, 1271, - 1272, 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, - 1275, 437, 0, 438, 439, 440, 441, 0, 1278, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 456, 457, 458, - 1281, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 1282, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 3346, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 1285, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 1287, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 1290, 569, 1291, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 1294, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 1296, 1297, - 1298, 1299, 609, 1300, 1301, 1302, 1303, 3347, 615, 616, - 617, 0, 0, 234, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 56, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 1246, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 1249, 0, - 1250, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 1251, 1252, 1253, 1254, 1255, 1256, - 1257, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 1262, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 1265, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 1270, 401, 402, 403, 0, 404, 405, 406, - 1271, 1272, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 427, 428, 429, 430, 431, 432, 433, 1287, 435, 1288, + 437, 438, 439, 440, 441, 442, 443, 444, 1289, 446, + 0, 447, 448, 449, 450, 1291, 1292, 452, 1293, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 1297, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 3251, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 1300, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 1303, 1304, 0, 0, 576, + 577, 1305, 579, 1306, 1307, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 1310, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 4733, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 0, 0, 0, 0, 234, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3254, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 0, 263, 264, 265, 266, 267, 268, 269, 0, + 1256, 270, 271, 272, 273, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 0, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 325, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 1272, 0, 344, 0, 345, 346, 347, + 348, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 361, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 3402, 0, 408, 1284, 410, 411, 412, 0, 413, 414, + 415, 1285, 1286, 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, 1289, 446, 0, 447, 448, 449, 450, 0, + 1292, 452, 453, 454, 455, 456, 0, 457, 458, 0, + 839, 459, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 3403, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 40, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 44, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 574, + 575, 0, 0, 576, 577, 1305, 579, 1306, 0, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 0, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 1181, 600, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 49, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 3404, 625, 626, 627, 0, 0, 0, 50, 234, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3405, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 1256, 270, 271, 272, 273, 274, + 0, 275, 276, 277, 278, 1259, 0, 1260, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 325, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 1272, 0, 344, + 0, 345, 346, 347, 348, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 1275, 0, 361, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, + 394, 395, 396, 397, 1280, 1281, 1282, 1283, 402, 403, + 404, 405, 406, 407, 3402, 0, 408, 1284, 410, 411, + 412, 0, 413, 414, 415, 1285, 1286, 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, 1289, 446, 0, 447, + 448, 449, 450, 0, 1292, 452, 453, 454, 455, 456, + 0, 457, 458, 0, 839, 459, 460, 461, 0, 0, + 462, 463, 464, 465, 466, 467, 1295, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 1296, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 523, 3403, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 1299, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 1301, 563, 0, + 564, 565, 1302, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 574, 575, 0, 0, 576, 577, 1305, + 579, 1306, 0, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 1309, 0, + 594, 595, 596, 597, 598, 599, 600, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 1311, 1312, 1313, 1314, + 619, 1315, 1316, 1317, 1318, 3404, 625, 626, 627, 0, + 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3405, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 1256, 270, + 271, 272, 273, 274, 0, 275, 276, 277, 278, 1259, + 0, 1260, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 1261, 1262, 1263, 1264, 1265, + 1266, 1267, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 325, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 1272, 0, 344, 0, 345, 346, 347, 348, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 1275, 0, 361, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 0, + 391, 0, 392, 393, 394, 395, 396, 397, 1280, 1281, + 1282, 1283, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 1284, 410, 411, 412, 0, 413, 414, 415, 1285, + 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 1275, 437, 0, 438, 439, 440, 441, 0, 1278, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 1281, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 1282, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 1285, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 1287, 553, 0, 554, 555, 0, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 1290, 569, 1291, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 1294, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 1296, - 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, 615, - 616, 617, 0, 0, 234, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4686, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 1246, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 1249, - 0, 1250, 0, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 296, 297, 298, 299, 1251, 1252, 1253, 1254, 1255, - 1256, 1257, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 1262, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 351, 0, 352, 353, 354, 355, - 356, 0, 357, 1265, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 0, 0, 399, 1270, 401, 402, 403, 0, 404, 405, - 406, 1271, 1272, 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, 1275, 437, 0, 438, 439, 440, 441, 0, - 1278, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 456, - 457, 458, 1281, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 1282, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 1285, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 1287, 553, 0, 554, 555, 0, 556, 557, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 1290, 569, 1291, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 1294, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 592, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 1296, 1297, 1298, 1299, 609, 1300, 1301, 1302, 1303, 614, - 615, 616, 617, 0, 0, 938, 0, 1556, 684, 0, - 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5808, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 1289, 446, 0, 447, 448, 449, 450, 0, 1292, 452, + 453, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 1295, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 1296, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 1299, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 1301, 563, 0, 564, 565, 1302, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 574, 575, 0, + 0, 576, 577, 1305, 579, 1306, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 1309, 0, 594, 595, 596, 597, 598, 599, + 600, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, + 625, 626, 627, 0, 0, 0, 0, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3841, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 1256, 270, 271, 272, 273, 274, 0, 275, + 276, 277, 278, 1259, 0, 1260, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 1261, + 1262, 1263, 1264, 1265, 1266, 1267, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 325, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 1272, 0, 344, 0, 345, + 346, 347, 348, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 1275, 0, + 361, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, + 396, 397, 1280, 1281, 1282, 1283, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 1284, 410, 411, 412, 0, + 413, 414, 415, 1285, 1286, 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, 1289, 446, 0, 447, 448, 449, + 450, 0, 1292, 452, 453, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 1295, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 1296, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 3403, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 1299, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 1301, 563, 0, 564, 565, + 1302, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 574, 575, 0, 0, 576, 577, 1305, 579, 1306, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 1309, 0, 594, 595, + 596, 597, 598, 599, 600, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 1311, 1312, 1313, 1314, 619, 1315, + 1316, 1317, 1318, 3404, 625, 626, 627, 0, 0, 0, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 1256, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 1272, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 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, 1289, 446, + 0, 447, 448, 449, 450, 0, 1292, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 1305, 579, 1306, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 0, 0, 0, 0, 234, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4794, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 279, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 0, 0, 0, 300, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 1779, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 401, 402, 403, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 262, 0, 263, 264, 265, 266, 267, 268, 269, 0, + 1256, 270, 271, 272, 273, 274, 0, 275, 276, 277, + 278, 1259, 0, 1260, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 0, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 325, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 1272, 0, 344, 0, 345, 346, 347, + 348, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 1275, 0, 361, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, + 1280, 1281, 1282, 1283, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 1284, 410, 411, 412, 0, 413, 414, + 415, 1285, 1286, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 440, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 1780, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 534, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 1781, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 0, 0, 938, 0, 0, 0, - 0, 0, 0, 0, 0, 1557, 1558, 5618, 0, 0, - 0, 0, 0, 0, 5619, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 3, 4, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 0, - 300, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 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, 0, 438, 439, 440, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 40, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 44, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 1175, 590, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 49, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 0, 0, 50, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 279, 0, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 296, 297, 298, 299, 0, - 0, 0, 300, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 351, 0, - 352, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 401, 402, - 403, 0, 404, 405, 406, 0, 0, 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, 0, 438, - 439, 440, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 534, 535, 536, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 1289, 446, 0, 447, 448, 449, 450, 0, + 1292, 452, 453, 454, 455, 456, 0, 457, 458, 0, + 0, 459, 460, 461, 0, 0, 462, 463, 464, 465, + 466, 467, 1295, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 1296, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 1299, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 1301, 563, 0, 564, 565, 1302, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 574, + 575, 0, 0, 576, 577, 1305, 579, 1306, 0, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 0, 589, + 590, 591, 592, 593, 1309, 0, 594, 595, 596, 597, + 598, 599, 600, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 1311, 1312, 1313, 1314, 619, 1315, 1316, 1317, + 1318, 624, 625, 626, 627, 0, 0, 0, 0, 942, + 0, 1572, 694, 0, 0, 0, 0, 755, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5949, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 0, 270, 271, 272, 273, 274, + 0, 275, 276, 277, 278, 279, 0, 280, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 300, 0, 0, 0, 301, 0, 0, 0, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 325, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 1796, 344, + 0, 345, 346, 347, 348, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 360, 0, 361, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 409, 410, 411, + 412, 0, 413, 414, 415, 0, 0, 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, 0, 447, + 448, 449, 450, 0, 451, 452, 453, 454, 455, 456, + 0, 457, 458, 1797, 0, 459, 460, 461, 0, 0, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 481, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 557, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 592, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 0, 0, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5393, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 40, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 44, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 1175, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 49, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 0, 0, - 50, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 2812, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 835, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 2813, 2814, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1813, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 0, 0, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1368, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3404, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 0, 0, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4602, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 0, 0, 852, 0, 1556, 684, - 0, 0, 0, 953, 745, 0, 0, 0, 0, 0, - 954, 955, 956, 0, 4642, 235, 236, 237, 238, 239, - 240, 241, 242, 1692, 243, 244, 245, 1693, 1694, 1695, - 1696, 1697, 1698, 1699, 246, 247, 248, 1700, 249, 250, - 251, 252, 253, 254, 255, 256, 0, 853, 259, 854, - 855, 1701, 262, 263, 264, 265, 266, 267, 268, 1702, - 1703, 269, 270, 856, 857, 273, 1704, 274, 275, 276, - 277, 0, 1705, 279, 1706, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 1707, 290, 291, 292, 293, - 294, 295, 1708, 296, 297, 298, 299, 1709, 1710, 1711, - 300, 1712, 1713, 1714, 301, 302, 303, 304, 305, 306, - 858, 859, 309, 1715, 310, 1716, 311, 312, 313, 314, - 315, 316, 317, 1717, 318, 319, 320, 321, 1718, 1719, - 322, 323, 860, 325, 326, 1720, 327, 328, 329, 1721, - 330, 331, 332, 1722, 333, 334, 335, 336, 0, 338, - 339, 340, 341, 0, 1723, 343, 1724, 344, 345, 346, - 861, 348, 1725, 349, 1726, 350, 351, 1727, 352, 353, - 354, 355, 356, 1728, 357, 0, 1729, 0, 360, 361, - 1730, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 1731, 372, 373, 374, 375, 376, 377, 378, 1732, - 379, 380, 0, 382, 383, 384, 385, 862, 863, 1733, - 864, 1734, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 1735, 1736, 399, 0, 401, 402, 403, 1737, - 404, 405, 406, 1738, 1739, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 865, 426, 866, 428, 429, 430, 431, - 432, 433, 434, 4351, 0, 437, 1740, 438, 439, 440, - 441, 1741, 0, 443, 867, 445, 446, 447, 1742, 448, - 449, 1743, 1744, 4352, 451, 452, 1745, 1746, 453, 454, - 0, 456, 457, 458, 0, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 1747, 470, 471, 0, 473, - 0, 475, 476, 477, 1748, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 868, 489, 490, 491, 492, - 1749, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 1750, 506, 507, 508, 509, 510, - 511, 512, 513, 0, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 1751, 524, 525, 526, 527, 528, 1752, - 529, 530, 2642, 532, 533, 534, 535, 536, 870, 538, - 1753, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 0, 553, 1754, 554, 555, 1755, - 556, 557, 558, 559, 560, 561, 562, 1756, 563, 871, - 872, 1757, 1758, 566, 567, 0, 569, 0, 1759, 571, - 572, 573, 574, 575, 576, 577, 578, 1760, 1761, 579, - 580, 581, 582, 583, 1762, 1763, 584, 585, 586, 587, - 588, 0, 873, 1764, 591, 592, 593, 594, 595, 596, - 1765, 1766, 597, 1767, 1768, 598, 599, 600, 601, 602, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 615, 616, 617, 0, 0, 0, 0, 0, - 0, 0, 0, 959, 960, 961, 4353, 4354, 964, 965, - 966, 967, 852, 0, 1556, 684, 0, 0, 0, 953, - 745, 0, 0, 0, 0, 0, 954, 955, 956, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 1692, - 243, 244, 245, 1693, 1694, 1695, 1696, 1697, 1698, 1699, - 246, 247, 248, 1700, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 1701, 262, 263, - 264, 265, 266, 267, 268, 1702, 1703, 269, 270, 856, - 857, 273, 1704, 274, 275, 276, 277, 0, 1705, 279, - 1706, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 1707, 290, 291, 292, 293, 294, 295, 1708, 296, - 297, 298, 299, 1709, 1710, 1711, 300, 1712, 1713, 1714, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 1715, - 310, 1716, 311, 312, 313, 314, 315, 316, 317, 1717, - 318, 319, 320, 321, 1718, 1719, 322, 323, 860, 325, - 326, 1720, 327, 328, 329, 1721, 330, 331, 332, 1722, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 1723, 343, 1724, 344, 345, 346, 861, 348, 1725, 349, - 1726, 350, 351, 1727, 352, 353, 354, 355, 356, 1728, - 357, 0, 1729, 0, 360, 361, 1730, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 1731, 372, 373, - 374, 375, 376, 377, 378, 1732, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 1733, 864, 1734, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 1735, 1736, - 399, 0, 401, 402, 403, 1737, 404, 405, 406, 1738, - 1739, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 4778, - 0, 437, 1740, 438, 439, 440, 441, 1741, 0, 443, - 867, 445, 446, 447, 1742, 448, 449, 1743, 1744, 4352, - 451, 452, 1745, 1746, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 1747, 470, 471, 0, 473, 0, 475, 476, 477, - 1748, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 1749, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 1750, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 1751, - 524, 525, 526, 527, 528, 1752, 529, 530, 2642, 532, - 533, 534, 535, 536, 870, 538, 1753, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 1754, 554, 555, 1755, 556, 557, 558, 559, - 560, 561, 562, 1756, 563, 871, 872, 1757, 1758, 566, - 567, 0, 569, 0, 1759, 571, 572, 573, 574, 575, - 576, 577, 578, 1760, 1761, 579, 580, 581, 582, 583, - 1762, 1763, 584, 585, 586, 587, 588, 0, 873, 1764, - 591, 592, 593, 594, 595, 596, 1765, 1766, 597, 1767, - 1768, 598, 599, 600, 601, 602, 603, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 0, 0, 0, 959, - 960, 961, 4353, 4354, 964, 965, 966, 967, 2049, 0, - 0, 0, 0, 0, 0, 2050, 0, 0, 2051, 0, - 0, 0, 2052, 2053, 2054, 0, 0, 2055, 2056, 2057, - 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, - 2068, 2069, 2070, 0, 2071, 2072, 2073, 2074, 2075, 2076, - 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, - 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, - 2097, 2098, 2099, 2100, 2101, 0, 0, 2102, 2103, 2104, + 546, 547, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 0, + 564, 565, 0, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 574, 575, 0, 0, 576, 577, 578, + 579, 580, 1798, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, + 0, 0, 1573, 1574, 5755, 0, 0, 0, 0, 0, + 0, 5756, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 3, 4, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 0, 270, + 271, 272, 273, 274, 0, 275, 276, 277, 278, 279, + 0, 280, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 0, 0, 0, 301, 0, + 0, 0, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 325, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 0, 344, 0, 345, 346, 347, 348, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 360, 0, 361, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 0, + 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 409, 410, 411, 412, 0, 413, 414, 415, 0, + 0, 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, 0, 447, 448, 449, 450, 0, 451, 452, + 453, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 481, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 40, 534, 535, 536, 537, 538, 0, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 0, 564, 565, 0, 44, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 574, 575, 0, + 0, 576, 577, 578, 579, 580, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 0, 0, 594, 595, 596, 597, 598, 1181, + 600, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 49, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 1021, 0, 0, 50, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 56, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 272, 273, 274, 0, 275, + 276, 277, 278, 279, 0, 280, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 0, + 0, 0, 301, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 325, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 0, 344, 0, 345, + 346, 347, 348, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 360, 0, + 361, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 409, 410, 411, 412, 0, + 413, 414, 415, 0, 0, 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, 0, 447, 448, 449, + 450, 0, 451, 452, 453, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 481, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 0, 564, 565, + 0, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 574, 575, 0, 0, 576, 577, 578, 579, 580, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 0, 0, + 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5525, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 40, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 44, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 1181, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 49, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 0, 0, 0, 50, 635, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 0, 255, 256, 257, 258, 259, 0, 261, + 262, 0, 263, 264, 265, 266, 267, 268, 269, 0, + 0, 270, 271, 272, 273, 274, 0, 275, 276, 277, + 278, 279, 0, 0, 0, 281, 282, 283, 284, 285, + 286, 0, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 0, 298, 299, 300, 0, 0, 0, + 2848, 0, 0, 0, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 0, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 325, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 0, 344, 0, 345, 346, 347, + 348, 349, 0, 350, 0, 351, 352, 0, 0, 0, + 355, 356, 357, 358, 0, 359, 360, 0, 361, 362, + 363, 0, 364, 365, 366, 367, 368, 0, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 0, 384, 385, 386, 387, 388, 389, + 390, 0, 391, 0, 392, 0, 0, 395, 0, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 409, 0, 411, 0, 0, 413, 414, + 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 0, 447, 448, 0, 450, 0, + 451, 452, 453, 454, 455, 456, 0, 457, 458, 0, + 839, 459, 460, 461, 0, 0, 462, 463, 464, 0, + 466, 0, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 481, 482, 483, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 0, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, + 540, 541, 542, 543, 0, 545, 546, 547, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 0, 564, 565, 0, 2849, + 2850, 0, 568, 569, 570, 571, 572, 0, 573, 574, + 575, 0, 0, 576, 577, 578, 579, 580, 0, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 0, 589, + 590, 591, 592, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 0, 601, 0, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 0, 0, 0, 0, 635, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1830, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 0, 255, 256, 257, + 258, 259, 0, 261, 262, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 0, 270, 271, 272, 273, 274, + 0, 275, 276, 277, 278, 279, 0, 0, 0, 281, + 282, 283, 284, 285, 286, 0, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 0, 298, 299, + 300, 0, 0, 0, 0, 0, 0, 0, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 325, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 0, 344, + 0, 345, 346, 347, 348, 349, 0, 350, 0, 351, + 352, 0, 0, 0, 355, 356, 357, 358, 0, 359, + 360, 0, 361, 362, 363, 0, 364, 365, 366, 367, + 368, 0, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 0, 384, 385, + 386, 387, 388, 389, 390, 0, 391, 0, 392, 0, + 0, 395, 0, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 409, 0, 411, + 0, 0, 413, 414, 415, 0, 0, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 0, 447, + 448, 0, 450, 0, 451, 452, 453, 454, 455, 456, + 0, 457, 458, 0, 0, 459, 460, 461, 0, 0, + 462, 463, 464, 0, 466, 0, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 481, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 0, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 0, 539, 540, 541, 542, 543, 0, 545, + 546, 547, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 0, + 564, 565, 0, 0, 566, 0, 568, 569, 570, 571, + 572, 0, 573, 574, 575, 0, 0, 576, 577, 578, + 579, 580, 0, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 0, 601, 0, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1384, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 0, 255, 256, 257, 258, 259, 0, 261, 262, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 0, 270, + 271, 272, 273, 274, 0, 275, 276, 277, 278, 279, + 0, 0, 0, 281, 282, 283, 284, 285, 286, 0, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 0, 298, 299, 300, 0, 0, 0, 0, 0, + 0, 0, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 325, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 0, 344, 0, 345, 346, 347, 348, 349, + 0, 350, 0, 351, 352, 0, 0, 0, 355, 356, + 357, 358, 0, 359, 360, 0, 361, 362, 363, 0, + 364, 365, 366, 367, 368, 0, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 0, 384, 385, 386, 387, 388, 389, 390, 0, + 391, 0, 392, 0, 0, 395, 0, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 409, 0, 411, 0, 0, 413, 414, 415, 0, + 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 0, 447, 448, 0, 450, 0, 451, 452, + 453, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 464, 0, 466, 0, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 481, 482, 483, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 0, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, + 542, 543, 0, 545, 546, 547, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 0, 564, 565, 0, 0, 566, 0, + 568, 569, 570, 571, 572, 0, 573, 574, 575, 0, + 0, 576, 577, 578, 579, 580, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 0, 601, 0, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 0, 0, 0, 0, 635, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3462, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 0, 255, 256, 257, 258, 259, + 0, 261, 262, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 272, 273, 274, 0, 275, + 276, 277, 278, 279, 0, 0, 0, 281, 282, 283, + 284, 285, 286, 0, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 0, 298, 299, 300, 0, + 0, 0, 0, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 325, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 0, 344, 0, 345, + 346, 347, 348, 349, 0, 350, 0, 351, 352, 0, + 0, 0, 355, 356, 357, 358, 0, 359, 360, 0, + 361, 362, 363, 0, 364, 365, 366, 367, 368, 0, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 0, 384, 385, 386, 387, + 388, 389, 390, 0, 391, 0, 392, 0, 0, 395, + 0, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 409, 0, 411, 0, 0, + 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 0, 447, 448, 0, + 450, 0, 451, 452, 453, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 0, 466, 0, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 481, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 0, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 541, 542, 543, 0, 545, 546, 547, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 0, 564, 565, + 0, 0, 566, 0, 568, 569, 570, 571, 572, 0, + 573, 574, 575, 0, 0, 576, 577, 578, 579, 580, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 0, 601, 0, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 0, 0, + 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4123, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 0, 0, 0, 0, 856, 0, 1572, 694, 0, + 0, 0, 957, 755, 0, 0, 0, 0, 0, 958, + 959, 960, 0, 4750, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 1708, 244, 245, 246, 1709, 1710, 1711, + 1712, 1713, 1714, 1715, 247, 248, 249, 1716, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 857, 260, 858, + 859, 1717, 263, 264, 265, 266, 267, 268, 269, 1718, + 1719, 270, 271, 860, 861, 274, 1720, 275, 276, 277, + 278, 0, 1721, 280, 1722, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 1723, 291, 292, 293, 294, + 295, 296, 1724, 297, 298, 299, 300, 1725, 1726, 1727, + 301, 1728, 1729, 1730, 302, 303, 304, 305, 306, 307, + 862, 863, 310, 1731, 311, 1732, 312, 313, 314, 315, + 316, 317, 318, 1733, 319, 320, 321, 322, 1734, 1735, + 323, 324, 864, 326, 327, 1736, 328, 329, 330, 1737, + 331, 332, 333, 1738, 334, 335, 336, 337, 0, 339, + 340, 341, 342, 0, 1739, 344, 1740, 345, 346, 347, + 865, 349, 1741, 350, 1742, 351, 352, 353, 1743, 354, + 355, 356, 357, 358, 1744, 359, 0, 1745, 0, 362, + 363, 1746, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 1747, 374, 375, 376, 377, 378, 379, 380, + 381, 1748, 382, 383, 0, 385, 386, 387, 388, 866, + 867, 1749, 868, 1750, 392, 393, 394, 395, 396, 397, + 0, 0, 0, 0, 402, 403, 404, 405, 406, 407, + 1751, 1752, 408, 0, 410, 411, 412, 1753, 413, 414, + 415, 1754, 1755, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 869, 435, 870, 437, 438, 439, 440, 441, 442, + 443, 4438, 0, 446, 1756, 447, 448, 449, 450, 1757, + 0, 452, 871, 454, 455, 456, 1758, 457, 458, 1759, + 1760, 4439, 460, 461, 1761, 1762, 462, 463, 0, 465, + 466, 467, 0, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 1763, 479, 480, 0, 482, 0, 484, + 485, 486, 1764, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 872, 498, 499, 500, 501, 1765, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 1766, 515, 516, 517, 518, 519, 520, 521, + 522, 0, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 1767, 534, 535, 536, 537, 538, 1768, 539, + 540, 2678, 542, 543, 544, 545, 546, 874, 548, 1769, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 0, 563, 1770, 564, 565, 1771, 1772, + 566, 567, 568, 569, 570, 571, 572, 1773, 573, 875, + 876, 1774, 1775, 576, 577, 0, 579, 0, 1776, 581, + 582, 583, 584, 585, 586, 587, 588, 1777, 1778, 589, + 590, 591, 592, 593, 1779, 1780, 594, 595, 596, 597, + 598, 0, 877, 1781, 601, 602, 603, 604, 605, 606, + 1782, 1783, 607, 1784, 1785, 608, 609, 610, 611, 612, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 625, 626, 627, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 963, 964, 965, 4440, 4441, + 968, 969, 970, 971, 856, 0, 1572, 694, 0, 0, + 0, 957, 755, 0, 0, 0, 0, 0, 958, 959, + 960, 0, 0, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 1708, 244, 245, 246, 1709, 1710, 1711, 1712, + 1713, 1714, 1715, 247, 248, 249, 1716, 250, 251, 252, + 253, 254, 255, 256, 257, 0, 857, 260, 858, 859, + 1717, 263, 264, 265, 266, 267, 268, 269, 1718, 1719, + 270, 271, 860, 861, 274, 1720, 275, 276, 277, 278, + 0, 1721, 280, 1722, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 1723, 291, 292, 293, 294, 295, + 296, 1724, 297, 298, 299, 300, 1725, 1726, 1727, 301, + 1728, 1729, 1730, 302, 303, 304, 305, 306, 307, 862, + 863, 310, 1731, 311, 1732, 312, 313, 314, 315, 316, + 317, 318, 1733, 319, 320, 321, 322, 1734, 1735, 323, + 324, 864, 326, 327, 1736, 328, 329, 330, 1737, 331, + 332, 333, 1738, 334, 335, 336, 337, 0, 339, 340, + 341, 342, 0, 1739, 344, 1740, 345, 346, 347, 865, + 349, 1741, 350, 1742, 351, 352, 353, 1743, 354, 355, + 356, 357, 358, 1744, 359, 0, 1745, 0, 362, 363, + 1746, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 1747, 374, 375, 376, 377, 378, 379, 380, 381, + 1748, 382, 383, 0, 385, 386, 387, 388, 866, 867, + 1749, 868, 1750, 392, 393, 394, 395, 396, 397, 0, + 0, 0, 0, 402, 403, 404, 405, 406, 407, 1751, + 1752, 408, 0, 410, 411, 412, 1753, 413, 414, 415, + 1754, 1755, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 869, 435, 870, 437, 438, 439, 440, 441, 442, 443, + 4888, 0, 446, 1756, 447, 448, 449, 450, 1757, 0, + 452, 871, 454, 455, 456, 1758, 457, 458, 1759, 1760, + 4439, 460, 461, 1761, 1762, 462, 463, 0, 465, 466, + 467, 0, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 1763, 479, 480, 0, 482, 0, 484, 485, + 486, 1764, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 872, 498, 499, 500, 501, 1765, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 1766, 515, 516, 517, 518, 519, 520, 521, 522, + 0, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 1767, 534, 535, 536, 537, 538, 1768, 539, 540, + 2678, 542, 543, 544, 545, 546, 874, 548, 1769, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 0, 563, 1770, 564, 565, 1771, 1772, 566, + 567, 568, 569, 570, 571, 572, 1773, 573, 875, 876, + 1774, 1775, 576, 577, 0, 579, 0, 1776, 581, 582, + 583, 584, 585, 586, 587, 588, 1777, 1778, 589, 590, + 591, 592, 593, 1779, 1780, 594, 595, 596, 597, 598, + 0, 877, 1781, 601, 602, 603, 604, 605, 606, 1782, + 1783, 607, 1784, 1785, 608, 609, 610, 611, 612, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 963, 964, 965, 4440, 4441, 968, + 969, 970, 971, 2072, 0, 0, 0, 0, 0, 0, + 2073, 0, 0, 2074, 0, 0, 0, 2075, 2076, 2077, + 0, 0, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, + 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 0, + 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, - 2125, 2126, 2127, 2128, 0, 2129, 2130, 2131, 2132, 2133, - 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, - 0, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, - 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, - 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, - 2173, 2174, 2175, 2176, 2177, 0, 2178, 2179, 2180, 2181, - 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 0, 0, - 2190, 2191, 2192, 2193, 0, 2194, 2195, 2196, 2197, 0, - 2198, 2199, 2200, 2201, 2202, 0, 2203, 2204, 0, 2205, - 2206, 2207, 0, 2208, 2209, 0, 2210, 2211, 2212, 2213, - 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, - 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, - 2234, 0, 2235, 0, 2236, 2237, 2238, 2239, 2240, 2241, + 2125, 0, 0, 2126, 2127, 2128, 2129, 2130, 2131, 2132, + 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, + 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, + 0, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, + 2162, 2163, 2164, 2165, 2166, 2167, 0, 2168, 2169, 2170, + 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, + 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, + 2201, 0, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 0, 0, 2214, 2215, 2216, 2217, + 0, 2218, 2219, 2220, 2221, 2222, 0, 2223, 2224, 2225, + 2226, 2227, 0, 2228, 2229, 0, 2230, 2231, 2232, 0, + 2233, 2234, 0, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, - 2252, 0, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, - 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 0, 2269, - 2270, 0, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, - 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, + 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 0, + 2261, 0, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, + 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, + 2280, 2281, 2282, 2283, 2284, 0, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, - 0, 2299, 2300, 0, 2301, 2302, 2303, 2304, 2305, 0, - 2306, 2307, 2308, 2309, 0, 0, 2310, 2311, 2312, 2313, - 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, - 2324, 2325, 0, 2326, 2327, 2328, 2329, 2330, 2331, 2332, - 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, - 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, - 2353, 2354, 2355, 2356, 2357, 2358, 0, 2359, 2360, 2361, - 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, - 2372, 2373, 2374, 0, 2375, 2376, 2377, 2378, 2379, 2380, + 2299, 2300, 0, 2301, 2302, 0, 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, 0, 2331, 2332, 0, 2333, 2334, + 2335, 2336, 2337, 0, 2338, 2339, 2340, 2341, 0, 0, + 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, + 2352, 2353, 2354, 2355, 2356, 2357, 0, 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, 0, 2424, 2425, 2426, 2427, 2428, 2429, - 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 0, + 0, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, + 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 0, 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, 0, 2455, 2456, 2457, - 2458, 2459, 2460, 0, 2461, 0, 0, 0, 0, 2462, - 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, - 2473, 2474, 2475, 2476, 0, 2477, 2478, 2479, 0, 0, - 0, 0, 0, 0, 0, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 625, 0, 0, 0, 0, 0, - 0, 953, 0, 0, 0, 0, 0, 0, 954, 955, - 956, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 957, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 958, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 0, 0, 0, 0, 0, 0, 0, - 0, 959, 960, 961, 962, 963, 964, 965, 966, 967, - 625, 0, 0, 0, 0, 0, 0, 953, 0, 0, - 0, 0, 0, 0, 954, 955, 956, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 1073, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 1074, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 0, - 0, 0, 0, 0, 0, 0, 0, 959, 960, 961, - 962, 963, 964, 965, 966, 967, 625, 0, 0, 0, - 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, - 954, 955, 956, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 1138, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 1139, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 1140, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 0, 0, 0, 0, 0, - 0, 0, 0, 959, 960, 961, 962, 963, 964, 965, - 966, 967, 625, 0, 0, 0, 0, 0, 0, 953, - 0, 0, 0, 0, 0, 0, 954, 955, 956, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 1796, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 1797, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, + 2468, 2469, 2470, 2471, 2472, 0, 2473, 2474, 2475, 2476, + 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, + 2487, 2488, 0, 2489, 2490, 2491, 2492, 2493, 2494, 0, + 2495, 0, 0, 0, 0, 2496, 2497, 2498, 2499, 2500, + 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, + 0, 2511, 2512, 0, 2513, 0, 0, 0, 0, 0, + 0, 0, 0, 2514, 2515, 2516, 2517, 2518, 2519, 2520, + 2521, 2522, 635, 0, 0, 0, 0, 0, 0, 957, + 0, 0, 0, 0, 0, 0, 958, 959, 960, 0, + 0, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, + 0, 247, 248, 249, 0, 250, 251, 252, 253, 0, + 255, 256, 257, 258, 259, 0, 261, 262, 0, 263, + 264, 265, 266, 267, 268, 269, 0, 0, 270, 271, + 272, 273, 274, 0, 275, 961, 277, 278, 279, 0, + 0, 0, 281, 282, 283, 284, 285, 286, 0, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 0, + 0, 298, 299, 300, 0, 0, 0, 0, 0, 0, + 0, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 0, 311, 0, 312, 313, 314, 315, 316, 317, 318, + 0, 319, 320, 321, 322, 0, 0, 323, 324, 325, + 326, 327, 0, 328, 329, 330, 0, 331, 332, 333, + 0, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 0, 962, 0, 345, 346, 347, 348, 349, 0, + 350, 0, 351, 352, 0, 0, 0, 355, 356, 357, + 358, 0, 359, 360, 0, 361, 362, 363, 0, 364, + 365, 366, 367, 368, 0, 370, 371, 372, 373, 0, + 374, 375, 376, 377, 378, 379, 380, 381, 0, 382, + 0, 384, 385, 386, 387, 388, 389, 390, 0, 391, + 0, 392, 0, 0, 395, 0, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 0, 0, 408, + 409, 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 0, 0, 0, 0, 0, 0, 0, 0, 959, - 960, 961, 962, 963, 964, 965, 966, 967, 625, 0, - 0, 0, 0, 0, 0, 953, 0, 0, 0, 0, - 0, 0, 954, 955, 956, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 0, 0, 0, - 0, 0, 0, 0, 0, 959, 960, 961, 962, 963, - 964, 965, 966, 967, 625, 0, 0, 0, 0, 0, - 0, 953, 0, 0, 0, 0, 0, 0, 954, 955, - 956, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 3475, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 3476, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 0, 0, 0, 0, 0, 0, 0, - 0, 959, 960, 961, 962, 963, 964, 965, 966, 967, - 625, 0, 0, 0, 0, 0, 0, 953, 0, 0, - 0, 0, 0, 0, 954, 955, 956, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 5373, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 0, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 0, 447, 448, 0, 450, 0, 451, 452, 453, + 454, 455, 456, 0, 457, 458, 0, 0, 459, 460, + 461, 0, 0, 462, 463, 464, 0, 466, 0, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 0, 479, 480, 481, 482, 483, 484, 485, 486, 0, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 0, + 515, 516, 0, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 0, + 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, + 543, 0, 545, 546, 547, 548, 0, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 0, 564, 565, 0, 0, 566, 0, 568, + 569, 570, 571, 572, 0, 573, 574, 575, 0, 0, + 576, 577, 578, 579, 580, 0, 581, 582, 583, 584, + 585, 586, 587, 588, 0, 0, 589, 590, 591, 592, + 593, 0, 0, 594, 595, 596, 597, 598, 599, 600, + 0, 601, 0, 603, 604, 605, 606, 0, 0, 607, + 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 963, 964, 965, 966, 967, 968, 969, 970, + 971, 635, 0, 0, 0, 0, 0, 0, 957, 0, + 0, 0, 0, 0, 0, 958, 959, 960, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 1078, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 1079, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 1691, - 0, 0, 0, 0, 0, 0, 0, 959, 960, 961, - 962, 963, 964, 965, 966, 967, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 1692, 243, 244, 245, - 1693, 1694, 1695, 1696, 1697, 1698, 1699, 246, 247, 248, - 1700, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 1701, 262, 263, 264, 265, 266, - 267, 268, 1702, 1703, 269, 270, 271, 272, 273, 1704, - 274, 275, 276, 277, 278, 1705, 279, 1706, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 1707, 290, - 291, 292, 293, 294, 295, 1708, 296, 297, 298, 299, - 1709, 1710, 1711, 300, 1712, 1713, 1714, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 1715, 310, 1716, 311, - 312, 313, 314, 315, 316, 317, 1717, 318, 319, 320, - 321, 1718, 1719, 322, 323, 324, 325, 326, 1720, 327, - 328, 329, 1721, 330, 331, 332, 1722, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 1723, 343, 1724, - 344, 345, 346, 347, 348, 1725, 349, 1726, 350, 351, - 1727, 352, 353, 354, 355, 356, 1728, 357, 358, 1729, - 359, 360, 361, 1730, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 1731, 372, 373, 374, 375, 376, - 377, 378, 1732, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 1733, 388, 1734, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 1735, 1736, 399, 400, 401, - 402, 403, 1737, 404, 405, 406, 1738, 1739, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 635, 0, 0, 0, 0, 0, 0, 957, 0, 0, + 0, 0, 0, 0, 958, 959, 960, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 0, 255, 256, + 257, 258, 259, 0, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 1144, 277, 278, 279, 0, 0, 0, + 281, 282, 283, 284, 285, 286, 0, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 0, 298, + 299, 300, 0, 0, 0, 0, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 0, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 0, + 1145, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 0, 0, 0, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 1146, 0, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 0, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 0, 0, 395, 0, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 0, + 411, 0, 0, 413, 414, 415, 0, 0, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 0, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 0, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 0, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 0, 466, 0, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 0, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, + 536, 537, 538, 0, 539, 540, 541, 542, 543, 0, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 0, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 0, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 0, 603, 604, 605, 606, 0, 0, 607, 0, 0, + 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 635, + 0, 0, 0, 0, 0, 0, 957, 0, 0, 0, + 0, 0, 0, 958, 959, 960, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 0, 255, 256, 257, + 258, 259, 0, 261, 262, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 0, 270, 271, 272, 273, 274, + 0, 275, 1813, 277, 278, 279, 0, 0, 0, 281, + 282, 283, 284, 285, 286, 0, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 0, 298, 299, + 300, 0, 0, 0, 0, 0, 0, 0, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 325, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 0, 1814, + 0, 345, 346, 347, 348, 349, 0, 350, 0, 351, + 352, 0, 0, 0, 355, 356, 357, 358, 0, 359, + 360, 0, 361, 362, 363, 0, 364, 365, 366, 367, + 368, 0, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 0, 384, 385, + 386, 387, 388, 389, 390, 0, 391, 0, 392, 0, + 0, 395, 0, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 409, 0, 411, + 0, 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 1740, - 438, 439, 440, 441, 1741, 442, 443, 444, 445, 446, - 447, 1742, 448, 449, 1743, 1744, 450, 451, 452, 1745, - 1746, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 1747, 470, - 471, 472, 473, 474, 475, 476, 477, 1748, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 1749, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 1750, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 1751, 524, 525, 526, - 527, 528, 1752, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 1753, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 1754, - 554, 555, 1755, 556, 557, 558, 559, 560, 561, 562, - 1756, 563, 564, 565, 1757, 1758, 566, 567, 568, 569, - 570, 1759, 571, 572, 573, 574, 575, 576, 577, 578, - 1760, 1761, 579, 580, 581, 582, 583, 1762, 1763, 584, - 585, 586, 587, 588, 589, 590, 1764, 591, 592, 593, - 594, 595, 596, 1765, 1766, 597, 1767, 1768, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1769, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 841, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 366, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 852, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5778, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 0, 853, 259, 854, - 855, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 856, 857, 273, 0, 274, 275, 276, - 277, 0, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 0, - 300, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 858, 859, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 0, 338, - 339, 340, 341, 0, 0, 343, 0, 344, 345, 346, - 861, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 0, 0, 0, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 2638, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 2639, 382, 383, 384, 385, 862, 863, 0, - 864, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 0, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 865, 426, 866, 428, 429, 430, 431, - 432, 433, 434, 0, 0, 437, 0, 438, 439, 440, - 441, 0, 0, 443, 867, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 2640, 453, 454, - 2641, 456, 457, 458, 0, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 0, 473, - 0, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 868, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 0, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 2642, 532, 533, 534, 535, 536, 870, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 0, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 871, - 872, 0, 0, 566, 567, 0, 569, 0, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 0, 873, 2643, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 3820, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 615, 616, 617, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 2644, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 0, 853, 259, 854, 855, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 856, 857, - 273, 0, 274, 275, 276, 277, 0, 0, 279, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 0, 0, 0, 300, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 858, 859, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 860, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 0, 338, 339, 340, 341, 0, 0, - 343, 0, 344, 345, 346, 861, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 0, 0, 0, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 2638, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 2639, 382, 383, - 384, 385, 862, 863, 0, 864, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 0, 401, 402, 403, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 865, 426, - 866, 428, 429, 430, 431, 432, 433, 434, 0, 0, - 437, 0, 438, 439, 440, 441, 0, 0, 443, 867, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 2640, 453, 454, 2641, 456, 457, 458, 0, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 0, 473, 0, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 868, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 0, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 2642, 532, 533, - 534, 535, 536, 870, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 0, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 871, 872, 0, 0, 566, 567, - 0, 569, 0, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 0, 873, 2643, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 938, 0, 1556, 684, - 0, 0, 0, 0, 745, 2528, 0, 615, 616, 617, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 2644, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, + 429, 430, 431, 432, 433, 434, 0, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 0, 447, + 448, 0, 450, 0, 451, 452, 453, 454, 455, 456, + 0, 457, 458, 0, 0, 459, 460, 461, 0, 0, + 462, 463, 464, 0, 466, 0, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 481, 482, 483, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 0, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 0, 539, 540, 541, 542, 543, 0, 545, + 546, 547, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 0, + 564, 565, 0, 0, 566, 0, 568, 569, 570, 571, + 572, 0, 573, 574, 575, 0, 0, 576, 577, 578, + 579, 580, 0, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 0, 601, 0, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 635, 0, + 0, 0, 0, 0, 0, 957, 0, 0, 0, 0, + 0, 0, 958, 959, 960, 0, 0, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 0, 244, 245, 246, + 0, 0, 0, 0, 0, 0, 0, 247, 248, 249, + 0, 250, 251, 252, 253, 0, 255, 256, 257, 258, + 259, 0, 261, 262, 0, 263, 264, 265, 266, 267, + 268, 269, 0, 0, 270, 271, 272, 273, 274, 0, + 275, 276, 277, 278, 279, 0, 0, 0, 281, 282, + 283, 284, 285, 286, 0, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 0, 0, 298, 299, 300, + 0, 0, 0, 0, 0, 0, 0, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 0, 311, 0, 312, + 313, 314, 315, 316, 317, 318, 0, 319, 320, 321, + 322, 0, 0, 323, 324, 325, 326, 327, 0, 328, + 329, 330, 0, 331, 332, 333, 0, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 0, 344, 0, + 345, 346, 347, 348, 349, 0, 350, 0, 351, 352, + 0, 0, 0, 355, 356, 357, 358, 0, 359, 360, + 0, 361, 362, 363, 0, 364, 365, 366, 367, 368, + 0, 370, 371, 372, 373, 0, 374, 375, 376, 377, + 378, 379, 380, 381, 0, 382, 0, 384, 385, 386, + 387, 388, 389, 390, 0, 391, 0, 392, 0, 0, + 395, 0, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 0, 0, 408, 409, 0, 411, 0, + 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 0, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 0, 447, 448, + 0, 450, 0, 451, 452, 453, 454, 455, 456, 0, + 457, 458, 0, 0, 459, 460, 461, 0, 0, 462, + 463, 464, 0, 466, 0, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 0, 479, 480, 481, + 482, 483, 484, 485, 486, 0, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 0, 515, 516, 0, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, + 538, 0, 539, 540, 541, 542, 543, 0, 545, 546, + 547, 548, 0, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 0, 564, + 565, 0, 0, 566, 0, 568, 569, 570, 571, 572, + 0, 573, 574, 575, 0, 0, 576, 577, 578, 579, + 580, 0, 581, 582, 583, 584, 585, 586, 587, 588, + 0, 0, 589, 590, 591, 592, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 0, 601, 0, 603, + 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 635, 0, 0, + 0, 0, 0, 0, 957, 0, 0, 0, 0, 0, + 0, 958, 959, 960, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 0, 255, 256, 257, 258, 259, + 0, 261, 262, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 272, 273, 274, 0, 275, + 3533, 277, 278, 279, 0, 0, 0, 281, 282, 283, + 284, 285, 286, 0, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 0, 298, 299, 300, 0, + 0, 0, 0, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 325, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 0, 3534, 0, 345, + 346, 347, 348, 349, 0, 350, 0, 351, 352, 0, + 0, 0, 355, 356, 357, 358, 0, 359, 360, 0, + 361, 362, 363, 0, 364, 365, 366, 367, 368, 0, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 0, 384, 385, 386, 387, + 388, 389, 390, 0, 391, 0, 392, 0, 0, 395, + 0, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 409, 0, 411, 0, 0, + 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 0, 447, 448, 0, + 450, 0, 451, 452, 453, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 464, 0, 466, 0, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 481, 482, + 483, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 0, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 541, 542, 543, 0, 545, 546, 547, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 0, 564, 565, + 0, 0, 566, 0, 568, 569, 570, 571, 572, 0, + 573, 574, 575, 0, 0, 576, 577, 578, 579, 580, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 0, 601, 0, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 963, 964, 965, + 966, 967, 968, 969, 970, 971, 635, 0, 0, 0, + 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, + 958, 959, 960, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 0, 244, 245, 246, 0, 0, + 0, 0, 0, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 0, 255, 256, 257, 258, 259, 0, + 261, 262, 0, 263, 264, 265, 266, 267, 268, 269, + 0, 0, 270, 271, 272, 273, 274, 0, 275, 276, + 277, 278, 279, 0, 0, 0, 281, 282, 283, 284, + 285, 286, 0, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 0, 298, 299, 300, 0, 0, + 0, 0, 0, 0, 0, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 0, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 0, + 0, 323, 324, 325, 326, 327, 0, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 0, 344, 0, 345, 346, + 347, 348, 349, 0, 350, 0, 351, 352, 0, 0, + 0, 355, 356, 357, 358, 0, 359, 360, 0, 361, + 362, 363, 0, 364, 365, 366, 367, 368, 0, 370, + 371, 372, 373, 0, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 0, 384, 385, 386, 387, 388, + 389, 390, 0, 391, 0, 392, 0, 0, 395, 0, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 409, 0, 411, 0, 0, 413, + 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 0, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 0, 447, 448, 0, 450, + 0, 451, 452, 453, 454, 455, 456, 0, 457, 458, + 0, 0, 5504, 460, 461, 0, 0, 462, 463, 464, + 0, 466, 0, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 481, 482, 483, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 0, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, + 539, 540, 541, 542, 543, 0, 545, 546, 547, 548, + 0, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 0, 564, 565, 0, + 0, 566, 0, 568, 569, 570, 571, 572, 0, 573, + 574, 575, 0, 0, 576, 577, 578, 579, 580, 0, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 0, + 589, 590, 591, 592, 593, 0, 0, 594, 595, 596, + 597, 598, 599, 600, 0, 601, 0, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 1707, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 963, 964, 965, 966, + 967, 968, 969, 970, 971, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 1708, 244, 245, 246, 1709, 1710, + 1711, 1712, 1713, 1714, 1715, 247, 248, 249, 1716, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 0, - 300, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 2529, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 1779, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 261, 262, 1717, 263, 264, 265, 266, 267, 268, 269, + 1718, 1719, 270, 271, 272, 273, 274, 1720, 275, 276, + 277, 278, 279, 1721, 280, 1722, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 1723, 291, 292, 293, + 294, 295, 296, 1724, 297, 298, 299, 300, 1725, 1726, + 1727, 301, 1728, 1729, 1730, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 1731, 311, 1732, 312, 313, 314, + 315, 316, 317, 318, 1733, 319, 320, 321, 322, 1734, + 1735, 323, 324, 325, 326, 327, 1736, 328, 329, 330, + 1737, 331, 332, 333, 1738, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 1739, 344, 1740, 345, 346, + 347, 348, 349, 1741, 350, 1742, 351, 352, 353, 1743, + 354, 355, 356, 357, 358, 1744, 359, 360, 1745, 361, + 362, 363, 1746, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 1747, 374, 375, 376, 377, 378, 379, + 380, 381, 1748, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 1749, 391, 1750, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 1751, 1752, 408, 409, 410, 411, 412, 1753, 413, + 414, 415, 1754, 1755, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 1780, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 1781, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 938, 0, 1556, 684, 0, - 0, 0, 0, 745, 2528, 0, 1557, 1558, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 279, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 0, 0, 0, 300, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 2534, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 1779, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 401, 402, 403, 0, 404, - 405, 406, 0, 0, 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, 0, 438, 439, 440, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 1780, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 534, 535, 536, 537, 538, 0, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 1756, 447, 448, 449, 450, + 1757, 451, 452, 453, 454, 455, 456, 1758, 457, 458, + 1759, 1760, 459, 460, 461, 1761, 1762, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 1763, 479, 480, 481, 482, 483, + 484, 485, 486, 1764, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 1765, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 1766, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 1767, 534, 535, 536, 537, 538, 1768, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 1781, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 938, 0, 1556, 684, 0, 0, - 0, 0, 745, 0, 0, 1557, 1558, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 279, 0, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 296, 297, 298, 299, 0, 0, 0, 300, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 3436, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 1779, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 351, 0, 352, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 401, 402, 403, 0, 404, 405, - 406, 0, 0, 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, 0, 438, 439, 440, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 1780, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 456, - 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 557, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 1781, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 592, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 938, 0, 1556, 684, 0, 0, 0, - 0, 745, 2528, 0, 1557, 1558, 0, 0, 0, 0, + 1769, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 1770, 564, 565, 1771, + 1772, 566, 567, 568, 569, 570, 571, 572, 1773, 573, + 574, 575, 1774, 1775, 576, 577, 578, 579, 580, 1776, + 581, 582, 583, 584, 585, 586, 587, 588, 1777, 1778, + 589, 590, 591, 592, 593, 1779, 1780, 594, 595, 596, + 597, 598, 599, 600, 1781, 601, 602, 603, 604, 605, + 606, 1782, 1783, 607, 1784, 1785, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 635, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1786, 0, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 0, 244, 245, 246, 0, 0, + 0, 0, 0, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 0, 255, 256, 257, 258, 259, 0, + 261, 262, 0, 263, 264, 265, 266, 267, 268, 269, + 0, 0, 270, 271, 272, 273, 274, 0, 275, 276, + 277, 278, 279, 0, 0, 0, 281, 282, 283, 284, + 285, 286, 0, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 0, 298, 299, 300, 0, 0, + 0, 0, 0, 0, 0, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 0, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 0, + 0, 323, 324, 325, 326, 327, 0, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 0, 344, 0, 345, 346, + 347, 348, 349, 0, 350, 0, 351, 352, 0, 0, + 0, 355, 356, 357, 358, 0, 359, 360, 0, 361, + 362, 363, 0, 364, 365, 366, 367, 368, 0, 370, + 371, 372, 373, 0, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 0, 384, 385, 386, 387, 388, + 389, 390, 0, 391, 0, 392, 0, 0, 395, 0, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 409, 0, 411, 0, 0, 413, + 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 0, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 0, 447, 448, 0, 450, + 0, 451, 452, 453, 454, 455, 456, 0, 457, 458, + 0, 0, 459, 460, 461, 0, 0, 462, 463, 464, + 0, 466, 0, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 481, 482, 483, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 0, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, + 539, 540, 541, 542, 543, 0, 545, 546, 547, 548, + 0, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 0, 564, 565, 0, + 0, 566, 0, 568, 569, 570, 571, 572, 0, 573, + 574, 575, 0, 0, 576, 577, 578, 579, 580, 0, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 0, + 589, 590, 591, 592, 593, 0, 0, 594, 595, 596, + 597, 598, 599, 600, 0, 601, 0, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 635, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 845, 0, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 0, 244, 245, 246, 0, 0, + 0, 0, 0, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 0, 255, 256, 257, 258, 259, 0, + 261, 262, 0, 263, 264, 265, 266, 267, 268, 269, + 0, 0, 270, 271, 272, 273, 274, 0, 275, 276, + 277, 278, 279, 0, 0, 0, 281, 282, 283, 284, + 285, 286, 0, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 0, 298, 299, 300, 0, 0, + 0, 0, 0, 0, 0, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 0, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 0, + 0, 323, 324, 325, 326, 327, 0, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 0, 344, 0, 345, 346, + 347, 348, 349, 0, 350, 0, 351, 352, 0, 0, + 0, 355, 356, 357, 358, 0, 359, 360, 0, 361, + 362, 363, 0, 364, 365, 366, 367, 368, 0, 370, + 371, 372, 373, 0, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 0, 384, 385, 386, 387, 388, + 389, 390, 0, 391, 0, 392, 0, 0, 395, 0, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 409, 0, 411, 0, 0, 413, + 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 0, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 0, 447, 448, 0, 450, + 0, 451, 452, 453, 454, 455, 456, 0, 457, 458, + 0, 0, 459, 460, 461, 0, 0, 462, 463, 464, + 0, 466, 0, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 481, 482, 483, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 0, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, + 539, 540, 541, 542, 543, 0, 545, 546, 547, 548, + 0, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 0, 564, 565, 0, + 0, 566, 0, 568, 569, 570, 571, 572, 0, 573, + 574, 575, 0, 0, 576, 577, 578, 579, 580, 0, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 0, + 589, 590, 591, 592, 593, 0, 0, 594, 595, 596, + 597, 598, 599, 600, 0, 601, 0, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 856, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5919, 0, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 0, 244, 245, 246, 0, 0, + 0, 0, 0, 0, 0, 247, 248, 249, 0, 250, + 251, 252, 253, 254, 255, 256, 257, 0, 857, 260, + 858, 859, 0, 263, 264, 265, 266, 267, 268, 269, + 0, 0, 270, 271, 860, 861, 274, 0, 275, 276, + 277, 278, 0, 0, 280, 0, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 0, 297, 298, 299, 300, 0, 0, + 0, 301, 0, 0, 0, 302, 303, 304, 305, 306, + 307, 862, 863, 310, 0, 311, 0, 312, 313, 314, + 315, 316, 317, 318, 0, 319, 320, 321, 322, 0, + 0, 323, 324, 864, 326, 327, 0, 328, 329, 330, + 0, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 339, 340, 341, 342, 0, 0, 344, 0, 345, 346, + 347, 865, 349, 0, 350, 0, 351, 352, 353, 0, + 354, 355, 356, 357, 358, 0, 359, 0, 0, 0, + 362, 363, 0, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 2674, 374, 375, 376, 377, 378, 379, + 380, 381, 0, 382, 383, 2675, 385, 386, 387, 388, + 866, 867, 0, 868, 0, 392, 393, 394, 395, 396, + 397, 0, 0, 0, 0, 402, 403, 404, 405, 406, + 407, 0, 0, 408, 0, 410, 411, 412, 0, 413, + 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 869, 435, 870, 437, 438, 439, 440, 441, + 442, 443, 0, 0, 446, 0, 447, 448, 449, 450, + 0, 0, 452, 871, 454, 455, 456, 0, 457, 458, + 0, 0, 459, 460, 461, 0, 2676, 462, 463, 2677, + 465, 466, 467, 0, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 0, 479, 480, 0, 482, 0, + 484, 485, 486, 0, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 872, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 0, 515, 516, 517, 518, 519, 520, + 521, 522, 0, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, + 539, 540, 2678, 542, 543, 544, 545, 546, 874, 548, + 0, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 0, 563, 0, 564, 565, 0, + 0, 566, 567, 568, 569, 570, 571, 572, 0, 573, + 875, 876, 0, 0, 576, 577, 0, 579, 0, 0, + 581, 582, 583, 584, 585, 586, 587, 588, 0, 0, + 589, 590, 591, 592, 593, 0, 0, 594, 595, 596, + 597, 598, 0, 877, 2679, 601, 602, 603, 604, 605, + 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, + 612, 613, 0, 3878, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 625, 626, 627, 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 279, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 0, 0, 0, 300, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 1779, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 401, 402, 403, 0, 404, 405, 406, - 0, 0, 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, 0, 438, 439, 440, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 1780, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 1781, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 938, 0, 1556, 684, 0, 0, 0, 0, - 745, 0, 0, 1557, 1558, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 1779, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 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, 0, 438, 439, 440, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 1780, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 1781, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 745, - 0, 0, 1557, 1558, 0, 0, 0, 0, 0, 0, - 235, 746, 237, 238, 239, 240, 241, 242, 747, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 748, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 749, 347, 348, 0, 349, 0, - 750, 0, 751, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 752, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 753, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 754, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 755, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 756, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 243, 2680, 244, 245, 246, 0, 0, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 0, 857, 260, 858, 859, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 0, 270, + 271, 860, 861, 274, 0, 275, 276, 277, 278, 0, + 0, 280, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 0, 0, 0, 301, 0, + 0, 0, 302, 303, 304, 305, 306, 307, 862, 863, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 0, 339, 340, 341, + 342, 0, 0, 344, 0, 345, 346, 347, 865, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 0, 0, 0, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 2674, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 2675, 385, 386, 387, 388, 866, 867, 0, + 868, 0, 392, 393, 394, 395, 396, 397, 0, 0, + 0, 0, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 0, 410, 411, 412, 0, 413, 414, 415, 0, + 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 869, + 435, 870, 437, 438, 439, 440, 441, 442, 443, 0, + 0, 446, 0, 447, 448, 449, 450, 0, 0, 452, + 871, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 2676, 462, 463, 2677, 465, 466, 467, + 0, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 0, 482, 0, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 872, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 0, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 0, 539, 540, 2678, + 542, 543, 544, 545, 546, 874, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 0, 563, 0, 564, 565, 0, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 875, 876, 0, + 0, 576, 577, 0, 579, 0, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 0, 0, 594, 595, 596, 597, 598, 0, + 877, 2679, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 0, + 942, 0, 1572, 694, 0, 0, 0, 0, 755, 2564, + 625, 626, 627, 0, 0, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 2680, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 2565, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 1796, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 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, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 1797, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, + 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 1798, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 1691, 0, 6059, 684, 0, 0, 0, 0, 745, 0, - 0, 757, 758, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 1692, 243, 244, - 245, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 246, 247, - 248, 1700, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 1701, 262, 263, 264, 265, - 266, 267, 268, 1702, 1703, 269, 270, 271, 272, 273, - 1704, 274, 275, 276, 277, 278, 1705, 279, 1706, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 1707, - 290, 291, 292, 293, 294, 295, 1708, 296, 297, 298, - 299, 1709, 1710, 1711, 300, 1712, 1713, 1714, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 1715, 310, 1716, - 311, 312, 313, 314, 315, 316, 317, 1717, 318, 319, - 320, 321, 1718, 1719, 322, 323, 324, 325, 326, 1720, - 327, 328, 329, 1721, 330, 331, 332, 1722, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 1723, 343, - 1724, 344, 345, 346, 347, 348, 1725, 349, 1726, 350, - 351, 1727, 352, 353, 354, 355, 356, 1728, 357, 358, - 1729, 359, 360, 361, 1730, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 1731, 372, 373, 374, 375, - 376, 377, 378, 1732, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 1733, 388, 1734, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 1735, 1736, 399, 400, - 401, 402, 403, 1737, 404, 405, 406, 1738, 1739, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 942, 0, 1572, 694, 0, 0, 0, 0, 755, 2564, + 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 2570, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 1796, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 1740, 438, 439, 440, 441, 1741, 442, 443, 444, 445, - 446, 447, 1742, 448, 449, 1743, 1744, 450, 451, 452, - 1745, 1746, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 1747, - 470, 471, 472, 473, 474, 475, 476, 477, 1748, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 1749, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 1750, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 1751, 524, 525, - 526, 527, 528, 1752, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 1753, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 1754, 554, 555, 1755, 556, 557, 558, 559, 560, 561, - 562, 1756, 563, 564, 565, 1757, 1758, 566, 567, 568, - 569, 570, 1759, 571, 572, 573, 574, 575, 576, 577, - 578, 1760, 1761, 579, 580, 581, 582, 583, 1762, 1763, - 584, 585, 586, 587, 588, 589, 590, 1764, 591, 592, - 593, 594, 595, 596, 1765, 1766, 597, 1767, 1768, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 1691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 1692, 243, 244, 245, - 1693, 1694, 1695, 1696, 1697, 1698, 1699, 246, 247, 248, - 1700, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 1701, 262, 263, 264, 265, 266, - 267, 268, 1702, 1703, 269, 270, 271, 272, 273, 1704, - 274, 275, 276, 277, 278, 1705, 279, 1706, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 1707, 290, - 291, 292, 293, 294, 295, 1708, 296, 297, 298, 299, - 1709, 1710, 1711, 300, 1712, 1713, 1714, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 1715, 310, 1716, 311, - 312, 313, 314, 315, 316, 317, 1717, 318, 319, 320, - 321, 1718, 1719, 322, 323, 324, 325, 326, 1720, 327, - 328, 329, 1721, 330, 331, 332, 1722, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 1723, 343, 1724, - 344, 345, 346, 347, 348, 1725, 349, 1726, 350, 351, - 1727, 352, 353, 354, 355, 356, 1728, 357, 358, 1729, - 359, 360, 361, 1730, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 1731, 372, 373, 374, 375, 376, - 377, 378, 1732, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 1733, 388, 1734, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 1735, 1736, 399, 400, 401, - 402, 403, 1737, 404, 405, 406, 1738, 1739, 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, 1740, - 438, 439, 440, 441, 1741, 442, 443, 444, 445, 446, - 447, 1742, 448, 449, 1743, 1744, 450, 451, 452, 1745, - 1746, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 1747, 470, - 471, 472, 473, 474, 475, 476, 477, 1748, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 1749, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 1750, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 1751, 524, 525, 526, - 527, 528, 1752, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 1753, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 1754, - 554, 555, 1755, 556, 557, 558, 559, 560, 561, 562, - 1756, 563, 564, 565, 1757, 1758, 566, 567, 568, 569, - 570, 1759, 571, 572, 573, 574, 575, 576, 577, 578, - 1760, 1761, 579, 580, 581, 582, 583, 1762, 1763, 584, - 585, 586, 587, 588, 589, 590, 1764, 591, 592, 593, - 594, 595, 596, 1765, 1766, 597, 1767, 1768, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 1691, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 3541, 240, 241, 242, 1692, 243, 244, 245, 1693, - 1694, 1695, 1696, 1697, 1698, 1699, 246, 247, 248, 1700, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 1701, 262, 263, 264, 265, 266, 267, - 268, 1702, 1703, 269, 270, 271, 272, 273, 1704, 274, - 275, 276, 277, 278, 1705, 279, 1706, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 1707, 290, 291, - 292, 293, 294, 295, 1708, 296, 297, 298, 299, 1709, - 1710, 1711, 300, 1712, 1713, 1714, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 1715, 310, 1716, 311, 312, - 313, 314, 315, 316, 317, 1717, 318, 319, 320, 321, - 1718, 1719, 322, 323, 324, 3542, 326, 1720, 327, 328, - 329, 1721, 330, 331, 332, 1722, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 1723, 343, 1724, 344, - 345, 346, 347, 348, 1725, 349, 1726, 350, 351, 1727, - 352, 353, 354, 355, 356, 1728, 357, 358, 1729, 359, - 360, 361, 1730, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 1731, 372, 373, 374, 375, 376, 377, - 378, 1732, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 1733, 388, 1734, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 1735, 1736, 399, 400, 401, 402, - 403, 1737, 404, 405, 406, 1738, 1739, 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, 1740, 438, - 439, 440, 441, 1741, 442, 443, 444, 445, 446, 447, - 1742, 448, 449, 1743, 1744, 450, 451, 452, 1745, 1746, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 1747, 470, 471, - 472, 473, 474, 475, 476, 477, 1748, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 1749, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 1750, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 1751, 524, 525, 526, 527, - 528, 1752, 3543, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 1753, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 1754, 554, - 555, 1755, 556, 557, 558, 559, 560, 561, 562, 1756, - 563, 564, 565, 1757, 1758, 566, 567, 568, 569, 570, - 1759, 571, 572, 573, 574, 575, 576, 577, 578, 1760, - 1761, 579, 580, 581, 582, 583, 1762, 1763, 584, 585, - 586, 587, 588, 589, 590, 1764, 591, 592, 593, 594, - 595, 596, 1765, 1766, 597, 1767, 1768, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 234, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 1246, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 1249, 0, 1250, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 1251, 1252, - 1253, 1254, 1255, 1256, 1257, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 1262, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 1265, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 1270, 401, 402, 403, - 0, 404, 405, 406, 1271, 1272, 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, 1275, 437, 0, 438, 439, - 440, 441, 0, 1278, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 456, 457, 458, 1281, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 1282, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 1285, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 1287, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 1290, 569, 1291, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 1294, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 1296, 1297, 1298, 1299, 609, 1300, 1301, - 1302, 1303, 614, 615, 616, 617, 234, 0, 1236, 684, - 0, 1237, 1238, 0, 745, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 1242, 259, 1243, - 1244, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 1247, 1248, 273, 0, 274, 275, 276, - 277, 278, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 0, - 300, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 1258, 1259, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 860, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 1263, 343, 0, 344, 345, 346, - 1264, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 1267, 1268, 0, - 1269, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 1273, 426, 1274, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, - 441, 1277, 442, 443, 1279, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 1283, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 534, 535, 536, 1286, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 1288, - 1289, 0, 0, 566, 567, 568, 569, 570, 1292, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 1295, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 938, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 977, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 279, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 0, 0, 939, 300, - 0, 0, 940, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 401, 402, 403, 0, 404, - 405, 406, 0, 0, 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, 0, 438, 439, 440, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 941, 529, - 530, 531, 532, 533, 534, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 938, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 998, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 279, 0, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 296, 297, 298, 299, 0, 0, 939, 300, 0, - 0, 940, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 351, 0, 352, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 401, 402, 403, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 999, 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, 0, 438, 439, 440, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 456, - 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 941, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 557, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 592, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 938, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 279, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 0, 0, 939, 300, 0, 0, - 940, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 401, 402, 403, 0, 404, 405, 406, - 0, 0, 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, 0, 438, 439, 440, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 941, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 2905, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 938, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 939, 300, 0, 0, 940, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 358, 3891, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 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, 0, 438, 439, 440, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 941, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 938, 0, 0, 684, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 279, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 0, 0, 0, 300, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 1779, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 401, 402, 403, 0, 404, 405, 406, 0, 0, - 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, 0, 438, 439, 440, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 1780, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 1781, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 1797, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, + 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 1798, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 279, 0, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 296, 297, 298, - 299, 0, 0, 939, 300, 0, 0, 940, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 351, 0, 352, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 401, 402, 403, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 942, 0, 1572, 694, 0, 0, 0, 0, 755, 0, + 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 3494, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 1796, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 440, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 941, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 557, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 592, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 938, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 279, 0, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 296, 297, 298, 299, - 0, 0, 939, 300, 0, 0, 940, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 351, - 0, 352, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 401, - 402, 403, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 1091, 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, 0, - 438, 439, 440, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 941, 529, 530, 531, 532, 533, 534, 535, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 1797, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 557, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 592, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 938, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 279, 0, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 296, 297, 298, 299, 0, - 0, 939, 300, 0, 0, 940, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 351, 0, - 352, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 1133, 367, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 401, 402, - 403, 0, 404, 405, 406, 0, 0, 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, 0, 438, - 439, 440, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 941, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 557, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 592, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 938, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 939, 300, 0, 0, 940, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 1146, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 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, 0, 438, 439, - 440, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 941, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 938, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 939, - 300, 0, 0, 940, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 1158, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 1159, - 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, 0, 438, 439, 440, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 941, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 938, 0, 0, 684, 0, - 0, 0, 0, 0, 2511, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 279, 0, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 296, 297, 298, 299, 0, 0, 0, 300, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 2512, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 351, 0, 352, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 401, 402, 403, 0, 404, - 405, 406, 0, 0, 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, 0, 438, 439, 440, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 534, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 557, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 592, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 938, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 3, 4, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 279, 0, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 296, 297, 298, 299, 0, 0, 0, 300, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 351, 0, 352, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 401, 402, 403, 0, 404, 405, - 406, 0, 0, 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, 0, 438, 439, 440, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 456, - 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 557, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 592, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 938, 0, 0, 684, 0, 0, 0, - 0, 0, 1350, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 279, 0, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 296, 297, 298, 299, 0, 0, 0, 300, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 351, 0, 352, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 401, 402, 403, 0, 404, 405, 406, - 0, 0, 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, 0, 438, 439, 440, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 557, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 592, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 938, 0, 0, 684, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 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, 0, 438, 439, 440, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 234, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 279, 0, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 296, 297, - 298, 299, 0, 0, 0, 300, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 351, 0, 352, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 401, 402, 403, 0, 404, 405, 406, 0, 0, - 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, 0, 438, 439, 440, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 557, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 592, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 1798, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 279, 0, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 296, 297, 298, - 299, 0, 0, 0, 300, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 351, 0, 352, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 1117, - 367, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 401, 402, 403, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 942, 0, 1572, 694, 0, 0, 0, 0, 755, 2564, + 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 0, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 1796, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 440, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 557, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 592, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 234, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 279, 0, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 296, 297, 298, 299, - 0, 0, 0, 300, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 351, - 0, 352, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 1130, 367, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 401, - 402, 403, 0, 404, 405, 406, 0, 0, 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, 0, - 438, 439, 440, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 534, 535, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 1797, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 557, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 592, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 279, 0, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 296, 297, 298, 299, 0, - 0, 0, 300, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 351, 0, - 352, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 1144, 367, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 401, 402, - 403, 0, 404, 405, 406, 0, 0, 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, 0, 438, - 439, 440, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 557, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 592, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 234, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 1148, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 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, 0, 438, 439, - 440, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 938, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 279, 0, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 296, 297, 298, 299, 0, 0, 0, - 300, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 351, 0, 352, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 401, 402, 403, 0, - 404, 405, 406, 0, 0, 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, 0, 438, 439, 440, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 557, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 592, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 2677, 274, 275, 276, 277, - 278, 0, 0, 2746, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 2678, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 2747, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 2680, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 2748, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 2681, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 2682, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 2677, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 2678, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 2747, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 2680, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 3754, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 2681, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 2682, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 803, 241, 242, - 764, 243, 765, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 766, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 804, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 767, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 768, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 764, - 243, 765, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 766, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 3443, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 767, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 768, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 2677, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 2678, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 2747, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 2680, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 2681, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 2682, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 1798, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 764, 243, 765, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 766, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 942, 0, 1572, 694, 0, 0, 0, 0, 755, 0, + 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 0, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 1796, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 767, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 768, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 2981, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 2812, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 835, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 1797, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 2813, 2814, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 1956, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 1957, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 1958, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 1959, 350, 0, 0, - 0, 1960, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 1961, 1962, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 1963, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 1964, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 1965, 513, 514, 515, 516, 517, 1966, - 519, 520, 521, 522, 523, 0, 1967, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 1968, 556, 0, 1969, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 1970, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 765, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 766, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 366, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 767, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 768, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 2812, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 835, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 2813, - 2814, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 991, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 992, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 835, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 684, 0, 0, - 0, 0, 0, 1352, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 3522, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 3523, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 3535, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 3536, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 626, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 1798, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 675, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 676, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 795, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 796, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 797, 565, 0, 0, 798, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 829, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 830, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 831, 565, 0, 0, 832, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 366, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 835, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 893, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 948, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 949, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 1109, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 1341, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 1354, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 815, 270, 271, - 272, 1355, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 818, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 819, 510, 511, 512, 513, 514, - 515, 516, 517, 820, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 1345, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 822, 565, 0, 0, 823, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 824, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 1500, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 835, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 635, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 235, + 236, 756, 238, 239, 240, 241, 242, 243, 757, 244, + 245, 246, 0, 0, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 0, 758, 256, + 257, 258, 259, 0, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 0, 0, + 281, 282, 283, 284, 285, 286, 0, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 0, 298, + 299, 300, 0, 0, 0, 0, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 0, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 0, + 344, 0, 345, 346, 759, 348, 349, 0, 350, 0, + 351, 760, 0, 761, 0, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 0, 370, 371, 372, 373, 762, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 0, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 0, 0, 395, 0, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 763, 0, 0, 408, 409, 0, + 411, 0, 0, 413, 414, 415, 0, 0, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 0, 436, 437, + 764, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 0, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 0, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 0, 466, 0, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 765, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 766, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 0, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, + 536, 537, 538, 0, 539, 540, 541, 542, 543, 0, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 0, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 0, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 0, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 1561, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 1562, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 767, 768, 0, 0, 0, 0, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 0, 244, + 245, 246, 3, 4, 0, 0, 0, 0, 0, 247, + 248, 249, 0, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 0, 263, 264, 265, + 266, 267, 268, 269, 0, 0, 270, 271, 272, 273, + 274, 0, 275, 276, 277, 278, 279, 0, 280, 0, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 0, 297, 298, + 299, 300, 0, 0, 0, 301, 0, 0, 0, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 0, 311, + 0, 312, 313, 314, 315, 316, 317, 318, 0, 319, + 320, 321, 322, 0, 0, 323, 324, 325, 326, 327, + 0, 328, 329, 330, 0, 331, 332, 333, 0, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 0, + 344, 0, 345, 346, 347, 348, 349, 0, 350, 0, + 351, 352, 353, 0, 354, 355, 356, 357, 358, 0, + 359, 360, 0, 361, 362, 363, 0, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 0, 374, 375, + 376, 377, 378, 379, 380, 381, 0, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 0, 0, 408, 409, 410, + 411, 412, 0, 413, 414, 415, 0, 0, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 795, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 447, 448, 449, 450, 0, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 0, 0, 459, 460, 461, 0, + 0, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 0, 479, + 480, 481, 482, 483, 484, 485, 486, 0, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 0, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 3294, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 3295, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 3296, 556, 0, 558, 3297, 560, 3298, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 3299, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 366, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 4072, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 366, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 4086, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 4722, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 4792, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 781, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 545, 546, 547, 548, 0, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 0, 564, 565, 0, 0, 566, 567, 568, 569, 570, + 571, 572, 0, 573, 574, 575, 0, 0, 576, 577, + 578, 579, 580, 0, 581, 582, 583, 584, 585, 586, + 587, 588, 0, 0, 589, 590, 591, 592, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 0, 601, + 602, 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 793, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 815, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 816, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 366, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 817, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 818, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 819, 510, 511, 512, 513, 514, 515, 516, 517, - 820, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 821, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 822, 565, 0, 0, 823, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 824, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 366, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 847, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 973, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 983, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 986, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 1002, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 1058, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 1063, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 1080, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 1021, 1707, 0, 6190, 694, 0, 0, 0, 0, 755, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1708, + 244, 245, 246, 1709, 1710, 1711, 1712, 1713, 1714, 1715, + 247, 248, 249, 1716, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 1717, 263, 264, + 265, 266, 267, 268, 269, 1718, 1719, 270, 271, 272, + 273, 274, 1720, 275, 276, 277, 278, 279, 1721, 280, + 1722, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 1723, 291, 292, 293, 294, 295, 296, 1724, 297, + 298, 299, 300, 1725, 1726, 1727, 301, 1728, 1729, 1730, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 1731, + 311, 1732, 312, 313, 314, 315, 316, 317, 318, 1733, + 319, 320, 321, 322, 1734, 1735, 323, 324, 325, 326, + 327, 1736, 328, 329, 330, 1737, 331, 332, 333, 1738, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 1739, 344, 1740, 345, 346, 347, 348, 349, 1741, 350, + 1742, 351, 352, 353, 1743, 354, 355, 356, 357, 358, + 1744, 359, 360, 1745, 361, 362, 363, 1746, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 1747, 374, + 375, 376, 377, 378, 379, 380, 381, 1748, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 1749, 391, 1750, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 1751, 1752, 408, 409, + 410, 411, 412, 1753, 413, 414, 415, 1754, 1755, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 1083, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 1085, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 1122, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 1150, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 1152, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 1162, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 1165, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 1168, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 815, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 818, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 819, 510, 511, 512, 513, 514, - 515, 516, 517, 820, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 1345, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 822, 565, 0, 0, 823, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 824, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 1822, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 1756, 447, 448, 449, 450, 1757, 451, 452, 453, 454, + 455, 456, 1758, 457, 458, 1759, 1760, 459, 460, 461, + 1761, 1762, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 1763, + 479, 480, 481, 482, 483, 484, 485, 486, 1764, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 1765, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 1766, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 1767, 534, + 535, 536, 537, 538, 1768, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 1769, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 1770, 564, 565, 1771, 1772, 566, 567, 568, 569, + 570, 571, 572, 1773, 573, 574, 575, 1774, 1775, 576, + 577, 578, 579, 580, 1776, 581, 582, 583, 584, 585, + 586, 587, 588, 1777, 1778, 589, 590, 591, 592, 593, + 1779, 1780, 594, 595, 596, 597, 598, 599, 600, 1781, + 601, 602, 603, 604, 605, 606, 1782, 1783, 607, 1784, + 1785, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 1707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1708, + 244, 245, 246, 1709, 1710, 1711, 1712, 1713, 1714, 1715, + 247, 248, 249, 1716, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 1717, 263, 264, + 265, 266, 267, 268, 269, 1718, 1719, 270, 271, 272, + 273, 274, 1720, 275, 276, 277, 278, 279, 1721, 280, + 1722, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 1723, 291, 292, 293, 294, 295, 296, 1724, 297, + 298, 299, 300, 1725, 1726, 1727, 301, 1728, 1729, 1730, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 1731, + 311, 1732, 312, 313, 314, 315, 316, 317, 318, 1733, + 319, 320, 321, 322, 1734, 1735, 323, 324, 325, 326, + 327, 1736, 328, 329, 330, 1737, 331, 332, 333, 1738, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 1739, 344, 1740, 345, 346, 347, 348, 349, 1741, 350, + 1742, 351, 352, 353, 1743, 354, 355, 356, 357, 358, + 1744, 359, 360, 1745, 361, 362, 363, 1746, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 1747, 374, + 375, 376, 377, 378, 379, 380, 381, 1748, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 1749, 391, 1750, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 1751, 1752, 408, 409, + 410, 411, 412, 1753, 413, 414, 415, 1754, 1755, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 1856, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, - 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 1858, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 1897, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 1899, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 1901, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 269, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 509, 510, 511, - 512, 513, 514, 515, 516, 1994, 518, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 528, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 564, 565, - 0, 0, 566, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 2630, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 366, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 0, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 815, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 818, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 819, 510, 511, 512, 513, - 514, 515, 516, 517, 820, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 1345, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 2664, - 559, 560, 561, 562, 0, 563, 822, 565, 0, 0, - 823, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 824, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 815, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 366, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 818, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 819, 510, 511, 512, 513, 514, - 515, 516, 517, 2729, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 2730, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 822, 565, 0, 0, 2731, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 824, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 815, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 366, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 818, 425, 0, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 1756, 447, 448, 449, 450, 1757, 451, 452, 453, 454, + 455, 456, 1758, 457, 458, 1759, 1760, 459, 460, 461, + 1761, 1762, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 1763, + 479, 480, 481, 482, 483, 484, 485, 486, 1764, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 1765, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 1766, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 1767, 534, + 535, 536, 537, 538, 1768, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 1769, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 1770, 564, 565, 1771, 1772, 566, 567, 568, 569, + 570, 571, 572, 1773, 573, 574, 575, 1774, 1775, 576, + 577, 578, 579, 580, 1776, 581, 582, 583, 584, 585, + 586, 587, 588, 1777, 1778, 589, 590, 591, 592, 593, + 1779, 1780, 594, 595, 596, 597, 598, 599, 600, 1781, + 601, 602, 603, 604, 605, 606, 1782, 1783, 607, 1784, + 1785, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 1707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 3599, 241, 242, 243, 1708, + 244, 245, 246, 1709, 1710, 1711, 1712, 1713, 1714, 1715, + 247, 248, 249, 1716, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 1717, 263, 264, + 265, 266, 267, 268, 269, 1718, 1719, 270, 271, 272, + 273, 274, 1720, 275, 276, 277, 278, 279, 1721, 280, + 1722, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 1723, 291, 292, 293, 294, 295, 296, 1724, 297, + 298, 299, 300, 1725, 1726, 1727, 301, 1728, 1729, 1730, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 1731, + 311, 1732, 312, 313, 314, 315, 316, 317, 318, 1733, + 319, 320, 321, 322, 1734, 1735, 323, 324, 325, 3600, + 327, 1736, 328, 329, 330, 1737, 331, 332, 333, 1738, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 1739, 344, 1740, 345, 346, 347, 348, 349, 1741, 350, + 1742, 351, 352, 353, 1743, 354, 355, 356, 357, 358, + 1744, 359, 360, 1745, 361, 362, 363, 1746, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 1747, 374, + 375, 376, 377, 378, 379, 380, 381, 1748, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 1749, 391, 1750, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 1751, 1752, 408, 409, + 410, 411, 412, 1753, 413, 414, 415, 1754, 1755, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 819, 510, 511, 512, 513, 514, 515, - 516, 517, 2809, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 2730, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 822, 565, 0, 0, 2731, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 824, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 815, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 323, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 818, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 819, 510, 511, 512, 513, 514, 515, 516, - 517, 2833, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 2730, 0, 529, 530, 531, 532, 533, 0, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 1756, 447, 448, 449, 450, 1757, 451, 452, 453, 454, + 455, 456, 1758, 457, 458, 1759, 1760, 459, 460, 461, + 1761, 1762, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 1763, + 479, 480, 481, 482, 483, 484, 485, 486, 1764, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 1765, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 1766, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 1767, 534, + 535, 536, 537, 538, 1768, 3601, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 1769, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 1770, 564, 565, 1771, 1772, 566, 567, 568, 569, + 570, 571, 572, 1773, 573, 574, 575, 1774, 1775, 576, + 577, 578, 579, 580, 1776, 581, 582, 583, 584, 585, + 586, 587, 588, 1777, 1778, 589, 590, 591, 592, 593, + 1779, 1780, 594, 595, 596, 597, 598, 599, 600, 1781, + 601, 602, 603, 604, 605, 606, 1782, 1783, 607, 1784, + 1785, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 1256, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 1259, 0, 1260, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 1272, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 1275, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 1280, 1281, 1282, 1283, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 1284, + 410, 411, 412, 0, 413, 414, 415, 1285, 1286, 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, 1289, 446, + 0, 447, 448, 449, 450, 0, 1292, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 1295, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 1296, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 1299, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 1301, + 563, 0, 564, 565, 1302, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 1305, 579, 1306, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 1309, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 1311, 1312, + 1313, 1314, 619, 1315, 1316, 1317, 1318, 624, 625, 626, + 627, 234, 0, 1246, 694, 0, 1247, 1248, 0, 755, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 1252, 260, 1253, 1254, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 1257, + 1258, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 1268, 1269, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 1273, 344, 0, 345, 346, 347, 1274, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 1277, 1278, 0, 1279, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 1287, 435, 1288, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 449, 450, 1291, 451, 452, 1293, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 1297, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 822, 565, 0, 0, 2731, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 824, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 3026, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 258, - 0, 260, 261, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 271, 272, 273, 0, 274, - 275, 276, 277, 278, 0, 0, 0, 280, 281, 282, - 283, 284, 285, 0, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 0, 297, 298, 299, 0, - 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 0, 343, 0, 344, - 345, 346, 347, 348, 0, 349, 0, 350, 0, 0, - 0, 353, 354, 355, 356, 0, 357, 358, 0, 359, - 360, 361, 0, 362, 363, 364, 365, 3030, 0, 368, - 369, 370, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 0, 381, 382, 383, 384, 385, 386, - 387, 0, 388, 0, 389, 0, 0, 392, 0, 394, - 395, 396, 397, 398, 0, 0, 399, 400, 0, 402, - 0, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, - 439, 0, 441, 0, 442, 443, 444, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 455, 0, 457, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 0, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 531, 532, 533, 0, 535, 536, - 537, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 554, - 555, 0, 556, 0, 558, 559, 560, 561, 562, 0, - 563, 564, 565, 0, 0, 566, 567, 568, 569, 570, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 589, 590, 0, 591, 0, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 0, 254, 255, 256, 257, 258, 0, - 260, 261, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 271, 272, 273, 0, 274, 275, - 276, 277, 278, 0, 0, 0, 280, 281, 282, 283, - 284, 285, 0, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 0, 297, 298, 299, 0, 0, - 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 0, 343, 0, 344, 345, - 346, 347, 348, 0, 349, 0, 350, 0, 0, 0, - 353, 354, 355, 356, 0, 357, 358, 0, 359, 360, - 361, 0, 362, 363, 364, 365, 3088, 0, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 0, 381, 382, 383, 384, 385, 386, 387, - 0, 388, 0, 389, 0, 0, 392, 0, 394, 395, - 396, 397, 398, 0, 0, 399, 400, 0, 402, 0, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, - 0, 441, 0, 442, 443, 444, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 455, 0, 457, 0, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 472, - 473, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 0, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 531, 532, 533, 0, 535, 536, 537, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 0, 554, 555, - 0, 556, 0, 558, 559, 560, 561, 562, 0, 563, - 564, 565, 0, 0, 566, 567, 568, 569, 570, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 589, 590, 0, 591, 0, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 248, 0, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 258, 0, 260, - 261, 0, 262, 263, 264, 265, 266, 267, 268, 0, - 0, 269, 270, 271, 272, 273, 0, 274, 275, 276, - 277, 278, 0, 0, 0, 280, 281, 282, 283, 284, - 285, 0, 287, 288, 289, 0, 290, 291, 292, 293, - 294, 295, 0, 0, 297, 298, 299, 0, 0, 0, - 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 310, 0, 311, 312, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 0, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 329, 0, - 330, 331, 332, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 0, 343, 0, 344, 345, 346, - 347, 348, 0, 349, 0, 350, 0, 0, 0, 353, - 354, 355, 356, 0, 357, 358, 0, 359, 360, 361, - 0, 362, 363, 364, 365, 3454, 0, 368, 369, 370, - 371, 0, 372, 373, 374, 375, 376, 377, 378, 0, - 379, 0, 381, 382, 383, 384, 385, 386, 387, 0, - 388, 0, 389, 0, 0, 392, 0, 394, 395, 396, - 397, 398, 0, 0, 399, 400, 0, 402, 0, 0, - 404, 405, 406, 0, 0, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 0, 438, 439, 0, - 441, 0, 442, 443, 444, 445, 446, 447, 0, 448, - 449, 0, 0, 450, 451, 452, 0, 0, 453, 454, - 455, 0, 457, 0, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 470, 471, 472, 473, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 0, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 0, 506, 507, 0, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 0, 524, 525, 526, 527, 528, 0, - 529, 530, 531, 532, 533, 0, 535, 536, 537, 538, - 0, 539, 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 0, 554, 555, 0, - 556, 0, 558, 559, 560, 561, 562, 0, 563, 564, - 565, 0, 0, 566, 567, 568, 569, 570, 0, 571, - 572, 573, 574, 575, 576, 577, 578, 0, 0, 579, - 580, 581, 582, 583, 0, 0, 584, 585, 586, 587, - 588, 589, 590, 0, 591, 0, 593, 594, 595, 596, - 0, 0, 597, 0, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 248, 0, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 258, 0, 260, 261, - 0, 262, 263, 264, 265, 266, 267, 268, 0, 0, - 815, 270, 271, 272, 273, 0, 274, 275, 276, 277, - 278, 0, 0, 0, 280, 281, 282, 283, 284, 285, - 0, 287, 288, 289, 0, 290, 291, 292, 293, 294, - 295, 0, 0, 297, 298, 299, 0, 0, 0, 0, - 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 310, 0, 311, 312, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 0, 0, 322, - 323, 324, 325, 326, 0, 327, 328, 329, 0, 330, - 331, 332, 0, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 0, 343, 0, 344, 345, 346, 347, - 348, 0, 349, 0, 350, 0, 0, 0, 353, 354, - 355, 356, 0, 357, 358, 0, 359, 360, 361, 0, - 362, 363, 364, 365, 366, 0, 368, 369, 370, 371, - 0, 372, 373, 374, 375, 376, 377, 378, 0, 379, - 0, 381, 382, 383, 384, 385, 386, 387, 0, 388, - 0, 389, 0, 0, 392, 0, 394, 395, 396, 397, - 398, 0, 0, 399, 400, 0, 402, 0, 0, 404, - 405, 406, 0, 0, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 818, 425, 0, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 0, 438, 439, 0, 441, - 0, 442, 443, 444, 445, 446, 447, 0, 448, 449, - 0, 0, 450, 451, 452, 0, 0, 453, 454, 455, - 0, 457, 0, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 0, 470, 471, 472, 473, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 0, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 0, 506, 507, 0, 819, 510, 511, - 512, 513, 514, 515, 516, 517, 820, 519, 520, 521, - 522, 523, 0, 524, 525, 526, 527, 2730, 0, 529, - 530, 531, 532, 533, 0, 535, 536, 537, 538, 0, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 0, 554, 555, 0, 556, - 0, 558, 559, 560, 561, 562, 0, 563, 822, 565, - 0, 0, 2731, 567, 568, 569, 570, 0, 571, 572, - 573, 574, 575, 576, 577, 578, 0, 0, 579, 580, - 581, 582, 583, 0, 0, 584, 585, 586, 587, 588, - 589, 590, 0, 591, 0, 593, 594, 595, 596, 0, - 0, 597, 0, 0, 598, 599, 600, 601, 602, 824, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 248, 0, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 258, 0, 260, 261, 0, - 262, 263, 264, 265, 266, 267, 268, 0, 0, 269, - 270, 271, 272, 273, 0, 274, 275, 276, 277, 278, - 0, 0, 0, 280, 281, 282, 283, 284, 285, 0, - 287, 288, 289, 0, 290, 291, 292, 293, 294, 295, - 0, 0, 297, 298, 299, 0, 0, 0, 0, 0, - 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 310, 0, 311, 312, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 0, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 329, 0, 330, 331, - 332, 0, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 0, 343, 0, 344, 345, 346, 347, 348, - 0, 349, 0, 350, 0, 0, 0, 353, 354, 355, - 356, 0, 357, 358, 0, 359, 360, 361, 0, 362, - 363, 364, 365, 3511, 0, 368, 369, 370, 371, 0, - 372, 373, 374, 375, 376, 377, 378, 0, 379, 0, - 381, 382, 383, 384, 385, 386, 387, 0, 388, 0, - 389, 0, 0, 392, 0, 394, 395, 396, 397, 398, - 0, 0, 399, 400, 0, 402, 0, 0, 404, 405, - 406, 0, 0, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 0, 438, 439, 0, 441, 0, - 442, 443, 444, 445, 446, 447, 0, 448, 449, 0, - 0, 450, 451, 452, 0, 0, 453, 454, 455, 0, - 457, 0, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 0, 470, 471, 472, 473, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 0, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 0, 506, 507, 0, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 0, 524, 525, 526, 527, 528, 0, 529, 530, - 531, 532, 533, 0, 535, 536, 537, 538, 0, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 0, 554, 555, 0, 556, 0, - 558, 559, 560, 561, 562, 0, 563, 564, 565, 0, - 0, 566, 567, 568, 569, 570, 0, 571, 572, 573, - 574, 575, 576, 577, 578, 0, 0, 579, 580, 581, - 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, - 590, 0, 591, 0, 593, 594, 595, 596, 0, 0, - 597, 0, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 360, 361, 0, 362, 363, - 364, 365, 3525, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 0, 254, - 255, 256, 257, 258, 0, 260, 261, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 271, - 272, 273, 0, 274, 275, 276, 277, 278, 0, 0, - 0, 280, 281, 282, 283, 284, 285, 0, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 0, - 297, 298, 299, 0, 0, 0, 0, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 0, 343, 0, 344, 345, 346, 347, 348, 0, 349, - 0, 350, 0, 0, 0, 353, 354, 355, 356, 0, - 357, 358, 0, 359, 360, 361, 0, 362, 363, 364, - 365, 3527, 0, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 0, 381, 382, - 383, 384, 385, 386, 387, 0, 388, 0, 389, 0, - 0, 392, 0, 394, 395, 396, 397, 398, 0, 0, - 399, 400, 0, 402, 0, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 0, 438, 439, 0, 441, 0, 442, 443, - 444, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 455, 0, 457, 0, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 472, 473, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 0, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 531, 532, - 533, 0, 535, 536, 537, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 0, 554, 555, 0, 556, 0, 558, 559, - 560, 561, 562, 0, 563, 564, 565, 0, 0, 566, - 567, 568, 569, 570, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 589, 590, 0, - 591, 0, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, - 617, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 248, 0, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 258, 0, 260, 261, 0, 262, 263, 264, - 265, 266, 267, 268, 0, 0, 269, 270, 271, 272, - 273, 0, 274, 275, 276, 277, 278, 0, 0, 0, - 280, 281, 282, 283, 284, 285, 0, 287, 288, 289, - 0, 290, 291, 292, 293, 294, 295, 0, 0, 297, - 298, 299, 0, 0, 0, 0, 0, 0, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 310, - 0, 311, 312, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 0, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 329, 0, 330, 331, 332, 0, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 0, - 343, 0, 344, 345, 346, 347, 348, 0, 349, 0, - 350, 0, 0, 0, 353, 354, 355, 356, 0, 357, - 358, 0, 359, 360, 361, 0, 362, 363, 364, 365, - 3675, 0, 368, 369, 370, 371, 0, 372, 373, 374, - 375, 376, 377, 378, 0, 379, 0, 381, 382, 383, - 384, 385, 386, 387, 0, 388, 0, 389, 0, 0, - 392, 0, 394, 395, 396, 397, 398, 0, 0, 399, - 400, 0, 402, 0, 0, 404, 405, 406, 0, 0, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 544, 545, 546, 1300, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 1303, 1304, 0, 0, 576, + 577, 578, 579, 580, 1307, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 1310, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 981, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 0, 438, 439, 0, 441, 0, 442, 443, 444, - 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, - 452, 0, 0, 453, 454, 455, 0, 457, 0, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 0, 470, 471, 472, 473, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 0, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, - 506, 507, 0, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 0, 524, - 525, 526, 527, 528, 0, 529, 530, 531, 532, 533, - 0, 535, 536, 537, 538, 0, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 554, 555, 0, 556, 0, 558, 559, 560, - 561, 562, 0, 563, 564, 565, 0, 0, 566, 567, - 568, 569, 570, 0, 571, 572, 573, 574, 575, 576, - 577, 578, 0, 0, 579, 580, 581, 582, 583, 0, - 0, 584, 585, 586, 587, 588, 589, 590, 0, 591, - 0, 593, 594, 595, 596, 0, 0, 597, 0, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 236, 237, 238, 239, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 248, 0, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 258, 0, 260, 261, 0, 262, 263, 264, 265, - 266, 267, 268, 0, 0, 269, 270, 271, 272, 273, - 0, 274, 275, 276, 277, 278, 0, 0, 0, 280, - 281, 282, 283, 284, 285, 0, 287, 288, 289, 0, - 290, 291, 292, 293, 294, 295, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 310, 0, - 311, 312, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 0, 0, 322, 3715, 324, 325, 326, 0, - 327, 328, 329, 0, 330, 331, 332, 0, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 0, 343, - 0, 344, 345, 346, 347, 348, 0, 349, 0, 350, - 0, 0, 0, 353, 354, 355, 356, 0, 357, 358, - 0, 359, 360, 361, 0, 362, 363, 364, 365, 366, - 0, 368, 369, 370, 371, 0, 372, 373, 374, 375, - 376, 377, 378, 0, 379, 0, 381, 382, 383, 384, - 385, 386, 387, 0, 388, 0, 389, 0, 0, 392, - 0, 394, 395, 396, 397, 398, 0, 0, 399, 400, - 0, 402, 0, 0, 404, 405, 406, 0, 0, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 0, 438, 439, 0, 441, 0, 442, 443, 444, 445, - 446, 447, 0, 448, 449, 0, 0, 450, 451, 452, - 0, 0, 453, 454, 455, 0, 457, 0, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 0, - 470, 471, 472, 473, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 0, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 0, 506, - 507, 0, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 0, 524, 525, - 526, 527, 528, 0, 529, 530, 531, 532, 533, 0, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1002, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 1003, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 2941, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 3949, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 694, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 1796, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 1797, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 0, 554, 555, 0, 556, 0, 558, 559, 560, 561, - 562, 0, 563, 564, 565, 0, 0, 566, 567, 568, - 569, 570, 0, 571, 572, 573, 574, 575, 576, 577, - 578, 0, 0, 579, 580, 581, 582, 583, 0, 0, - 584, 585, 586, 587, 588, 589, 590, 0, 591, 0, - 593, 594, 595, 596, 0, 0, 597, 0, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, - 237, 238, 239, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 247, 248, - 0, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 258, 0, 260, 261, 0, 262, 263, 264, 265, 266, - 267, 268, 0, 0, 269, 270, 271, 272, 273, 0, - 274, 275, 276, 277, 278, 0, 0, 0, 280, 281, - 282, 283, 284, 285, 0, 287, 288, 289, 0, 290, - 291, 292, 293, 294, 295, 0, 0, 297, 298, 299, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 310, 0, 311, - 312, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 0, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 329, 0, 330, 331, 332, 0, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 0, 343, 0, - 344, 345, 346, 347, 348, 0, 349, 0, 350, 0, - 0, 0, 353, 354, 355, 356, 0, 357, 358, 0, - 359, 360, 361, 0, 362, 363, 364, 365, 4906, 0, - 368, 369, 370, 371, 0, 372, 373, 374, 375, 376, - 377, 378, 0, 379, 0, 381, 382, 383, 384, 385, - 386, 387, 0, 388, 0, 389, 0, 0, 392, 0, - 394, 395, 396, 397, 398, 0, 0, 399, 400, 0, - 402, 0, 0, 404, 405, 406, 0, 0, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 0, - 438, 439, 0, 441, 0, 442, 443, 444, 445, 446, - 447, 0, 448, 449, 0, 0, 450, 451, 452, 0, - 0, 453, 454, 455, 0, 457, 0, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 0, 470, - 471, 472, 473, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 0, 506, 507, - 0, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 0, 524, 525, 526, - 527, 528, 0, 529, 530, 531, 532, 533, 0, 535, - 536, 537, 538, 0, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, - 554, 555, 0, 556, 0, 558, 559, 560, 561, 562, - 0, 563, 564, 565, 0, 0, 566, 567, 568, 569, - 570, 0, 571, 572, 573, 574, 575, 576, 577, 578, - 0, 0, 579, 580, 581, 582, 583, 0, 0, 584, - 585, 586, 587, 588, 589, 590, 0, 591, 0, 593, - 594, 595, 596, 0, 0, 597, 0, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 852, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 236, 237, - 238, 239, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, - 249, 250, 251, 252, 253, 254, 255, 256, 0, 853, - 259, 854, 855, 0, 262, 263, 264, 265, 266, 267, - 268, 0, 0, 269, 270, 856, 857, 273, 0, 274, - 275, 276, 277, 0, 0, 279, 0, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 290, 291, - 292, 293, 294, 295, 0, 296, 297, 298, 299, 0, - 0, 0, 300, 0, 0, 0, 301, 302, 303, 304, - 305, 306, 858, 859, 309, 0, 310, 0, 311, 312, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 0, 0, 322, 323, 860, 325, 326, 0, 327, 328, - 329, 0, 330, 331, 332, 0, 333, 334, 335, 336, - 0, 338, 339, 340, 341, 0, 0, 343, 0, 344, - 345, 346, 861, 348, 0, 349, 0, 350, 351, 0, - 352, 353, 354, 355, 356, 0, 357, 0, 0, 0, - 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 2638, 372, 373, 374, 375, 376, 377, - 378, 0, 379, 380, 2639, 382, 383, 384, 385, 862, - 863, 0, 864, 0, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 0, 0, 399, 0, 401, 402, - 403, 0, 404, 405, 406, 0, 0, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 865, 426, 866, 428, 429, - 430, 431, 432, 433, 434, 0, 0, 437, 0, 438, - 439, 440, 441, 0, 0, 443, 867, 445, 446, 447, - 0, 448, 449, 0, 0, 450, 451, 452, 0, 0, - 453, 454, 2641, 456, 457, 458, 0, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 0, 470, 471, - 0, 473, 0, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 868, 489, 490, - 491, 492, 0, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, - 509, 510, 511, 512, 513, 0, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 524, 525, 526, 527, - 528, 0, 529, 530, 2642, 532, 533, 534, 535, 536, - 870, 538, 0, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 0, 553, 0, 554, - 555, 0, 556, 557, 558, 559, 560, 561, 562, 0, - 563, 871, 872, 0, 0, 566, 567, 0, 569, 0, - 0, 571, 572, 573, 574, 575, 576, 577, 578, 0, - 0, 579, 580, 581, 582, 583, 0, 0, 584, 585, - 586, 587, 588, 0, 873, 2643, 591, 592, 593, 594, - 595, 596, 0, 0, 597, 0, 0, 598, 599, 600, - 601, 602, 603, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 615, 616, 617, 0, 0, 0, - 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, - 0, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 248, 0, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 258, 0, 260, 261, 0, 262, - 263, 264, 265, 266, 267, 268, 0, 0, 269, 270, - 271, 272, 273, 0, 274, 275, 276, 277, 278, 0, - 0, 0, 280, 281, 282, 283, 284, 285, 0, 287, - 288, 289, 0, 290, 291, 292, 293, 294, 295, 0, - 0, 297, 298, 299, 0, 0, 0, 0, 0, 0, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 310, 0, 311, 312, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 0, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 0, 330, 331, 332, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 0, 343, 0, 344, 345, 346, 347, 348, 0, - 349, 0, 350, 0, 0, 0, 353, 354, 355, 356, - 0, 357, 358, 0, 359, 0, 361, 0, 362, 363, - 364, 365, 366, 0, 368, 369, 370, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 0, 379, 0, 381, - 382, 383, 384, 385, 386, 387, 0, 388, 0, 389, - 0, 0, 392, 0, 394, 395, 396, 397, 398, 0, - 0, 399, 400, 0, 402, 0, 0, 404, 405, 406, - 0, 0, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 0, 438, 439, 0, 441, 0, 442, - 443, 444, 445, 446, 447, 0, 448, 449, 0, 0, - 450, 451, 452, 0, 0, 453, 454, 455, 0, 457, - 0, 459, 460, 461, 462, 463, 464, 465, 466, 0, - 468, 469, 0, 470, 471, 472, 473, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 485, - 0, 487, 488, 489, 490, 491, 492, 0, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 0, 506, 507, 0, 509, 510, 511, 512, 513, - 514, 0, 516, 517, 518, 519, 520, 521, 522, 523, - 0, 524, 525, 526, 527, 528, 0, 529, 530, 531, - 532, 533, 0, 535, 536, 537, 538, 0, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 554, 555, 0, 556, 0, 558, - 559, 560, 561, 562, 0, 563, 564, 565, 0, 0, - 566, 567, 568, 569, 570, 0, 571, 572, 573, 574, - 575, 576, 577, 578, 0, 0, 579, 580, 581, 582, - 583, 0, 0, 584, 585, 586, 587, 588, 589, 590, - 0, 591, 0, 593, 594, 595, 596, 0, 0, 597, - 0, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 852, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 856, - 857, 273, 0, 274, 275, 276, 277, 0, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 0, 343, 0, 344, 345, 346, 861, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 0, 0, 0, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 0, 864, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 0, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 0, - 0, 437, 0, 438, 439, 440, 441, 2725, 0, 443, - 867, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 0, 473, 0, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 2642, 532, - 533, 534, 535, 536, 870, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 0, 554, 555, 4452, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 871, 872, 0, 0, 566, - 567, 0, 569, 0, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 0, 873, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 852, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 0, 853, 259, - 854, 855, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 856, 857, 273, 0, 274, 275, - 276, 277, 0, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 858, 859, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 860, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 0, - 338, 339, 340, 341, 0, 0, 343, 0, 344, 345, - 346, 861, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 0, 0, 0, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 0, 382, 383, 384, 385, 862, 863, - 0, 864, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 0, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 865, 426, 866, 428, 429, 430, - 431, 432, 433, 434, 2799, 0, 437, 0, 438, 439, - 440, 441, 0, 0, 443, 867, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 0, 456, 457, 458, 0, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 0, - 473, 0, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 868, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 0, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 869, 532, 533, 534, 535, 536, 870, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 0, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 871, 872, 0, 0, 566, 567, 0, 569, 0, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 0, 873, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 852, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 616, 617, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 856, - 857, 273, 0, 274, 275, 276, 277, 0, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 0, 343, 0, 344, 345, 346, 861, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 0, 0, 0, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 0, 864, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 0, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 4247, - 0, 437, 0, 438, 439, 440, 441, 0, 0, 443, - 867, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 0, 473, 0, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 869, 532, - 533, 534, 535, 536, 870, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 871, 872, 0, 0, 566, - 567, 0, 569, 0, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 0, 873, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 852, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 0, 853, 259, - 854, 855, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 856, 857, 273, 0, 274, 275, - 276, 277, 0, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 858, 859, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 860, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 0, - 338, 339, 340, 341, 0, 0, 343, 0, 344, 345, - 346, 861, 348, 5723, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 0, 0, 0, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 0, 382, 383, 384, 385, 862, 863, - 0, 864, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 0, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 865, 426, 866, 428, 429, 430, - 431, 432, 433, 434, 0, 0, 437, 0, 438, 439, - 440, 441, 0, 0, 443, 867, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 0, 456, 457, 458, 0, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 0, - 473, 0, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 868, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 0, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 869, 532, 533, 534, 535, 536, 870, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 0, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 871, 872, 0, 0, 566, 567, 0, 569, 0, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 0, 873, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 852, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 616, 617, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 856, - 857, 273, 0, 274, 275, 276, 277, 0, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 0, 343, 0, 344, 345, 346, 861, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 0, 0, 0, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 0, 864, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 0, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 0, - 0, 437, 0, 438, 439, 440, 441, 0, 0, 443, - 867, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 0, 473, 0, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 869, 532, - 533, 534, 535, 536, 870, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 871, 872, 0, 0, 566, - 567, 0, 569, 0, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 0, 873, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 852, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 0, 853, 259, - 854, 855, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 856, 857, 273, 0, 274, 275, - 276, 277, 0, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 858, 859, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 860, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 0, - 338, 339, 340, 341, 0, 0, 343, 0, 344, 345, - 346, 861, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 0, 0, 0, 360, - 361, 0, 362, 363, 364, 365, 1124, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 0, 382, 383, 384, 385, 862, 863, - 0, 864, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 0, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 865, 426, 866, 428, 429, 430, - 431, 432, 433, 434, 0, 0, 437, 0, 438, 439, - 440, 441, 0, 0, 443, 867, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 0, 456, 457, 458, 0, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 0, - 473, 0, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 868, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 0, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 869, 532, 533, 534, 535, 536, 870, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 0, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 871, 872, 0, 0, 566, 567, 0, 569, 0, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 0, 873, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 852, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 616, 617, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 856, - 857, 273, 0, 274, 275, 276, 277, 0, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 0, 343, 0, 344, 345, 346, 861, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 0, 0, 0, 360, 361, 0, 362, 363, 364, - 365, 1156, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 0, 864, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 0, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 0, - 0, 437, 0, 438, 439, 440, 441, 0, 0, 443, - 867, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 0, 473, 0, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 869, 532, - 533, 534, 535, 536, 870, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 871, 872, 0, 0, 566, - 567, 0, 569, 0, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 0, 873, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 852, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 0, 853, 259, - 854, 855, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 856, 857, 273, 0, 274, 275, - 276, 277, 0, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 858, 859, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 860, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 0, - 338, 339, 340, 341, 0, 0, 343, 0, 344, 345, - 346, 861, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 0, 0, 0, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 0, 382, 383, 384, 385, 862, 863, - 0, 864, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 0, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 865, 426, 866, 428, 429, 430, - 431, 432, 433, 434, 0, 0, 437, 0, 438, 439, - 440, 441, 0, 0, 443, 867, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 0, 456, 457, 458, 0, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 0, - 473, 0, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 868, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 0, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 2642, 532, 533, 534, 535, 536, 870, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 0, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 871, 872, 0, 0, 566, 567, 0, 569, 0, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 0, 873, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 852, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 616, 617, 0, 0, 0, 0, - 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 248, 0, 249, 250, 251, 252, 253, 254, - 255, 256, 0, 853, 259, 854, 855, 0, 262, 263, - 264, 265, 266, 267, 268, 0, 0, 269, 270, 856, - 857, 273, 0, 274, 275, 276, 277, 0, 0, 279, - 0, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 290, 291, 292, 293, 294, 295, 0, 296, - 297, 298, 299, 0, 0, 0, 300, 0, 0, 0, - 301, 302, 303, 304, 305, 306, 858, 859, 309, 0, - 310, 0, 311, 312, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 0, 0, 322, 323, 860, 325, - 326, 0, 327, 328, 329, 0, 330, 331, 332, 0, - 333, 334, 335, 336, 0, 338, 339, 340, 341, 0, - 0, 343, 0, 344, 345, 346, 861, 348, 0, 349, - 0, 350, 351, 0, 352, 353, 354, 355, 356, 0, - 357, 0, 0, 0, 360, 361, 0, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 0, 372, 373, - 374, 375, 376, 377, 378, 0, 379, 380, 0, 382, - 383, 384, 385, 862, 863, 0, 864, 0, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 0, 0, - 399, 0, 401, 402, 403, 0, 404, 405, 406, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 865, - 426, 866, 428, 429, 430, 431, 432, 433, 434, 0, - 0, 437, 0, 438, 439, 440, 441, 0, 0, 443, - 867, 445, 446, 447, 0, 448, 449, 0, 0, 450, - 451, 452, 0, 0, 453, 454, 0, 456, 457, 458, - 0, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 0, 470, 471, 0, 473, 0, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 868, 489, 490, 491, 492, 0, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 0, 506, 507, 508, 509, 510, 511, 512, 513, 0, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 0, - 524, 525, 526, 527, 528, 0, 529, 530, 0, 532, - 533, 534, 535, 536, 870, 538, 0, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 0, 553, 0, 554, 555, 0, 556, 557, 558, 559, - 560, 561, 562, 0, 563, 871, 872, 0, 0, 566, - 567, 0, 569, 0, 0, 571, 572, 573, 574, 575, - 576, 577, 578, 0, 0, 579, 580, 581, 582, 583, - 0, 0, 584, 585, 586, 587, 588, 0, 873, 0, - 591, 592, 593, 594, 595, 596, 0, 0, 597, 0, - 0, 598, 599, 600, 601, 602, 603, 852, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, - 617, 0, 0, 0, 0, 0, 235, 236, 237, 238, - 239, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, - 250, 251, 252, 253, 254, 255, 256, 0, 0, 259, - 0, 0, 0, 262, 263, 264, 265, 266, 267, 268, - 0, 0, 269, 270, 0, 0, 273, 0, 274, 275, - 276, 277, 0, 0, 279, 0, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 0, 290, 291, 292, - 293, 294, 295, 0, 296, 297, 298, 299, 0, 0, - 0, 300, 0, 0, 0, 301, 302, 303, 304, 305, - 306, 0, 0, 309, 0, 310, 0, 311, 312, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 0, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 0, 330, 331, 332, 0, 333, 334, 335, 336, 0, - 338, 339, 340, 341, 0, 0, 343, 0, 344, 345, - 346, 0, 348, 0, 349, 0, 350, 351, 0, 352, - 353, 354, 355, 356, 0, 357, 0, 0, 0, 360, - 361, 0, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 0, 372, 373, 374, 375, 376, 377, 378, - 0, 379, 380, 0, 382, 383, 384, 385, 0, 0, - 0, 0, 0, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 0, 0, 399, 0, 401, 402, 403, - 0, 404, 405, 406, 0, 0, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 0, 426, 0, 428, 429, 430, - 431, 432, 433, 434, 0, 0, 437, 0, 438, 439, - 440, 441, 0, 0, 443, 0, 445, 446, 447, 0, - 448, 449, 0, 0, 450, 451, 452, 0, 0, 453, - 454, 0, 456, 457, 458, 0, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 0, 470, 471, 0, - 473, 0, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 0, 489, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, - 510, 511, 512, 513, 0, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 0, 524, 525, 526, 527, 528, - 0, 529, 530, 0, 532, 533, 534, 535, 536, 0, - 538, 0, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 0, 553, 0, 554, 555, - 0, 556, 557, 558, 559, 560, 561, 562, 0, 563, - 0, 0, 0, 0, 566, 567, 0, 569, 0, 0, - 571, 572, 573, 574, 575, 576, 577, 578, 0, 0, - 579, 580, 581, 582, 583, 0, 0, 584, 585, 586, - 587, 588, 0, 0, 0, 591, 592, 593, 594, 595, - 596, 0, 0, 597, 0, 0, 598, 599, 600, 601, - 602, 603, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 616, 617 -}; - -static const yytype_int16 yycheck[] = -{ - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56, 0, 211, 0, 206, 0, 984, 0, 0, 0, - 951, 0, 214, 21, 0, 217, 0, 21, 0, 211, - 1012, 189, 913, 653, 816, 36, 766, 767, 768, 1020, - 1136, 45, 772, 1001, 8, 51, 1613, 813, 1458, 1486, - 907, 15, 909, 2682, 887, 1014, 869, 1532, 985, 22, - 632, 1197, 840, 1010, 1016, 28, 1548, 197, 685, 1525, - 858, 859, 2624, 1086, 726, 1240, 2625, 1228, 792, 867, - 839, 823, 3303, 2974, 3305, 3148, 1852, 3001, 3039, 1020, - 730, 3125, 925, 872, 1537, 1532, 3394, 3789, 3838, 6, - 3595, 1982, 1060, 3488, 2000, 3515, 1064, 1681, 216, 4100, - 708, 1069, 23, 685, 950, 1525, 1578, 1579, 4190, 2893, - 1582, 1079, 230, 3741, 722, 36, 4147, 634, 4143, 3541, - 3354, 3543, 3404, 2986, 1092, 3805, 2046, 3816, 2048, 975, - 4626, 3348, 1415, 721, 980, 731, 2, 191, 44, 4440, - 4423, 5089, 4428, 1515, 4225, 4944, 3368, 1923, 706, 5216, - 732, 709, 4385, 35, 175, 1123, 1648, 1649, 4936, 2022, - 42, 50, 4887, 984, 4724, 41, 4642, 936, 4644, 191, - 2611, 2541, 993, 2500, 2609, 2646, 2647, 3260, 2505, 5264, - 5131, 197, 1003, 4691, 3414, 3402, 3803, 2871, 4122, 1642, - 206, 207, 819, 1125, 4427, 5492, 910, 1075, 214, 1131, - 216, 217, 910, 1575, 1498, 5252, 6, 934, 790, 1141, - 4935, 4567, 1090, 1145, 230, 13, 1669, 1149, 2588, 1151, - 1592, 0, 5173, 11, 6, 1157, 3353, 0, 3355, 0, - 55, 1163, 6, 0, 1166, 79, 95, 819, 12, 5180, - 5181, 15, 16, 5476, 13, 6, 48, 64, 975, 39, - 6, 12, 120, 980, 30, 1024, 12, 856, 857, 15, - 16, 37, 844, 15, 6, 6, 6, 866, 11, 64, - 12, 12, 12, 6, 0, 2939, 147, 2941, 2942, 12, - 120, 174, 2946, 2947, 2948, 11, 2950, 2951, 2952, 36, - 174, 0, 175, 92, 6, 0, 6, 125, 2982, 191, - 12, 181, 12, 181, 30, 64, 11, 64, 86, 169, - 26, 6, 21, 44, 1054, 64, 13, 12, 6, 225, - 15, 16, 904, 174, 12, 30, 6, 44, 6, 64, - 6, 33, 12, 5737, 12, 4417, 12, 6, 120, 73, - 64, 113, 122, 186, 288, 120, 153, 56, 5, 46, - 5, 174, 5205, 175, 11, 174, 11, 30, 92, 1831, - 4441, 4515, 4516, 4517, 37, 4519, 4520, 4521, 4522, 4523, - 174, 4931, 283, 64, 283, 1099, 6, 69, 5675, 283, - 323, 64, 79, 198, 212, 28, 92, 31, 5834, 274, - 280, 120, 174, 43, 198, 174, 360, 377, 309, 13, - 309, 174, 1359, 174, 1427, 309, 364, 174, 51, 1371, - 5811, 5812, 320, 378, 120, 335, 1357, 151, 377, 198, - 277, 1362, 1363, 251, 140, 198, 1076, 198, 26, 40, - 36, 198, 46, 5666, 302, 174, 30, 171, 1020, 269, - 5391, 418, 418, 166, 653, 30, 1415, 5494, 174, 343, - 124, 48, 37, 166, 81, 6003, 174, 1419, 120, 330, - 1258, 1259, 152, 463, 122, 79, 304, 405, 288, 174, - 4726, 3, 198, 5, 6, 5253, 461, 4733, 174, 11, - 12, 1279, 191, 30, 484, 92, 308, 13, 174, 348, - 360, 174, 1216, 198, 703, 81, 73, 81, 273, 484, - 1289, 13, 502, 441, 24, 343, 92, 169, 92, 24, - 200, 52, 420, 343, 81, 228, 492, 5814, 6066, 130, - 46, 506, 392, 81, 418, 81, 506, 384, 504, 506, - 846, 81, 349, 651, 454, 1143, 81, 502, 502, 657, - 1309, 264, 140, 1478, 502, 219, 196, 506, 154, 278, - 5996, 669, 442, 79, 349, 440, 464, 226, 502, 502, - 2582, 383, 1503, 125, 222, 1527, 154, 273, 1337, 213, - 213, 125, 1513, 380, 151, 5976, 10, 269, 125, 13, - 448, 1177, 136, 17, 18, 19, 5439, 321, 120, 364, - 349, 502, 349, 502, 171, 418, 1204, 4225, 502, 418, - 349, 5077, 374, 446, 6008, 5902, 1233, 1215, 142, 127, - 502, 387, 440, 506, 349, 273, 632, 125, 1416, 502, - 5213, 1229, 506, 4251, 423, 349, 506, 5674, 506, 638, - 638, 502, 638, 638, 502, 651, 418, 638, 153, 638, - 1608, 657, 502, 1611, 346, 447, 33, 506, 1247, 1248, - 212, 1233, 492, 669, 432, 506, 500, 461, 349, 1600, - 504, 377, 1603, 1604, 444, 212, 24, 5900, 5024, 685, - 5611, 418, 403, 331, 690, 1274, 732, 502, 5975, 695, - 1501, 364, 1619, 699, 700, 217, 403, 1679, 1680, 506, - 706, 506, 708, 709, 4396, 493, 494, 495, 496, 497, - 498, 435, 502, 1997, 1582, 721, 722, 239, 5486, 451, - 492, 506, 502, 501, 387, 736, 732, 1563, 1380, 313, - 1677, 6018, 504, 731, 440, 245, 505, 1354, 502, 498, - 4150, 1445, 505, 5818, 505, 4437, 4670, 1445, 505, 500, - 492, 502, 1563, 504, 321, 913, 502, 506, 500, 506, - 493, 494, 504, 4258, 1632, 1633, 4436, 506, 5805, 4264, - 502, 502, 502, 502, 394, 395, 5833, 493, 494, 502, - 453, 506, 1354, 746, 790, 748, 1599, 750, 372, 505, - 1362, 1363, 506, 756, 502, 463, 760, 463, 493, 494, - 502, 418, 502, 1392, 1393, 1686, 1523, 813, 814, 5750, - 505, 498, 387, 819, 461, 1951, 484, 502, 484, 350, - 506, 418, 5763, 4441, 502, 506, 410, 26, 412, 1925, - 506, 418, 502, 370, 502, 1034, 502, 484, 844, 1031, - 846, 4065, 418, 1035, 418, 1037, 493, 494, 493, 494, - 22, 174, 1034, 4997, 1813, 360, 28, 901, 506, 1576, - 447, 418, 1958, 869, 1795, 1171, 290, 5904, 435, 4076, - 418, 5369, 418, 4080, 1970, 380, 1593, 3950, 418, 457, - 4487, 3915, 778, 418, 5673, 891, 3, 113, 440, 901, - 1815, 495, 496, 497, 498, 1025, 440, 245, 904, 409, - 114, 24, 5670, 440, 903, 903, 903, 903, 903, 903, - 903, 903, 903, 3490, 903, 4135, 903, 289, 903, 3, - 903, 903, 903, 3776, 903, 6, 113, 903, 438, 903, - 927, 903, 103, 457, 442, 5876, 4346, 5974, 5653, 638, - 5490, 140, 440, 3374, 840, 51, 169, 4064, 3373, 4066, - 1570, 817, 113, 463, 5669, 821, 3417, 3317, 3419, 218, - 4345, 3635, 3636, 64, 1832, 289, 3640, 125, 847, 346, - 309, 493, 494, 38, 91, 150, 1898, 493, 494, 495, - 496, 497, 498, 360, 1906, 362, 77, 153, 202, 3001, - 169, 1498, 502, 495, 496, 497, 498, 125, 6055, 5582, - 406, 6, 1308, 176, 5587, 5588, 1012, 1013, 1014, 26, - 64, 6, 183, 269, 1020, 32, 364, 89, 186, 1025, - 5243, 269, 918, 59, 1030, 1031, 5815, 144, 24, 1035, - 41, 1037, 731, 732, 65, 1041, 120, 933, 5806, 4251, - 174, 216, 73, 186, 55, 176, 423, 1999, 122, 1579, - 10, 1057, 1582, 5825, 212, 120, 120, 17, 18, 19, - 132, 409, 171, 202, 198, 3719, 490, 491, 492, 493, - 494, 495, 496, 497, 498, 190, 5147, 283, 5377, 120, - 1386, 294, 5548, 24, 212, 24, 5107, 4472, 3405, 461, - 438, 2043, 136, 129, 1100, 418, 1102, 1103, 269, 3773, - 111, 269, 6, 309, 24, 304, 6044, 113, 12, 294, - 4408, 175, 2071, 364, 89, 463, 294, 989, 990, 294, - 309, 5910, 245, 140, 292, 242, 269, 362, 115, 503, - 502, 1861, 506, 3, 748, 749, 750, 1143, 253, 753, - 754, 755, 466, 302, 343, 5917, 1452, 6, 222, 763, - 364, 5825, 325, 10, 502, 6093, 13, 132, 89, 290, - 17, 18, 19, 502, 5236, 1171, 345, 10, 212, 492, - 13, 328, 288, 3750, 17, 18, 19, 26, 377, 1177, - 406, 504, 5458, 24, 5973, 1967, 1968, 304, 423, 273, - 446, 405, 406, 36, 278, 286, 5985, 278, 1204, 273, - 211, 132, 901, 190, 903, 26, 1778, 1213, 239, 1215, - 274, 5484, 5488, 5504, 380, 269, 1180, 4957, 1182, 406, - 1184, 91, 1186, 1229, 1188, 1189, 1190, 1233, 4920, 294, - 6019, 1195, 480, 4147, 5457, 307, 2646, 377, 461, 1245, - 133, 364, 370, 5917, 415, 406, 445, 506, 349, 245, - 143, 502, 1108, 368, 4933, 6027, 4926, 331, 269, 434, - 6049, 302, 1308, 269, 5487, 396, 253, 406, 426, 256, - 1276, 2746, 2715, 278, 144, 4685, 1928, 24, 446, 24, - 3741, 2040, 440, 278, 6073, 5584, 409, 304, 502, 448, - 503, 140, 409, 506, 411, 349, 502, 1895, 1304, 1305, - 1306, 1831, 1308, 446, 245, 1957, 245, 2580, 185, 1961, - 1888, 1909, 440, 502, 1966, 438, 125, 1969, 135, 140, - 3, 506, 1328, 377, 1922, 245, 343, 24, 506, 370, - 290, 140, 307, 3345, 377, 29, 3348, 122, 168, 411, - 463, 198, 1920, 53, 1892, 502, 3199, 3200, 1354, 1935, - 2793, 3204, 5367, 6027, 2928, 366, 1362, 1363, 377, 1907, - 377, 5847, 1910, 220, 1375, 406, 506, 377, 364, 360, - 3831, 1570, 242, 2735, 278, 112, 307, 220, 442, 502, - 1386, 368, 3394, 636, 500, 1834, 1430, 1431, 504, 1433, - 3402, 418, 3245, 3246, 289, 303, 4668, 176, 92, 3309, - 2020, 5473, 249, 4627, 245, 1854, 115, 448, 91, 1415, - 5482, 304, 1960, 409, 224, 406, 1964, 1965, 1430, 1431, - 461, 1433, 99, 364, 4631, 364, 1432, 492, 150, 4636, - 1436, 1437, 4639, 290, 304, 500, 411, 502, 503, 504, - 183, 506, 438, 484, 364, 3, 1452, 290, 6, 30, - 343, 3018, 1458, 330, 12, 304, 273, 289, 320, 269, - 5532, 502, 145, 506, 345, 198, 4500, 463, 409, 339, - 409, 292, 4884, 343, 289, 728, 4510, 347, 1177, 506, - 411, 190, 176, 193, 361, 99, 316, 506, 198, 409, - 1997, 26, 479, 278, 343, 4409, 506, 438, 245, 438, - 245, 253, 4453, 180, 224, 119, 502, 377, 177, 318, - 26, 290, 114, 250, 236, 502, 32, 254, 438, 1525, - 2502, 204, 463, 364, 463, 235, 347, 348, 377, 5147, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 409, - 154, 411, 1241, 463, 253, 336, 225, 256, 245, 269, - 5571, 1447, 2504, 1449, 135, 808, 377, 115, 420, 461, - 1566, 502, 1261, 502, 1178, 420, 461, 1181, 409, 1183, - 380, 1185, 5242, 1187, 746, 5254, 748, 1191, 750, 355, - 461, 3037, 502, 5655, 756, 757, 758, 1584, 135, 695, - 137, 461, 1589, 1599, 5585, 303, 186, 438, 39, 154, - 202, 502, 464, 484, 506, 140, 120, 360, 154, 1308, - 343, 331, 355, 304, 347, 721, 368, 364, 2540, 364, - 61, 2580, 463, 3033, 140, 506, 163, 3037, 311, 461, - 440, 325, 190, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 4416, 157, 377, 122, 461, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 447, 326, 1664, 368, - 380, 502, 409, 732, 409, 441, 1663, 364, 362, 377, - 1667, 112, 382, 1679, 1680, 1681, 5428, 191, 5430, 269, - 4334, 124, 5434, 5435, 292, 4339, 377, 440, 30, 2670, - 359, 438, 1998, 438, 2000, 253, 304, 2829, 256, 236, - 2006, 1893, 122, 372, 1903, 1904, 2012, 2013, 2014, 163, - 4624, 30, 409, 33, 304, 169, 463, 2023, 463, 13, - 440, 790, 1904, 2029, 304, 339, 273, 421, 461, 423, - 5802, 1430, 1431, 427, 1433, 343, 4410, 5144, 407, 2670, - 60, 438, 1638, 4372, 100, 222, 5908, 5909, 285, 169, - 433, 484, 1882, 343, 5745, 502, 370, 502, 441, 273, - 201, 444, 364, 343, 4225, 84, 463, 26, 87, 304, - 479, 461, 1778, 32, 93, 844, 219, 2909, 88, 951, - 362, 5188, 236, 5475, 1790, 79, 206, 370, 304, 452, - 4251, 10, 406, 135, 13, 1801, 273, 377, 17, 18, - 19, 122, 121, 405, 406, 502, 303, 1813, 343, 250, - 368, 1817, 461, 254, 5493, 370, 506, 36, 2777, 175, - 303, 2020, 73, 406, 370, 452, 5898, 343, 269, 2642, - 1836, 285, 5502, 503, 448, 904, 506, 123, 1844, 502, - 2622, 423, 377, 458, 2803, 453, 1852, 461, 1020, 269, - 249, 406, 208, 273, 331, 165, 446, 506, 6020, 178, - 406, 377, 303, 0, 1870, 448, 5073, 223, 123, 120, - 484, 2839, 191, 1879, 273, 502, 1882, 233, 123, 1885, - 377, 140, 1888, 1889, 203, 206, 1892, 1893, 502, 1895, - 1896, 506, 5913, 448, 377, 1584, 5281, 442, 5970, 169, - 1589, 1907, 448, 1909, 1910, 261, 461, 348, 194, 386, - 180, 442, 2843, 1919, 1920, 461, 1922, 1923, 505, 502, - 2851, 479, 502, 2854, 1030, 347, 4989, 178, 198, 484, - 371, 461, 288, 10, 2745, 1041, 13, 1935, 484, 194, - 17, 18, 19, 2902, 5696, 179, 5686, 502, 269, 194, - 391, 1057, 273, 492, 1960, 377, 502, 502, 1964, 1965, - 163, 10, 39, 294, 13, 504, 3062, 94, 17, 18, - 19, 502, 506, 1937, 1663, 1939, 506, 1941, 1667, 1943, - 4441, 1945, 163, 1982, 1982, 1949, 1982, 1982, 169, 5668, - 1991, 1982, 1998, 1982, 2000, 4886, 4910, 5667, 354, 2005, - 2006, 220, 6023, 282, 3414, 239, 2012, 2013, 2014, 2968, - 137, 2017, 304, 2019, 3424, 2021, 2022, 2023, 2024, 2025, - 2026, 2889, 273, 2029, 175, 2031, 2032, 278, 2839, 2035, - 304, 420, 273, 236, 4925, 3931, 367, 278, 5101, 304, - 5103, 2922, 2923, 2924, 5456, 2051, 2052, 2053, 2054, 3505, - 36, 343, 4905, 3620, 5275, 236, 2892, 208, 423, 13, - 2819, 461, 503, 2069, 4076, 2071, 2877, 3232, 4080, 343, - 321, 290, 223, 347, 393, 464, 364, 396, 343, 1990, - 176, 1977, 233, 353, 484, 377, 337, 2817, 329, 2819, - 70, 71, 46, 304, 304, 3505, 3054, 5507, 2670, 323, - 2911, 335, 502, 377, 285, 393, 3872, 1213, 3961, 3962, - 3963, 3964, 377, 209, 3967, 3968, 3969, 3970, 3971, 3972, - 3973, 3974, 3975, 3976, 3698, 79, 170, 347, 5807, 3051, - 3704, 3593, 343, 343, 3056, 4147, 3058, 3005, 3006, 3007, - 3008, 348, 3010, 220, 5529, 2743, 3068, 112, 1576, 3071, - 304, 3073, 3074, 15, 16, 3077, 6, 377, 39, 3081, - 204, 3083, 12, 73, 3086, 1593, 377, 3035, 263, 79, - 377, 220, 4025, 4026, 92, 4056, 410, 3, 412, 5093, - 61, 3112, 92, 5481, 435, 1357, 360, 26, 362, 343, - 1362, 1363, 287, 5107, 4848, 331, 4850, 4851, 4852, 3642, - 4874, 27, 4876, 354, 438, 170, 2212, 500, 344, 248, - 120, 504, 122, 290, 370, 2867, 5437, 2869, 1390, 461, - 454, 2873, 5914, 377, 5903, 343, 454, 1399, 3150, 1401, - 179, 112, 100, 1405, 273, 343, 1935, 373, 418, 204, - 1412, 290, 484, 3408, 3687, 335, 2252, 150, 5743, 423, - 406, 335, 91, 2559, 367, 503, 81, 5291, 506, 377, - 163, 179, 442, 169, 3223, 91, 169, 92, 178, 377, - 3229, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 410, 371, 412, 1982, 202, 250, 192, 371, 304, 254, - 239, 302, 448, 463, 133, 169, 206, 178, 3028, 2305, - 249, 140, 49, 5, 143, 461, 6, 175, 410, 11, - 412, 169, 12, 216, 484, 463, 406, 19, 192, 145, - 201, 239, 406, 339, 226, 72, 979, 343, 484, 2028, - 3812, 1503, 502, 236, 192, 37, 484, 501, 5748, 5749, - 208, 1513, 506, 28, 461, 998, 502, 2987, 1001, 5570, - 5264, 81, 6081, 288, 6083, 223, 15, 16, 293, 370, - 6052, 377, 92, 273, 454, 233, 51, 484, 278, 250, - 454, 6, 198, 254, 6103, 293, 497, 12, 204, 3310, - 502, 502, 285, 504, 5393, 1557, 1558, 497, 269, 5398, - 5399, 294, 502, 261, 504, 406, 4408, 4409, 252, 6, - 6, 6, 502, 34, 35, 12, 12, 12, 5322, 503, - 423, 321, 506, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 303, 3304, 2573, 2574, 2575, 337, 1600, 3143, - 3144, 1603, 1604, 6, 100, 501, 345, 448, 177, 12, - 506, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 461, 274, 275, 500, 367, 502, 6, 3109, 5, 5869, - 1566, 410, 12, 412, 11, 304, 5, 348, 99, 502, - 96, 504, 11, 484, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 249, 2490, 311, 354, 249, 119, 438, - 371, 502, 410, 2499, 412, 5, 2502, 6, 5114, 5115, - 339, 11, 6, 12, 343, 423, 6, 2706, 12, 175, - 391, 4364, 12, 2705, 288, 2707, 2708, 435, 2217, 293, - 438, 495, 202, 154, 2706, 435, 500, 495, 502, 355, - 504, 434, 500, 3455, 502, 975, 504, 2543, 377, 5193, - 980, 2547, 208, 252, 2550, 384, 2552, 370, 2542, 2555, - 3329, 3330, 5962, 2559, 22, 34, 35, 223, 5509, 500, - 28, 502, 192, 504, 3491, 3307, 423, 233, 265, 266, - 267, 268, 2702, 502, 2580, 504, 2582, 3212, 404, 3214, - 3215, 503, 3415, 406, 506, 461, 503, 463, 503, 506, - 3517, 506, 410, 2599, 412, 261, 503, 150, 503, 506, - 3359, 506, 2608, 2609, 3526, 503, 3528, 433, 506, 454, - 163, 503, 4624, 88, 506, 441, 169, 60, 444, 4631, - 359, 367, 288, 1795, 4636, 448, 365, 4639, 452, 2635, - 4197, 2627, 503, 372, 2742, 506, 2642, 3425, 461, 226, - 2646, 2647, 5863, 150, 3596, 2033, 3266, 2653, 2036, 11, - 503, 2657, 4418, 506, 502, 2661, 163, 5571, 5711, 5712, - 275, 484, 169, 216, 2670, 3801, 503, 503, 407, 506, - 506, 2672, 502, 2674, 503, 2582, 288, 506, 5741, 502, - 405, 3492, 2688, 236, 1790, 2691, 5147, 506, 354, 503, - 429, 503, 506, 364, 506, 1801, 2702, 5371, 2704, 2705, - 503, 2707, 2708, 506, 2710, 5379, 5380, 503, 339, 216, - 506, 1817, 4187, 4195, 503, 4197, 2722, 506, 503, 503, - 2828, 506, 506, 503, 503, 4135, 506, 506, 503, 236, - 4173, 506, 285, 461, 502, 463, 2742, 2743, 3310, 370, - 503, 294, 60, 506, 503, 2751, 503, 506, 3670, 506, - 503, 360, 361, 506, 3676, 370, 454, 3568, 5672, 503, - 360, 361, 506, 3914, 1870, 360, 361, 2773, 2774, 3782, - 503, 2777, 88, 506, 503, 406, 442, 506, 285, 1885, - 49, 3740, 1888, 1889, 63, 481, 3744, 294, 4231, 503, - 3442, 406, 506, 5840, 5841, 2801, 10, 2803, 222, 13, - 2908, 2807, 291, 6024, 503, 5354, 5267, 506, 503, 503, - 291, 506, 506, 1919, 1920, 2821, 504, 448, 2714, 98, - 503, 452, 2828, 506, 503, 2831, 503, 506, 288, 506, - 461, 2837, 46, 448, 169, 503, 2008, 2009, 506, 53, - 481, 3439, 3440, 2015, 2016, 503, 461, 503, 506, 2548, - 506, 2857, 3469, 484, 291, 503, 503, 2863, 506, 506, - 461, 3591, 463, 6084, 2870, 79, 3596, 360, 361, 484, - 3738, 502, 54, 55, 135, 2047, 137, 288, 2884, 503, - 159, 434, 506, 2582, 49, 481, 503, 502, 503, 506, - 505, 2897, 410, 222, 412, 3201, 2902, 3469, 4910, 135, - 161, 137, 2908, 2866, 5818, 503, 503, 3213, 506, 506, - 5801, 135, 150, 137, 495, 503, 195, 2813, 506, 173, - 2926, 2927, 2928, 506, 502, 163, 2932, 434, 2627, 503, - 502, 169, 506, 3647, 148, 451, 503, 161, 3860, 506, - 3862, 503, 3864, 3249, 506, 2051, 503, 500, 4430, 506, - 503, 504, 231, 2959, 2960, 4120, 5054, 503, 503, 5057, - 506, 506, 2968, 3155, 317, 3157, 3158, 503, 503, 503, - 506, 506, 506, 503, 503, 502, 506, 506, 216, 193, - 503, 38, 503, 506, 198, 506, 3292, 3585, 4425, 503, - 4446, 3922, 506, 5907, 273, 3001, 60, 503, 236, 5913, - 506, 503, 503, 505, 265, 266, 267, 268, 503, 3607, - 505, 272, 4148, 4149, 502, 5567, 4152, 278, 503, 174, - 503, 235, 3152, 506, 3020, 10, 305, 3033, 13, 218, - 218, 3037, 17, 18, 19, 4047, 4446, 4049, 3997, 502, - 3770, 265, 266, 267, 268, 502, 504, 285, 272, 273, - 503, 36, 4004, 506, 278, 503, 294, 503, 506, 503, - 506, 5073, 506, 503, 465, 343, 506, 3266, 347, 503, - 349, 503, 506, 352, 506, 503, 290, 503, 506, 502, - 506, 5093, 361, 503, 503, 503, 506, 506, 506, 503, - 369, 198, 506, 503, 3001, 5107, 506, 503, 377, 503, - 506, 503, 506, 4050, 506, 503, 502, 155, 506, 6023, - 389, 503, 503, 503, 506, 506, 506, 3123, 503, 398, - 3898, 506, 503, 402, 503, 506, 4615, 506, 4617, 3746, - 4081, 3748, 4083, 3139, 503, 3141, 3788, 506, 39, 504, - 503, 4093, 3148, 506, 502, 155, 3152, 10, 3154, 3155, - 13, 3157, 3158, 3159, 288, 3201, 503, 5010, 198, 506, - 61, 3167, 343, 3761, 425, 3763, 3172, 288, 382, 3368, - 1447, 155, 1449, 4740, 3746, 436, 3748, 456, 4130, 155, - 198, 155, 288, 46, 343, 155, 169, 234, 122, 442, - 53, 5820, 288, 3199, 3200, 3201, 434, 502, 3204, 282, - 169, 425, 503, 3249, 73, 273, 3212, 3213, 3214, 3215, - 39, 112, 436, 3830, 273, 465, 79, 3223, 502, 288, - 273, 49, 3228, 3229, 273, 3231, 49, 3233, 428, 273, - 55, 91, 304, 3885, 454, 220, 454, 423, 4196, 3245, - 3246, 169, 324, 3249, 155, 4720, 155, 502, 155, 155, - 465, 155, 5264, 155, 506, 155, 155, 155, 3830, 155, - 155, 155, 3268, 155, 3270, 4224, 3272, 4226, 482, 155, - 155, 155, 169, 155, 288, 406, 101, 502, 39, 493, - 494, 495, 496, 497, 498, 148, 3292, 234, 169, 169, - 288, 4250, 502, 3297, 3298, 3299, 502, 502, 169, 502, - 201, 126, 3348, 502, 3310, 290, 502, 502, 502, 39, - 5322, 502, 502, 280, 462, 3913, 39, 502, 502, 144, - 4251, 3020, 502, 148, 502, 502, 502, 502, 502, 502, - 193, 61, 4165, 4469, 502, 198, 502, 300, 502, 3345, - 502, 502, 3348, 10, 4132, 170, 13, 103, 173, 250, - 502, 502, 3398, 254, 3360, 502, 502, 87, 502, 3365, - 218, 506, 234, 188, 39, 506, 502, 38, 269, 502, - 416, 416, 235, 500, 3380, 500, 418, 418, 174, 46, - 418, 418, 112, 113, 4342, 169, 53, 506, 3394, 169, - 120, 377, 6021, 4320, 285, 283, 3402, 69, 2570, 2571, - 364, 418, 303, 418, 2576, 418, 418, 364, 3414, 504, - 453, 3417, 79, 3419, 418, 418, 364, 236, 3424, 418, - 80, 418, 492, 418, 92, 364, 155, 290, 0, 288, - 231, 369, 278, 3439, 3440, 128, 2608, 2609, 3345, 3445, - 418, 3348, 309, 5296, 409, 418, 418, 348, 178, 4330, - 441, 288, 360, 278, 191, 92, 283, 418, 418, 128, - 3466, 304, 198, 3469, 155, 442, 3472, 502, 502, 5481, - 371, 201, 5325, 506, 3480, 418, 442, 418, 418, 128, - 114, 148, 418, 418, 128, 418, 418, 3394, 418, 418, - 391, 418, 60, 60, 418, 3402, 258, 418, 2670, 3505, - 418, 292, 3201, 418, 329, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 328, 418, 328, 328, 48, 382, - 250, 309, 409, 309, 254, 418, 193, 99, 418, 418, - 48, 198, 503, 220, 220, 3541, 3542, 3543, 506, 269, - 418, 418, 3741, 273, 418, 507, 4956, 288, 288, 428, - 3249, 502, 418, 39, 220, 220, 220, 220, 220, 5571, - 3566, 4483, 220, 4494, 4486, 220, 220, 155, 235, 3575, - 288, 3577, 3271, 303, 155, 273, 120, 442, 150, 3585, - 155, 155, 2754, 453, 155, 288, 242, 39, 3287, 273, - 4512, 163, 273, 273, 39, 226, 169, 169, 2704, 366, - 155, 3607, 174, 155, 2710, 155, 442, 442, 180, 155, - 418, 183, 282, 174, 13, 187, 277, 457, 348, 482, - 258, 416, 258, 290, 418, 183, 502, 502, 164, 502, - 493, 494, 495, 496, 497, 498, 368, 420, 502, 481, - 502, 371, 503, 191, 216, 2751, 3345, 503, 502, 3348, - 3956, 506, 191, 506, 503, 500, 503, 481, 256, 503, - 5672, 391, 503, 393, 236, 3671, 396, 216, 458, 380, - 224, 2843, 506, 289, 506, 39, 442, 442, 297, 2851, - 60, 503, 2854, 453, 3990, 364, 502, 3693, 442, 224, - 224, 278, 3698, 278, 2866, 3394, 418, 418, 3704, 3398, - 502, 10, 418, 3402, 13, 169, 288, 3713, 17, 18, - 19, 4663, 278, 285, 49, 382, 288, 273, 288, 234, - 234, 234, 294, 252, 288, 360, 418, 36, 128, 386, - 506, 4037, 409, 198, 3740, 3741, 343, 288, 506, 192, - 3746, 288, 3748, 288, 377, 374, 461, 331, 503, 39, - 220, 294, 442, 442, 226, 3761, 283, 3763, 327, 4895, - 155, 492, 169, 39, 407, 418, 4579, 10, 418, 454, - 13, 328, 502, 171, 17, 18, 19, 3783, 502, 351, - 4702, 374, 155, 502, 155, 155, 283, 461, 273, 4646, - 442, 39, 4390, 4391, 273, 288, 28, 288, 226, 283, - 4731, 189, 189, 3809, 169, 39, 5818, 170, 226, 374, - 169, 5248, 288, 273, 198, 482, 198, 198, 506, 3815, - 198, 4743, 4744, 198, 3830, 3831, 493, 494, 495, 496, - 497, 498, 27, 506, 406, 465, 4488, 4489, 4490, 4491, - 4492, 181, 418, 174, 255, 504, 461, 3853, 288, 60, - 282, 502, 174, 174, 2960, 3851, 502, 10, 506, 506, - 13, 506, 434, 503, 503, 51, 3872, 300, 135, 310, - 481, 503, 174, 299, 502, 4033, 503, 503, 503, 272, - 503, 503, 506, 503, 502, 3891, 458, 418, 460, 461, - 503, 503, 4658, 46, 5376, 5907, 506, 503, 4856, 503, - 53, 5913, 502, 502, 249, 502, 501, 3913, 174, 501, - 3916, 220, 503, 502, 183, 440, 4838, 4839, 244, 288, - 506, 484, 448, 3819, 483, 458, 79, 3933, 500, 60, - 3936, 503, 504, 505, 288, 3941, 291, 3943, 288, 492, - 3112, 202, 502, 155, 418, 3951, 210, 3953, 278, 418, - 3956, 418, 158, 273, 3960, 3961, 3962, 3963, 3964, 418, - 502, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, - 3976, 155, 87, 377, 3980, 3981, 3982, 220, 502, 3985, - 369, 290, 155, 155, 3990, 4031, 369, 234, 202, 3995, - 369, 3997, 158, 3999, 288, 148, 492, 5850, 5851, 418, - 442, 4007, 3898, 158, 4010, 236, 4012, 364, 458, 439, - 311, 6023, 311, 158, 128, 418, 4022, 418, 246, 4025, - 4026, 393, 418, 246, 4030, 4031, 4225, 418, 246, 4649, - 364, 4037, 418, 3139, 273, 4039, 4040, 4041, 4042, 364, - 193, 418, 418, 155, 418, 198, 4968, 290, 3154, 4971, - 4972, 418, 4251, 3159, 364, 48, 418, 4056, 4056, 364, - 4056, 4056, 4068, 377, 503, 4056, 4988, 4056, 503, 418, - 4076, 418, 418, 220, 4080, 418, 503, 501, 220, 186, - 503, 503, 235, 292, 428, 506, 3, 169, 49, 113, - 503, 506, 169, 502, 39, 503, 155, 155, 492, 418, - 5510, 169, 283, 186, 442, 502, 4112, 155, 364, 442, - 364, 364, 364, 364, 506, 291, 3815, 374, 153, 4717, - 153, 220, 220, 4129, 220, 220, 220, 220, 220, 4135, - 220, 220, 500, 146, 13, 300, 3308, 290, 3310, 272, - 506, 4147, 503, 503, 174, 4875, 453, 503, 506, 223, - 503, 503, 3851, 501, 3326, 458, 223, 298, 408, 295, - 60, 503, 4168, 4815, 4816, 502, 4818, 503, 187, 4076, - 415, 503, 351, 4080, 502, 502, 447, 90, 502, 428, - 169, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 26, 39, 226, 418, 210, 60, 32, 155, 442, 409, - 3372, 3373, 5083, 393, 442, 178, 428, 369, 4806, 158, - 418, 418, 364, 4219, 418, 418, 5783, 418, 4224, 4225, - 4226, 364, 503, 503, 503, 343, 461, 502, 502, 382, - 60, 409, 448, 169, 288, 79, 155, 113, 503, 5198, - 4147, 77, 4441, 428, 4250, 4251, 220, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 220, 220, 220, 4565, - 502, 502, 205, 465, 224, 502, 288, 418, 39, 309, - 503, 286, 39, 3, 288, 502, 506, 506, 428, 45, - 506, 418, 502, 374, 503, 180, 113, 174, 220, 174, - 503, 4297, 60, 300, 4300, 1437, 63, 133, 503, 459, - 459, 223, 4265, 503, 140, 4903, 503, 143, 506, 503, - 503, 502, 460, 502, 4277, 502, 283, 492, 5414, 428, - 5416, 418, 174, 461, 10, 79, 204, 13, 415, 482, - 192, 98, 4031, 192, 170, 492, 278, 278, 60, 409, - 493, 494, 495, 496, 497, 498, 418, 73, 506, 418, - 506, 155, 418, 158, 418, 127, 220, 4056, 4364, 503, - 46, 176, 502, 120, 39, 198, 3472, 53, 204, 283, - 26, 374, 502, 39, 3480, 273, 32, 4076, 171, 442, - 374, 4080, 283, 461, 4390, 4391, 60, 85, 4394, 409, - 461, 47, 159, 79, 39, 4401, 174, 288, 502, 169, - 506, 338, 4408, 4409, 207, 291, 218, 390, 5544, 174, - 26, 447, 4418, 309, 5066, 503, 32, 502, 39, 503, - 367, 77, 82, 502, 92, 5077, 502, 136, 195, 337, - 503, 47, 288, 269, 5315, 4441, 199, 273, 4434, 418, - 4446, 4447, 4448, 5225, 5425, 5581, 5368, 283, 503, 39, - 4649, 155, 4458, 155, 169, 502, 292, 502, 502, 226, - 502, 77, 148, 418, 231, 502, 39, 278, 304, 3575, - 502, 3577, 442, 247, 502, 131, 502, 133, 503, 155, - 374, 113, 39, 292, 140, 503, 174, 143, 5108, 428, - 169, 5627, 5628, 4499, 5425, 388, 388, 503, 5420, 60, - 112, 4408, 4409, 502, 502, 502, 273, 193, 39, 695, - 346, 347, 198, 447, 170, 131, 506, 133, 506, 4525, - 502, 502, 457, 169, 140, 409, 191, 143, 409, 269, - 442, 4537, 202, 502, 6, 721, 288, 503, 305, 5159, - 162, 377, 465, 502, 361, 361, 73, 291, 204, 235, - 5148, 73, 505, 136, 170, 461, 461, 141, 457, 4565, - 166, 166, 4568, 446, 502, 3671, 506, 447, 36, 3741, - 4576, 4577, 502, 4579, 174, 377, 248, 409, 4584, 4585, - 347, 334, 278, 4589, 204, 352, 409, 4593, 204, 288, - 4596, 4597, 3764, 5552, 361, 4601, 288, 374, 502, 39, - 39, 4607, 369, 199, 290, 502, 291, 3713, 291, 445, - 377, 5533, 176, 269, 176, 154, 60, 273, 4624, 60, - 502, 39, 389, 344, 295, 4631, 503, 283, 414, 503, - 4636, 398, 60, 4639, 4640, 402, 292, 418, 5619, 397, - 5776, 4647, 125, 440, 6, 503, 374, 502, 304, 141, - 360, 151, 4658, 269, 421, 278, 502, 273, 5617, 414, - 4666, 502, 25, 360, 4660, 4661, 506, 283, 506, 5637, - 36, 82, 274, 418, 377, 174, 292, 502, 360, 296, - 4686, 5333, 4683, 869, 154, 274, 120, 343, 304, 456, - 346, 347, 506, 460, 388, 388, 382, 448, 4704, 461, - 461, 502, 176, 3809, 447, 176, 442, 5843, 5844, 4408, - 448, 4717, 502, 447, 503, 903, 5274, 4624, 2985, 943, - 1666, 377, 990, 2786, 4631, 3310, 989, 343, 2877, 4636, - 346, 347, 4639, 3517, 10, 4434, 4742, 13, 4224, 4199, - 5767, 17, 18, 19, 2903, 2957, 1363, 3853, 3732, 5201, - 3922, 5617, 4388, 4759, 5884, 5248, 4197, 5224, 4764, 4865, - 3446, 377, 4725, 3099, 5747, 4771, 5418, 5107, 5872, 5647, - 46, 5646, 4735, 5787, 5907, 3450, 4910, 53, 4409, 4435, - 4378, 4787, 4420, 5591, 2971, 2971, 4219, 3542, 4794, 445, - 3780, 4404, 4904, 985, 5231, 3824, 482, 4471, 5522, 5986, - 4806, 6096, 6078, 79, 5215, 3740, 4443, 493, 494, 495, - 496, 497, 498, 5799, 5161, 5396, 1825, 5600, 5164, 18, - 28, 634, 3889, 5366, 4499, 5982, 1012, 2987, 4446, 445, - 3936, 4837, 1868, 3424, 2647, 1865, 3835, 5510, 5274, 5411, - 1879, 1903, 1985, 686, 1030, 1985, 719, 3674, 2902, 4250, - 5825, 3593, 6027, 5425, 3960, 1041, 5586, 4863, 834, 4475, - 2933, 1482, 4477, 2589, 1205, 1778, 6046, 4662, 5363, 4127, - 5740, 1057, 1379, 4879, 40, 1338, 40, 3365, 4884, 3985, - 2022, 3380, 2599, 5728, 5564, 3348, 4082, 5074, 4065, 2031, - 3345, 5322, 5321, 3345, 4128, 6005, 5722, 4903, 5854, 1440, - 5551, 1439, 1442, 5884, 4910, 5300, 1396, 3999, 5565, 5108, - 5566, 2496, 2024, 3271, 3168, 2932, 3269, 193, 2587, 891, - 2499, -1, 198, -1, -1, -1, 4922, -1, -1, -1, - -1, -1, 4631, -1, -1, -1, -1, 4636, -1, -1, - 4639, -1, -1, -1, -1, 5867, 10, -1, 5147, 13, - 4956, -1, 4958, -1, -1, -1, -1, -1, -1, 235, - 5159, 4660, 4661, 5583, -1, -1, 5158, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5159, -1, -1, - -1, -1, 46, 4989, -1, -1, -1, -1, -1, 53, - -1, -1, -1, -1, -1, -1, 5302, -1, -1, -1, - -1, 5007, -1, 4910, 5010, -1, -1, 5013, 5014, 5015, - -1, 5203, -1, -1, 290, 79, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1213, -1, -1, - 5336, -1, 5038, 5039, -1, -1, 5042, 5343, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5619, -1, -1, - -1, -1, -1, 4225, -1, -1, -1, 5063, -1, -1, - -1, -1, -1, 5069, -1, -1, -1, 5073, -1, -1, - -1, 6030, -1, 5079, 5080, -1, -1, -1, -1, 4251, - -1, -1, -1, 6065, 148, -1, -1, 5093, -1, -1, - 5096, -1, -1, 4265, -1, 5101, -1, 5103, -1, -1, - -1, 5107, -1, 5409, 5410, 4277, 382, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 6078, - -1, -1, 5086, -1, -1, -1, -1, -1, -1, 193, - -1, -1, -1, -1, 198, -1, -1, 6096, -1, -1, - 6, 5147, 5148, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5158, -1, -1, -1, -1, 23, -1, 25, - -1, -1, -1, 29, -1, -1, 5073, -1, 34, 35, - 36, 235, 38, -1, -1, 41, 42, -1, 44, -1, - 46, 4353, 4354, -1, -1, -1, 5093, 53, 54, 55, - -1, -1, 5198, -1, -1, 5767, -1, 5203, 6079, -1, - 5107, -1, -1, -1, -1, -1, 482, -1, -1, -1, - -1, -1, -1, -1, 490, 491, 492, 493, 494, 495, - 496, 497, 498, 4922, -1, -1, 290, -1, -1, -1, - -1, -1, -1, 5229, 5540, -1, -1, -1, 5968, 5969, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5560, -1, 5562, -1, 5264, -1, - -1, 5267, -1, -1, 5260, -1, -1, -1, -1, 4441, - -1, -1, 1458, -1, -1, 5274, 5274, 5274, 5274, 5274, - 5274, 5274, 5274, 5274, -1, 5274, -1, 5274, 4394, 5274, - 5296, 5274, 5274, 5274, 5300, 5274, 5302, 5343, 5274, -1, - 5274, -1, 5274, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5884, -1, -1, -1, 5322, -1, 382, 5325, - -1, 26, 4494, -1, -1, -1, -1, 32, -1, -1, - 5336, 197, 198, 199, -1, -1, 202, 5343, -1, 1525, - 206, -1, 208, -1, -1, 211, -1, -1, 214, -1, - -1, 217, -1, -1, 220, -1, 222, 5264, -1, 225, - -1, -1, -1, 229, -1, 231, -1, 5263, -1, -1, - -1, -1, 77, -1, 5073, -1, -1, -1, -1, -1, - 1566, -1, -1, -1, 5583, -1, -1, 5393, -1, -1, - -1, -1, 5398, 5399, -1, -1, -1, 5403, -1, -1, - -1, -1, -1, 5409, 5410, 5411, -1, -1, -1, -1, - -1, -1, -1, 1599, -1, 5322, -1, -1, 482, 5425, - -1, -1, -1, -1, -1, -1, -1, -1, 133, 493, - 494, 495, 496, 497, 498, 140, -1, -1, 143, 5445, - -1, -1, -1, -1, -1, -1, -1, 5453, -1, -1, - 5456, -1, -1, -1, -1, -1, -1, 2599, -1, -1, - -1, -1, -1, -1, -1, 170, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5481, -1, -1, -1, 6, - -1, -1, -1, -1, -1, -1, -1, 5483, -1, -1, - -1, -1, -1, 1679, 1680, 1681, -1, -1, -1, 204, - -1, -1, -1, -1, 5510, 5511, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5534, -1, - 5229, -1, -1, -1, 5540, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5551, 5552, -1, -1, 5555, - -1, -1, -1, 4725, 5560, -1, 5562, -1, 5564, 4731, - -1, 5260, 5754, 4735, 269, 5571, -1, -1, 273, -1, - -1, -1, 5568, -1, 5481, 5274, -1, -1, 283, -1, - -1, -1, -1, -1, -1, -1, 5592, 292, -1, -1, - 4762, 4763, -1, -1, -1, 4767, 4768, -1, 4704, 304, - -1, -1, -1, -1, 1790, -1, -1, -1, -1, -1, - -1, 5617, -1, 5619, -1, 1801, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1817, -1, -1, 5826, 5827, 4742, -1, 343, -1, - -1, 346, 347, -1, 5343, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4764, 5965, - -1, -1, -1, -1, 5571, -1, 5672, -1, -1, -1, - 197, -1, 377, 63, -1, -1, -1, -1, -1, 206, - -1, -1, -1, -1, 1870, -1, -1, 214, -1, -1, - 217, -1, -1, -1, -1, -1, -1, -1, -1, 1885, - -1, -1, 1888, 1889, 5710, 5711, 5712, -1, 98, -1, - -1, -1, 5718, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5728, -1, -1, -1, -1, -1, -1, -1, - -1, 4837, 5738, 1919, 1920, 5741, -1, -1, -1, -1, - 445, -1, -1, -1, -1, -1, -1, -1, 5754, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5767, -1, -1, 6070, 5672, -1, 633, -1, 159, - -1, -1, -1, 639, -1, 641, -1, 643, -1, -1, - 646, -1, 5481, -1, 5483, -1, -1, 653, -1, -1, - -1, -1, 658, -1, 660, -1, -1, -1, -1, -1, - 666, -1, 5808, -1, 5800, 195, -1, -1, -1, -1, - -1, -1, 5818, -1, -1, -1, -1, -1, -1, -1, - 5826, 5827, -1, -1, 690, -1, 5832, 5825, 5834, 5825, - 5825, -1, -1, 699, 5825, 2021, 5825, 703, 2024, -1, - 706, 231, -1, 709, 5850, 5851, -1, -1, -1, -1, - -1, -1, 4958, -1, -1, -1, -1, -1, -1, 725, - -1, -1, -1, 10, -1, 2051, 13, -1, -1, 5568, - -1, 5917, -1, -1, -1, -1, -1, -1, 5884, 269, - -1, -1, -1, 273, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 6086, 6087, -1, -1, -1, 46, - -1, 5907, -1, -1, -1, -1, 53, 5913, -1, -1, - -1, 5818, 778, -1, 304, 305, -1, -1, -1, 5917, - -1, 5917, 5917, -1, -1, 5931, 5917, 793, 5917, -1, - -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5951, -1, 813, 814, -1, - 816, 817, -1, 343, -1, 821, -1, 347, -1, 5965, - -1, -1, 352, -1, -1, -1, -1, -1, -1, 835, - 0, 361, -1, 5079, 840, 5147, -1, -1, -1, 369, - 846, -1, -1, -1, -1, -1, -1, 377, -1, -1, - 5996, -1, -1, -1, -1, -1, -1, 6003, -1, 389, - 5907, -1, -1, -1, -1, 26, 5913, -1, 398, -1, - -1, 32, 402, -1, 44, -1, -1, 6023, -1, -1, - -1, -1, -1, -1, 6030, 891, 47, -1, -1, 6027, - 0, 6027, 6027, -1, -1, -1, 6027, -1, 6027, 905, - -1, -1, -1, -1, -1, -1, 193, -1, -1, -1, - -1, 198, 918, -1, -1, -1, 77, 3199, 3200, 6065, - 6066, -1, 3204, -1, 6070, -1, 456, 933, 6074, 99, - -1, -1, 6078, -1, -1, -1, -1, -1, -1, -1, - 6086, 6087, -1, -1, -1, -1, 952, -1, 235, -1, - 6096, 957, 958, -1, -1, -1, -1, -1, -1, -1, - -1, 5800, -1, 3245, 3246, -1, -1, -1, -1, -1, - 198, 199, 133, -1, 202, -1, 6023, -1, -1, 140, - 150, -1, 143, 989, 990, -1, 5825, -1, -1, 99, - -1, -1, -1, 163, 222, -1, -1, -1, -1, 169, - -1, 229, -1, 290, 174, -1, 1012, 1013, -1, 170, - 180, -1, -1, 183, -1, -1, -1, 187, -1, 1025, - -1, 1027, -1, 690, -1, 1031, -1, -1, 1034, 1035, - -1, 1037, 699, -1, -1, -1, 1042, -1, -1, 706, - 150, -1, 709, 204, -1, -1, 216, -1, 218, -1, - -1, -1, -1, 163, -1, -1, -1, -1, -1, 169, - 1066, -1, -1, -1, 174, -1, 236, 1073, 1074, -1, - 180, -1, -1, 183, -1, -1, -1, 187, 5917, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1094, 1095, - 1096, -1, 1098, -1, 1100, 382, 1102, 1103, -1, -1, - -1, -1, -1, -1, -1, -1, 216, -1, 269, -1, - -1, -1, 273, 5425, -1, 285, -1, -1, 288, -1, - -1, -1, 283, -1, 294, -1, 236, -1, -1, -1, - 1136, 292, 1138, 1139, -1, -1, -1, -1, -1, 26, - -1, -1, -1, 304, -1, 32, -1, 5393, -1, -1, - -1, -1, 5398, 5399, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1171, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 285, 2502, -1, 288, -1, - -1, 351, 343, -1, 294, 346, 347, -1, 6027, -1, - 77, 1197, -1, 1199, -1, 482, -1, 1203, -1, 1205, - -1, -1, -1, -1, -1, -1, 493, 494, 495, 496, - 497, 498, -1, 1219, -1, -1, 377, -1, -1, 1225, - -1, -1, 1228, -1, -1, 1231, -1, -1, -1, -1, - -1, -1, -1, 403, -1, -1, -1, -1, -1, 1245, - -1, 351, -1, -1, -1, -1, 133, -1, -1, -1, - -1, -1, -1, 140, -1, -1, 143, -1, -1, -1, - -1, -1, -1, -1, 434, 5511, -1, -1, -1, -1, - 1276, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 170, 445, -1, -1, -1, 458, -1, - 460, 461, -1, -1, -1, -1, 406, 5609, 1304, 1305, - 1306, -1, 1308, -1, -1, 26, -1, -1, -1, 5555, - -1, 32, -1, -1, -1, 0, 2642, 204, 39, -1, - 2646, 2647, 1328, -1, 434, -1, -1, -1, -1, -1, - -1, -1, -1, 503, -1, 505, 506, -1, -1, -1, - 61, -1, -1, -1, -1, -1, -1, -1, 458, -1, - 460, 461, -1, -1, -1, -1, 77, -1, 1025, -1, - -1, -1, 1368, -1, 1031, -1, -1, -1, 1035, -1, - 1037, -1, -1, -1, -1, -1, -1, -1, 2704, -1, - 1386, -1, 269, -1, 2710, -1, 273, -1, -1, -1, - 500, 112, -1, 503, 504, 505, 283, -1, -1, -1, - -1, -1, -1, -1, -1, 292, -1, -1, -1, -1, - -1, -1, 133, 641, 99, 643, -1, 304, 646, 140, - -1, -1, 143, -1, -1, 2751, 1432, -1, -1, -1, - 1436, 1437, 660, 1100, -1, 1102, 1103, -1, 666, -1, - -1, 1447, 1448, 1449, 1450, -1, 1452, -1, -1, 170, - -1, -1, -1, -1, -1, -1, 343, -1, -1, 346, - 347, -1, -1, -1, -1, 150, -1, -1, -1, 1475, - -1, -1, -1, -1, -1, -1, -1, -1, 163, -1, - 201, -1, -1, 204, 169, -1, -1, -1, -1, 174, - 377, -1, -1, -1, -1, 180, -1, -1, 183, -1, - -1, -1, 187, -1, 1510, -1, -1, -1, -1, 1515, - -1, -1, 1518, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1531, 1532, -1, -1, 250, - -1, 216, -1, 254, 1540, -1, -1, 1543, -1, -1, - -1, -1, -1, -1, -1, -1, 63, -1, 269, -1, - -1, 236, 273, -1, -1, -1, -1, -1, 445, -1, - -1, -1, 283, -1, 1570, -1, 1572, -1, -1, 1575, - -1, 292, 1578, 1579, -1, -1, 1582, -1, -1, -1, - -1, 98, 303, 304, -1, -1, 1592, -1, -1, 1595, - -1, -1, 1598, -1, -1, -1, -1, -1, -1, -1, - 285, -1, 2928, 288, -1, -1, -1, -1, -1, 294, - -1, -1, -1, -1, 1620, -1, -1, -1, -1, -1, - -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, - -1, -1, 1638, -1, 2960, -1, -1, -1, -1, -1, - -1, -1, 159, -1, 1650, 1651, 1652, 1653, 1654, -1, - 371, -1, -1, -1, -1, -1, 377, -1, -1, -1, - -1, -1, 1668, -1, -1, -1, 351, -1, -1, -1, - 391, -1, -1, 1679, 1680, 1681, -1, -1, 195, 3961, - 3962, 3963, 3964, -1, -1, 3967, 3968, 3969, 3970, 3971, - 3972, 3973, 3974, 3975, 3976, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3033, -1, -1, - -1, 3037, -1, 3995, 231, -1, 207, -1, 6030, -1, - -1, 406, -1, -1, 445, 216, -1, -1, -1, 957, - 958, -1, -1, -1, -1, -1, -1, -1, -1, 230, - -1, -1, -1, 4025, 4026, -1, -1, -1, -1, 434, - -1, -1, 269, -1, -1, -1, 273, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 6078, -1, -1, -1, - -1, 1777, 17, 458, -1, 460, 461, -1, -1, -1, - -1, 26, 1788, -1, 6096, -1, 4068, 304, 305, -1, - 1796, 1797, -1, -1, -1, -1, -1, -1, -1, 1027, - -1, -1, -1, -1, -1, -1, 1812, -1, -1, -1, - -1, -1, -1, 3139, 1042, 500, -1, -1, 503, 504, - 505, -1, -1, -1, 1830, 1831, 343, -1, 3154, -1, - 347, -1, -1, 3159, -1, 352, -1, -1, -1, -1, - 1846, 1847, 1848, 1849, 361, 1073, 1074, -1, -1, 1855, - -1, -1, 369, -1, -1, -1, 1862, -1, -1, -1, - 377, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1098, -1, 389, 1879, -1, -1, 1882, -1, -1, -1, - -1, 398, -1, -1, -1, 402, 1892, 1893, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1903, 1904, -1, - -1, 1907, -1, -1, 1910, -1, -1, -1, -1, -1, - 1138, 1139, -1, -1, -1, -1, -1, -1, -1, 1925, - 1926, -1, -1, -1, 10, -1, 1932, 13, 1934, -1, - -1, 17, 18, 19, -1, -1, -1, -1, -1, 456, - -1, -1, -1, -1, -1, 1951, -1, -1, -1, -1, - 36, -1, 1958, -1, 1960, -1, -1, 1963, 1964, 1965, - 46, 1967, 1968, -1, 1970, -1, -1, 53, -1, -1, - -1, 1977, -1, -1, -1, -1, -1, -1, 1984, -1, - -1, -1, -1, -1, 1990, 1991, -1, -1, 1994, -1, - -1, -1, 1998, 79, 2000, -1, -1, -1, -1, 2005, - 2006, -1, -1, -1, -1, -1, 2012, 2013, 2014, -1, - -1, 2017, -1, 2019, 2020, 2021, 2022, 2023, 2024, 2025, - 2026, 39, -1, 2029, -1, 2031, 2032, -1, 10, 2035, - -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, - -1, -1, -1, -1, -1, 63, 2052, 2053, 2054, -1, - -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, - -1, -1, -1, 2069, 46, -1, -1, -1, -1, -1, - -1, 53, -1, -1, -1, -1, -1, -1, 26, -1, - 98, -1, 4364, -1, 32, -1, -1, -1, 3414, -1, - -1, 3417, -1, 3419, -1, -1, -1, 79, 3424, -1, - -1, -1, -1, 2109, -1, -1, -1, 193, -1, -1, - -1, -1, 198, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, - -1, -1, -1, -1, 220, 221, -1, -1, -1, -1, - -1, 159, -1, -1, -1, -1, 3472, -1, -1, 235, - -1, -1, -1, -1, 3480, -1, -1, -1, -1, -1, - 651, -1, -1, -1, -1, -1, 657, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 195, 669, 3505, - -1, -1, -1, -1, -1, 133, -1, -1, -1, -1, - 276, 10, 140, -1, 13, 143, -1, -1, 17, 18, - 19, -1, -1, -1, 290, -1, 2212, 293, 226, -1, - -1, 193, 1879, 231, -1, 1882, 198, 36, -1, -1, - -1, -1, 170, -1, -1, 1892, 1893, 46, -1, -1, - -1, -1, -1, -1, 53, -1, -1, -1, 220, 221, - 1907, -1, -1, 1910, -1, -1, 2252, -1, -1, 3575, - -1, 3577, -1, 235, -1, 273, 204, -1, -1, -1, - 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4568, 305, -1, -1, - 1518, -1, -1, 1960, 276, -1, 382, 1964, 1965, 2305, - -1, -1, -1, -1, -1, -1, -1, -1, 290, -1, - -1, 293, -1, -1, -1, 1543, -1, -1, -1, -1, - -1, 269, -1, -1, -1, 273, -1, -1, -1, 347, - -1, -1, -1, -1, 352, 283, -1, -1, -1, -1, - -1, -1, -1, 361, 292, 3671, -1, -1, -1, -1, - -1, 369, -1, -1, -1, -1, 304, -1, -1, 377, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 389, 3698, -1, 193, -1, -1, -1, 3704, 198, - 398, -1, -1, -1, 402, -1, -1, 3713, -1, -1, - 635, -1, 1620, -1, -1, 343, 482, -1, 346, 347, - 382, 220, 221, 421, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, -1, 3741, 235, 503, -1, -1, - 506, -1, 1650, 1651, 1652, 1653, -1, -1, -1, 377, - -1, -1, -1, -1, -1, -1, -1, -1, 456, -1, - 685, 686, 460, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 276, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 290, -1, -1, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, 3809, 2490, -1, -1, -1, -1, -1, - -1, -1, 2498, 2499, -1, -1, 2502, 445, -1, -1, - 482, -1, -1, 2509, -1, 3831, -1, -1, 490, 491, - 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, - -1, -1, -1, -1, 506, -1, -1, 3853, -1, -1, - -1, -1, -1, -1, -1, 2541, 781, 2543, -1, -1, - 2546, 2547, -1, -1, 2550, -1, 2552, -1, -1, 2555, - -1, -1, -1, 2559, -1, -1, -1, -1, -1, -1, - -1, -1, 807, 382, -1, -1, -1, -1, 1796, 1797, - 815, -1, -1, 818, 819, 820, 2582, -1, -1, -1, - -1, -1, 2588, 2589, 1812, -1, -1, -1, -1, -1, - -1, -1, -1, 2599, -1, -1, -1, -1, -1, -1, - -1, -1, 2608, 2609, -1, -1, -1, -1, -1, -1, - 3936, -1, -1, -1, -1, -1, 2622, -1, 1846, 1847, - 1848, 1849, -1, -1, 2630, -1, 2632, -1, -1, -1, - -1, -1, -1, -1, 3960, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, - -1, 17, 18, 19, -1, -1, -1, -1, -1, 3985, - -1, -1, -1, 482, -1, -1, 2672, -1, 2674, -1, - 36, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 46, -1, -1, -1, -1, 2691, -1, 53, -1, -1, - -1, -1, -1, -1, -1, -1, 2702, -1, 1926, 2705, - 2706, 2707, 2708, 10, 1932, 2711, 13, -1, 2714, -1, - 17, 18, 19, 79, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5010, 2735, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, - 2746, -1, -1, -1, -1, -1, 53, -1, 2754, 2755, - -1, -1, -1, -1, -1, 2761, -1, -1, -1, -1, - -1, -1, -1, -1, 2770, -1, -1, -1, -1, -1, - -1, -1, 79, -1, -1, 1020, -1, -1, -1, -1, - -1, 5063, -1, -1, -1, -1, 2792, -1, -1, -1, - -1, -1, -1, 10, -1, -1, 13, -1, -1, -1, - 17, 18, 19, -1, -1, -1, -1, 2813, -1, 4135, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, - 2826, -1, -1, -1, -1, -1, -1, 193, -1, 46, - -1, -1, 198, -1, -1, -1, 53, -1, -1, -1, - -1, -1, 10, 2849, -1, 13, 2852, -1, -1, 17, - 18, 19, -1, -1, 220, 221, -1, -1, -1, -1, - -1, -1, 79, -1, -1, -1, -1, -1, -1, 235, - -1, -1, 2878, 2879, -1, -1, -1, -1, 46, -1, - -1, 2109, -1, -1, -1, 53, 193, 2893, -1, 2895, - 2896, 198, -1, -1, -1, -1, -1, -1, -1, 4225, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 276, 79, -1, 220, 221, 2582, -1, -1, -1, -1, - 2926, 2927, 2928, -1, 290, 4251, 2932, 293, 235, -1, - -1, -1, -1, -1, 2940, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2953, -1, -1, - -1, -1, -1, 2959, -1, 2961, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1210, -1, -1, 2974, 276, - -1, -1, -1, 2979, -1, -1, 193, -1, -1, 2985, - -1, 198, 2988, 290, -1, -1, -1, -1, 1233, -1, - -1, -1, -1, -1, 3000, 3001, -1, -1, -1, -1, - -1, -1, -1, 220, 221, 3011, -1, -1, -1, -1, - -1, -1, -1, -1, 5296, 3021, 382, 3023, 235, -1, - -1, -1, -1, -1, -1, 193, -1, -1, -1, -1, - 198, -1, -1, -1, -1, 2702, -1, -1, 2705, -1, - 2707, 2708, -1, 5325, -1, -1, -1, -1, -1, -1, - -1, -1, 220, 221, -1, -1, 3062, -1, 3064, 276, - 3066, -1, -1, -1, -1, 1310, -1, 235, 4394, -1, - -1, -1, -1, 290, 1319, 382, 293, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1333, -1, - -1, -1, -1, 3099, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 276, 1354, - -1, -1, 1357, 1358, -1, 4441, 482, 1362, 1363, -1, - 4446, -1, 290, -1, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, -1, -1, -1, -1, -1, -1, - 506, -1, -1, -1, -1, -1, 3152, 3153, -1, 3155, - -1, 3157, 3158, -1, 3160, -1, -1, -1, -1, -1, - -1, 3167, -1, -1, -1, 382, 3172, -1, -1, -1, - -1, -1, -1, 1664, -1, 482, -1, -1, -1, -1, - -1, -1, -1, 490, 491, 492, 493, 494, 495, 496, - 497, 498, -1, 3199, 3200, 3201, -1, -1, 3204, -1, - -1, -1, -1, -1, -1, -1, 3212, 3213, 3214, 3215, - -1, -1, -1, -1, 382, -1, -1, -1, -1, -1, - -1, -1, 3228, -1, -1, 3231, -1, 3233, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3245, - 3246, -1, -1, 3249, -1, -1, -1, -1, -1, -1, - 26, -1, -1, 4579, -1, -1, 32, -1, -1, -1, - 3266, -1, 3268, 39, 3270, 482, 3272, -1, -1, 5551, - -1, -1, -1, 490, 491, 492, 493, 494, 495, 496, - 497, 498, -1, -1, 501, 61, 3292, -1, -1, -1, - 3296, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 77, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3317, -1, -1, 482, -1, -1, -1, 2546, -1, - -1, -1, 490, 491, 492, 493, 494, 495, 496, 497, - 498, -1, -1, -1, 3001, -1, 112, -1, -1, 3345, - -1, -1, 3348, 3349, -1, 1836, -1, 3353, 3354, 3355, - -1, -1, -1, 1844, 3360, -1, -1, 133, -1, 3365, - -1, 1852, -1, -1, 140, -1, -1, 143, 0, -1, - -1, -1, 1617, -1, 3380, -1, -1, -1, 4704, -1, - 1625, -1, -1, -1, -1, -1, -1, -1, 3394, -1, - 22, -1, 3398, -1, 170, 3401, 3402, -1, 3404, -1, - 32, -1, 34, 35, -1, 1896, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4742, -1, -1, -1, - 52, -1, -1, -1, -1, 201, -1, -1, 204, -1, - 62, -1, 1923, -1, -1, -1, 5718, -1, 4764, 3445, - -1, -1, 74, -1, 76, 77, -1, -1, -1, -1, - -1, 83, -1, 85, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 97, -1, 99, -1, 3475, - 3476, -1, -1, -1, 250, -1, -1, -1, 254, -1, - -1, -1, -1, 2711, 116, 3152, -1, 119, 3155, -1, - 3157, 3158, -1, 269, -1, -1, -1, 273, -1, -1, - -1, -1, 134, -1, 136, -1, -1, 283, 140, -1, - -1, 4837, -1, -1, 146, -1, 292, -1, -1, -1, - -1, -1, 154, -1, 156, -1, -1, 303, 304, -1, - -1, 163, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 180, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 63, -1, -1, -1, 197, -1, 343, 5850, 5851, - 346, 347, 348, -1, -1, -1, -1, 3583, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3593, -1, -1, - -1, -1, -1, -1, 1839, 371, 98, -1, 1843, -1, - -1, 377, -1, -1, -1, 237, 238, -1, -1, -1, - -1, 243, -1, -1, -1, 391, -1, -1, -1, -1, - -1, 2849, -1, -1, 2852, 257, -1, -1, -1, -1, - 4956, -1, 4958, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 275, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 159, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 445, - -1, -1, -1, -1, -1, -1, -1, -1, 3345, -1, - -1, 3348, -1, -1, -1, -1, -1, 319, -1, -1, - -1, -1, 3698, 195, -1, -1, -1, -1, 3704, -1, - -1, 333, -1, -1, -1, -1, -1, 339, 340, 3715, - 342, -1, 2940, -1, -1, 347, -1, -1, -1, -1, - -1, 353, -1, -1, 356, 2953, -1, 3394, -1, 231, - -1, 363, -1, 2961, -1, 3402, -1, 369, 370, -1, - -1, -1, -1, -1, -1, 377, 3752, 3753, 3754, 381, - -1, -1, -1, 5079, -1, -1, -1, -1, -1, 391, - -1, -1, -1, 3769, -1, -1, 2011, 269, -1, -1, - -1, 273, 3000, -1, 406, -1, -1, 3783, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3021, 426, 3801, 3802, 3803, -1, -1, - -1, 3807, 304, 305, -1, 437, -1, -1, -1, -1, - -1, 443, -1, 3819, -1, -1, 448, -1, -1, -1, - -1, 5147, -1, -1, -1, -1, -1, -1, -1, 461, - -1, -1, -1, -1, -1, -1, 3064, -1, 3066, -1, - -1, 343, -1, -1, -1, 347, -1, -1, -1, -1, - 352, -1, 484, 485, 486, 487, 488, 489, -1, 361, - -1, -1, -1, -1, -1, -1, -1, 369, -1, 3875, - 502, -1, -1, 505, -1, 377, -1, -1, -1, -1, - -1, -1, -1, 3889, 3890, -1, -1, 389, -1, -1, - -1, -1, 3898, -1, -1, -1, 398, -1, -1, -1, - 402, -1, -1, 10, -1, 3911, 13, -1, 3914, -1, - 17, 18, 19, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3153, -1, 3933, -1, 36, - -1, -1, 3160, -1, -1, 3941, -1, 3943, -1, 46, - -1, 5267, -1, -1, -1, 3951, 53, 3953, -1, -1, - 3956, -1, -1, -1, 456, 3961, 3962, 3963, 3964, -1, - -1, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, - 3976, -1, 79, -1, 3980, 3981, 3982, -1, -1, -1, - -1, -1, -1, -1, 3990, -1, -1, -1, -1, 3995, - -1, -1, -1, 3999, -1, -1, -1, -1, -1, -1, - -1, 4007, -1, -1, 4010, -1, 4012, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4022, -1, -1, 4025, - 4026, -1, -1, -1, 4030, 4031, -1, -1, -1, 4035, - -1, 4037, -1, -1, -1, -1, -1, -1, 4044, 4045, - 4046, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4064, 4065, - 4066, -1, 4068, 4069, -1, -1, 4072, 5393, -1, -1, - 4076, -1, 5398, 5399, 4080, -1, -1, -1, -1, -1, - 4086, -1, -1, -1, -1, -1, 193, -1, -1, -1, - -1, 198, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4112, -1, -1, -1, - -1, -1, -1, 220, 221, -1, -1, -1, -1, -1, - -1, 4127, -1, 4129, -1, -1, -1, -1, 235, -1, - -1, -1, -1, -1, -1, 24, -1, -1, -1, -1, - 29, 4147, 4148, 4149, 2635, -1, 4152, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2653, -1, -1, -1, 2657, -1, -1, 276, - 2661, -1, -1, -1, -1, -1, -1, -1, 67, -1, - -1, 4187, 4188, 290, 5510, 5511, 293, -1, -1, -1, - -1, 80, -1, -1, -1, -1, -1, 2688, -1, -1, - 4206, -1, -1, -1, -1, -1, -1, 96, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 114, -1, -1, -1, 5555, - -1, 2722, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3475, 3476, 138, - -1, 2742, -1, 4259, -1, -1, -1, -1, -1, -1, - 149, -1, -1, 10, -1, -1, 13, -1, -1, 158, - 17, 18, 19, -1, -1, 382, 2521, -1, -1, -1, - -1, -1, 171, 2774, -1, -1, -1, 176, -1, 36, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, - -1, -1, -1, -1, -1, -1, 53, -1, -1, 4315, - 2801, -1, -1, 202, -1, -1, 2807, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2821, -1, 79, -1, -1, -1, -1, 2828, -1, -1, - 2831, -1, 4348, -1, -1, -1, 2837, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4362, -1, 4364, -1, - 249, -1, -1, -1, -1, 4371, 2857, -1, -1, -1, - -1, 4377, 2863, -1, -1, 482, -1, -1, -1, 2870, - -1, -1, 4388, 490, 491, 492, 493, 494, 495, 496, - 497, 498, -1, 2884, -1, -1, 503, 4403, -1, -1, - -1, 290, 4408, 4409, -1, -1, 2897, -1, -1, 4076, - 4416, -1, -1, 4080, -1, -1, -1, 2908, -1, 4425, - -1, -1, -1, -1, -1, 2670, -1, -1, -1, 4435, - -1, -1, -1, -1, -1, 324, 325, -1, -1, 328, - -1, 4447, 4448, -1, -1, -1, 193, -1, -1, -1, - -1, 198, 4458, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 4469, 4470, -1, 355, -1, -1, 358, - -1, -1, -1, 220, 221, 364, -1, -1, -1, -1, - 4147, 4487, 371, -1, 2729, 374, -1, 3715, 235, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, - -1, -1, 13, -1, 393, -1, 17, 18, 19, -1, - -1, 400, -1, -1, -1, -1, -1, 406, -1, 4525, - 409, -1, -1, -1, 413, 36, -1, -1, -1, 276, - -1, 4537, 421, -1, -1, 46, -1, -1, -1, 428, - -1, -1, 53, 290, -1, -1, 293, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4565, - -1, -1, 4568, -1, 2809, 454, -1, -1, 79, -1, - 4576, 4577, -1, -1, -1, -1, -1, -1, 4584, 4585, - -1, -1, -1, 4589, -1, -1, -1, 4593, 2833, -1, - 4596, 4597, -1, -1, -1, 4601, 4602, -1, -1, -1, - -1, 4607, 4608, 4609, 4610, 4611, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4624, -1, - -1, 4627, -1, -1, -1, 4631, -1, -1, -1, -1, - 4636, -1, 3123, 4639, 4640, 382, 4642, -1, 4644, -1, - -1, 4647, -1, 4649, -1, -1, -1, 3875, -1, -1, - 3141, -1, 4658, -1, -1, 2900, 4662, 3148, -1, -1, - 4666, -1, 4668, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4683, -1, -1, - 4686, -1, 193, -1, -1, -1, -1, 198, -1, -1, - -1, -1, 2937, -1, 2939, -1, 2941, 2942, -1, -1, - -1, 2946, 2947, 2948, -1, 2950, 2951, 2952, -1, 220, - 221, -1, -1, -1, 4720, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 235, -1, -1, -1, -1, -1, - 4736, -1, -1, -1, -1, 482, -1, -1, -1, 6065, - -1, 4408, 4409, 490, 491, 492, 493, 494, 495, 496, - 497, 498, -1, -1, -1, -1, 503, -1, -1, 3004, - -1, -1, -1, -1, -1, 276, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 26, -1, 290, - -1, 4787, 293, 32, 3029, -1, -1, -1, 4794, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4817, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4832, 10, 77, -1, - 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 36, -1, -1, -1, 4863, -1, 10, - -1, -1, 13, 46, -1, -1, 17, 18, 19, -1, - 53, 382, -1, 4879, -1, -1, -1, -1, -1, -1, - 4886, -1, -1, -1, 133, 36, -1, -1, -1, 4895, - -1, 140, -1, -1, 143, 46, 79, -1, -1, -1, - -1, -1, 53, -1, 4910, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4923, -1, 4925, - -1, 170, -1, -1, -1, -1, -1, -1, 79, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 26, 4951, -1, -1, -1, -1, - 32, -1, -1, -1, -1, 204, 4962, 4624, -1, -1, - -1, -1, -1, -1, 4631, -1, -1, -1, -1, 4636, - -1, 482, 4639, 4640, -1, 3466, -1, -1, -1, 490, - 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, - -1, -1, 503, -1, -1, 77, -1, -1, -1, -1, - -1, 5007, -1, -1, 5010, -1, -1, 5013, 5014, 5015, - 193, -1, -1, -1, -1, 198, -1, -1, -1, -1, - 269, -1, -1, -1, 273, -1, -1, -1, -1, -1, - -1, -1, 5038, 5039, 283, -1, 5042, 220, 221, -1, - -1, -1, 193, 292, -1, -1, -1, 198, -1, -1, - -1, 133, 235, -1, -1, 304, -1, 5063, 140, -1, - -1, 143, -1, 5069, -1, 3310, -1, 5073, -1, 220, - 221, 5077, -1, -1, 5080, 3566, 5082, -1, -1, -1, - -1, -1, -1, -1, 235, -1, -1, 5093, 170, -1, - 5096, -1, -1, 276, 343, -1, -1, 346, 347, -1, - -1, 5107, 5108, 5109, -1, 5111, -1, 290, -1, -1, - 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4348, -1, 204, -1, -1, 276, -1, -1, 377, -1, - -1, -1, -1, -1, 4362, -1, -1, -1, -1, 290, - -1, -1, 293, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5158, 5159, -1, -1, 206, 207, -1, -1, - -1, -1, -1, -1, 214, -1, 216, 217, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 230, -1, -1, -1, -1, -1, -1, 269, -1, -1, - -1, 273, -1, -1, -1, -1, 445, 5203, -1, 382, - -1, 283, 3693, -1, -1, -1, -1, -1, -1, 5215, - 292, -1, 4879, -1, 5220, -1, -1, -1, -1, 5225, - -1, -1, 304, -1, 3469, -1, -1, -1, 5234, -1, - -1, 382, -1, -1, -1, -1, -1, -1, 5244, -1, - -1, -1, 5248, 4910, -1, 5251, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5262, 5263, 5264, -1, - -1, 343, -1, -1, 346, 347, -1, -1, -1, -1, - -1, -1, -1, 26, -1, 26, -1, -1, -1, 32, - -1, 32, -1, -1, -1, -1, -1, -1, -1, -1, - 5296, -1, -1, -1, 5300, 377, 5302, -1, -1, 482, - -1, -1, 3547, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 5322, -1, -1, 5325, - 503, -1, -1, 5329, 77, -1, 77, -1, -1, -1, - 5336, 482, -1, -1, -1, -1, -1, 5343, -1, 490, - 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, - -1, -1, 503, -1, -1, -1, -1, -1, -1, -1, - 3605, -1, -1, 445, -1, -1, -1, -1, -1, -1, - -1, -1, 5378, -1, -1, -1, -1, -1, -1, -1, - 133, 3872, 133, -1, -1, -1, -1, 140, -1, 140, - 143, -1, 143, -1, -1, -1, -1, 5403, -1, -1, - 3891, -1, -1, 5409, 5410, -1, 5073, -1, 5414, 5415, - 5416, 5417, -1, -1, -1, -1, -1, 170, -1, 170, - -1, -1, -1, -1, -1, 3916, 5093, -1, 3673, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 5445, - 5107, -1, -1, -1, -1, -1, -1, 5453, -1, -1, - -1, 204, -1, 204, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5478, -1, 3719, 5481, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3731, 3732, -1, -1, - -1, 5158, -1, -1, -1, -1, 3741, -1, -1, -1, - 5506, 3746, -1, 3748, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 269, -1, 269, -1, - 273, -1, 273, -1, -1, -1, -1, -1, 5534, -1, - 283, -1, 283, -1, 5540, -1, 5203, -1, 5544, 292, - -1, 292, 5548, -1, -1, 5551, -1, -1, -1, 3794, - -1, 304, -1, 304, 5560, -1, 5562, -1, 5564, 5565, - -1, -1, -1, -1, -1, 5571, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5581, -1, 5583, -1, -1, - -1, -1, 632, -1, 3829, 3830, 5592, -1, -1, 4817, - 343, -1, 343, 346, 347, 346, 347, 5264, -1, -1, - -1, 651, -1, -1, 4832, -1, -1, 657, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 669, - -1, 5627, 5628, -1, 377, -1, 377, -1, -1, -1, - -1, -1, -1, -1, -1, 685, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 699, - 700, -1, 5658, -1, -1, 5322, 706, -1, 708, 709, - 10, -1, -1, 13, -1, -1, 5672, 17, 18, 19, - -1, -1, 722, -1, -1, -1, -1, 4168, -1, -1, - -1, -1, 732, -1, -1, -1, 36, -1, -1, -1, - -1, -1, 445, -1, 445, 4923, 46, -1, -1, -1, - -1, -1, -1, 53, 5710, 5711, 5712, -1, -1, -1, - -1, -1, 5718, -1, -1, -1, 5722, -1, -1, -1, - -1, -1, 5728, -1, -1, -1, -1, -1, -1, 79, - -1, 5737, 5738, -1, -1, -1, -1, -1, -1, -1, - 790, -1, -1, -1, -1, -1, 10, -1, 5754, 13, - -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, - -1, 4006, -1, 5769, -1, -1, -1, -1, -1, 819, - 5776, -1, 36, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 46, -1, -1, -1, 5453, -1, -1, 53, - -1, -1, -1, -1, 844, 5801, -1, -1, -1, -1, - -1, -1, 5808, -1, -1, -1, 4297, -1, -1, 4300, - -1, -1, 5818, -1, 5481, 79, -1, -1, -1, -1, - 5826, 5827, 5828, -1, -1, -1, 5832, -1, 5834, -1, - -1, -1, -1, -1, -1, -1, -1, 5843, 5844, 5845, - -1, -1, -1, 193, 5850, 5851, -1, -1, 198, -1, - 5856, -1, -1, -1, 904, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 220, 221, 5878, -1, -1, -1, -1, -1, -1, -1, - -1, 5109, -1, 5111, -1, 235, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5907, 5908, 5909, 5571, -1, -1, 5913, -1, -1, - 4401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5931, 276, 4418, -1, 193, - -1, -1, -1, -1, 198, -1, -1, -1, -1, -1, - 290, -1, -1, 293, -1, 5951, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 220, 221, -1, 5965, - -1, -1, -1, -1, 1014, -1, -1, -1, -1, -1, - 1020, 235, -1, -1, -1, -1, -1, -1, -1, -1, - 4225, 1031, -1, -1, -1, 1035, -1, 1037, -1, -1, - 5996, -1, -1, -1, -1, 6001, 6002, 6003, 6004, 6005, - -1, -1, 6008, -1, -1, 5672, 4251, -1, 4499, -1, - -1, -1, 276, -1, 6020, -1, -1, 6023, -1, -1, - -1, 4266, -1, -1, -1, 4270, 290, 4272, -1, 293, - -1, -1, 382, -1, 5262, -1, -1, -1, -1, -1, - 6046, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 6065, - 6066, -1, -1, -1, 6070, -1, -1, -1, 6074, -1, - -1, -1, -1, 4318, -1, -1, -1, -1, -1, -1, - 6086, 6087, -1, -1, 6090, -1, -1, 5754, -1, 4334, - -1, -1, -1, 1143, 4339, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 382, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 482, -1, -1, -1, -1, -1, -1, -1, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, 5818, -1, 503, 1204, -1, -1, -1, -1, 5826, - 5827, -1, -1, -1, -1, 1215, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1229, - -1, -1, -1, 1233, -1, -1, -1, 5415, -1, 5417, - -1, -1, -1, 4438, -1, -1, 4441, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 482, -1, - -1, -1, -1, -1, -1, -1, 490, 491, 492, 493, - 494, 495, 496, 497, 498, -1, -1, -1, -1, 503, - 5907, -1, -1, -1, -1, -1, 5913, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5931, -1, -1, -1, 4759, 4514, - 4515, 4516, 4517, -1, 4519, 4520, 4521, 4522, 4523, -1, - 4771, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, - -1, -1, -1, -1, 1354, 0, -1, -1, -1, -1, - -1, -1, 1362, 1363, -1, -1, 36, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 46, 22, -1, -1, - -1, -1, -1, 53, -1, -1, 6003, 32, -1, 34, - 35, -1, 10, -1, -1, 13, -1, -1, -1, 17, - 18, 19, -1, -1, -1, -1, 6023, 52, -1, 79, - -1, -1, -1, -1, -1, 1415, -1, 62, 36, -1, - -1, 4616, -1, 4618, -1, -1, -1, -1, 46, 74, - -1, 76, 77, -1, -1, 53, -1, -1, 83, -1, - 85, -1, -1, -1, -1, -1, -1, -1, -1, 6066, - -1, -1, 97, -1, 99, -1, -1, 6074, -1, -1, - -1, 79, -1, -1, -1, -1, -1, -1, -1, 6086, - 6087, 116, -1, -1, 119, -1, -1, -1, -1, -1, - 5658, -1, -1, -1, -1, -1, -1, -1, -1, 134, - -1, 136, -1, -1, -1, 140, -1, -1, -1, -1, - -1, 146, -1, -1, -1, -1, -1, -1, -1, 154, - -1, 156, -1, -1, -1, -1, -1, -1, 163, -1, - -1, -1, -1, 193, -1, -1, -1, -1, 198, -1, - -1, 10, -1, -1, 13, 180, -1, -1, 17, 18, - 19, -1, -1, -1, -1, -1, -1, -1, 4989, -1, - 220, 221, 197, -1, -1, -1, -1, 36, -1, -1, - -1, -1, -1, -1, -1, 235, -1, 46, -1, -1, - -1, -1, -1, -1, 53, 193, -1, -1, -1, 10, - 198, -1, 13, -1, -1, -1, 17, 18, 19, -1, - -1, 5769, 237, 238, -1, -1, -1, -1, 243, -1, - 79, -1, 220, 221, -1, 36, 276, -1, -1, -1, - -1, -1, 257, -1, -1, 46, -1, 235, -1, -1, - 290, -1, 53, 293, -1, -1, -1, -1, -1, -1, - 275, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4835, 4836, -1, -1, -1, -1, -1, -1, 79, -1, - -1, -1, -1, 4848, -1, 4850, 4851, 4852, 276, -1, - 5101, -1, 5103, -1, 1664, 51, -1, -1, -1, -1, - -1, -1, 290, -1, 319, 293, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - -1, -1, -1, -1, 339, 340, -1, 342, -1, -1, - 5878, -1, 347, -1, -1, -1, -1, -1, 353, -1, - -1, 356, 382, -1, 193, -1, -1, -1, 363, 198, - -1, 4916, -1, -1, 369, 370, -1, -1, -1, -1, - 5908, 5909, 377, -1, -1, -1, 381, -1, -1, -1, - -1, 220, 221, -1, -1, -1, 391, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 235, 51, -1, -1, - 4955, 406, 193, -1, 382, 10, -1, 198, 13, -1, - -1, -1, 17, 18, 19, -1, -1, -1, 1778, -1, - -1, 426, -1, -1, -1, -1, -1, -1, -1, 220, - 221, 36, 437, -1, -1, -1, -1, 276, 443, -1, - -1, 46, 4997, 448, 235, -1, -1, -1, 53, -1, - -1, 290, 482, 1813, 293, -1, 461, -1, -1, -1, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, -1, -1, 503, 79, -1, 1836, -1, -1, 484, - -1, -1, 6020, -1, 1844, 276, -1, -1, -1, -1, - -1, -1, 1852, -1, -1, -1, -1, 502, -1, 290, - 505, -1, 293, -1, 482, -1, -1, -1, -1, -1, - -1, -1, 490, 491, 492, 493, 494, 495, 496, 497, - 498, -1, -1, -1, -1, 503, -1, -1, -1, -1, - -1, -1, 1892, 1893, -1, 1895, 1896, -1, -1, -1, - -1, -1, -1, 382, -1, -1, -1, 1907, -1, 1909, - 1910, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 8, -1, 1922, 1923, -1, -1, 14, 15, -1, -1, - -1, -1, 20, -1, 22, -1, -1, -1, -1, -1, - 28, -1, 30, -1, -1, -1, -1, -1, 193, -1, - -1, 382, 5147, 198, -1, -1, -1, -1, -1, -1, - 1960, 49, 50, -1, 1964, 1965, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 220, 221, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 235, -1, -1, -1, -1, -1, -1, -1, 5193, -1, - -1, -1, -1, 482, -1, -1, -1, 5202, -1, -1, - -1, 490, 491, 492, 493, 494, 495, 496, 497, 498, - -1, -1, -1, -1, 503, -1, -1, -1, -1, -1, - -1, 276, 10, -1, -1, 13, -1, -1, -1, 17, - 18, 19, -1, -1, -1, 290, -1, -1, 293, -1, - -1, 482, -1, -1, -1, -1, -1, -1, 36, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 46, -1, - -1, 2071, 503, -1, -1, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 200, -1, -1, -1, 204, -1, -1, -1, - -1, -1, -1, -1, 212, -1, -1, 215, -1, -1, - 218, 219, -1, 221, -1, 223, -1, 382, 226, -1, - 228, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, - 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, - -1, -1, -1, -1, -1, 193, -1, -1, -1, -1, - 198, -1, -1, 36, -1, -1, -1, -1, -1, -1, - 5425, -1, -1, 46, 5429, -1, -1, 482, -1, -1, - 53, -1, 220, 221, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, 235, 503, -1, - -1, -1, -1, -1, -1, -1, 79, -1, 10, -1, - -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 36, -1, -1, -1, 276, -1, - 5741, -1, -1, -1, 46, -1, -1, -1, -1, 695, - -1, 53, 290, -1, -1, 293, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 721, -1, 79, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, - 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, - 193, -1, -1, -1, -1, 198, -1, -1, -1, -1, - -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, - -1, 695, -1, 46, 382, -1, -1, 220, 221, -1, - 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 235, -1, 5619, -1, -1, 721, 5623, -1, - 5625, -1, -1, -1, 5629, 5630, 79, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, - -1, -1, -1, 276, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 290, 220, 221, - 293, -1, -1, 869, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 235, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 482, -1, -1, -1, -1, -1, - -1, -1, 490, 491, 492, 493, 494, 495, 496, 497, - 498, -1, -1, -1, -1, 503, -1, -1, -1, -1, - -1, -1, -1, -1, 276, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 633, -1, -1, 290, -1, - 193, 293, -1, -1, -1, 198, 644, -1, -1, -1, - 648, -1, -1, -1, -1, -1, -1, 655, 656, 382, - -1, 659, -1, 661, 662, 869, -1, 220, 221, -1, - 2580, -1, -1, -1, -1, -1, -1, -1, 676, -1, - -1, -1, 235, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 694, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 715, -1, 717, - -1, -1, -1, 276, -1, 2635, -1, -1, -1, 727, - 382, -1, -1, -1, 1030, -1, -1, 290, -1, -1, - 293, -1, -1, 2653, 51, 1041, -1, 2657, -1, -1, - -1, 2661, -1, -1, -1, -1, -1, -1, -1, 482, - 2670, 1057, 760, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, 2688, 5884, - 503, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2705, -1, 2707, 2708, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2722, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1030, -1, -1, 382, - 482, -1, 2742, 2743, -1, -1, -1, 1041, 490, 491, - 492, 493, 494, 495, 496, 497, 498, -1, -1, 847, - -1, 503, -1, 1057, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 2773, 2774, -1, -1, 2777, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, - 13, 2801, -1, 2803, 17, 18, 19, 2807, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2821, -1, 36, -1, -1, -1, 1213, 2828, -1, - -1, 2831, -1, 46, -1, 6030, -1, 2837, -1, 482, - 53, 6036, 930, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, 2857, -1, -1, - 503, -1, -1, 2863, 10, -1, 79, 13, -1, -1, - 2870, 17, 18, 19, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6078, 2884, -1, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, 2897, -1, -1, - 46, 6096, 2902, -1, 6099, -1, -1, 53, 2908, -1, - -1, -1, -1, -1, -1, -1, 1004, -1, -1, 1213, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, - 1028, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1043, -1, 1045, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1055, 2968, -1, - -1, 1357, -1, -1, 1062, -1, -1, -1, -1, -1, - 193, -1, -1, -1, -1, 198, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 220, 221, -1, - -1, -1, -1, -1, -1, -1, 1104, -1, 1106, -1, - -1, -1, 235, -1, -1, -1, -1, -1, 10, -1, - -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, -1, 198, -1, 36, -1, -1, -1, -1, -1, - -1, -1, -1, 276, 46, -1, -1, -1, -1, -1, - -1, 53, 1458, -1, 220, 221, -1, 290, -1, -1, - 293, -1, -1, -1, -1, -1, -1, -1, -1, 235, - -1, -1, 1180, -1, 1182, -1, 1184, 79, 1186, -1, - 1188, 1189, 1190, -1, -1, -1, -1, 1195, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1207, - -1, -1, -1, 3123, -1, -1, -1, -1, -1, -1, - 276, -1, 1220, -1, -1, -1, -1, -1, -1, 1525, - -1, 3141, -1, -1, 290, -1, -1, 293, 3148, -1, - -1, -1, -1, -1, -1, 3155, -1, 3157, 3158, -1, - -1, -1, -1, -1, 1458, -1, -1, -1, -1, 382, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1566, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, - -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, - -1, 193, -1, 1599, -1, -1, 198, -1, -1, -1, - -1, -1, -1, 3223, 36, -1, -1, -1, -1, 3229, - -1, 1525, -1, -1, 46, -1, 382, -1, 220, 221, - -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, - 207, -1, -1, 235, -1, -1, -1, -1, -1, 216, - -1, -1, -1, -1, -1, -1, -1, 79, -1, 482, - -1, -1, 1566, 230, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, - 503, 1379, -1, -1, 276, -1, -1, -1, 695, -1, - -1, -1, -1, -1, -1, 1599, -1, -1, 290, -1, - 3310, 293, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 721, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 482, -1, -1, -1, - -1, -1, -1, -1, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, -1, -1, -1, 503, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 382, -1, -1, -1, 1790, -1, -1, -1, 220, 221, - -1, 1499, -1, -1, -1, 1801, -1, -1, -1, -1, - -1, -1, -1, 235, -1, -1, -1, -1, -1, -1, - -1, 1817, -1, -1, -1, -1, -1, -1, -1, 3439, - 3440, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, - 19, -1, -1, -1, 276, -1, 3466, -1, -1, 3469, - -1, -1, 869, -1, -1, -1, -1, 36, 290, -1, - -1, 293, -1, 1571, 1870, -1, -1, 46, -1, -1, - -1, -1, -1, -1, 53, -1, 1790, -1, -1, 1885, - 482, -1, 1888, 1889, -1, -1, -1, 1801, 490, 491, - 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, - 79, 503, -1, 1817, -1, -1, -1, -1, 10, -1, - -1, 13, -1, 1919, 1920, 17, 18, 19, -1, -1, - -1, 3541, 3542, 3543, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 36, -1, -1, -1, 40, -1, - -1, -1, -1, -1, 46, -1, 3566, -1, -1, -1, - 382, 53, -1, -1, -1, -1, 1870, -1, -1, -1, - -1, -1, -1, -1, -1, 3585, -1, -1, -1, -1, - -1, 1885, -1, -1, 1888, 1889, -1, 79, -1, -1, - -1, -1, 10, -1, -1, 13, -1, 3607, -1, 17, - 18, 19, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1919, 1920, -1, 36, -1, - -1, -1, -1, 1030, 193, -1, -1, -1, 46, 198, - -1, -1, -1, -1, 1041, 53, -1, -1, 130, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1057, 220, 221, -1, -1, 2051, -1, -1, -1, -1, - 482, 79, -1, -1, -1, 632, 235, -1, 490, 491, - 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, - -1, 503, -1, 3693, 651, -1, -1, -1, 1786, -1, - 657, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 193, 669, -1, -1, -1, 198, 276, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 685, -1, - -1, 290, -1, 1821, 293, -1, -1, -1, 220, 221, - 3740, -1, -1, 700, -1, -1, 3746, -1, 3748, -1, - -1, 708, -1, 235, -1, -1, -1, 2051, -1, -1, - -1, 3761, -1, 3763, -1, 722, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 732, 1864, -1, 1866, -1, - -1, -1, -1, -1, -1, 193, -1, -1, -1, -1, - 198, -1, -1, -1, 276, -1, -1, -1, 1886, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 290, -1, - -1, 293, 220, 221, -1, -1, 1213, -1, -1, -1, - -1, -1, -1, 382, 1912, -1, 1914, 235, -1, -1, - 3830, -1, -1, 790, -1, -1, -1, 51, -1, -1, - -1, 1929, -1, 1931, -1, -1, -1, -1, -1, 1937, - -1, 1939, -1, 1941, -1, 1943, -1, 1945, -1, -1, - -1, 1949, 819, -1, -1, -1, -1, -1, 276, -1, - -1, -1, 3872, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 290, -1, -1, 293, -1, 844, -1, -1, - -1, 3891, -1, -1, -1, -1, -1, -1, -1, -1, - 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 318, -1, -1, 3913, -1, -1, 3916, -1, -1, -1, - -1, -1, -1, 482, -1, -1, -1, -1, -1, -1, - -1, 490, 491, 492, 493, 494, 495, 496, 497, 498, - -1, -1, -1, -1, 503, -1, -1, 904, -1, -1, - 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, - 442, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 382, -1, 36, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, - -1, 399, -1, 53, -1, -1, -1, 3997, -1, -1, - 482, -1, -1, -1, -1, -1, -1, -1, 490, 491, - 492, 493, 494, 495, 496, 497, 498, -1, -1, 79, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 36, 1014, -1, -1, - -1, 1458, -1, 1020, -1, -1, 46, -1, -1, -1, - -1, -1, -1, 53, 482, -1, -1, -1, -1, -1, - -1, -1, 490, 491, 492, 493, 494, 495, 496, 497, - 498, -1, -1, -1, -1, -1, -1, -1, -1, 79, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 169, - -1, -1, -1, -1, 174, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1525, -1, - -1, -1, -1, 193, -1, -1, -1, 51, 198, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 220, 221, -1, -1, -1, -1, -1, -1, 4168, 1566, - -1, -1, -1, -1, -1, 235, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1143, -1, 168, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1599, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 193, -1, -1, 276, -1, 198, 4219, - -1, -1, -1, -1, 4224, -1, 4226, -1, -1, -1, - 290, -1, -1, 293, -1, -1, -1, -1, -1, -1, - 220, 221, -1, -1, -1, -1, -1, 1204, -1, -1, - 4250, -1, -1, -1, -1, 235, 2642, -1, 1215, -1, - 2646, 2647, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1229, -1, -1, -1, 1233, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 276, 4297, -1, -1, - 4300, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 290, -1, -1, 293, -1, -1, -1, -1, 2704, -1, - -1, -1, 382, -1, 2710, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 2642, -1, - -1, -1, 2646, 2647, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2751, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4390, 4391, -1, 1790, -1, -1, -1, 1354, -1, -1, - -1, 4401, 382, -1, 1801, 1362, 1363, -1, -1, -1, - 2704, -1, -1, -1, -1, -1, 2710, -1, 4418, -1, - 1817, -1, 482, -1, -1, -1, -1, -1, -1, -1, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2751, 1415, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1870, -1, -1, -1, -1, -1, -1, - -1, 695, -1, -1, -1, -1, -1, -1, 1885, -1, - -1, 1888, 1889, -1, -1, -1, -1, -1, -1, 4499, - -1, 24, 482, -1, -1, -1, 29, 721, -1, -1, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, -1, 1919, 1920, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 67, -1, -1, -1, 2636, 2637, - -1, -1, -1, -1, -1, -1, -1, 80, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2655, 2656, -1, - 2658, 2659, -1, 96, 2960, 2663, 2664, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2678, 114, -1, -1, -1, -1, -1, 2685, -1, -1, - -1, 2689, 2690, -1, -1, 2693, 2694, -1, -1, -1, - -1, -1, 2700, -1, -1, 138, -1, -1, -1, -1, - -1, -1, -1, -1, 2712, -1, 149, -1, -1, -1, - -1, -1, -1, -1, -1, 158, 2724, -1, -1, -1, - -1, 2729, -1, -1, -1, -1, -1, 3033, 171, -1, - -1, 3037, -1, 176, 2051, 869, 2744, -1, -1, -1, - 183, -1, -1, -1, -1, 2753, 2960, -1, 2756, -1, - 2758, 2759, 2760, -1, -1, -1, -1, 2765, 2766, 202, - -1, -1, -1, -1, -1, -1, -1, 2775, -1, -1, - -1, -1, -1, 2781, -1, -1, -1, 2785, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1664, -1, 2797, - 2798, -1, -1, -1, 2802, -1, -1, 4717, -1, -1, - 2808, 2809, -1, -1, -1, -1, 249, -1, -1, -1, - -1, -1, -1, -1, 2822, -1, -1, 2825, -1, 3033, - -1, -1, -1, 3037, 2832, 2833, -1, -1, -1, -1, - 2838, -1, -1, 3139, -1, -1, -1, -1, -1, 4759, - -1, -1, 2850, -1, -1, 2853, -1, 290, 3154, -1, - 2858, 4771, -1, 3159, -1, -1, 2864, 2865, -1, -1, - 303, 695, -1, -1, 2872, -1, -1, -1, 2876, -1, - -1, 314, 2880, 2881, 2882, 2883, -1, 2885, -1, -1, - -1, 324, 325, -1, -1, 328, 4806, 721, -1, -1, - 2898, 2899, -1, 2901, -1, -1, 1030, -1, -1, -1, - -1, 1778, -1, -1, 2912, 2913, 2914, 1041, -1, -1, - -1, -1, 355, -1, -1, 358, -1, -1, -1, 362, - -1, 364, -1, 1057, -1, 3139, -1, -1, 371, -1, - -1, 374, -1, -1, -1, -1, 1813, -1, -1, -1, - 3154, -1, -1, -1, -1, 3159, -1, -1, -1, -1, - 393, -1, 51, -1, -1, -1, -1, 400, -1, 1836, - -1, 2969, -1, 406, 4884, -1, 409, 1844, -1, 2977, - 413, -1, -1, -1, -1, 1852, -1, -1, 421, -1, - 423, -1, -1, 4903, -1, 428, -1, -1, 2996, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 441, -1, - -1, -1, -1, -1, -1, -1, 51, -1, -1, -1, - -1, 454, -1, -1, -1, -1, -1, -1, 1895, 1896, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1909, -1, -1, 869, -1, -1, 3046, -1, - -1, -1, -1, -1, -1, 1922, 1923, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3065, -1, 3067, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4989, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1213, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, - -1, 17, 18, 19, -1, -1, -1, -1, 3414, -1, - -1, 3417, -1, 3419, -1, -1, -1, -1, 3424, -1, - 36, -1, -1, 39, -1, -1, 10, -1, -1, 13, - 46, -1, -1, 17, 18, 19, -1, 53, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 36, 3161, -1, -1, -1, -1, -1, -1, - -1, -1, 46, 79, -1, -1, 3472, -1, -1, 53, - -1, -1, -1, -1, 3480, -1, -1, -1, -1, -1, - -1, 5101, -1, 5103, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2071, 79, 1030, -1, -1, 3505, - 3414, -1, -1, 3417, -1, 3419, -1, 1041, -1, -1, - 3424, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1057, -1, -1, -1, -1, 5148, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5158, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3472, -1, - -1, -1, -1, -1, -1, -1, 3480, -1, -1, 3575, - -1, 3577, -1, -1, -1, -1, -1, 193, 5198, -1, - -1, -1, 198, 5203, -1, -1, -1, -1, -1, -1, - -1, 3505, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 220, 221, -1, -1, -1, 193, - -1, -1, -1, -1, 198, -1, -1, -1, -1, 235, - -1, -1, -1, -1, 1458, 2642, -1, -1, -1, 2646, - 2647, -1, -1, -1, -1, -1, 220, 221, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 235, -1, -1, -1, -1, -1, -1, -1, -1, - 276, 3575, -1, 3577, -1, 3671, -1, -1, -1, -1, - -1, -1, -1, -1, 290, -1, -1, 293, -1, 1213, - -1, -1, -1, -1, -1, -1, -1, 2704, -1, -1, - -1, 1525, 276, 2710, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 290, 3713, -1, 293, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 312, -1, - -1, -1, 1566, -1, 2751, 3741, -1, -1, -1, 3447, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3671, -1, 3467, - -1, -1, -1, -1, -1, 1599, 382, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3484, -1, -1, -1, - 3488, -1, -1, -1, -1, 3493, 3494, 3495, -1, -1, - -1, 5411, -1, -1, -1, -1, -1, -1, 382, 3713, - -1, -1, -1, 3809, -1, 5425, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3529, 3530, 3531, 3532, 3831, -1, 3741, -1, -1, - -1, -1, -1, -1, -1, -1, 5456, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3853, -1, -1, - -1, 3559, -1, -1, -1, -1, -1, -1, -1, 3567, - -1, 3569, 3570, 3571, -1, -1, 482, -1, -1, -1, - -1, -1, -1, -1, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3809, 695, -1, 482, -1, - -1, -1, -1, -1, -1, -1, 490, 491, 492, 493, - 494, 495, 496, 497, 498, -1, -1, 3831, -1, -1, - -1, -1, 721, -1, 1458, -1, -1, -1, -1, -1, - 3936, -1, 5552, -1, -1, -1, -1, -1, -1, 3853, - -1, -1, -1, 2960, -1, -1, -1, -1, -1, -1, - 695, -1, -1, -1, 3960, -1, 1790, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1801, -1, -1, - -1, -1, -1, -1, -1, -1, 721, 3685, -1, 3985, - -1, -1, -1, 1817, -1, -1, 3694, -1, -1, -1, - -1, 1525, -1, -1, -1, -1, -1, 5617, -1, 5619, - -1, -1, -1, 2580, -1, -1, -1, -1, -1, -1, - -1, -1, 3720, 3721, -1, -1, 3033, 3725, -1, -1, - 3037, -1, 3936, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1566, -1, -1, -1, 1870, -1, -1, 3747, - -1, -1, -1, -1, -1, -1, 3960, -1, -1, -1, - -1, 1885, -1, -1, 1888, 1889, -1, -1, 2635, -1, - -1, -1, -1, -1, -1, 1599, -1, -1, -1, -1, - 869, 3985, -1, -1, -1, -1, 2653, -1, -1, -1, - 2657, -1, -1, -1, 2661, 1919, 1920, -1, -1, -1, - -1, 3799, -1, 2670, -1, -1, 3804, -1, -1, -1, - -1, -1, 3810, -1, -1, -1, -1, -1, -1, -1, - -1, 2688, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5741, 3139, -1, 869, -1, -1, -1, -1, 4135, - -1, -1, 3840, -1, 5754, -1, -1, 3154, -1, -1, - -1, -1, 3159, -1, -1, 2722, -1, 5767, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3869, -1, 3871, -1, 2742, 2743, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2773, 2774, -1, -1, - 2777, -1, -1, -1, 3912, -1, 5826, 5827, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2051, -1, 4225, - -1, 4135, -1, -1, 2801, -1, 2803, -1, -1, -1, - 2807, 1030, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1041, -1, 2821, 4251, -1, -1, -1, -1, - -1, 2828, -1, -1, 2831, -1, 1790, -1, 1057, -1, - 2837, -1, -1, -1, 5884, -1, -1, 1801, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2857, -1, -1, 1817, -1, 1030, 2863, -1, -1, -1, - -1, -1, -1, 2870, -1, -1, 1041, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2884, -1, -1, - -1, 4225, 1057, -1, -1, -1, -1, -1, -1, -1, - 2897, -1, -1, -1, -1, 2902, -1, -1, -1, -1, - -1, 2908, -1, -1, 208, -1, 1870, 4251, -1, -1, - -1, -1, -1, -1, -1, -1, 220, -1, -1, -1, - -1, 1885, -1, -1, 1888, 1889, -1, 231, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1919, 1920, -1, 4394, -1, - -1, 2968, -1, -1, -1, -1, -1, 3414, -1, -1, - 3417, -1, 3419, -1, -1, -1, -1, 3424, -1, -1, - 6030, -1, -1, -1, 1213, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4441, -1, -1, -1, -1, - 4446, -1, -1, 4151, -1, -1, 4154, -1, 4156, -1, - -1, -1, -1, -1, -1, 3472, -1, -1, 6078, -1, - -1, 4169, -1, 3480, -1, -1, 6086, 6087, 1213, -1, - -1, -1, -1, 4181, -1, -1, 6096, 4185, -1, -1, - 4394, -1, -1, -1, -1, -1, -1, -1, 3505, -1, - -1, -1, -1, -1, -1, -1, 4204, -1, 24, -1, - -1, -1, -1, 29, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4222, -1, -1, 2051, -1, -1, - 4228, -1, -1, -1, -1, -1, -1, 4441, -1, -1, - -1, -1, 4446, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4253, 3123, -1, -1, 4257, - -1, -1, -1, -1, 80, 81, -1, -1, 3575, -1, - 3577, -1, -1, -1, 3141, 4273, 4274, 4275, 4276, -1, - 96, 3148, -1, 4579, -1, 4283, 4284, 4285, 4286, -1, - -1, -1, -1, -1, 4292, 4293, -1, -1, 114, -1, - 4298, 4299, -1, 4301, 4302, 4303, 4304, 4305, 4306, 4307, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4317, - -1, -1, 138, 4321, 4322, 4323, 4324, -1, -1, -1, - -1, -1, -1, 149, -1, -1, -1, -1, -1, -1, - -1, -1, 158, -1, -1, -1, -1, 4345, -1, -1, - -1, -1, -1, -1, -1, 171, 3223, -1, -1, -1, - 176, -1, 3229, -1, 3671, 4363, -1, -1, -1, 1458, - -1, -1, -1, -1, -1, 4579, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 202, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3713, -1, 4704, -1, - -1, 227, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1458, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 249, 3741, -1, 1525, -1, -1, -1, - -1, 4439, -1, 3310, -1, -1, 4742, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4764, 633, - -1, -1, -1, -1, 4472, 639, -1, 1566, -1, -1, - -1, 4479, -1, 4481, -1, -1, -1, -1, -1, -1, - 1525, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4704, -1, 3809, -1, -1, 4503, -1, -1, 324, 325, - 1599, -1, 328, -1, -1, -1, -1, -1, 2642, -1, - -1, -1, 2646, 2647, 3831, -1, -1, -1, -1, -1, - -1, 1566, -1, -1, -1, -1, -1, -1, 4742, 355, - -1, 4837, 358, -1, -1, -1, 3853, -1, 364, -1, - -1, -1, -1, -1, -1, 371, -1, -1, 374, -1, - 4764, -1, -1, -1, 1599, -1, -1, -1, -1, -1, - -1, -1, 3439, 3440, -1, -1, -1, 393, -1, -1, - 2704, -1, -1, -1, 400, -1, 2710, -1, -1, -1, - 406, -1, -1, 409, -1, -1, -1, 413, -1, 3466, - -1, -1, 3469, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 428, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2751, -1, 3936, - -1, -1, -1, 4837, -1, -1, -1, 10, 454, -1, - 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, - -1, -1, 816, 3960, -1, -1, -1, -1, -1, -1, - -1, -1, 4958, 36, -1, -1, 39, -1, -1, -1, - -1, 835, -1, 46, 3541, 3542, 3543, -1, 3985, -1, - 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3566, - -1, 1790, -1, -1, -1, -1, 79, 4705, 4706, 4707, - -1, -1, 1801, 4711, 4712, 4713, 4714, -1, 3585, -1, - 4718, -1, -1, -1, -1, -1, -1, -1, 1817, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3607, 905, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4958, 1790, 4754, 4755, 4756, 4757, - 4758, -1, 4760, 4761, -1, -1, 1801, -1, -1, -1, - -1, -1, -1, -1, 4772, 4773, -1, -1, -1, -1, - -1, 1870, 1817, 5079, -1, -1, -1, -1, 952, -1, - -1, -1, -1, -1, -1, -1, 1885, -1, -1, 1888, - 1889, -1, -1, -1, -1, -1, -1, -1, -1, 4807, - -1, -1, -1, -1, -1, -1, -1, -1, 2642, -1, - 193, -1, 2646, 2647, -1, 198, 3693, -1, 4135, -1, - 1919, 1920, -1, -1, -1, 1870, 2960, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 220, 221, -1, - 1885, 5147, -1, 1888, 1889, -1, -1, -1, -1, -1, - -1, -1, 235, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3740, -1, 5079, -1, -1, -1, 3746, - 2704, 3748, -1, -1, 1919, 1920, 2710, -1, -1, -1, - -1, -1, -1, -1, 3761, -1, 3763, -1, -1, -1, - -1, -1, 1066, 276, -1, -1, -1, -1, -1, 3033, - -1, 4909, -1, 3037, -1, -1, -1, 290, 4225, -1, - 293, -1, -1, -1, -1, -1, -1, 2751, -1, -1, - 1094, 1095, 1096, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 5147, 4251, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2051, 3830, -1, -1, -1, -1, -1, -1, - -1, 5267, -1, -1, -1, -1, 4974, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, - 19, -1, -1, -1, -1, 3872, -1, -1, -1, 382, - -1, -1, -1, -1, -1, 3139, 2051, 36, -1, -1, - -1, -1, -1, -1, 3891, -1, -1, 46, -1, -1, - 3154, -1, -1, -1, 53, 3159, -1, -1, -1, 1203, - -1, -1, -1, -1, -1, -1, 3913, -1, -1, 3916, - -1, -1, -1, -1, -1, 1219, -1, -1, -1, -1, - 79, -1, -1, 5267, 1228, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4394, 5086, -1, - -1, -1, -1, -1, -1, -1, -1, 5393, -1, -1, - -1, -1, 5398, 5399, -1, -1, -1, -1, -1, 482, - -1, -1, -1, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, - 3997, -1, -1, -1, 4441, -1, 2960, -1, -1, 4446, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5149, -1, -1, -1, 174, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5168, -1, -1, -1, 193, -1, 5174, 5175, -1, 198, - -1, -1, -1, -1, -1, -1, 5184, -1, -1, 5393, - -1, -1, -1, 5191, 5398, 5399, -1, -1, -1, -1, - -1, 220, 221, -1, 1368, -1, -1, -1, -1, 3033, - -1, -1, -1, 3037, -1, 5511, 235, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5226, 5227, - -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, - 13, 5239, -1, 5241, 17, 18, 19, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 276, 5256, 5555, - -1, -1, -1, 36, -1, -1, 39, -1, -1, -1, - -1, 290, 4579, 46, 293, -1, -1, -1, -1, -1, - 53, -1, -1, 5281, 1448, -1, -1, -1, -1, -1, - 3414, 5289, -1, 3417, -1, 3419, -1, -1, -1, -1, - 3424, 4168, -1, -1, -1, -1, 79, 5511, -1, -1, - -1, -1, -1, -1, -1, 3139, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3154, -1, -1, -1, -1, 3159, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3472, -1, - -1, 5555, 4219, -1, -1, -1, 3480, 4224, -1, 4226, - 5358, -1, -1, 382, -1, -1, -1, 1531, -1, -1, - -1, -1, -1, -1, -1, -1, 1540, -1, -1, -1, - -1, 3505, -1, 4250, 5382, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5392, -1, -1, 4704, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1572, -1, - -1, -1, -1, -1, 1578, 1579, -1, -1, 1582, -1, - 193, -1, -1, -1, -1, 198, -1, -1, -1, -1, - 4297, 1595, -1, 4300, 1598, 4742, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 220, 221, -1, - -1, 3575, -1, 3577, -1, -1, -1, 4764, -1, -1, - -1, 5459, 235, 482, -1, -1, -1, -1, -1, -1, - -1, 490, 491, 492, 493, 494, 495, 496, 497, 498, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1654, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 276, 1668, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 290, -1, -1, - 293, -1, -1, 4390, 4391, -1, -1, -1, -1, -1, - 4837, 5529, -1, -1, 4401, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3671, -1, -1, - -1, 4418, -1, 2642, -1, -1, -1, 2646, 2647, -1, - -1, -1, -1, -1, -1, -1, -1, 813, 814, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3713, - 3414, -1, 5590, 3417, -1, 3419, -1, -1, -1, -1, - 3424, -1, -1, -1, -1, -1, 5604, 2642, -1, 382, - -1, 2646, 2647, 1777, -1, 2704, -1, 3741, -1, -1, - -1, 2710, -1, -1, 1788, -1, -1, -1, -1, -1, - -1, -1, 4499, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 891, -1, -1, 3472, -1, - -1, 4958, -1, -1, -1, -1, 3480, -1, -1, -1, - -1, -1, 2751, -1, -1, 5663, 1830, 1831, -1, 2704, - 10, -1, -1, 13, -1, 2710, -1, 17, 18, 19, - -1, 3505, -1, -1, -1, 3809, -1, -1, -1, -1, - -1, 1855, -1, -1, -1, -1, 36, -1, 1862, -1, - -1, -1, -1, -1, -1, -1, 46, 3831, -1, 482, - -1, -1, -1, 53, -1, -1, 2751, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, -1, 3853, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3575, -1, 3577, -1, 5753, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1012, 1013, -1, -1, - 1934, -1, 5079, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5785, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5796, -1, - -1, -1, -1, 1967, 1968, -1, -1, -1, -1, -1, - -1, -1, 3936, -1, -1, -1, -1, -1, -1, -1, - 1984, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3960, -1, -1, -1, - 5147, -1, -1, -1, -1, -1, -1, 3671, -1, -1, - 4717, -1, -1, 193, -1, -1, -1, -1, 198, -1, - -1, 3985, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2960, -1, -1, -1, -1, -1, -1, -1, -1, - 220, 221, -1, -1, -1, -1, -1, -1, -1, 3713, - -1, -1, 4759, -1, -1, 235, -1, -1, -1, 5897, - -1, -1, -1, -1, 4771, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3741, -1, -1, - -1, -1, -1, -1, -1, 2960, -1, -1, -1, -1, - -1, -1, 1320, -1, -1, -1, 276, -1, -1, 4806, - -1, -1, -1, -1, 3033, -1, -1, -1, 3037, -1, - 290, -1, -1, 293, -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, -1, -1, 3809, -1, -1, 1376, -1, - -1, -1, -1, -1, -1, -1, -1, 10, 3033, 1245, - 13, -1, 3037, -1, 17, 18, 19, 3831, -1, -1, - -1, 4135, -1, -1, -1, -1, -1, 4884, -1, -1, - -1, -1, -1, 36, -1, -1, 39, -1, -1, 3853, - 1276, -1, -1, 46, -1, -1, 4903, -1, -1, -1, - 53, -1, 382, -1, -1, -1, -1, -1, -1, -1, - 3139, -1, -1, -1, -1, -1, -1, -1, 1304, 1305, - 1306, -1, 1308, -1, -1, 3154, 79, -1, -1, -1, - 3159, -1, -1, -1, 414, -1, -1, -1, -1, -1, - -1, -1, 1328, -1, -1, -1, 5393, -1, -1, -1, - -1, 5398, 5399, -1, -1, -1, -1, -1, -1, -1, - -1, 4225, -1, -1, 3139, -1, -1, -1, -1, -1, - -1, -1, 3936, -1, -1, -1, -1, -1, -1, 3154, - -1, -1, 4989, -1, 3159, -1, -1, 4251, -1, -1, - -1, -1, -1, -1, -1, -1, 3960, -1, -1, -1, - -1, -1, 482, -1, -1, -1, -1, -1, -1, -1, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, 3985, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 193, -1, -1, -1, -1, 198, 1432, -1, -1, -1, - 1436, 1437, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5511, -1, -1, 220, 221, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 235, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5101, -1, 5103, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5555, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 276, -1, -1, -1, -1, -1, -1, - 4394, -1, -1, -1, -1, -1, -1, 290, -1, -1, - 293, 5148, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1685, -1, -1, - -1, 1689, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4135, -1, -1, -1, -1, -1, 4441, -1, -1, - -1, -1, 4446, -1, -1, 3414, -1, -1, 3417, -1, - 3419, 5198, -1, -1, 2498, 3424, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2509, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, - -1, -1, -1, -1, -1, -1, -1, 2541, -1, 3414, - -1, -1, 3417, 3472, 3419, -1, -1, -1, -1, 3424, - -1, 3480, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4225, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3505, -1, -1, -1, - -1, -1, -1, -1, 2588, 2589, -1, 4251, -1, -1, - -1, -1, -1, 1679, 1680, 1681, -1, 3472, -1, -1, - -1, -1, -1, -1, -1, 3480, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4579, -1, -1, 2622, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 482, - 3505, -1, -1, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 3575, -1, 3577, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3575, -1, 3577, -1, 5411, -1, -1, 10, -1, -1, - 13, -1, -1, -1, 17, 18, 19, -1, 5425, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4394, -1, -1, 36, -1, -1, -1, -1, -1, -1, - 4704, -1, 3671, 46, -1, -1, -1, -1, -1, 5456, - 53, 2755, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2770, -1, -1, -1, - -1, -1, -1, -1, -1, 2003, 79, 4441, 4742, -1, - -1, -1, 4446, -1, 3713, -1, -1, -1, 2792, -1, - 2018, -1, -1, -1, 2022, -1, 3671, -1, -1, -1, - 4764, -1, -1, -1, -1, -1, -1, -1, -1, 2037, - 2038, 2039, 3741, 2041, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3713, -1, - -1, -1, -1, -1, -1, 5552, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - -1, -1, -1, 17, 18, 19, 3741, -1, -1, -1, - -1, 174, -1, 4837, 2878, 2879, -1, -1, -1, -1, - 3809, -1, 36, -1, -1, -1, -1, -1, -1, -1, - 193, -1, 46, -1, -1, 198, -1, -1, -1, 53, - -1, -1, 3831, -1, -1, -1, -1, -1, -1, -1, - 5617, -1, 5619, -1, -1, 4579, -1, 220, 221, 2005, - -1, -1, -1, -1, 3853, 79, -1, -1, -1, -1, - -1, 2017, 235, 2019, 3809, 2021, -1, -1, 2024, 2025, - 2026, -1, -1, -1, -1, -1, 2032, -1, -1, 2035, - -1, -1, -1, -1, -1, -1, 3831, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2052, 2053, 2054, -1, - -1, -1, -1, 276, -1, 2979, -1, -1, 3853, -1, - -1, -1, -1, 2069, -1, -1, -1, 290, -1, -1, - 293, -1, -1, -1, 4958, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3936, -1, -1, - -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, - 174, -1, 17, 18, 19, -1, -1, -1, -1, -1, - -1, 3960, -1, -1, 5741, -1, -1, -1, -1, 193, - 4704, 36, -1, -1, 198, -1, -1, -1, -1, -1, - -1, 46, -1, -1, -1, -1, 3985, -1, 53, -1, - 5767, 3936, -1, -1, -1, -1, 220, 221, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4742, 382, - -1, 235, -1, -1, 79, 3960, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4764, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3985, -1, -1, -1, -1, 5079, -1, -1, -1, -1, - -1, -1, 276, -1, -1, -1, 2212, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 290, -1, -1, 293, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2252, -1, -1, -1, - -1, -1, -1, 4837, 169, -1, -1, 5884, -1, 482, - -1, -1, -1, 5147, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, 193, -1, - -1, -1, -1, 198, -1, -1, 4135, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 2305, - -1, -1, -1, -1, -1, 220, 221, -1, 382, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 235, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4135, -1, -1, -1, -1, -1, -1, -1, -1, 2497, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 276, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3296, -1, 4958, 290, 4225, -1, 293, -1, - -1, -1, -1, 5267, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3317, -1, -1, -1, -1, -1, -1, - -1, -1, 4251, 6030, -1, -1, -1, -1, 482, -1, - -1, -1, -1, -1, -1, -1, 490, 491, 492, 493, - 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, - 4225, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2595, -1, -1, - -1, 6078, -1, -1, -1, -1, 4251, -1, -1, 2607, - -1, -1, -1, -1, 2612, -1, -1, 382, -1, 6096, - -1, -1, -1, -1, 2480, 2481, 2482, 2483, 2484, 2485, - 2486, 2487, 2488, -1, 2490, -1, -1, -1, -1, -1, - -1, -1, -1, 2499, -1, 5079, 2502, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 5393, - -1, -1, -1, -1, 5398, 5399, -1, 10, -1, -1, - 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2543, -1, -1, - -1, 2547, -1, 36, 2550, 4394, 2552, -1, -1, 2555, - -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, - 53, -1, -1, 5147, -1, -1, -1, 482, -1, -1, - -1, -1, -1, -1, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, 79, -1, -1, -1, - -1, -1, 4441, -1, -1, -1, -1, 4446, -1, 4394, - -1, -1, 2608, 2609, -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, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4441, -1, -1, -1, - -1, 4446, -1, -1, -1, 148, -1, -1, -1, 3583, - -1, -1, -1, -1, -1, 10, -1, -1, 13, 3593, - -1, 5555, 17, 18, 19, -1, -1, -1, -1, -1, - -1, -1, -1, 5267, -1, 2691, -1, -1, -1, -1, - -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, - 193, 46, -1, -1, -1, 198, -1, -1, 53, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 220, 221, -1, - 4579, -1, -1, -1, 79, -1, -1, -1, -1, -1, - -1, -1, 235, -1, -1, -1, -1, -1, -1, -1, - -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, - 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, - -1, -1, -1, 276, 4579, -1, -1, 46, -1, -1, - -1, -1, -1, -1, 53, -1, -1, 290, -1, -1, - 293, -1, -1, -1, -1, -1, -1, -1, -1, 5393, - -1, -1, -1, -1, 5398, 5399, -1, -1, -1, -1, - 79, -1, -1, -1, -1, -1, -1, -1, 3752, 3753, - 3754, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3769, -1, -1, 193, -1, - -1, -1, -1, 198, -1, 4704, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 220, 221, -1, 3802, 3803, - -1, -1, -1, 3807, -1, -1, -1, -1, -1, 382, - 235, -1, -1, 4742, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4704, - 169, -1, -1, -1, -1, 4764, -1, -1, -1, -1, - 2926, 2927, 2928, -1, -1, -1, 2932, 5511, -1, -1, - -1, 276, -1, -1, 193, -1, -1, -1, -1, 198, - -1, -1, -1, -1, -1, 290, -1, 4742, 293, -1, - -1, -1, -1, 2959, -1, -1, -1, -1, -1, -1, - -1, 220, 221, -1, -1, -1, -1, -1, -1, 4764, - -1, 5555, -1, -1, -1, -1, 235, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3911, 4837, 482, - 3914, -1, -1, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 276, -1, -1, - -1, -1, 3170, -1, -1, -1, -1, -1, -1, -1, - -1, 290, -1, -1, 293, -1, -1, 382, -1, -1, - -1, -1, 4837, 3191, 3192, -1, 3194, -1, -1, -1, - -1, 3199, 3200, -1, 3202, -1, 3204, -1, -1, -1, - 3208, -1, -1, 3211, -1, -1, -1, -1, 3216, -1, - -1, -1, -1, -1, -1, -1, -1, 3225, -1, -1, - -1, -1, 3230, -1, -1, -1, -1, -1, -1, -1, - 3238, 3239, 3240, 3241, -1, -1, -1, 3245, 3246, -1, - 3248, -1, -1, -1, -1, -1, -1, -1, -1, 4958, - -1, -1, 457, -1, -1, -1, -1, 3265, -1, 3267, - 4044, 4045, 4046, 382, -1, -1, 3274, 3275, 3276, 3277, - 3278, 3279, 3280, 3281, 3282, 3283, -1, 482, -1, -1, - -1, -1, -1, -1, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - -1, 3167, -1, 4958, -1, -1, 3172, -1, -1, -1, - 3318, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, - -1, -1, 17, 18, 19, 3201, -1, -1, -1, -1, - -1, 24, -1, -1, -1, -1, 3212, -1, 3214, 3215, - -1, 36, -1, -1, -1, -1, -1, -1, -1, 42, - -1, 46, 3228, 482, -1, 3231, -1, 3233, 53, -1, - 5079, 490, 491, 492, 493, 494, 495, 496, 497, 498, - -1, -1, -1, -1, 67, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 79, -1, -1, 80, -1, -1, - -1, -1, 3268, -1, 3270, -1, 3272, -1, -1, -1, - -1, -1, -1, 96, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5079, -1, -1, -1, -1, -1, - -1, 114, -1, -1, -1, -1, -1, 120, 5147, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3460, -1, -1, 138, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 149, -1, -1, -1, - -1, -1, -1, -1, -1, 158, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 171, -1, - -1, -1, 5147, -1, 3360, -1, 179, -1, -1, 3365, - 183, -1, -1, -1, -1, -1, -1, -1, 193, -1, - -1, -1, -1, 198, 3380, -1, -1, -1, -1, 202, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 220, 221, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 235, -1, -1, -1, -1, -1, 239, -1, 5267, -1, - -1, -1, -1, -1, -1, -1, 249, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3445, - -1, -1, -1, -1, -1, -1, -1, 4371, -1, -1, - -1, 276, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 290, -1, 290, 293, -1, - 293, -1, 5267, -1, -1, -1, -1, -1, -1, 4403, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 314, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 328, -1, -1, -1, -1, - -1, 4435, 335, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, -1, -1, -1, -1, -1, -1, -1, - -1, 364, -1, -1, 5393, -1, 4470, -1, 371, 5398, - 5399, 374, -1, -1, 3702, 3703, -1, 382, -1, 3707, - -1, -1, -1, 4487, -1, -1, -1, -1, -1, -1, - 393, -1, -1, -1, -1, -1, -1, 400, -1, -1, - -1, -1, -1, 406, -1, -1, 409, 410, 3736, 412, - 413, -1, -1, -1, -1, -1, -1, -1, 5393, -1, - -1, -1, -1, 5398, 5399, 428, -1, -1, -1, -1, - -1, -1, 435, -1, -1, 438, -1, -1, 441, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 454, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 482, -1, -1, - -1, -1, 5511, -1, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4608, 4609, 4610, 4611, -1, -1, - -1, -1, 3698, -1, -1, -1, -1, -1, 3704, -1, - -1, -1, -1, -1, -1, -1, 5555, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5511, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5555, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3783, -1, -1, - -1, -1, -1, -1, 3932, -1, -1, -1, -1, -1, - 3938, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3957, - 3958, -1, -1, 3961, 3962, 3963, 3964, -1, -1, 3967, - 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, - 24, -1, -1, -1, -1, 29, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 4000, -1, 22, 4003, -1, 4005, -1, -1, - 4008, 4009, -1, -1, 32, -1, 34, 35, -1, -1, - -1, -1, -1, 67, -1, -1, 4024, 4025, 4026, 4027, - -1, 4029, -1, -1, -1, -1, 80, 81, -1, -1, - -1, -1, -1, -1, 62, -1, -1, -1, 92, -1, - -1, -1, 96, -1, -1, -1, 74, -1, 76, 77, - -1, -1, -1, -1, -1, 83, -1, 85, -1, -1, - 114, -1, -1, -1, -1, -1, -1, 3933, -1, 97, - -1, 99, -1, -1, -1, 3941, -1, 3943, -1, -1, - -1, -1, -1, -1, 138, 3951, 4094, 3953, 116, -1, - -1, 119, -1, -1, -1, 149, -1, -1, -1, -1, - -1, -1, -1, -1, 158, -1, 134, -1, 136, -1, - -1, -1, 140, -1, 3980, 3981, 3982, 171, 146, -1, - -1, -1, 176, -1, -1, -1, 154, -1, 156, -1, - -1, -1, -1, 3999, -1, 163, 4144, -1, -1, -1, - -1, 4007, -1, -1, 4010, -1, 4012, -1, 202, -1, - -1, -1, 180, -1, -1, -1, 4022, -1, -1, -1, - -1, -1, -1, -1, 4030, 4031, -1, 4951, -1, 197, - -1, -1, -1, 227, -1, -1, -1, -1, 4962, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 249, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 237, - 238, -1, -1, -1, -1, 243, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - -1, -1, -1, -1, -1, -1, 290, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 4112, 275, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 314, -1, -1, 4129, -1, -1, -1, -1, -1, -1, - 324, 325, -1, -1, 328, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 319, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 355, -1, -1, 358, 333, -1, -1, 362, -1, - 364, 339, 340, -1, 342, -1, -1, 371, -1, 347, - 374, -1, 350, -1, -1, 353, -1, -1, 356, -1, - -1, -1, -1, -1, -1, 363, -1, -1, -1, 393, - -1, 369, 370, -1, -1, -1, 400, -1, -1, 377, - -1, -1, 406, 381, -1, 409, 4364, -1, -1, 413, - -1, -1, -1, 391, -1, -1, -1, 421, -1, 423, - -1, -1, -1, -1, 428, -1, -1, -1, 406, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 426, 4407, - 454, -1, -1, -1, -1, -1, -1, -1, -1, 437, - -1, -1, -1, -1, -1, 443, -1, -1, -1, -1, - 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 461, -1, -1, 5220, -1, -1, -1, - -1, 5225, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 484, -1, -1, -1, - 5244, -1, -1, -1, -1, -1, -1, -1, 29, -1, - -1, -1, -1, -1, 502, -1, -1, 505, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4526, 80, - -1, -1, 4530, 4531, -1, 4533, 4534, -1, -1, -1, - -1, 4539, 4540, 4541, 4542, 96, -1, -1, 4546, 4547, - 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, - 4558, -1, -1, 114, -1, -1, -1, -1, -1, 120, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4583, -1, 138, 4586, -1, - 4588, 4447, 4448, 4591, -1, -1, 4594, 4595, 149, -1, - 4598, 4599, 4458, -1, 5378, -1, -1, 158, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 171, -1, -1, -1, -1, 176, -1, -1, -1, -1, - -1, -1, 183, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 202, -1, -1, -1, -1, -1, -1, -1, 4657, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4525, - -1, -1, -1, 4671, -1, -1, 227, -1, -1, -1, - -1, 4537, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 249, -1, - -1, -1, -1, -1, 5478, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4576, 4577, -1, -1, -1, -1, -1, -1, 4584, 4585, - -1, -1, 5506, 4589, -1, -1, -1, 4593, -1, 290, - 4596, 4597, -1, -1, -1, 4601, -1, -1, -1, -1, - -1, 4607, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 324, 325, -1, -1, 328, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4647, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 4658, -1, 355, -1, -1, 358, -1, -1, - 4666, 362, -1, 364, -1, -1, -1, -1, -1, -1, - 371, -1, -1, 374, -1, -1, -1, -1, -1, -1, - 4686, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, -1, -1, -1, -1, -1, -1, 400, - -1, -1, -1, -1, 405, 406, -1, -1, 409, -1, - -1, -1, 413, -1, -1, -1, -1, -1, 4866, -1, - -1, -1, 423, -1, -1, -1, -1, 428, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 441, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 454, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4787, -1, -1, -1, -1, -1, -1, 4794, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4953, 4954, -1, -1, -1, - -1, -1, -1, 4961, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5003, -1, 4863, -1, -1, - -1, 5009, 5010, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5028, -1, 5030, -1, -1, -1, 5034, 5035, 5036, 5037, - -1, -1, 5040, 5041, -1, -1, -1, 5045, -1, -1, - -1, 5049, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5063, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 5081, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5095, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5105, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5007, -1, -1, -1, -1, -1, 5013, 5014, 5015, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5169, -1, 5171, -1, -1, -1, -1, -1, -1, - -1, -1, 5038, 5039, -1, -1, 5042, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5206, -1, - -1, -1, -1, 5069, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5080, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 5096, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5293, -1, 5295, 5296, 5297, - 5298, 5299, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5310, 5311, 5312, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5325, -1, -1, - 5328, -1, -1, -1, 5332, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5350, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5365, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5300, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5343, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5535, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5403, -1, -1, - -1, 5549, -1, 5551, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 5445, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 5603, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5639, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5534, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5705, 5564, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5592, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 5752, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 5837, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5850, 5851, 5710, 5711, 5712, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5864, -1, -1, -1, - -1, -1, 5728, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5738, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5905, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 5930, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 5946, 5947, - -1, -1, 5808, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5832, -1, 5834, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 6006, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -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, 5, 6, -1, 8, 9, 10, - 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, -1, 5951, -1, 38, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, 80, - 5996, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, 135, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, 6065, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, -1, 435, 436, 437, 438, 439, 440, - 441, -1, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 493, 494, 495, -1, -1, -1, -1, -1, - -1, 502, 503, 3, -1, 5, 6, -1, 8, 9, - 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, 38, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 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, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, -1, 435, 436, 437, 438, 439, - 440, 441, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 482, -1, 484, -1, -1, -1, -1, -1, - -1, -1, -1, 493, 494, -1, -1, -1, -1, -1, - -1, -1, 502, 503, 3, -1, 5, 6, -1, 8, - 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, 38, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, 173, -1, 175, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - -1, -1, 231, 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, -1, 435, 436, 437, 438, - 439, 440, 441, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, 452, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 493, 494, -1, -1, -1, -1, - -1, -1, -1, 502, 503, 3, -1, 5, 6, -1, - 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - 38, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 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, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, -1, 435, 436, 437, - 438, 439, 440, 441, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 493, 494, -1, -1, -1, - -1, -1, -1, -1, 502, 503, 3, -1, 5, 6, - -1, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, 3, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, -1, -1, -1, -1, 502, 503, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, 223, 224, - 225, 226, 227, 228, -1, -1, 231, 232, 233, 234, - -1, -1, 237, 238, 239, -1, -1, 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, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, -1, -1, -1, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 503, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, 49, 50, 51, 52, - -1, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, -1, -1, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, 100, 101, 102, - 103, -1, -1, -1, 107, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, -1, 156, 157, 158, 159, -1, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - 173, -1, 175, 176, 177, 178, 179, -1, 181, -1, - -1, -1, 185, 186, -1, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, -1, -1, 231, -1, - 233, 234, 235, -1, 237, 238, 239, -1, -1, 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, -1, -1, 272, - -1, 274, 275, 276, 277, -1, -1, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, 298, 299, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, -1, 316, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, -1, 402, - -1, 404, 405, -1, 407, 408, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, -1, - 423, -1, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, -1, 449, 450, 451, 452, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 479, 480, 481, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - 503, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, -1, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - -1, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, -1, -1, -1, 107, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, -1, 156, 157, - 158, 159, -1, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, -1, -1, -1, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, -1, 233, 234, 235, -1, 237, - 238, 239, -1, -1, 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, -1, -1, 272, -1, 274, 275, 276, 277, - -1, -1, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, -1, 316, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, -1, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, -1, 423, -1, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - -1, 449, 450, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - -1, 3, -1, 5, 6, -1, 8, 9, 10, 11, - 12, 479, 480, 481, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, 503, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 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, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, 484, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -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, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, 174, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, 230, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, -1, -1, 37, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 1798, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, -1, -1, -1, - 37, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 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, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, -1, -1, 500, 501, - 502, 3, -1, 5, 6, -1, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 1097, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1139, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, 495, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1152, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, 174, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 943, 301, 0, 0, 944, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1164, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, 418, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 1165, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 945, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 694, 0, 0, 0, 0, 0, + 2547, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 2548, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 694, 0, 0, 0, 0, 0, + 1366, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 694, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1123, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, -1, -1, -1, 3, -1, 5, 6, - 502, 8, 9, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, - 277, 278, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, 435, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 493, 494, -1, -1, - -1, 3, -1, 5, 6, 502, 8, 9, 10, 11, - 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1136, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 493, 494, 3, -1, 5, 6, -1, 8, 9, - 502, 11, 12, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, 38, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, 441, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 493, 494, 3, -1, 5, 6, -1, - 8, 9, 502, 11, 12, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - 38, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, 441, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, -1, -1, 3, -1, 5, 6, - -1, 8, 9, -1, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, 502, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, 38, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 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, -1, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, 441, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, -1, -1, 3, -1, 5, - 6, -1, 8, 9, -1, 11, 12, -1, -1, -1, - -1, -1, -1, -1, -1, 502, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, 38, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, 232, 233, 234, 235, - -1, 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, -1, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, 441, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, -1, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 502, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, -1, 231, 232, 233, 234, - 235, -1, 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, -1, 274, - 275, 276, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, 289, 290, 291, 292, -1, -1, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 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, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, 441, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, 452, 453, 454, - 455, 456, -1, -1, 459, -1, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, -1, -1, 484, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 502, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - 173, -1, 175, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, -1, 231, 232, - 233, 234, 235, -1, 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, - -1, 274, 275, 276, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, 289, 290, 291, 292, - -1, -1, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, 408, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, 441, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, 452, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, -1, - -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 502, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1150, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, 441, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 502, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - 441, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, -1, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 502, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, 67, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, 441, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, -1, -1, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 502, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, 173, -1, 175, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - -1, -1, 231, 232, 233, 234, 235, -1, 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, -1, 274, 275, 276, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, 441, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, 452, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, -1, 3, -1, 5, 6, -1, - -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 502, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, -1, -1, -1, 107, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 237, - 238, 239, -1, -1, 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, -1, 274, 275, 276, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - 288, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, -1, -1, 3, -1, -1, -1, - -1, -1, -1, -1, -1, 493, 494, 495, -1, -1, - -1, -1, -1, -1, 502, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, 34, 35, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, 274, 275, 276, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, -1, -1, 484, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 502, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, - -1, -1, 107, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, -1, -1, 231, 232, 233, 234, - 235, -1, 237, 238, 239, -1, -1, 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, -1, 274, - 275, 276, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, 408, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, 452, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, -1, -1, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 502, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, 406, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, -1, -1, - 484, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 502, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, 107, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, 289, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1154, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, 406, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 502, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, -1, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 502, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, -1, -1, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 502, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, -1, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 502, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, -1, -1, 3, -1, 5, 6, - -1, -1, -1, 10, 11, -1, -1, -1, -1, -1, - 17, 18, 19, -1, 502, 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, -1, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, -1, 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, -1, 156, - 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, -1, 183, -1, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, -1, 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, -1, 272, 273, 274, 275, 276, - 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - -1, 298, 299, 300, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, -1, 316, - -1, 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, -1, 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, -1, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, -1, 423, -1, 425, 426, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, -1, 449, 450, 451, 452, 453, 454, 455, 456, - 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 467, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 479, 480, 481, -1, -1, -1, -1, -1, - -1, -1, -1, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 3, -1, 5, 6, -1, -1, -1, 10, - 11, -1, -1, -1, -1, -1, 17, 18, 19, -1, - -1, 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, -1, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, -1, 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, -1, 156, 157, 158, 159, -1, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, -1, 183, -1, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, -1, 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, - -1, 272, 273, 274, 275, 276, 277, 278, -1, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, -1, 316, -1, 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, -1, - 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, - -1, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, -1, 423, -1, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, -1, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, -1, -1, -1, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 3, -1, - -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, - -1, -1, 17, 18, 19, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, -1, 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, -1, -1, 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, -1, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - -1, 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, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, -1, -1, - 165, 166, 167, 168, -1, 170, 171, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, -1, 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, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, -1, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, -1, 254, - 255, -1, 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, - -1, 286, 287, -1, 289, 290, 291, 292, 293, -1, - 295, 296, 297, 298, -1, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, -1, 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, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, -1, 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, -1, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, -1, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, -1, 452, 453, 454, - 455, 456, 457, -1, 459, -1, -1, -1, -1, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, - -1, -1, -1, -1, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 3, -1, -1, -1, -1, -1, - -1, 10, -1, -1, -1, -1, -1, -1, 17, 18, - 19, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, -1, -1, -1, -1, -1, -1, - -1, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 3, -1, -1, -1, -1, -1, -1, 10, -1, -1, - -1, -1, -1, -1, 17, 18, 19, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, -1, - -1, -1, -1, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 3, -1, -1, -1, - -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, - 17, 18, 19, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, -1, -1, -1, -1, -1, - -1, -1, -1, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 3, -1, -1, -1, -1, -1, -1, 10, - -1, -1, -1, -1, -1, -1, 17, 18, 19, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, -1, -1, -1, -1, -1, -1, -1, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 3, -1, - -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, - -1, -1, 17, 18, 19, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, -1, -1, -1, - -1, -1, -1, -1, -1, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 3, -1, -1, -1, -1, -1, - -1, 10, -1, -1, -1, -1, -1, -1, 17, 18, - 19, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, -1, -1, -1, -1, -1, -1, - -1, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 3, -1, -1, -1, -1, -1, -1, 10, -1, -1, - -1, -1, -1, -1, 17, 18, 19, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, 490, 491, 492, - 493, 494, 495, 496, 497, 498, -1, -1, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 942, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, 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, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 495, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 495, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, -1, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, -1, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, -1, 156, - 157, 158, 159, -1, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, -1, -1, -1, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, -1, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, -1, 272, -1, 274, 275, 276, - 277, -1, -1, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, 294, 295, 296, - 297, 298, 299, 300, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, -1, 316, - -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, -1, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, -1, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, -1, 423, -1, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, -1, 449, 450, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 479, 480, 481, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 495, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, -1, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, -1, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, -1, -1, -1, 107, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, -1, 156, 157, 158, 159, -1, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - -1, -1, -1, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - -1, 233, 234, 235, -1, 237, 238, 239, -1, -1, - 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, -1, -1, - 272, -1, 274, 275, 276, 277, -1, -1, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, 294, 295, 296, 297, 298, 299, 300, -1, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, -1, 316, -1, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, -1, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - -1, 423, -1, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, -1, 449, 450, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 3, -1, 5, 6, - -1, -1, -1, -1, 11, 12, -1, 479, 480, 481, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, 495, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, 274, 275, 276, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, 288, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, 5, 6, -1, - -1, -1, -1, 11, 12, -1, 493, 494, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, -1, -1, -1, 107, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 237, - 238, 239, -1, -1, 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, -1, 274, 275, 276, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - 288, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, 5, 6, -1, -1, - -1, -1, 11, -1, -1, 493, 494, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, -1, 107, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, 173, -1, 175, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - -1, -1, 231, 232, 233, 234, 235, -1, 237, 238, - 239, -1, -1, 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, -1, 274, 275, 276, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, 288, - -1, 290, 291, 292, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, 452, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, 5, 6, -1, -1, -1, - -1, 11, 12, -1, 493, 494, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, -1, -1, -1, 107, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 237, 238, 239, - -1, -1, 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, -1, 274, 275, 276, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, 288, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, 5, 6, -1, -1, -1, -1, - 11, -1, -1, 493, 494, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, 232, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, 274, 275, 276, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, 288, -1, 290, - 291, 292, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, 11, - -1, -1, 493, 494, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, 174, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, 5, 6, -1, -1, -1, -1, 11, -1, - -1, 493, 494, -1, -1, -1, -1, -1, -1, 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, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 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, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 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, + 0, 447, 448, 449, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 2713, 275, 276, 277, 278, 279, 0, 0, + 2782, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 2714, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 2783, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 2716, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 2784, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 2717, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 2718, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 2713, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 2714, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 2783, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 2716, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 3812, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 2717, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 2718, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 774, + 244, 775, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 776, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, 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, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 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, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, 232, 233, 234, 235, - -1, 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, -1, 274, 275, - 276, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, 441, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, 5, 6, - -1, 8, 9, -1, 11, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, -1, -1, 106, 107, - -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 237, - 238, 239, -1, -1, 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, -1, 274, 275, 276, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, -1, - -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, 173, -1, 175, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - -1, -1, 231, 232, 233, 234, 235, -1, 237, 238, - 239, -1, -1, 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, -1, 274, 275, 276, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, 452, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, -1, -1, 106, 107, -1, -1, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 237, 238, 239, - -1, -1, 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, -1, 274, 275, 276, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, 441, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, 106, 107, -1, -1, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, 182, 183, 184, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, 232, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, 274, 275, 276, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, 6, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, -1, -1, -1, 107, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 237, 238, 239, -1, -1, - 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, -1, 274, 275, 276, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, 288, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, 100, 101, 102, - 103, -1, -1, 106, 107, -1, -1, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - 173, -1, 175, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, -1, -1, 231, 232, - 233, 234, 235, -1, 237, 238, 239, -1, -1, 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, - -1, 274, 275, 276, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, 408, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, 452, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, 100, 101, 102, 103, - -1, -1, 106, 107, -1, -1, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, 173, - -1, 175, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, -1, -1, 231, 232, 233, - 234, 235, -1, 237, 238, 239, -1, -1, 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, -1, - 274, 275, 276, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, 408, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, 452, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, - -1, 106, 107, -1, -1, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, -1, -1, 231, 232, 233, 234, - 235, -1, 237, 238, 239, -1, -1, 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, -1, 274, - 275, 276, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, 408, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, 452, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - 106, 107, -1, -1, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, 232, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 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, -1, 274, 275, - 276, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, 106, - 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, 274, 275, 276, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, 6, -1, - -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, 100, 101, 102, 103, -1, -1, -1, 107, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, 173, -1, 175, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, -1, -1, 231, 232, 233, 234, 235, -1, 237, - 238, 239, -1, -1, 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, -1, 274, 275, 276, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, 34, 35, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, -1, 107, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, 173, -1, 175, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - -1, -1, 231, 232, 233, 234, 235, -1, 237, 238, - 239, -1, -1, 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, -1, 274, 275, 276, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, 452, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, 6, -1, -1, -1, - -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - 100, 101, 102, 103, -1, -1, -1, 107, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, 173, -1, 175, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, - -1, 231, 232, 233, 234, 235, -1, 237, 238, 239, - -1, -1, 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, -1, 274, 275, 276, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, 408, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, 452, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, 6, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, 232, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, 274, 275, 276, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, 100, 101, - 102, 103, -1, -1, -1, 107, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, 173, -1, 175, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, -1, -1, 231, - 232, 233, 234, 235, -1, 237, 238, 239, -1, -1, - 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, -1, 274, 275, 276, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - 452, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, 100, 101, 102, - 103, -1, -1, -1, 107, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - 173, -1, 175, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, -1, -1, 231, 232, - 233, 234, 235, -1, 237, 238, 239, -1, -1, 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, - -1, 274, 275, 276, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, 408, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, 452, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, 100, 101, 102, 103, - -1, -1, -1, 107, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, 173, - -1, 175, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, -1, -1, 231, 232, 233, - 234, 235, -1, 237, 238, 239, -1, -1, 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, -1, - 274, 275, 276, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, 408, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, 452, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, - -1, -1, 107, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, -1, -1, 231, 232, 233, 234, - 235, -1, 237, 238, 239, -1, -1, 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, -1, 274, - 275, 276, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, 408, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, 452, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, 232, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 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, -1, 274, 275, - 276, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, 100, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, 173, -1, 175, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, 208, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, -1, -1, 231, 232, 233, 234, 235, -1, - 237, 238, 239, -1, -1, 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, -1, 274, 275, 276, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, 408, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, 452, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 807, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 777, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 778, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 774, + 244, 775, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 776, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 3501, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 777, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 778, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 2713, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 2714, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 2783, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 2716, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 2717, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 2718, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 774, + 244, 775, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 776, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 777, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 778, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 3017, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 2848, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 839, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 2849, 2850, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1974, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 1975, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 1976, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 1977, 351, 352, 0, 0, 0, 1978, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 1979, 1980, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 1981, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 1982, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 1983, 522, 523, 524, 525, + 526, 527, 1984, 529, 530, 531, 532, 533, 0, 1985, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 1986, 566, 0, 1987, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 1988, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 775, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 776, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 777, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 778, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 2848, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 839, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 2849, 2850, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 995, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 996, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 839, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 694, 0, 0, 0, 0, 0, + 1368, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 3580, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 3581, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 3593, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 3594, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 636, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 685, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 686, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 799, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 800, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 801, 575, 0, 0, 802, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 833, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 834, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 835, 575, 0, 0, 836, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 839, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 897, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 952, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 953, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1115, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1357, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 1370, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 1371, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 824, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 1361, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 827, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1516, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 839, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 1577, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1578, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 799, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 3351, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 3352, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 3353, 566, 0, 568, 3354, + 570, 3355, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 3356, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 4159, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 4173, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 4830, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 4902, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 5258, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 791, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 797, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 820, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 821, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 824, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 825, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 827, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 851, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 977, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 987, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 990, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1006, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1063, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1068, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1085, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1088, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1090, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1128, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1156, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1158, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1168, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1171, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1174, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 824, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 1361, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 827, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1839, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1873, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1875, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1915, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1917, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 1919, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 2013, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 2666, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 0, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 824, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 1361, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 2700, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 827, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 2765, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 2766, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 2767, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 2845, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 2766, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 2767, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 2869, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 2766, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 2767, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3062, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3066, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3124, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3512, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 819, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 822, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 823, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 824, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 2766, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 826, 575, 0, 0, 2767, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 828, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3569, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3583, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3585, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 3733, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 3773, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 362, 363, 0, 364, 365, + 366, 367, 5016, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 0, 255, + 256, 257, 258, 259, 0, 261, 262, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 272, + 273, 274, 0, 275, 276, 277, 278, 279, 0, 0, + 0, 281, 282, 283, 284, 285, 286, 0, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 0, + 298, 299, 300, 0, 0, 0, 0, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 0, 344, 0, 345, 346, 347, 348, 349, 0, 350, + 0, 351, 352, 0, 0, 0, 355, 356, 357, 358, + 0, 359, 360, 0, 361, 0, 363, 0, 364, 365, + 366, 367, 368, 0, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 391, 0, + 392, 0, 0, 395, 0, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 409, + 0, 411, 0, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 0, 447, 448, 0, 450, 0, 451, 452, 453, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 464, 0, 466, 0, 468, 469, + 470, 471, 472, 473, 474, 475, 0, 477, 478, 0, + 479, 480, 481, 482, 483, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 0, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 0, 518, 519, 520, 521, 522, 523, 0, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 541, 542, 543, + 0, 545, 546, 547, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 0, 564, 565, 0, 0, 566, 0, 568, 569, + 570, 571, 572, 0, 573, 574, 575, 0, 0, 576, + 577, 578, 579, 580, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 0, + 601, 0, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 856, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 857, 260, 858, 859, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 860, + 861, 274, 0, 275, 276, 277, 278, 0, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 862, 863, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 0, 339, 340, 341, 342, 0, + 0, 344, 0, 345, 346, 347, 865, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 0, 0, 0, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 2674, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 2675, 385, 386, 387, 388, 866, 867, 0, 868, 0, + 392, 393, 394, 395, 396, 397, 0, 0, 0, 0, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 0, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 869, 435, 870, + 437, 438, 439, 440, 441, 442, 443, 0, 0, 446, + 0, 447, 448, 449, 450, 0, 0, 452, 871, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 2677, 465, 466, 467, 0, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 0, 482, 0, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 872, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 0, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 2678, 542, 543, + 544, 545, 546, 874, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 0, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 875, 876, 0, 0, 576, + 577, 0, 579, 0, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 0, 877, 2679, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 856, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 625, 626, + 627, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 857, + 260, 858, 859, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 860, 861, 274, 0, 275, + 276, 277, 278, 0, 0, 280, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 0, + 0, 0, 301, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 862, 863, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 0, 339, 340, 341, 342, 0, 0, 344, 0, 345, + 346, 347, 865, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 0, 0, + 0, 362, 363, 0, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 0, 385, 386, 387, + 388, 866, 867, 0, 868, 0, 392, 393, 394, 395, + 396, 397, 0, 0, 0, 0, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 0, 410, 411, 412, 0, + 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 869, 435, 870, 437, 438, 439, 440, + 441, 442, 443, 0, 0, 446, 0, 447, 448, 449, + 450, 2761, 0, 452, 871, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 0, 465, 466, 467, 0, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 0, 482, + 0, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 872, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 0, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 2678, 542, 543, 544, 545, 546, 874, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 0, 563, 0, 564, 565, + 0, 4539, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 875, 876, 0, 0, 576, 577, 0, 579, 0, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 0, 877, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 856, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 625, 626, 627, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 0, 857, 260, 858, 859, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 0, 270, + 271, 860, 861, 274, 0, 275, 276, 277, 278, 0, + 0, 280, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 0, 0, 0, 301, 0, + 0, 0, 302, 303, 304, 305, 306, 307, 862, 863, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 0, 339, 340, 341, + 342, 0, 0, 344, 0, 345, 346, 347, 865, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 0, 0, 0, 362, 363, 0, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 0, 385, 386, 387, 388, 866, 867, 0, + 868, 0, 392, 393, 394, 395, 396, 397, 0, 0, + 0, 0, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 0, 410, 411, 412, 0, 413, 414, 415, 0, + 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 869, + 435, 870, 437, 438, 439, 440, 441, 442, 443, 2835, + 0, 446, 0, 447, 448, 449, 450, 0, 0, 452, + 871, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 0, 465, 466, 467, + 0, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 0, 482, 0, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 872, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 0, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 0, 539, 540, 873, + 542, 543, 544, 545, 546, 874, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 0, 563, 0, 564, 565, 0, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 875, 876, 0, + 0, 576, 577, 0, 579, 0, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 0, 0, 594, 595, 596, 597, 598, 0, + 877, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 856, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 625, 626, 627, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 857, 260, 858, 859, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 0, 270, 271, 860, 861, 274, + 0, 275, 276, 277, 278, 0, 0, 280, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 300, 0, 0, 0, 301, 0, 0, 0, 302, 303, + 304, 305, 306, 307, 862, 863, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 864, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 0, 339, 340, 341, 342, 0, 0, 344, + 0, 345, 346, 347, 865, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 0, 0, 0, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 0, 385, + 386, 387, 388, 866, 867, 0, 868, 0, 392, 393, + 394, 395, 396, 397, 0, 0, 0, 0, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 0, 410, 411, + 412, 0, 413, 414, 415, 0, 0, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 869, 435, 870, 437, 438, + 439, 440, 441, 442, 443, 4334, 0, 446, 0, 447, + 448, 449, 450, 0, 0, 452, 871, 454, 455, 456, + 0, 457, 458, 0, 0, 459, 460, 461, 0, 0, + 462, 463, 0, 465, 466, 467, 0, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 0, 482, 0, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 872, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 0, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 0, 539, 540, 873, 542, 543, 544, 545, + 546, 874, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 0, 563, 0, + 564, 565, 0, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 875, 876, 0, 0, 576, 577, 0, + 579, 0, 0, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 0, 0, + 594, 595, 596, 597, 598, 0, 877, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 856, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 625, 626, 627, 0, + 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 857, 260, 858, + 859, 0, 263, 264, 265, 266, 267, 268, 269, 0, + 0, 270, 271, 860, 861, 274, 0, 275, 276, 277, + 278, 0, 0, 280, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 0, 0, 0, + 301, 0, 0, 0, 302, 303, 304, 305, 306, 307, + 862, 863, 310, 0, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 0, 339, + 340, 341, 342, 0, 0, 344, 0, 345, 346, 347, + 865, 349, 5864, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 0, 0, 0, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 0, 385, 386, 387, 388, 866, + 867, 0, 868, 0, 392, 393, 394, 395, 396, 397, + 0, 0, 0, 0, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 0, 410, 411, 412, 0, 413, 414, + 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 869, 435, 870, 437, 438, 439, 440, 441, 442, + 443, 0, 0, 446, 0, 447, 448, 449, 450, 0, + 0, 452, 871, 454, 455, 456, 0, 457, 458, 0, + 0, 459, 460, 461, 0, 0, 462, 463, 0, 465, + 466, 467, 0, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 0, 482, 0, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 872, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 0, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, + 540, 873, 542, 543, 544, 545, 546, 874, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 0, 563, 0, 564, 565, 0, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 875, + 876, 0, 0, 576, 577, 0, 579, 0, 0, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 0, 589, + 590, 591, 592, 593, 0, 0, 594, 595, 596, 597, + 598, 0, 877, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 856, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 625, 626, 627, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 857, 260, 858, 859, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 860, + 861, 274, 0, 275, 276, 277, 278, 0, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 862, 863, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 864, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 0, 339, 340, 341, 342, 0, + 0, 344, 0, 345, 346, 347, 865, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 0, 0, 0, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 0, 385, 386, 387, 388, 866, 867, 0, 868, 0, + 392, 393, 394, 395, 396, 397, 0, 0, 0, 0, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 0, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 869, 435, 870, + 437, 438, 439, 440, 441, 442, 443, 0, 0, 446, + 0, 447, 448, 449, 450, 0, 0, 452, 871, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 0, 465, 466, 467, 0, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 0, 482, 0, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 872, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 0, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 873, 542, 543, + 544, 545, 546, 874, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 0, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 875, 876, 0, 0, 576, + 577, 0, 579, 0, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 0, 877, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 856, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 625, 626, + 627, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 0, 244, 245, 246, 0, + 0, 0, 0, 0, 0, 0, 247, 248, 249, 0, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 857, + 260, 858, 859, 0, 263, 264, 265, 266, 267, 268, + 269, 0, 0, 270, 271, 860, 861, 274, 0, 275, + 276, 277, 278, 0, 0, 280, 0, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 0, 297, 298, 299, 300, 0, + 0, 0, 301, 0, 0, 0, 302, 303, 304, 305, + 306, 307, 862, 863, 310, 0, 311, 0, 312, 313, + 314, 315, 316, 317, 318, 0, 319, 320, 321, 322, + 0, 0, 323, 324, 864, 326, 327, 0, 328, 329, + 330, 0, 331, 332, 333, 0, 334, 335, 336, 337, + 0, 339, 340, 341, 342, 0, 0, 344, 0, 345, + 346, 347, 865, 349, 0, 350, 0, 351, 352, 353, + 0, 354, 355, 356, 357, 358, 0, 359, 0, 0, + 0, 362, 363, 0, 364, 365, 366, 367, 1130, 369, + 370, 371, 372, 373, 0, 374, 375, 376, 377, 378, + 379, 380, 381, 0, 382, 383, 0, 385, 386, 387, + 388, 866, 867, 0, 868, 0, 392, 393, 394, 395, + 396, 397, 0, 0, 0, 0, 402, 403, 404, 405, + 406, 407, 0, 0, 408, 0, 410, 411, 412, 0, + 413, 414, 415, 0, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 869, 435, 870, 437, 438, 439, 440, + 441, 442, 443, 0, 0, 446, 0, 447, 448, 449, + 450, 0, 0, 452, 871, 454, 455, 456, 0, 457, + 458, 0, 0, 459, 460, 461, 0, 0, 462, 463, + 0, 465, 466, 467, 0, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 0, 479, 480, 0, 482, + 0, 484, 485, 486, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 872, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 0, 515, 516, 517, 518, 519, + 520, 521, 522, 0, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 0, 534, 535, 536, 537, 538, + 0, 539, 540, 873, 542, 543, 544, 545, 546, 874, + 548, 0, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 0, 563, 0, 564, 565, + 0, 0, 566, 567, 568, 569, 570, 571, 572, 0, + 573, 875, 876, 0, 0, 576, 577, 0, 579, 0, + 0, 581, 582, 583, 584, 585, 586, 587, 588, 0, + 0, 589, 590, 591, 592, 593, 0, 0, 594, 595, + 596, 597, 598, 0, 877, 0, 601, 602, 603, 604, + 605, 606, 0, 0, 607, 0, 0, 608, 609, 610, + 611, 612, 613, 856, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 625, 626, 627, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 0, 244, 245, 246, 0, 0, 0, 0, 0, + 0, 0, 247, 248, 249, 0, 250, 251, 252, 253, + 254, 255, 256, 257, 0, 857, 260, 858, 859, 0, + 263, 264, 265, 266, 267, 268, 269, 0, 0, 270, + 271, 860, 861, 274, 0, 275, 276, 277, 278, 0, + 0, 280, 0, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 0, 297, 298, 299, 300, 0, 0, 0, 301, 0, + 0, 0, 302, 303, 304, 305, 306, 307, 862, 863, + 310, 0, 311, 0, 312, 313, 314, 315, 316, 317, + 318, 0, 319, 320, 321, 322, 0, 0, 323, 324, + 864, 326, 327, 0, 328, 329, 330, 0, 331, 332, + 333, 0, 334, 335, 336, 337, 0, 339, 340, 341, + 342, 0, 0, 344, 0, 345, 346, 347, 865, 349, + 0, 350, 0, 351, 352, 353, 0, 354, 355, 356, + 357, 358, 0, 359, 0, 0, 0, 362, 363, 0, + 364, 365, 366, 367, 1162, 369, 370, 371, 372, 373, + 0, 374, 375, 376, 377, 378, 379, 380, 381, 0, + 382, 383, 0, 385, 386, 387, 388, 866, 867, 0, + 868, 0, 392, 393, 394, 395, 396, 397, 0, 0, + 0, 0, 402, 403, 404, 405, 406, 407, 0, 0, + 408, 0, 410, 411, 412, 0, 413, 414, 415, 0, + 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 869, + 435, 870, 437, 438, 439, 440, 441, 442, 443, 0, + 0, 446, 0, 447, 448, 449, 450, 0, 0, 452, + 871, 454, 455, 456, 0, 457, 458, 0, 0, 459, + 460, 461, 0, 0, 462, 463, 0, 465, 466, 467, + 0, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 0, 479, 480, 0, 482, 0, 484, 485, 486, + 0, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 872, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 0, 515, 516, 517, 518, 519, 520, 521, 522, 0, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 0, 534, 535, 536, 537, 538, 0, 539, 540, 873, + 542, 543, 544, 545, 546, 874, 548, 0, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 0, 563, 0, 564, 565, 0, 0, 566, 567, + 568, 569, 570, 571, 572, 0, 573, 875, 876, 0, + 0, 576, 577, 0, 579, 0, 0, 581, 582, 583, + 584, 585, 586, 587, 588, 0, 0, 589, 590, 591, + 592, 593, 0, 0, 594, 595, 596, 597, 598, 0, + 877, 0, 601, 602, 603, 604, 605, 606, 0, 0, + 607, 0, 0, 608, 609, 610, 611, 612, 613, 856, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 625, 626, 627, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 0, 244, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 247, 248, + 249, 0, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 857, 260, 858, 859, 0, 263, 264, 265, 266, + 267, 268, 269, 0, 0, 270, 271, 860, 861, 274, + 0, 275, 276, 277, 278, 0, 0, 280, 0, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 0, 297, 298, 299, + 300, 0, 0, 0, 301, 0, 0, 0, 302, 303, + 304, 305, 306, 307, 862, 863, 310, 0, 311, 0, + 312, 313, 314, 315, 316, 317, 318, 0, 319, 320, + 321, 322, 0, 0, 323, 324, 864, 326, 327, 0, + 328, 329, 330, 0, 331, 332, 333, 0, 334, 335, + 336, 337, 0, 339, 340, 341, 342, 0, 0, 344, + 0, 345, 346, 347, 865, 349, 0, 350, 0, 351, + 352, 353, 0, 354, 355, 356, 357, 358, 0, 359, + 0, 0, 0, 362, 363, 0, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 0, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 382, 383, 0, 385, + 386, 387, 388, 866, 867, 0, 868, 0, 392, 393, + 394, 395, 396, 397, 0, 0, 0, 0, 402, 403, + 404, 405, 406, 407, 0, 0, 408, 0, 410, 411, + 412, 0, 413, 414, 415, 0, 0, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 869, 435, 870, 437, 438, + 439, 440, 441, 442, 443, 0, 0, 446, 0, 447, + 448, 449, 450, 0, 0, 452, 871, 454, 455, 456, + 0, 457, 458, 0, 0, 459, 460, 461, 0, 0, + 462, 463, 0, 465, 466, 467, 0, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 0, 479, 480, + 0, 482, 0, 484, 485, 486, 0, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 872, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 0, 515, 516, 517, + 518, 519, 520, 521, 522, 0, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 0, 534, 535, 536, + 537, 538, 0, 539, 540, 2678, 542, 543, 544, 545, + 546, 874, 548, 0, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 0, 563, 0, + 564, 565, 0, 0, 566, 567, 568, 569, 570, 571, + 572, 0, 573, 875, 876, 0, 0, 576, 577, 0, + 579, 0, 0, 581, 582, 583, 584, 585, 586, 587, + 588, 0, 0, 589, 590, 591, 592, 593, 0, 0, + 594, 595, 596, 597, 598, 0, 877, 0, 601, 602, + 603, 604, 605, 606, 0, 0, 607, 0, 0, 608, + 609, 610, 611, 612, 613, 856, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 625, 626, 627, 0, + 0, 0, 0, 0, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 244, 245, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 248, 249, 0, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 857, 260, 858, + 859, 0, 263, 264, 265, 266, 267, 268, 269, 0, + 0, 270, 271, 860, 861, 274, 0, 275, 276, 277, + 278, 0, 0, 280, 0, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 0, 297, 298, 299, 300, 0, 0, 0, + 301, 0, 0, 0, 302, 303, 304, 305, 306, 307, + 862, 863, 310, 0, 311, 0, 312, 313, 314, 315, + 316, 317, 318, 0, 319, 320, 321, 322, 0, 0, + 323, 324, 864, 326, 327, 0, 328, 329, 330, 0, + 331, 332, 333, 0, 334, 335, 336, 337, 0, 339, + 340, 341, 342, 0, 0, 344, 0, 345, 346, 347, + 865, 349, 0, 350, 0, 351, 352, 353, 0, 354, + 355, 356, 357, 358, 0, 359, 0, 0, 0, 362, + 363, 0, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 374, 375, 376, 377, 378, 379, 380, + 381, 0, 382, 383, 0, 385, 386, 387, 388, 866, + 867, 0, 868, 0, 392, 393, 394, 395, 396, 397, + 0, 0, 0, 0, 402, 403, 404, 405, 406, 407, + 0, 0, 408, 0, 410, 411, 412, 0, 413, 414, + 415, 0, 0, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 869, 435, 870, 437, 438, 439, 440, 441, 442, + 443, 0, 0, 446, 0, 447, 448, 449, 450, 0, + 0, 452, 871, 454, 455, 456, 0, 457, 458, 0, + 0, 459, 460, 461, 0, 0, 462, 463, 0, 465, + 466, 467, 0, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 0, 479, 480, 0, 482, 0, 484, + 485, 486, 0, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 872, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 0, 515, 516, 517, 518, 519, 520, 521, + 522, 0, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 0, 534, 535, 536, 537, 538, 0, 539, + 540, 0, 542, 543, 544, 545, 546, 874, 548, 0, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 0, 563, 0, 564, 565, 0, 0, + 566, 567, 568, 569, 570, 571, 572, 0, 573, 875, + 876, 0, 0, 576, 577, 0, 579, 0, 0, 581, + 582, 583, 584, 585, 586, 587, 588, 0, 0, 589, + 590, 591, 592, 593, 0, 0, 594, 595, 596, 597, + 598, 0, 877, 0, 601, 602, 603, 604, 605, 606, + 0, 0, 607, 0, 0, 608, 609, 610, 611, 612, + 613, 856, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 625, 626, 627, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, + 247, 248, 249, 0, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 0, 260, 0, 0, 0, 263, 264, + 265, 266, 267, 268, 269, 0, 0, 270, 271, 0, + 0, 274, 0, 275, 276, 277, 278, 0, 0, 280, + 0, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 0, 297, + 298, 299, 300, 0, 0, 0, 301, 0, 0, 0, + 302, 303, 304, 305, 306, 307, 0, 0, 310, 0, + 311, 0, 312, 313, 314, 315, 316, 317, 318, 0, + 319, 320, 321, 322, 0, 0, 323, 324, 325, 326, + 327, 0, 328, 329, 330, 0, 331, 332, 333, 0, + 334, 335, 336, 337, 0, 339, 340, 341, 342, 0, + 0, 344, 0, 345, 346, 347, 0, 349, 0, 350, + 0, 351, 352, 353, 0, 354, 355, 356, 357, 358, + 0, 359, 0, 0, 0, 362, 363, 0, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 0, 374, + 375, 376, 377, 378, 379, 380, 381, 0, 382, 383, + 0, 385, 386, 387, 388, 0, 0, 0, 0, 0, + 392, 393, 394, 395, 396, 397, 0, 0, 0, 0, + 402, 403, 404, 405, 406, 407, 0, 0, 408, 0, + 410, 411, 412, 0, 413, 414, 415, 0, 0, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 0, 435, 0, + 437, 438, 439, 440, 441, 442, 443, 0, 0, 446, + 0, 447, 448, 449, 450, 0, 0, 452, 0, 454, + 455, 456, 0, 457, 458, 0, 0, 459, 460, 461, + 0, 0, 462, 463, 0, 465, 466, 467, 0, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 0, + 479, 480, 0, 482, 0, 484, 485, 486, 0, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 0, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 0, 515, + 516, 517, 518, 519, 520, 521, 522, 0, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 0, 534, + 535, 536, 537, 538, 0, 539, 540, 0, 542, 543, + 544, 545, 546, 0, 548, 0, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 0, + 563, 0, 564, 565, 0, 0, 566, 567, 568, 569, + 570, 571, 572, 0, 573, 0, 0, 0, 0, 576, + 577, 0, 579, 0, 0, 581, 582, 583, 584, 585, + 586, 587, 588, 0, 0, 589, 590, 591, 592, 593, + 0, 0, 594, 595, 596, 597, 598, 0, 0, 0, + 601, 602, 603, 604, 605, 606, 0, 0, 607, 0, + 0, 608, 609, 610, 611, 612, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 625, 626, + 627 +}; + +static const yytype_int16 yycheck[] = +{ + 6, 0, 0, 1016, 0, 0, 0, 56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 211, 0, 206, 0, 850, 988, 21, 21, 663, 817, + 214, 917, 1025, 217, 36, 211, 45, 820, 776, 777, + 778, 8, 1142, 189, 782, 51, 22, 736, 15, 1018, + 1629, 1502, 28, 1474, 911, 1005, 913, 873, 2718, 1564, + 2011, 891, 989, 844, 642, 695, 2660, 1020, 1548, 1014, + 1203, 3037, 810, 862, 863, 2661, 1541, 3010, 1250, 3360, + 1553, 3362, 871, 1091, 1237, 843, 1869, 3075, 216, 876, + 827, 740, 3452, 44, 3185, 2000, 3653, 1548, 3573, 929, + 6, 1697, 230, 1222, 197, 23, 3874, 1226, 2019, 2035, + 1229, 1230, 1594, 1595, 3546, 1065, 1598, 695, 36, 1069, + 1541, 3847, 2036, 3022, 1074, 3599, 954, 3601, 2034, 4187, + 4234, 2929, 955, 988, 1084, 3863, 3799, 3411, 3896, 644, + 3462, 4230, 997, 3405, 2069, 191, 2071, 4734, 1098, 175, + 741, 979, 1007, 2907, 716, 1431, 984, 719, 1941, 1664, + 1665, 1882, 4527, 4510, 742, 1531, 35, 731, 191, 2, + 5214, 4312, 4472, 42, 4750, 4504, 4752, 4515, 2536, 1129, + 5054, 5236, 940, 2541, 3426, 1658, 5046, 5342, 2645, 50, + 2577, 197, 4997, 823, 2647, 5041, 3472, 3228, 3460, 4799, + 206, 207, 1025, 5256, 2682, 2683, 938, 914, 214, 5390, + 216, 217, 1685, 3410, 4514, 3412, 3861, 795, 41, 2975, + 3314, 2977, 2978, 914, 230, 1591, 2982, 2983, 2984, 0, + 2986, 2987, 2988, 4209, 6, 11, 5378, 2624, 23, 5624, + 5045, 0, 1608, 0, 6, 823, 5299, 979, 0, 4673, + 12, 6, 984, 15, 16, 5339, 6, 0, 56, 37, + 11, 96, 12, 27, 3018, 15, 16, 6, 11, 155, + 848, 1029, 6, 6, 225, 1514, 13, 6, 12, 5306, + 5307, 860, 861, 12, 74, 2006, 15, 16, 31, 13, + 65, 870, 121, 40, 5608, 23, 6, 2045, 80, 6, + 148, 123, 12, 93, 176, 12, 6, 0, 121, 6, + 47, 6, 12, 39, 6, 12, 1494, 12, 11, 6, + 12, 1059, 6, 2618, 3, 12, 6, 45, 12, 200, + 908, 6, 12, 45, 0, 65, 170, 12, 31, 3, + 49, 143, 6, 80, 82, 27, 3, 74, 12, 121, + 162, 1177, 4605, 4606, 4607, 21, 4609, 4610, 4611, 4612, + 4613, 114, 152, 121, 15, 126, 1848, 3, 82, 5, + 6, 82, 178, 5, 87, 11, 12, 141, 5, 11, + 5331, 1080, 172, 176, 11, 25, 154, 4528, 297, 221, + 56, 5846, 65, 65, 5507, 65, 176, 1096, 303, 6, + 297, 170, 278, 225, 176, 176, 126, 32, 318, 283, + 187, 192, 66, 92, 5260, 298, 646, 176, 65, 176, + 74, 141, 178, 169, 176, 152, 82, 5812, 136, 200, + 1375, 93, 1081, 176, 1387, 1443, 286, 93, 3548, 374, + 374, 200, 718, 200, 65, 172, 344, 1025, 200, 352, + 329, 37, 116, 151, 215, 429, 732, 200, 197, 141, + 282, 89, 1431, 429, 121, 167, 145, 206, 472, 95, + 5523, 176, 374, 34, 3265, 214, 3267, 3268, 217, 1268, + 1269, 262, 1435, 176, 5626, 121, 82, 663, 300, 5803, + 297, 339, 82, 299, 380, 200, 13, 1323, 311, 260, + 61, 403, 287, 93, 1293, 4834, 82, 200, 738, 13, + 82, 176, 138, 65, 154, 519, 126, 1304, 340, 5379, + 13, 176, 357, 172, 282, 191, 429, 137, 192, 31, + 47, 417, 31, 661, 65, 237, 38, 713, 166, 667, + 330, 31, 176, 126, 394, 519, 177, 245, 38, 313, + 1373, 679, 431, 519, 47, 1378, 1379, 429, 93, 287, + 176, 31, 339, 80, 13, 291, 1324, 465, 38, 155, + 5955, 176, 251, 459, 282, 49, 1402, 451, 334, 325, + 515, 515, 812, 358, 220, 354, 472, 80, 352, 472, + 1543, 216, 1183, 370, 248, 1353, 475, 378, 262, 123, + 406, 265, 183, 330, 513, 515, 183, 327, 517, 5722, + 496, 516, 248, 1243, 519, 491, 374, 183, 515, 6074, + 5571, 183, 390, 387, 436, 282, 5202, 126, 358, 515, + 287, 384, 215, 505, 313, 5719, 642, 30, 34, 128, + 5724, 5725, 1468, 1432, 193, 517, 459, 373, 519, 4312, + 648, 429, 648, 648, 1832, 661, 446, 429, 126, 6044, + 648, 667, 1517, 648, 648, 1243, 468, 515, 25, 5811, + 53, 404, 405, 679, 1624, 4338, 505, 1627, 1257, 1258, + 287, 515, 1695, 1696, 519, 358, 358, 519, 358, 695, + 451, 429, 456, 742, 700, 413, 1519, 519, 3808, 705, + 93, 413, 515, 709, 710, 387, 1529, 1396, 1635, 1288, + 716, 358, 718, 719, 378, 429, 215, 515, 429, 446, + 746, 5748, 515, 5147, 1579, 731, 732, 6112, 6042, 369, + 443, 513, 458, 505, 519, 517, 742, 358, 514, 519, + 1370, 420, 3037, 422, 519, 517, 741, 518, 1693, 458, + 390, 1579, 462, 515, 1461, 506, 507, 4483, 5618, 518, + 515, 518, 4237, 506, 507, 515, 518, 6152, 515, 451, + 1461, 917, 434, 429, 511, 518, 5622, 2016, 5959, 513, + 756, 515, 758, 517, 760, 178, 515, 511, 4345, 795, + 766, 519, 1370, 1616, 4351, 4523, 1619, 1620, 4524, 1615, + 1378, 1379, 4778, 770, 5946, 515, 358, 1539, 515, 496, + 497, 817, 818, 506, 507, 515, 1702, 823, 515, 5974, + 515, 496, 497, 515, 31, 518, 490, 358, 515, 1408, + 1409, 515, 65, 429, 27, 515, 1969, 788, 5891, 429, + 515, 451, 848, 1943, 850, 472, 519, 519, 1039, 519, + 515, 5904, 1036, 429, 505, 5108, 1040, 429, 1042, 905, + 1592, 1830, 513, 1039, 519, 4528, 517, 873, 451, 496, + 506, 507, 519, 1149, 506, 507, 1976, 1609, 4152, 506, + 507, 380, 905, 10, 515, 519, 13, 207, 1988, 895, + 17, 18, 19, 844, 429, 397, 216, 254, 519, 1598, + 5500, 4163, 908, 519, 6046, 4167, 472, 397, 907, 907, + 230, 907, 907, 907, 519, 907, 907, 907, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 397, 907, 4574, + 907, 455, 931, 4027, 1210, 3834, 5810, 1030, 519, 3693, + 3694, 334, 519, 176, 3698, 1221, 4222, 5807, 141, 1648, + 1649, 1586, 451, 519, 4151, 429, 4153, 519, 4433, 355, + 114, 700, 1238, 25, 453, 6018, 515, 519, 170, 6111, + 709, 922, 4003, 369, 3431, 371, 359, 716, 371, 3432, + 719, 155, 648, 451, 458, 5790, 937, 3374, 519, 1812, + 851, 508, 509, 510, 511, 6050, 6051, 3475, 821, 3477, + 4432, 5806, 825, 2618, 508, 509, 510, 511, 54, 1514, + 1016, 1017, 1018, 506, 507, 508, 509, 510, 511, 1025, + 176, 3777, 2035, 42, 1030, 114, 114, 176, 23, 1035, + 1036, 6186, 303, 5362, 1040, 23, 1042, 56, 434, 432, + 1046, 434, 188, 10, 200, 438, 13, 154, 78, 300, + 17, 18, 19, 6, 34, 6, 1062, 506, 507, 508, + 509, 510, 511, 420, 10, 2018, 93, 13, 27, 5369, + 298, 17, 18, 19, 33, 741, 742, 3831, 25, 126, + 70, 205, 5956, 332, 337, 364, 1595, 5947, 126, 1598, + 289, 37, 449, 112, 121, 6, 4338, 311, 176, 6154, + 1106, 100, 1108, 1109, 27, 3463, 121, 3402, 301, 5685, + 3405, 121, 90, 2066, 262, 322, 6, 474, 90, 178, + 2865, 25, 12, 25, 993, 994, 2095, 4559, 5232, 27, + 10, 6175, 5273, 13, 5878, 4495, 6137, 17, 18, 19, + 1878, 374, 369, 1149, 151, 188, 27, 167, 41, 195, + 1849, 298, 33, 27, 200, 133, 369, 3452, 515, 121, + 40, 133, 257, 356, 357, 3460, 1851, 177, 215, 303, + 6, 1177, 299, 452, 116, 382, 65, 215, 6052, 417, + 6224, 298, 141, 182, 29, 369, 1871, 282, 1183, 402, + 417, 2017, 254, 2019, 387, 214, 6197, 318, 244, 2025, + 2945, 10, 1985, 1986, 1210, 2031, 2032, 52, 17, 18, + 19, 2037, 219, 1219, 421, 1221, 423, 1795, 141, 1186, + 2046, 1188, 25, 1190, 123, 1192, 2052, 1194, 1195, 1196, + 378, 464, 1238, 200, 1201, 278, 6110, 1243, 131, 905, + 299, 907, 114, 141, 472, 459, 116, 6121, 519, 1255, + 192, 185, 5590, 273, 453, 282, 223, 1946, 25, 278, + 141, 2682, 515, 417, 515, 295, 515, 141, 4234, 5616, + 472, 5636, 287, 283, 1323, 5043, 5605, 223, 2751, 6153, + 429, 1114, 5620, 390, 1290, 5614, 1975, 515, 278, 5589, + 1979, 1030, 287, 417, 468, 1984, 303, 1036, 1987, 287, + 3021, 1040, 2782, 1042, 5030, 2063, 6180, 254, 5036, 5067, + 104, 457, 374, 1319, 1320, 1321, 472, 1323, 4793, 5619, + 262, 3799, 192, 265, 235, 472, 25, 25, 417, 417, + 6204, 515, 299, 380, 287, 5664, 287, 1343, 316, 1848, + 2616, 661, 1906, 223, 316, 3, 392, 667, 1910, 311, + 254, 429, 254, 299, 313, 472, 2829, 376, 420, 679, + 25, 25, 1953, 1925, 1370, 1391, 1928, 1106, 2964, 1108, + 1109, 216, 1378, 1379, 1938, 355, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 519, 74, 449, 287, 278, + 313, 185, 262, 352, 515, 265, 1402, 287, 6142, 437, + 1446, 1447, 5989, 1449, 451, 2771, 278, 298, 2043, 5498, + 1586, 3889, 474, 451, 457, 463, 1978, 90, 380, 299, + 1982, 1983, 3037, 1446, 1447, 1431, 1449, 374, 387, 352, + 364, 60, 313, 121, 92, 356, 378, 44, 445, 313, + 258, 3366, 1448, 453, 422, 164, 1452, 1453, 13, 10, + 422, 254, 13, 515, 4776, 417, 17, 18, 19, 278, + 133, 4735, 1468, 5792, 387, 387, 387, 515, 1474, 358, + 374, 352, 374, 420, 5966, 3054, 388, 4739, 352, 345, + 125, 27, 4744, 121, 278, 4747, 47, 254, 146, 179, + 299, 188, 180, 54, 124, 292, 292, 459, 387, 312, + 123, 130, 449, 115, 3252, 3253, 387, 292, 378, 3257, + 472, 2016, 1463, 387, 1465, 80, 420, 1183, 420, 80, + 4994, 318, 318, 232, 515, 2538, 245, 474, 177, 3, + 4496, 188, 170, 318, 496, 1541, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 449, 92, 449, 490, 207, + 3298, 3299, 4540, 515, 28, 254, 254, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 196, 6059, 515, 278, + 474, 374, 474, 515, 5952, 5953, 1582, 222, 136, 113, + 138, 278, 387, 387, 200, 1251, 477, 2540, 134, 254, + 254, 198, 458, 205, 282, 141, 292, 519, 144, 287, + 387, 1600, 225, 515, 5708, 1271, 1605, 374, 3073, 1615, + 5273, 515, 5380, 515, 5943, 179, 313, 420, 92, 181, + 490, 278, 318, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 426, 232, 195, 0, 387, 1913, 457, 200, + 5368, 5966, 330, 316, 301, 335, 449, 2616, 3069, 234, + 125, 1927, 3073, 420, 5560, 352, 5562, 1323, 346, 282, + 5566, 5567, 320, 5721, 1940, 4421, 123, 431, 317, 6161, + 4426, 474, 146, 472, 1680, 374, 374, 39, 368, 278, + 1679, 390, 449, 244, 1683, 137, 248, 22, 369, 1695, + 1696, 1697, 382, 28, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 1654, 312, 4503, 134, 474, 742, 374, + 374, 6040, 515, 2706, 519, 519, 144, 340, 515, 515, + 519, 420, 420, 177, 282, 259, 200, 1911, 418, 263, + 515, 1922, 519, 207, 6059, 6113, 352, 387, 299, 515, + 356, 340, 451, 4497, 393, 1921, 1922, 222, 515, 422, + 449, 449, 209, 313, 164, 420, 420, 211, 446, 121, + 457, 795, 374, 215, 113, 170, 4732, 313, 519, 2595, + 451, 387, 226, 396, 31, 474, 474, 182, 6107, 387, + 1446, 1447, 344, 1449, 449, 449, 444, 3402, 242, 1795, + 3405, 390, 352, 123, 452, 200, 415, 455, 431, 4459, + 457, 1807, 348, 415, 368, 417, 352, 1900, 31, 474, + 474, 375, 1818, 101, 848, 329, 515, 515, 382, 515, + 301, 278, 171, 429, 1830, 282, 453, 387, 1834, 5887, + 123, 392, 313, 452, 4312, 245, 6161, 3452, 518, 4021, + 4022, 387, 475, 312, 2813, 3460, 320, 1853, 394, 354, + 515, 515, 451, 312, 418, 1861, 472, 5625, 207, 421, + 4338, 423, 2678, 1869, 3, 469, 505, 2043, 4163, 519, + 2839, 352, 4167, 519, 908, 2658, 440, 170, 517, 136, + 496, 5607, 1888, 2706, 294, 313, 313, 449, 515, 177, + 364, 1897, 164, 10, 1900, 225, 13, 1903, 170, 505, + 1906, 1907, 453, 465, 1910, 1911, 5634, 1913, 1914, 363, + 259, 517, 2875, 136, 263, 519, 209, 431, 387, 1925, + 4102, 1927, 1928, 211, 352, 121, 2781, 5833, 387, 124, + 47, 1937, 1938, 494, 1940, 1941, 5198, 54, 226, 4234, + 414, 303, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 6055, 282, 92, 242, 515, 181, 362, 1953, 178, + 387, 475, 158, 80, 515, 6, 37, 472, 82, 2938, + 444, 12, 1978, 245, 27, 5407, 1982, 1983, 452, 93, + 33, 455, 270, 464, 2033, 278, 278, 380, 1955, 282, + 1957, 496, 1959, 212, 1961, 463, 1963, 193, 3098, 371, + 1967, 196, 2000, 3954, 2000, 2000, 145, 2009, 5099, 297, + 340, 2017, 2000, 2019, 519, 2000, 2000, 204, 2024, 2025, + 2875, 3972, 294, 248, 417, 2031, 2032, 2033, 2034, 2035, + 2036, 2037, 149, 258, 2040, 3004, 2042, 5805, 2044, 2045, + 2046, 2047, 2048, 2049, 1995, 313, 2052, 515, 2054, 2055, + 4528, 3472, 2058, 6157, 5020, 303, 2879, 313, 2913, 5270, + 352, 3482, 434, 4996, 2887, 5823, 459, 2890, 2074, 2075, + 2076, 2077, 2958, 2959, 2960, 363, 5804, 3988, 195, 4005, + 348, 332, 151, 200, 352, 4011, 282, 2093, 141, 2095, + 153, 278, 2947, 371, 2012, 164, 352, 2855, 3563, 3678, + 2928, 170, 5035, 5314, 4010, 1600, 4020, 124, 4014, 4015, + 1605, 13, 251, 3285, 5588, 2853, 5015, 2855, 434, 387, + 5401, 472, 515, 313, 352, 82, 164, 244, 2706, 377, + 344, 387, 170, 291, 313, 5226, 93, 5228, 344, 202, + 3090, 155, 3563, 505, 313, 47, 313, 3930, 283, 284, + 219, 513, 313, 515, 516, 517, 434, 519, 1897, 387, + 3756, 1900, 352, 472, 5639, 453, 3762, 381, 519, 3651, + 465, 1910, 1911, 352, 313, 381, 245, 356, 80, 196, + 5948, 235, 299, 352, 1679, 352, 1925, 496, 1683, 1928, + 356, 352, 3161, 369, 313, 371, 421, 387, 423, 377, + 4495, 4496, 4958, 417, 4960, 4961, 4962, 245, 387, 348, + 519, 417, 352, 352, 2903, 515, 2905, 356, 387, 171, + 2909, 387, 472, 282, 449, 294, 2925, 3700, 287, 5661, + 4984, 2237, 4986, 352, 303, 758, 759, 760, 4143, 1978, + 763, 764, 765, 1982, 1983, 380, 496, 387, 387, 170, + 773, 465, 5218, 5613, 357, 207, 294, 515, 434, 465, + 31, 151, 472, 340, 56, 515, 5232, 516, 387, 261, + 519, 170, 3745, 194, 164, 392, 353, 6045, 2284, 338, + 170, 420, 417, 422, 387, 258, 496, 1953, 5569, 50, + 4038, 4039, 4040, 4041, 3466, 194, 4044, 4045, 4046, 4047, + 4048, 4049, 4050, 4051, 4052, 4053, 383, 3276, 170, 282, + 102, 434, 73, 3282, 85, 472, 272, 88, 29, 496, + 497, 354, 5, 94, 459, 3148, 3064, 5884, 11, 219, + 6056, 2337, 194, 472, 2000, 127, 19, 472, 515, 496, + 296, 52, 3041, 3042, 3043, 3044, 6212, 3046, 6214, 429, + 6, 122, 377, 145, 37, 245, 12, 149, 1592, 983, + 1680, 496, 4110, 4111, 4836, 3870, 380, 2033, 6234, 35, + 36, 4843, 3071, 453, 3023, 1609, 445, 494, 1002, 171, + 515, 1005, 5, 175, 421, 2051, 423, 151, 11, 506, + 507, 508, 509, 510, 511, 513, 97, 515, 190, 517, + 164, 496, 497, 417, 294, 510, 170, 71, 72, 180, + 515, 510, 517, 303, 5889, 5890, 515, 421, 517, 423, + 515, 756, 193, 758, 5390, 760, 5707, 516, 3254, 258, + 519, 766, 767, 768, 100, 206, 5525, 4732, 514, 258, + 3266, 5530, 5531, 519, 4739, 459, 380, 513, 515, 4744, + 517, 517, 4747, 151, 120, 219, 3145, 6183, 472, 516, + 508, 513, 519, 515, 6, 513, 164, 515, 3226, 517, + 12, 10, 170, 205, 13, 3361, 3302, 101, 17, 18, + 19, 245, 496, 417, 6, 10, 261, 5453, 13, 155, + 12, 6, 17, 18, 19, 287, 6, 12, 37, 6, + 194, 515, 12, 2779, 151, 12, 100, 434, 2514, 2515, + 2516, 2517, 2518, 2519, 2520, 2521, 2522, 164, 2524, 514, + 3346, 219, 6, 170, 519, 459, 120, 89, 12, 2535, + 294, 5, 2538, 1853, 5, 465, 6011, 11, 472, 303, + 11, 1861, 516, 61, 3367, 519, 338, 245, 4163, 1869, + 6, 2742, 4167, 177, 235, 445, 12, 2741, 6, 2743, + 2744, 155, 496, 5319, 12, 6, 2742, 515, 22, 517, + 297, 12, 219, 2579, 28, 302, 2242, 2583, 15, 16, + 2586, 515, 2588, 508, 2578, 2591, 3705, 211, 513, 2595, + 515, 472, 517, 474, 1914, 472, 294, 474, 245, 3386, + 3387, 297, 226, 979, 516, 303, 302, 519, 984, 421, + 2616, 423, 2618, 274, 275, 276, 277, 377, 242, 4234, + 955, 1941, 3549, 516, 6099, 516, 519, 3364, 519, 2635, + 516, 516, 403, 519, 519, 406, 4587, 516, 2644, 2645, + 519, 516, 515, 3473, 519, 2738, 270, 294, 3575, 463, + 2778, 101, 4603, 5641, 11, 516, 303, 516, 519, 3417, + 519, 1184, 15, 16, 1187, 2671, 1189, 2663, 1191, 472, + 1193, 474, 2678, 297, 1197, 516, 2682, 2683, 519, 369, + 370, 445, 348, 2689, 223, 516, 3321, 2693, 519, 516, + 1025, 2697, 519, 516, 3483, 3550, 519, 415, 223, 516, + 2706, 3654, 519, 4451, 4630, 4284, 2708, 472, 2710, 474, + 4636, 4637, 2618, 284, 380, 297, 516, 516, 2724, 519, + 519, 2727, 4505, 40, 6005, 5020, 3859, 177, 516, 374, + 516, 519, 2738, 519, 2740, 2741, 2864, 2743, 2744, 363, + 2746, 515, 5708, 516, 311, 62, 519, 445, 5502, 513, + 519, 417, 2758, 517, 348, 2056, 5510, 5511, 2059, 516, + 299, 211, 519, 516, 516, 516, 519, 519, 519, 35, + 36, 3626, 2778, 2779, 299, 516, 226, 4282, 519, 4284, + 516, 2787, 516, 519, 515, 519, 380, 4260, 421, 3367, + 423, 5882, 242, 459, 4274, 5273, 113, 463, 445, 2750, + 61, 4222, 516, 2809, 2810, 519, 472, 2813, 136, 380, + 138, 3500, 516, 380, 516, 519, 2944, 519, 3971, 516, + 270, 516, 519, 417, 519, 516, 496, 497, 519, 3798, + 496, 2837, 3840, 2839, 369, 370, 516, 2843, 10, 519, + 516, 13, 518, 5809, 5179, 4318, 417, 5182, 465, 515, + 417, 2857, 3802, 516, 516, 50, 519, 519, 2864, 516, + 492, 2867, 519, 369, 370, 459, 513, 2873, 516, 516, + 517, 519, 516, 516, 518, 47, 519, 6158, 472, 2618, + 4495, 4496, 54, 4134, 300, 4136, 203, 2893, 459, 369, + 370, 516, 459, 2899, 519, 5239, 5240, 3527, 2849, 5485, + 2906, 472, 496, 5198, 516, 472, 516, 519, 80, 519, + 4723, 3649, 4725, 363, 2920, 5393, 3654, 516, 2584, 516, + 519, 515, 519, 5218, 225, 496, 2902, 2933, 40, 496, + 516, 297, 2938, 519, 6215, 170, 516, 5232, 2944, 519, + 516, 492, 259, 519, 515, 516, 263, 518, 515, 3527, + 62, 516, 2618, 4168, 519, 4170, 2962, 2963, 2964, 517, + 516, 278, 2968, 519, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 516, 5676, 5677, 519, 149, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 297, 516, 2995, + 2996, 519, 1463, 5959, 1465, 312, 50, 2663, 3004, 2738, + 516, 113, 2741, 519, 2743, 2744, 5852, 5853, 3192, 5942, + 3194, 3195, 4517, 516, 516, 516, 519, 519, 519, 516, + 300, 516, 519, 195, 519, 492, 516, 516, 200, 519, + 519, 3037, 225, 516, 516, 4207, 519, 519, 1373, 516, + 357, 175, 519, 1378, 1379, 462, 516, 516, 516, 519, + 519, 519, 516, 516, 516, 519, 519, 519, 519, 516, + 3056, 4512, 519, 3069, 381, 54, 55, 3073, 4533, 508, + 10, 1406, 244, 13, 326, 515, 39, 17, 18, 19, + 1415, 515, 1417, 6049, 401, 516, 1421, 515, 519, 6055, + 3828, 203, 515, 1428, 516, 5390, 3189, 3796, 516, 61, + 176, 519, 4235, 4236, 516, 4074, 4239, 519, 516, 515, + 5704, 10, 4533, 516, 13, 221, 519, 4732, 17, 18, + 19, 221, 516, 516, 4739, 519, 519, 299, 4081, 4744, + 516, 3037, 4747, 519, 516, 352, 516, 519, 37, 519, + 516, 516, 515, 519, 519, 3321, 516, 259, 517, 519, + 476, 263, 515, 3159, 515, 3161, 3979, 3846, 5453, 200, + 516, 516, 74, 519, 519, 156, 278, 515, 80, 156, + 3176, 517, 3178, 297, 3804, 516, 3806, 3958, 519, 3185, + 200, 93, 352, 3189, 1519, 3191, 3192, 297, 3194, 3195, + 3196, 6157, 4137, 516, 1529, 156, 519, 156, 3204, 516, + 312, 516, 200, 3209, 519, 3254, 156, 4033, 297, 121, + 516, 123, 516, 519, 516, 519, 170, 519, 156, 3225, + 392, 3497, 3498, 2609, 2610, 2611, 3804, 4180, 3806, 516, + 516, 352, 519, 519, 243, 123, 297, 453, 1573, 1574, + 515, 4067, 291, 170, 516, 357, 3252, 3253, 3254, 74, + 3426, 3257, 282, 3302, 3943, 0, 40, 282, 3888, 3265, + 3266, 3267, 3268, 476, 4217, 515, 297, 282, 180, 381, + 3276, 4850, 50, 50, 282, 3281, 3282, 439, 3284, 282, + 3286, 1616, 92, 223, 1619, 1620, 313, 465, 465, 401, + 89, 434, 3298, 3299, 4120, 170, 3302, 209, 3037, 333, + 156, 5961, 156, 515, 156, 156, 156, 476, 156, 519, + 3888, 156, 156, 156, 156, 156, 156, 3323, 5613, 3325, + 156, 3327, 494, 170, 223, 156, 156, 93, 156, 156, + 297, 417, 515, 4283, 506, 507, 508, 509, 510, 511, + 3346, 40, 4311, 243, 4313, 3354, 3355, 3356, 4828, 170, + 10, 2671, 170, 13, 297, 100, 3405, 515, 515, 299, + 515, 3367, 170, 515, 515, 515, 515, 3643, 4337, 2689, + 282, 515, 289, 2693, 515, 287, 515, 2697, 515, 515, + 515, 473, 515, 515, 515, 5133, 515, 47, 515, 3665, + 3056, 309, 515, 515, 54, 515, 3402, 515, 515, 3405, + 299, 515, 515, 165, 2724, 5020, 151, 3456, 515, 221, + 515, 515, 3418, 5708, 515, 181, 515, 3423, 330, 164, + 80, 515, 4252, 4556, 515, 170, 519, 515, 40, 519, + 4219, 176, 3438, 104, 346, 40, 243, 182, 2758, 205, + 185, 40, 515, 39, 189, 427, 3452, 427, 513, 513, + 3189, 429, 429, 3192, 3460, 3194, 3195, 62, 2778, 429, + 515, 429, 176, 519, 170, 5416, 3472, 170, 294, 3475, + 292, 3477, 387, 70, 219, 517, 3482, 1812, 429, 4429, + 4407, 429, 248, 374, 429, 464, 245, 429, 374, 149, + 2810, 3497, 3498, 429, 429, 6155, 3402, 3503, 374, 3405, + 245, 429, 81, 429, 505, 429, 93, 374, 113, 156, + 297, 379, 240, 429, 5809, 4338, 429, 2837, 3524, 287, + 129, 3527, 429, 2843, 3530, 420, 318, 452, 297, 292, + 369, 4417, 3538, 429, 446, 195, 302, 2857, 193, 515, + 200, 515, 429, 3819, 2864, 3821, 3452, 2867, 93, 294, + 519, 129, 297, 2873, 3460, 313, 200, 3563, 303, 453, + 453, 156, 129, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 429, 2893, 429, 180, 429, 115, 129, 2899, + 429, 61, 61, 5198, 244, 267, 2906, 337, 3254, 301, + 337, 429, 429, 3599, 3600, 3601, 429, 429, 203, 337, + 2920, 420, 318, 5218, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 2933, 429, 360, 429, 5232, 3624, 49, + 4589, 318, 49, 3799, 2944, 429, 429, 3633, 429, 3635, + 519, 429, 429, 429, 429, 429, 3302, 3643, 429, 299, + 429, 429, 516, 520, 297, 5066, 223, 223, 223, 223, + 223, 223, 223, 223, 259, 421, 297, 423, 263, 3665, + 3326, 223, 223, 3402, 5959, 429, 3405, 439, 434, 515, + 40, 156, 417, 278, 297, 156, 3342, 121, 5426, 282, + 446, 156, 453, 449, 156, 464, 136, 10, 138, 156, + 13, 297, 2027, 2028, 17, 18, 19, 251, 3974, 282, + 445, 282, 282, 2038, 2039, 40, 170, 312, 5456, 515, + 515, 40, 162, 3452, 37, 136, 235, 138, 51, 376, + 156, 3460, 515, 3729, 469, 156, 471, 472, 453, 453, + 156, 156, 392, 291, 429, 2070, 3402, 286, 176, 3405, + 515, 162, 468, 267, 267, 3751, 13, 427, 493, 519, + 3756, 429, 357, 185, 6049, 515, 3762, 431, 4581, 515, + 6055, 515, 308, 516, 519, 3771, 265, 516, 513, 193, + 193, 516, 517, 518, 513, 5390, 381, 227, 378, 492, + 516, 1453, 492, 516, 516, 516, 3452, 232, 469, 519, + 3456, 219, 3798, 3799, 3460, 298, 401, 390, 3804, 519, + 3806, 453, 40, 453, 306, 61, 227, 516, 464, 374, + 515, 453, 232, 3819, 232, 3821, 287, 287, 4771, 429, + 170, 429, 429, 515, 274, 275, 276, 277, 287, 297, + 50, 281, 282, 396, 494, 3841, 297, 287, 5453, 3159, + 282, 243, 243, 243, 369, 4671, 506, 507, 508, 509, + 510, 511, 261, 274, 275, 276, 277, 297, 3178, 129, + 281, 3867, 6157, 429, 420, 3185, 287, 387, 519, 4685, + 200, 519, 5005, 194, 352, 297, 384, 3873, 297, 429, + 297, 472, 3888, 3889, 340, 429, 4575, 4576, 4577, 4578, + 4579, 303, 516, 40, 453, 223, 453, 4754, 235, 336, + 223, 505, 156, 292, 170, 3911, 40, 418, 172, 156, + 465, 384, 156, 3909, 515, 156, 292, 515, 453, 472, + 282, 337, 40, 5374, 3930, 282, 3877, 29, 297, 297, + 235, 292, 191, 191, 170, 40, 171, 235, 384, 170, + 282, 297, 476, 3949, 61, 200, 429, 3953, 200, 200, + 200, 200, 176, 264, 472, 519, 297, 291, 176, 519, + 176, 493, 458, 303, 309, 136, 319, 519, 3974, 176, + 517, 519, 4118, 515, 281, 516, 299, 516, 4766, 519, + 516, 429, 519, 516, 3990, 516, 436, 3993, 516, 516, + 0, 492, 3998, 515, 4000, 516, 258, 447, 5613, 516, + 516, 516, 516, 5508, 4010, 496, 516, 3958, 4014, 4015, + 519, 516, 516, 176, 4020, 436, 4966, 515, 4841, 516, + 515, 515, 4028, 515, 4030, 514, 447, 4033, 469, 515, + 514, 4037, 4038, 4039, 4040, 4041, 185, 519, 4044, 4045, + 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 495, 253, + 505, 4057, 4058, 4059, 451, 469, 4062, 297, 61, 205, + 459, 4067, 515, 297, 297, 156, 4072, 4116, 4074, 429, + 4076, 300, 515, 213, 429, 429, 515, 287, 4084, 159, + 429, 4087, 282, 4089, 156, 387, 406, 379, 156, 156, + 100, 379, 379, 5708, 205, 243, 159, 505, 297, 159, + 374, 4107, 429, 469, 4110, 4111, 453, 245, 320, 4115, + 4116, 320, 450, 159, 4120, 429, 4122, 4126, 4127, 4128, + 4129, 429, 4757, 403, 255, 429, 429, 255, 255, 429, + 429, 374, 429, 429, 429, 374, 4312, 374, 429, 429, + 129, 151, 374, 282, 156, 4143, 429, 4143, 4143, 4155, + 429, 49, 429, 516, 164, 4143, 514, 4163, 4143, 4143, + 170, 4167, 4338, 188, 387, 516, 176, 223, 516, 223, + 516, 301, 182, 516, 439, 185, 3, 40, 170, 189, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 50, + 114, 516, 170, 4199, 5809, 519, 515, 519, 516, 62, + 40, 4477, 4478, 156, 3524, 156, 170, 3873, 429, 219, + 4216, 505, 188, 292, 515, 156, 4222, 374, 374, 374, + 374, 5642, 374, 453, 384, 88, 453, 154, 4234, 154, + 519, 513, 223, 223, 147, 245, 4925, 4926, 223, 4928, + 223, 223, 223, 3909, 5992, 5993, 223, 4985, 223, 4255, + 113, 114, 223, 227, 360, 297, 297, 4163, 121, 61, + 297, 4167, 297, 13, 309, 176, 519, 464, 516, 446, + 516, 2606, 2607, 281, 516, 307, 446, 2612, 226, 226, + 304, 61, 419, 189, 294, 426, 514, 297, 5174, 360, + 516, 516, 458, 303, 91, 439, 515, 519, 170, 516, + 4306, 516, 516, 40, 3624, 4311, 4312, 4313, 453, 2644, + 2645, 453, 515, 515, 515, 235, 429, 180, 213, 61, + 420, 156, 5208, 88, 180, 403, 379, 439, 4234, 159, + 429, 4337, 4338, 429, 429, 374, 429, 429, 374, 352, + 203, 516, 516, 516, 5959, 5924, 515, 472, 515, 61, + 360, 420, 4528, 170, 297, 5324, 459, 80, 156, 114, + 208, 223, 439, 2035, 2036, 516, 223, 232, 223, 223, + 429, 2706, 705, 2045, 297, 476, 4352, 40, 4384, 515, + 515, 4387, 2054, 515, 318, 295, 519, 516, 4364, 297, + 3, 515, 439, 519, 46, 429, 259, 519, 731, 515, + 263, 516, 183, 182, 384, 114, 176, 417, 223, 516, + 145, 287, 516, 287, 287, 278, 287, 176, 516, 282, + 61, 470, 516, 10, 4163, 309, 13, 516, 4167, 516, + 470, 3751, 233, 519, 6049, 445, 318, 233, 226, 515, + 6055, 516, 516, 471, 505, 4451, 5546, 426, 5548, 312, + 4116, 515, 439, 515, 10, 2790, 292, 13, 176, 469, + 47, 471, 472, 429, 80, 472, 207, 54, 194, 194, + 61, 4477, 4478, 287, 287, 4481, 505, 4143, 420, 429, + 27, 519, 4488, 493, 74, 429, 33, 156, 519, 4495, + 4496, 47, 429, 80, 357, 4234, 429, 4163, 54, 4505, + 159, 4167, 5191, 513, 223, 516, 516, 517, 518, 515, + 128, 178, 121, 5202, 40, 200, 292, 515, 381, 40, + 384, 453, 4528, 172, 80, 4521, 282, 4533, 4534, 4535, + 292, 78, 384, 472, 61, 86, 472, 420, 401, 4545, + 403, 40, 6157, 406, 2879, 176, 297, 515, 5681, 4825, + 170, 300, 2887, 347, 519, 2890, 210, 221, 516, 516, + 516, 176, 149, 515, 5557, 458, 400, 2902, 5351, 61, + 516, 377, 40, 83, 93, 515, 137, 515, 201, 346, + 4586, 4757, 297, 4589, 429, 5718, 516, 134, 516, 4495, + 4496, 40, 156, 149, 141, 170, 156, 144, 5233, 515, + 429, 515, 40, 515, 287, 256, 5432, 453, 195, 4615, + 3930, 515, 515, 200, 515, 515, 515, 156, 384, 516, + 5446, 114, 40, 4629, 171, 516, 301, 176, 439, 3949, + 398, 5764, 5765, 3953, 398, 516, 170, 4643, 204, 195, + 4916, 5467, 113, 40, 200, 468, 516, 515, 5474, 515, + 5285, 458, 515, 193, 453, 515, 515, 244, 170, 420, + 207, 519, 420, 205, 515, 4671, 519, 278, 4674, 297, + 6, 515, 163, 516, 515, 370, 4682, 4683, 370, 4685, + 74, 476, 74, 300, 4690, 4691, 518, 137, 244, 4695, + 472, 142, 516, 468, 472, 458, 4702, 457, 167, 4705, + 4706, 167, 1035, 519, 37, 515, 4712, 515, 387, 257, + 420, 176, 299, 1046, 343, 5541, 5542, 287, 207, 420, + 5689, 297, 515, 297, 384, 40, 4732, 40, 300, 1062, + 515, 278, 300, 4739, 5557, 282, 178, 5013, 4744, 201, + 155, 4747, 4748, 299, 178, 292, 515, 369, 152, 4755, + 61, 61, 304, 40, 301, 10, 4495, 4496, 13, 353, + 4766, 61, 516, 5756, 425, 407, 313, 429, 4774, 126, + 451, 516, 4768, 4769, 6, 5464, 384, 515, 142, 37, + 287, 515, 425, 515, 5917, 5754, 26, 369, 4794, 4791, + 10, 519, 47, 13, 305, 519, 369, 83, 283, 54, + 176, 387, 429, 283, 515, 392, 4812, 155, 355, 356, + 398, 5774, 121, 3148, 398, 519, 515, 472, 458, 4825, + 459, 453, 472, 178, 178, 80, 4732, 47, 515, 4495, + 516, 5400, 458, 4739, 54, 459, 392, 907, 4744, 947, + 387, 4747, 3367, 2913, 994, 2822, 4852, 1682, 3575, 1379, + 993, 4311, 5985, 5986, 4286, 4521, 5908, 2939, 3790, 4835, + 80, 5550, 2993, 4869, 5327, 5754, 6026, 4475, 4874, 4845, + 0, 5697, 5374, 5699, 4284, 4881, 4284, 4975, 5350, 3504, + 3135, 5888, 5232, 6014, 5784, 5783, 1219, 5928, 6049, 5020, + 3508, 4897, 4496, 4522, 149, 4507, 5728, 4465, 4904, 3007, + 3007, 4306, 3838, 4491, 989, 3600, 5014, 494, 5357, 456, + 4916, 3882, 4558, 5654, 6122, 45, 6227, 6209, 5341, 506, + 507, 508, 509, 510, 511, 3798, 5940, 4530, 5287, 5528, + 5737, 1842, 5290, 18, 28, 4255, 644, 5497, 494, 1211, + 195, 4947, 3947, 4586, 4589, 200, 2683, 6118, 3023, 1886, + 506, 507, 508, 509, 510, 511, 3482, 5400, 4533, 5642, + 1883, 1921, 3893, 2635, 1897, 5543, 696, 4973, 2938, 3732, + 100, 4337, 729, 3651, 5966, 195, 6161, 4562, 2969, 5557, + 200, 1795, 4564, 4989, 2625, 5723, 1498, 6177, 4994, 244, + 4214, 838, 1395, 4732, 5494, 1354, 4770, 5881, 5274, 40, + 4739, 40, 3423, 3438, 1456, 4744, 4629, 5013, 4747, 4748, + 5869, 5701, 4152, 2635, 5020, 3405, 4169, 5199, 3402, 5453, + 1455, 151, 5452, 4215, 244, 1458, 6139, 3402, 5863, 5996, + 3365, 5688, 3367, 6026, 164, 1412, 5032, 5430, 2529, 4076, + 170, 5702, 3344, 5703, 299, 2530, 176, 2047, 3383, 3326, + 3205, 2968, 182, 3324, 3314, 185, 3240, 5233, 4013, 189, + 5066, -1, 5068, 2535, 4384, -1, 2623, 4387, -1, 895, + -1, -1, -1, 4739, -1, -1, -1, -1, 4744, 299, + -1, 4747, -1, -1, -1, 5720, -1, -1, -1, 219, + -1, 221, -1, 5099, 5285, 3430, 3431, 5273, -1, -1, + 5284, -1, 4768, 4769, -1, -1, 6, -1, -1, 5285, + -1, -1, -1, -1, 5020, 245, -1, -1, -1, -1, + -1, -1, -1, 23, 5130, 25, -1, 5133, -1, 29, + 5136, 5137, 5138, -1, 34, 35, 36, 392, 38, -1, + -1, 41, 42, -1, 44, 5329, 46, -1, -1, -1, + -1, -1, -1, 53, 54, 55, -1, 5163, 5164, -1, + -1, 5167, -1, -1, 294, -1, -1, 297, 4488, -1, + -1, -1, 392, 303, -1, -1, -1, -1, 5756, -1, + -1, -1, 5188, 6196, -1, 4505, -1, -1, 5194, -1, + -1, -1, 5198, -1, -1, 6164, -1, -1, 5204, 5205, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5218, -1, -1, 5221, -1, -1, -1, -1, + 5226, -1, 5228, -1, -1, -1, 5232, -1, -1, -1, + 360, -1, -1, -1, -1, -1, -1, -1, -1, 494, + 6209, -1, -1, -1, 5211, -1, -1, -1, -1, 1582, + 4989, 506, 507, 508, 509, 510, 511, -1, 6227, -1, + -1, -1, -1, -1, -1, -1, 4586, 5273, 5274, -1, + -1, -1, -1, -1, 494, -1, 6102, -1, 5284, -1, + -1, 5020, -1, 413, -1, -1, 506, 507, 508, 509, + 510, 511, 5198, -1, -1, -1, -1, 197, 198, 199, + -1, -1, 202, -1, -1, -1, 206, -1, 208, -1, + -1, 211, 5218, -1, 214, 445, -1, 217, 5324, -1, + 220, -1, 222, 5329, 6210, 225, 5232, -1, -1, 229, + 5908, 231, -1, -1, -1, -1, -1, -1, -1, 469, + -1, 471, 472, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5355, + -1, -1, -1, 493, -1, -1, 5032, 6105, 6106, -1, + -1, -1, -1, -1, -1, 6201, -1, -1, -1, -1, + -1, -1, -1, -1, 5390, -1, 516, 5393, 518, 519, + 5386, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5400, 5400, -1, 5400, 5400, 5400, -1, 5400, 5400, + 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, + 5426, 5400, -1, 5400, 5430, 5474, 5432, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5389, 40, + 5446, -1, -1, -1, -1, -1, -1, 5453, 6026, -1, + 5456, -1, -1, -1, -1, -1, -1, -1, -1, 5198, + -1, 5467, -1, 64, 3799, -1, -1, -1, 5474, -1, + -1, -1, -1, -1, 1807, -1, -1, -1, -1, 5218, + -1, -1, -1, -1, 5390, 1818, -1, 3822, -1, -1, + -1, -1, -1, 5232, -1, -1, -1, -1, 99, -1, + -1, 1834, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5525, + -1, -1, -1, -1, 5530, 5531, -1, -1, -1, 5535, + -1, -1, 5198, -1, -1, 5541, 5542, 5543, -1, -1, + -1, -1, -1, -1, 5720, 5284, -1, 5453, -1, 4869, + 27, 5557, -1, -1, -1, 1888, 33, -1, -1, 160, + -1, 4881, -1, -1, -1, -1, -1, -1, -1, -1, + 1903, 5577, -1, 1906, 1907, -1, -1, -1, -1, 5585, + 3252, 3253, 5588, -1, -1, 3257, -1, -1, -1, -1, + 5329, -1, -1, -1, -1, -1, 197, -1, -1, -1, + -1, 78, -1, -1, 1937, 1938, -1, 5613, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5615, + -1, -1, -1, -1, -1, -1, 3298, 3299, -1, -1, + -1, -1, -1, -1, 235, -1, 5642, 5643, -1, 240, + -1, -1, -1, -1, 3979, -1, -1, -1, -1, -1, + -1, 5390, -1, -1, -1, -1, -1, 134, -1, -1, + 5666, -1, -1, -1, 141, -1, -1, 144, 27, 5675, + 5676, 5677, -1, -1, 33, -1, -1, -1, -1, -1, + -1, 282, 5688, 5689, -1, -1, 5692, -1, -1, 5355, + -1, 5697, -1, 5699, 171, 5701, -1, -1, -1, -1, + -1, -1, 5708, -1, -1, -1, -1, 5613, -1, 5705, + -1, 5895, -1, 314, 5453, -1, -1, -1, -1, 78, + 5386, -1, -1, 5729, -1, -1, -1, -1, -1, -1, + 207, -1, -1, -1, 5400, -1, -1, -1, -1, -1, + -1, 2074, -1, 643, -1, -1, -1, -1, 5754, 649, + 5756, 651, -1, 653, -1, 356, 656, -1, -1, -1, + 361, -1, -1, 663, -1, -1, -1, -1, 668, 370, + 670, -1, -1, -1, -1, 134, 676, -1, 379, 5099, + -1, -1, 141, 5967, 5968, 144, 387, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 399, -1, + 700, 278, 5708, 5809, -1, 282, -1, 408, 5474, 709, + -1, 412, 171, 713, -1, 292, 716, -1, -1, 719, + -1, -1, -1, -1, 301, -1, -1, -1, -1, -1, + -1, 432, -1, -1, -1, 735, 313, -1, -1, -1, + 5846, -1, -1, -1, -1, -1, 5585, -1, 207, -1, + -1, -1, -1, 5859, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5869, -1, -1, 467, -1, -1, -1, + 471, -1, -1, 5879, 5613, 352, 5882, -1, 355, 356, + -1, -1, -1, -1, -1, -1, -1, -1, 788, 5895, + -1, -1, -1, -1, -1, -1, -1, 797, -1, -1, + -1, -1, 5908, 5809, -1, -1, 5226, -1, 5228, -1, + 387, -1, -1, -1, -1, -1, -1, 817, 818, 278, + 820, 821, -1, 282, -1, 825, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, -1, -1, 839, + -1, -1, 301, 5949, 844, 5941, -1, 5613, -1, 5615, + 850, -1, -1, 5959, 313, -1, -1, -1, -1, -1, + -1, 5967, 5968, -1, -1, -1, -1, 5973, -1, 5708, + 5966, 5966, -1, -1, -1, -1, -1, 4312, 5966, 456, + -1, 5966, 5966, -1, -1, -1, 5992, 5993, -1, -1, + -1, -1, -1, 352, -1, 895, 355, 356, -1, -1, + -1, -1, -1, 4338, -1, -1, -1, -1, -1, 909, + 6059, -1, -1, -1, -1, -1, -1, 4352, -1, -1, + 6026, -1, 922, -1, 40, -1, -1, -1, 387, 4364, + -1, -1, -1, 6217, 6218, -1, -1, 937, -1, 5705, + -1, -1, -1, 6049, -1, -1, -1, -1, 64, 6055, + -1, -1, -1, 5959, -1, -1, 956, -1, -1, -1, + -1, 961, 962, 6059, 6059, -1, -1, 6073, 6074, -1, + 5809, 6059, -1, -1, 6059, 6059, -1, -1, -1, -1, + -1, -1, 6088, 99, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 993, 994, -1, 6102, 456, -1, -1, + -1, -1, -1, -1, -1, 4440, 4441, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1016, 1017, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1030, 6137, 1032, -1, -1, -1, 1036, 0, -1, 1039, + 1040, -1, 1042, 6049, 160, -1, -1, 1047, -1, 6055, + -1, 6157, -1, -1, -1, -1, 5895, -1, 6164, -1, + -1, -1, -1, -1, -1, 6161, 6161, -1, -1, -1, + -1, 1071, -1, 6161, -1, -1, 6161, 6161, 1078, 1079, + -1, 197, -1, -1, -1, -1, -1, -1, -1, -1, + 6196, 6197, -1, 4528, -1, 6201, -1, -1, -1, 6205, + 1100, 1101, 1102, 6209, 1104, -1, 1106, -1, 1108, 1109, + -1, 6217, 6218, -1, -1, -1, -1, -1, -1, 235, + 5959, 6227, -1, -1, 240, -1, -1, -1, 5967, 5968, + -1, -1, -1, -1, -1, -1, -1, 100, -1, -1, + -1, -1, 1142, -1, 1144, 1145, 4581, 10, -1, -1, + 13, 6157, -1, -1, 17, 18, 19, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 282, -1, -1, -1, + -1, -1, -1, -1, 37, 5941, -1, 1177, -1, -1, + -1, -1, -1, -1, 47, -1, -1, -1, 151, -1, + -1, 54, -1, -1, -1, -1, -1, -1, 314, -1, + 5966, 164, -1, 1203, -1, 1205, -1, 170, -1, 1209, + 6049, 1211, -1, 176, -1, -1, 6055, 80, -1, 182, + -1, -1, 185, -1, -1, -1, 189, -1, -1, -1, + -1, -1, -1, -1, 6073, 1235, -1, 1237, -1, -1, + 356, 1241, -1, -1, -1, 361, -1, -1, 4020, -1, + -1, -1, -1, -1, 370, 1255, 219, -1, -1, -1, + -1, -1, -1, 379, -1, -1, 4038, 4039, 4040, 4041, + -1, 387, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, + 4052, 4053, 245, 399, -1, -1, -1, -1, -1, -1, + 1290, -1, 408, 6059, -1, -1, 412, -1, 6137, -1, + 4072, -1, -1, -1, -1, -1, -1, 2740, -1, -1, + -1, -1, -1, 2746, -1, -1, 432, -1, 6157, 1319, + 1320, 1321, -1, 1323, -1, -1, -1, -1, -1, -1, + -1, 294, 195, -1, 297, -1, -1, 200, 4110, 4111, + 303, -1, -1, 1343, -1, -1, -1, -1, -1, -1, + -1, 467, -1, -1, 2787, 471, -1, -1, 6197, -1, + 223, 224, -1, -1, -1, -1, 6205, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6217, 6218, + -1, 244, -1, 4155, 1384, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6161, -1, 360, -1, -1, + 4835, -1, 1402, -1, -1, -1, 4841, -1, -1, -1, + 4845, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 285, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 299, 4872, 4873, 302, + -1, -1, 4877, 4878, -1, -1, -1, -1, 1448, -1, + -1, -1, 1452, 1453, 417, -1, -1, -1, -1, -1, + -1, -1, 5882, 1463, 1464, 1465, 1466, -1, 1468, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 445, -1, 64, -1, -1, -1, -1, -1, + -1, 1491, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 469, -1, 471, 472, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, + -1, -1, -1, -1, -1, -1, 1526, -1, -1, 392, + 493, 1531, -1, -1, 1534, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1547, 1548, -1, + 513, -1, -1, 516, 517, 518, 1556, -1, -1, 1559, + -1, -1, -1, 2996, -1, -1, -1, -1, -1, 10, + -1, -1, 13, -1, -1, -1, 17, 18, 19, -1, + 160, -1, -1, -1, -1, -1, 1586, -1, 1588, -1, + -1, 1591, -1, -1, 1594, 1595, 37, -1, 1598, -1, + -1, -1, -1, -1, -1, -1, 47, -1, 1608, -1, + -1, 1611, -1, 54, 1614, -1, -1, 197, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 494, -1, -1, -1, -1, 1636, -1, -1, 80, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + -1, -1, -1, -1, 1654, -1, 10, 520, -1, 13, + 240, -1, -1, 17, 18, 19, 1666, 1667, 1668, 1669, + 1670, -1, -1, -1, -1, -1, -1, -1, -1, 4451, + -1, -1, -1, 37, 1684, -1, -1, -1, -1, -1, + -1, -1, -1, 47, -1, 1695, 1696, 1697, 278, -1, + 54, -1, 282, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, + -1, -1, -1, 313, 314, -1, -1, -1, -1, -1, + -1, -1, -1, 3176, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 195, -1, -1, -1, 3191, 200, + -1, -1, -1, 3196, -1, -1, -1, -1, -1, -1, + -1, -1, 352, -1, -1, -1, 356, -1, -1, -1, + -1, 361, 223, 224, -1, -1, -1, -1, -1, -1, + 370, -1, 3225, -1, 1794, -1, -1, -1, -1, 379, + -1, -1, -1, 244, -1, 1805, -1, 387, -1, -1, + -1, -1, -1, 1813, 1814, -1, -1, -1, -1, 399, + -1, -1, -1, -1, -1, -1, -1, -1, 408, 1829, + -1, -1, 412, -1, -1, -1, -1, -1, 5273, -1, + -1, 195, -1, -1, 285, -1, 200, 1847, 1848, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 299, -1, + -1, 302, -1, 1863, 1864, 1865, 1866, -1, -1, 223, + 224, -1, 1872, -1, -1, -1, -1, -1, -1, 1879, + -1, -1, 1882, -1, -1, -1, -1, 467, -1, -1, + 244, -1, -1, -1, 51, -1, 10, 1897, -1, 13, + 1900, -1, 4674, 17, 18, 19, -1, -1, -1, -1, + 1910, 1911, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1921, 1922, 37, -1, 1925, -1, -1, 1928, -1, + -1, 285, -1, 47, -1, -1, -1, -1, -1, -1, + 54, -1, -1, 1943, 1944, 299, -1, -1, 302, -1, + 1950, 392, 1952, 10, -1, -1, 13, -1, -1, -1, + 17, 18, 19, -1, -1, -1, 80, -1, -1, 1969, + -1, -1, -1, -1, -1, -1, 1976, -1, 1978, -1, + 37, 1981, 1982, 1983, -1, 1985, 1986, -1, 1988, -1, + 47, -1, -1, -1, -1, 1995, -1, 54, -1, -1, + -1, -1, 2002, -1, -1, 2005, 2006, -1, -1, 2009, + -1, -1, 2012, 2013, -1, -1, -1, 2017, -1, 2019, + -1, -1, -1, 80, 2024, 2025, -1, -1, -1, -1, + -1, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 392, -1, + 2040, -1, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + -1, -1, 2052, 494, 2054, 2055, -1, -1, 2058, -1, + -1, -1, 503, 504, 505, 506, 507, 508, 509, 510, + 511, -1, -1, -1, -1, 2075, 2076, 2077, 519, -1, + -1, 195, -1, -1, -1, -1, 200, -1, -1, -1, + -1, -1, -1, 2093, -1, -1, -1, 3530, -1, -1, + -1, -1, -1, -1, -1, 3538, -1, -1, -1, 223, + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5557, -1, -1, -1, -1, -1, -1, -1, + 244, -1, -1, 2133, -1, -1, 17, -1, 195, -1, + 494, -1, -1, 200, -1, 26, -1, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, -1, -1, + -1, -1, 516, -1, -1, 519, 223, 224, -1, -1, + -1, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 299, -1, 244, 302, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3633, -1, 3635, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1131, -1, -1, -1, -1, + -1, 1137, 0, -1, -1, -1, -1, -1, 285, -1, + -1, 1147, -1, -1, -1, 1151, -1, 2237, -1, 1155, + -1, 1157, 299, -1, 22, 302, -1, 1163, -1, -1, + -1, -1, -1, 1169, -1, 33, 1172, 35, 36, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 53, -1, -1, 392, -1, + -1, -1, -1, -1, 2284, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3729, 75, -1, 77, + 78, -1, -1, -1, -1, -1, 84, -1, 86, -1, + -1, 5746, -1, -1, -1, -1, -1, -1, -1, -1, + 98, -1, 100, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 392, -1, 2337, 3771, 117, + -1, -1, 120, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, + -1, 5133, -1, 141, -1, -1, -1, -1, -1, 147, + -1, -1, -1, -1, -1, -1, -1, 155, -1, 157, + 494, -1, -1, -1, -1, -1, 164, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, -1, -1, + -1, -1, -1, -1, 182, 519, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5188, -1, -1, -1, + -1, 199, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3867, -1, -1, 494, -1, -1, + -1, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, -1, -1, -1, 516, + -1, -1, -1, -1, -1, -1, -1, -1, 246, 247, + -1, -1, -1, -1, 252, -1, -1, -1, 3911, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 266, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 27, -1, + -1, -1, -1, -1, 33, -1, 284, -1, -1, -1, + -1, -1, -1, -1, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, -1, 2524, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2534, 2535, -1, -1, 2538, -1, + -1, -1, -1, -1, -1, 2545, -1, -1, 705, 78, + 328, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3993, -1, -1, -1, 342, -1, -1, -1, -1, -1, + 348, 349, -1, 351, 731, -1, -1, 2577, 356, 2579, + -1, -1, 2582, 2583, 362, -1, 2586, 365, 2588, -1, + -1, 2591, -1, -1, 372, 2595, -1, -1, -1, -1, + -1, 379, 380, -1, 4037, 134, -1, -1, -1, 387, + -1, -1, 141, 391, -1, 144, -1, -1, 2618, 10, + -1, -1, 13, 401, 2624, 2625, 17, 18, 19, 4062, + -1, -1, -1, -1, -1, 2635, -1, -1, -1, 417, + -1, -1, 171, -1, 2644, 2645, 37, -1, -1, -1, + -1, -1, -1, -1, 5426, -1, 47, -1, 2658, 437, + -1, -1, -1, 54, -1, -1, 2666, -1, 2668, -1, + 448, -1, -1, -1, -1, -1, 454, -1, 207, -1, + -1, 459, -1, -1, 5456, -1, -1, -1, -1, 80, + -1, -1, -1, -1, 472, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2708, -1, + 2710, -1, -1, -1, -1, -1, 873, -1, 496, -1, + 498, 499, 500, 501, 502, -1, -1, 2727, -1, 6164, + -1, -1, -1, -1, -1, -1, -1, 515, 2738, -1, + 518, 2741, 2742, 2743, 2744, -1, -1, 2747, -1, 278, + 2750, -1, -1, 282, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, 645, -1, -1, -1, -1, -1, + -1, 2771, 301, -1, 6209, -1, -1, -1, -1, 27, + -1, -1, 2782, -1, 313, 33, -1, -1, -1, -1, + 2790, 2791, 6227, -1, -1, -1, -1, 2797, -1, -1, + 48, -1, -1, -1, 195, -1, 2806, -1, -1, 200, + -1, -1, -1, -1, 695, 696, -1, -1, -1, -1, + -1, -1, -1, 352, -1, -1, 355, 356, 2828, -1, + 78, -1, 223, 224, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2849, + -1, -1, -1, 244, -1, -1, -1, -1, 387, 1016, + -1, -1, 2862, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1035, -1, + -1, -1, -1, -1, 132, 2885, 134, -1, 2888, 1046, + -1, -1, -1, 141, 285, -1, 144, -1, -1, -1, + -1, -1, -1, -1, -1, 1062, -1, -1, 299, -1, + 791, 302, -1, -1, 2914, 2915, 5688, -1, -1, -1, + -1, -1, -1, 171, -1, -1, -1, 456, -1, 2929, + 811, 2931, 2932, -1, -1, -1, -1, -1, 819, -1, + -1, 822, 823, 824, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 207, + -1, -1, 2962, 2963, 2964, -1, -1, -1, 2968, -1, + -1, -1, -1, -1, -1, -1, 2976, -1, -1, -1, + -1, -1, -1, -1, -1, 10, -1, -1, 13, 2989, + -1, -1, 17, 18, 19, 2995, -1, 2997, -1, -1, + 1916, 392, -1, -1, -1, -1, -1, -1, 1924, -1, + 3010, -1, 37, -1, -1, 3015, -1, -1, -1, -1, + -1, 3021, 47, -1, 3024, -1, -1, -1, -1, 54, + 278, -1, -1, -1, 282, -1, 3036, 3037, -1, -1, + -1, -1, -1, -1, 292, -1, -1, 3047, 4481, -1, + -1, -1, -1, 301, -1, 80, -1, 3057, -1, 3059, + -1, -1, 1219, -1, -1, 313, -1, -1, -1, -1, + -1, 27, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5859, -1, -1, + -1, -1, 48, -1, -1, -1, -1, -1, 3098, -1, + 3100, -1, 3102, 494, 352, -1, -1, 355, 356, -1, + -1, -1, 503, 504, 505, 506, 507, 508, 509, 510, + 511, -1, 78, -1, -1, 516, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3135, -1, -1, -1, 387, + -1, -1, -1, -1, 1025, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 195, -1, -1, -1, 10, 200, 132, 13, 134, -1, + -1, 17, 18, 19, -1, 141, -1, -1, 144, 3189, + 3190, -1, 3192, -1, 3194, 3195, -1, 3197, 223, 224, + -1, 37, -1, -1, 3204, -1, -1, -1, 456, 3209, + -1, 47, -1, -1, 64, 171, -1, -1, 54, 244, + 5992, 5993, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, -1, -1, 99, + -1, 207, 3252, 3253, 3254, -1, -1, 3257, -1, -1, + 285, -1, -1, -1, -1, 3265, 3266, 3267, 3268, -1, + -1, -1, -1, -1, 299, -1, -1, 302, -1, -1, + -1, 3281, -1, -1, 3284, -1, 3286, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3298, 3299, + -1, -1, 3302, -1, -1, -1, -1, -1, -1, -1, + 160, -1, -1, -1, -1, -1, -1, 1474, -1, -1, + -1, 3321, 278, 3323, -1, 3325, 282, 3327, -1, -1, + -1, -1, -1, -1, -1, 1216, 292, -1, -1, -1, + -1, 64, -1, -1, -1, 301, 3346, 197, -1, 3349, + -1, -1, -1, 3353, -1, -1, -1, 313, -1, 195, + -1, -1, 1243, -1, 200, -1, -1, 392, -1, -1, + -1, -1, -1, -1, 3374, -1, 99, -1, -1, 4812, + -1, -1, -1, -1, 1541, -1, -1, 223, 224, -1, + 240, -1, -1, -1, -1, -1, 352, -1, -1, 355, + 356, -1, 3402, -1, -1, 3405, 3406, -1, 244, -1, + 3410, 3411, 3412, -1, -1, -1, -1, -1, 3418, 4852, + -1, -1, -1, 3423, -1, 1582, -1, -1, -1, -1, + -1, 387, 282, -1, -1, -1, -1, 160, 3438, -1, + -1, 4874, -1, -1, 1325, -1, -1, -1, -1, 285, + -1, -1, 3452, 1334, -1, -1, 3456, -1, 1615, 3459, + 3460, -1, 3462, 299, 314, -1, 302, -1, 1349, 494, + -1, -1, -1, -1, 197, -1, -1, -1, 503, 504, + 505, 506, 507, 508, 509, 510, 511, -1, -1, 1370, + -1, 516, 1373, 1374, -1, -1, -1, 1378, 1379, -1, + 456, -1, -1, 3503, -1, -1, 356, -1, 358, -1, + -1, 361, -1, -1, 4947, -1, -1, 240, -1, -1, + 370, -1, -1, -1, -1, -1, -1, -1, -1, 379, + -1, -1, -1, 3533, 3534, -1, -1, 387, 1695, 1696, + 1697, -1, -1, -1, -1, -1, -1, -1, -1, 399, + -1, -1, -1, -1, -1, 278, 392, -1, 408, 282, + -1, -1, 412, -1, -1, -1, -1, 25, -1, -1, + -1, -1, 30, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 27, -1, -1, -1, -1, -1, 33, + 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 48, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 467, -1, -1, + -1, -1, -1, 81, 82, -1, -1, -1, -1, 352, + -1, -1, -1, 356, 78, 5068, -1, -1, 361, 97, + -1, 3641, -1, -1, -1, -1, -1, 370, -1, -1, + 1807, 3651, -1, -1, -1, -1, 379, 115, 494, -1, + 2576, 1818, -1, -1, 387, -1, -1, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 399, 1834, -1, -1, + 516, 139, -1, -1, -1, 408, -1, -1, -1, 412, + 134, -1, 150, -1, -1, -1, -1, 141, -1, -1, + 144, 159, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 172, -1, -1, -1, -1, -1, + 178, -1, -1, -1, -1, -1, -1, 171, -1, -1, + -1, 1888, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 467, -1, 1903, 205, -1, 1906, + 1907, -1, 1633, -1, -1, -1, 3756, -1, -1, -1, + 1641, -1, 3762, 207, -1, -1, -1, -1, -1, -1, + -1, 5204, -1, 3773, -1, -1, -1, -1, 236, -1, + 1937, 1938, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3810, 3811, 3812, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3827, -1, -1, + -1, -1, -1, -1, 278, -1, -1, -1, 282, -1, + -1, 3841, -1, -1, -1, -1, -1, -1, 292, -1, + -1, -1, -1, -1, -1, -1, -1, 301, -1, 3859, + 3860, 3861, -1, -1, -1, 3865, -1, -1, -1, 313, + -1, -1, -1, -1, -1, 333, 334, 3877, 2035, 337, + -1, -1, -1, -1, -1, -1, -1, 2044, -1, -1, + 2047, -1, -1, -1, -1, 10, -1, -1, 13, -1, + -1, -1, 17, 18, 19, -1, 364, -1, 352, 367, + -1, 355, 356, -1, -1, -1, 374, 2074, -1, -1, + -1, -1, 37, 381, -1, -1, 384, -1, -1, -1, + -1, -1, 47, 3933, -1, -1, -1, -1, -1, 54, + -1, -1, -1, 387, -1, 403, -1, 3947, 3948, -1, + -1, -1, 410, -1, -1, -1, -1, -1, 3958, 417, + -1, -1, 420, -1, -1, 80, 424, -1, -1, -1, + -1, 3971, -1, -1, -1, 1856, -1, -1, -1, 1860, + -1, 439, -1, -1, -1, -1, -1, -1, -1, -1, + 3990, -1, -1, -1, -1, -1, -1, -1, 3998, -1, + 4000, -1, -1, -1, -1, -1, -1, 465, -1, -1, + 4010, -1, 456, -1, 4014, 4015, -1, -1, -1, -1, + 4020, -1, -1, -1, -1, -1, -1, -1, 4028, -1, + 4030, -1, -1, 4033, -1, -1, -1, -1, 4038, 4039, + 4040, 4041, -1, -1, 4044, 4045, 4046, 4047, 4048, 4049, + 4050, 4051, 4052, 4053, -1, -1, -1, 4057, 4058, 4059, + -1, -1, -1, -1, -1, -1, -1, 4067, -1, -1, + -1, -1, 4072, -1, -1, -1, 4076, -1, -1, -1, + 195, -1, -1, -1, 4084, 200, -1, 4087, -1, 4089, + -1, -1, 5525, -1, -1, -1, -1, 5530, 5531, -1, + -1, -1, -1, -1, -1, -1, -1, 4107, 223, 224, + 4110, 4111, -1, -1, -1, 4115, 4116, -1, -1, -1, + 4120, -1, 4122, 4123, -1, -1, -1, -1, -1, 244, + -1, 4131, 4132, 4133, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2030, + -1, 4151, 4152, 4153, -1, 4155, 4156, -1, -1, 4159, + -1, -1, -1, 4163, -1, -1, -1, 4167, -1, -1, + 285, 3087, -1, 4173, -1, -1, 3092, -1, 3094, -1, + -1, -1, -1, -1, 299, -1, -1, 302, 3104, -1, + -1, 3107, -1, 3109, 3110, -1, -1, 3113, -1, 4199, + -1, 3117, -1, 3119, -1, -1, 3122, -1, -1, -1, + 5643, -1, -1, -1, 4214, -1, 4216, -1, 27, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4234, 4235, 4236, -1, -1, 4239, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 64, -1, -1, -1, -1, -1, -1, 5692, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 78, + 3186, -1, -1, -1, 4274, 4275, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, 0, 99, -1, -1, + -1, -1, -1, 4293, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, 35, 36, -1, -1, 134, -1, -1, -1, -1, + -1, -1, 141, -1, -1, 144, -1, -1, -1, 53, + -1, -1, -1, -1, -1, -1, 4346, -1, 160, 63, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 75, 171, 77, 78, -1, -1, -1, -1, -1, + 84, -1, 86, -1, -1, -1, -1, -1, -1, 494, + -1, 2538, -1, -1, 98, 197, 100, -1, 503, 504, + 505, 506, 507, 508, 509, 510, 511, -1, 207, -1, + -1, 516, 4402, 117, -1, -1, 120, -1, -1, -1, + -1, -1, -1, -1, -1, 198, 199, -1, -1, 202, + -1, 135, -1, 137, -1, -1, -1, 141, 240, -1, + -1, -1, -1, 147, -1, 4435, -1, -1, -1, 222, + -1, 155, -1, 157, -1, -1, 229, -1, -1, 4449, + 164, 4451, -1, -1, -1, -1, -1, -1, 4458, -1, + -1, -1, -1, -1, 4464, -1, 278, -1, 182, 278, + 282, -1, -1, 282, -1, 4475, -1, -1, -1, -1, + -1, -1, -1, 292, -1, 199, -1, -1, -1, -1, + 4490, -1, 301, -1, -1, 4495, 4496, -1, -1, -1, + -1, 313, 314, 4503, 313, -1, -1, -1, -1, -1, + -1, -1, 4512, -1, -1, -1, -1, -1, -1, -1, + -1, 2678, 4522, -1, -1, 2682, 2683, -1, -1, -1, + -1, -1, 246, 247, 4534, 4535, -1, -1, 252, -1, + 352, -1, -1, 352, 356, 4545, 355, 356, -1, 361, + -1, -1, 266, -1, -1, -1, 4556, 4557, 370, -1, + -1, -1, -1, -1, -1, -1, -1, 379, -1, -1, + 284, -1, -1, -1, 4574, 387, -1, -1, 387, -1, + -1, -1, -1, 2740, -1, -1, -1, 399, -1, 2746, + -1, -1, -1, -1, -1, -1, 408, 3513, -1, -1, + 412, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 328, 4615, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 342, 4629, + 2787, -1, -1, -1, 348, 349, -1, 351, -1, -1, + -1, -1, 356, 4643, -1, -1, -1, 456, 362, -1, + -1, 365, -1, -1, -1, 467, -1, -1, 372, -1, + -1, -1, -1, -1, -1, 379, 380, -1, 3584, -1, + 3586, 4671, -1, 387, 4674, -1, 2557, 391, -1, -1, + -1, -1, 4682, 4683, -1, -1, -1, 401, -1, -1, + 4690, 4691, -1, -1, -1, 4695, -1, -1, -1, -1, + -1, -1, 4702, 417, -1, 4705, 4706, -1, -1, -1, + -1, -1, 4712, -1, -1, -1, 4716, 4717, 4718, 4719, + -1, -1, -1, 437, -1, -1, -1, -1, -1, -1, + -1, -1, 4732, -1, 448, 4735, -1, -1, -1, 4739, + 454, -1, -1, -1, 4744, 459, -1, 4747, 4748, -1, + 4750, -1, 4752, -1, -1, 4755, -1, 4757, 472, -1, + -1, -1, -1, -1, -1, -1, 4766, -1, -1, -1, + 4770, -1, -1, -1, 4774, -1, 4776, -1, 10, -1, + -1, 13, 496, -1, -1, 17, 18, 19, -1, -1, + -1, 4791, -1, -1, 4794, -1, -1, -1, -1, -1, + -1, 515, -1, -1, 518, 37, -1, 2964, -1, -1, + -1, -1, 3728, -1, 27, 47, -1, -1, 3734, -1, + 33, -1, 54, -1, -1, 2706, -1, -1, 4828, -1, + -1, -1, 4832, -1, -1, -1, -1, -1, -1, 2996, + -1, -1, -1, -1, -1, -1, -1, -1, 80, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 78, -1, -1, 651, -1, + 653, -1, -1, 656, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2765, -1, -1, 670, -1, -1, + -1, -1, -1, 676, -1, -1, -1, 4897, -1, -1, + -1, -1, -1, -1, 4904, -1, -1, -1, -1, -1, + -1, -1, 3069, -1, -1, -1, 3073, -1, -1, -1, + -1, 134, -1, -1, -1, -1, -1, 4927, 141, -1, + -1, 144, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 4942, -1, 13, -1, -1, -1, 17, 18, + 19, -1, -1, -1, -1, -1, -1, -1, 171, -1, + -1, -1, -1, 195, 2845, -1, -1, -1, 200, -1, + -1, -1, -1, 4973, -1, -1, -1, -1, 47, -1, + -1, -1, -1, -1, -1, 54, -1, -1, 2869, 4989, + -1, 223, 224, -1, 207, -1, 4996, -1, -1, -1, + -1, -1, 3918, -1, 3920, 5005, 3922, -1, -1, -1, + -1, 80, 244, -1, -1, -1, -1, -1, -1, 3176, + 5020, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5033, 3191, 5035, -1, -1, -1, 3196, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 285, -1, 2936, -1, -1, -1, -1, + -1, 5061, -1, -1, -1, 278, -1, 299, 3225, 282, + 302, -1, 5072, -1, -1, -1, -1, -1, -1, 292, + -1, -1, -1, -1, -1, -1, -1, -1, 301, -1, + -1, -1, 2973, -1, 2975, -1, 2977, 2978, -1, -1, + 313, 2982, 2983, 2984, -1, 2986, 2987, 2988, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 195, -1, -1, -1, + 5130, 200, -1, 5133, -1, -1, 5136, 5137, 5138, 352, + -1, -1, 355, 356, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 223, 224, -1, -1, -1, 3040, + 392, -1, -1, 5163, 5164, -1, -1, 5167, -1, -1, + -1, -1, -1, -1, 387, 244, -1, -1, 961, 962, + -1, -1, -1, -1, 3065, -1, -1, -1, 5188, -1, + -1, -1, -1, -1, 5194, -1, -1, -1, 5198, -1, + -1, -1, 5202, -1, -1, 5205, -1, 5207, -1, -1, + -1, -1, -1, -1, -1, -1, 285, -1, 5218, -1, + -1, 5221, -1, -1, -1, -1, -1, -1, -1, -1, + 299, -1, 5232, 5233, 5234, -1, 5236, -1, -1, -1, + -1, -1, -1, 456, -1, -1, -1, -1, -1, 1032, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 494, -1, 1047, -1, -1, -1, -1, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, 514, -1, 5284, 5285, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1078, 1079, -1, -1, -1, + -1, -1, -1, -1, 27, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, 3472, -1, -1, 3475, -1, + 3477, 1104, -1, 392, -1, 3482, -1, -1, -1, 5329, + -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, + 19, 5341, -1, -1, -1, -1, 5346, -1, -1, -1, + -1, 5351, -1, -1, -1, 78, -1, -1, 37, -1, + 5360, 1144, 1145, -1, -1, -1, -1, -1, 47, -1, + 5370, -1, -1, 3530, 5374, 54, -1, 5377, -1, -1, + -1, 3538, -1, -1, -1, -1, -1, -1, 5388, 5389, + 5390, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 80, -1, -1, -1, -1, 3563, -1, -1, -1, + -1, 134, -1, -1, -1, -1, -1, -1, 141, -1, + -1, 144, -1, -1, -1, 494, 5426, -1, -1, -1, + 5430, -1, 5432, -1, 503, 504, 505, 506, 507, 508, + 509, 510, 511, -1, -1, -1, 5446, -1, 171, -1, + -1, -1, -1, 5453, -1, -1, 5456, -1, -1, -1, + 5460, -1, -1, -1, -1, -1, -1, 5467, -1, -1, + -1, -1, -1, -1, 5474, -1, 3633, -1, 3635, -1, + -1, -1, 10, -1, 207, 13, 3367, -1, -1, 17, + 18, 19, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5509, + -1, -1, -1, -1, -1, -1, 195, -1, -1, 47, + -1, 200, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 5535, -1, -1, -1, -1, + -1, 5541, 5542, -1, 223, 224, 5546, 5547, 5548, 5549, + -1, -1, 80, -1, -1, 278, -1, -1, -1, 282, + -1, -1, -1, -1, -1, 244, -1, -1, -1, 292, + -1, -1, 3729, -1, -1, -1, -1, 5577, 301, -1, + -1, 8, -1, -1, -1, 5585, 27, 14, 15, -1, + 313, -1, 33, 20, -1, 22, -1, -1, -1, 3756, + -1, 28, -1, 30, -1, 3762, 285, -1, -1, -1, + 5610, -1, -1, 5613, 3771, -1, -1, -1, -1, -1, + 299, -1, 49, 50, -1, -1, -1, -1, -1, 352, + -1, -1, 355, 356, -1, -1, -1, 78, 5638, -1, + -1, -1, 3799, -1, -1, -1, 3527, -1, -1, -1, + -1, -1, -1, -1, 4570, -1, -1, 4573, -1, -1, + -1, -1, -1, -1, 387, -1, 5666, 195, -1, -1, + -1, -1, 200, -1, -1, 5675, 5676, 5677, -1, -1, + -1, 5681, -1, -1, -1, 5685, 4602, -1, 5688, -1, + -1, -1, -1, 134, -1, 223, 224, 5697, -1, 5699, + 141, 5701, 5702, 144, -1, -1, -1, -1, 5708, -1, + 3867, -1, -1, 392, -1, -1, 244, -1, 5718, -1, + 5720, -1, -1, -1, 3605, -1, -1, -1, -1, 5729, + 171, -1, 3889, 456, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1534, -1, -1, 3911, -1, -1, 285, -1, -1, + -1, -1, -1, -1, 5764, 5765, 207, -1, -1, -1, + -1, 299, -1, 200, -1, -1, 1559, 204, -1, -1, + -1, -1, 3663, -1, -1, 212, -1, -1, 215, -1, + -1, 218, 219, -1, 221, 5795, 223, -1, -1, 226, + -1, 228, -1, -1, -1, -1, -1, -1, -1, 5809, + -1, -1, -1, -1, -1, 494, -1, -1, -1, -1, + -1, -1, -1, -1, 503, 504, 505, 506, 507, 508, + 509, 510, 511, -1, -1, -1, 3993, 278, -1, -1, + -1, 282, -1, -1, -1, -1, 5846, -1, -1, -1, + 3731, 292, -1, 1636, -1, -1, -1, -1, -1, 5859, + 301, -1, -1, 5863, 392, -1, -1, -1, -1, 5869, + -1, -1, 313, -1, -1, -1, -1, -1, 5878, 5879, + 4037, -1, -1, 1666, 1667, 1668, 1669, -1, -1, -1, + -1, -1, -1, -1, 4810, 5895, 3777, -1, -1, -1, + -1, -1, -1, -1, -1, 4062, -1, -1, 3789, 3790, + 5910, 352, -1, -1, 355, 356, -1, 5917, 3799, -1, + -1, -1, -1, 3804, -1, 3806, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4853, 4854, -1, + -1, -1, 5942, -1, -1, -1, 387, -1, -1, 5949, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5959, + -1, -1, -1, -1, -1, -1, 494, 5967, 5968, 5969, + -1, 3852, -1, 5973, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -1, 5985, 5986, 5987, -1, -1, + -1, -1, 5992, 5993, -1, -1, -1, -1, 5998, -1, + -1, -1, -1, -1, -1, -1, 3887, 3888, -1, -1, + -1, -1, -1, -1, -1, 456, -1, -1, -1, -1, + 6020, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1813, 1814, 4948, 4949, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1829, -1, -1, 6049, + 6050, 6051, -1, -1, -1, 6055, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4222, -1, -1, -1, -1, + -1, -1, -1, 6073, 6074, -1, -1, -1, -1, -1, + 1863, 1864, 1865, 1866, -1, -1, -1, -1, 6088, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6102, 10, -1, -1, 13, -1, -1, -1, + 17, 18, 19, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 37, -1, -1, -1, -1, 6135, 6136, 6137, 6138, 6139, + 47, -1, 6142, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, 6154, 4312, -1, 6157, -1, -1, + -1, 1944, 5078, -1, -1, 5081, 5082, 1950, -1, -1, + -1, -1, -1, 80, -1, -1, -1, 6177, -1, -1, + -1, 4338, -1, -1, -1, 5101, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6196, 6197, -1, -1, + -1, 6201, 4083, -1, -1, 6205, 10, -1, -1, 13, + -1, -1, -1, 17, 18, 19, 643, 6217, 6218, -1, + -1, 6221, -1, -1, -1, -1, -1, 654, -1, -1, + -1, 658, -1, 37, -1, -1, -1, -1, 665, 666, + -1, -1, 669, 47, 671, 672, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 686, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 80, 704, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 195, -1, + -1, 206, 207, 200, -1, -1, -1, -1, 725, 214, + 727, 216, 217, -1, -1, -1, -1, -1, -1, -1, + 737, -1, -1, -1, -1, 230, 223, 224, -1, -1, + -1, -1, -1, -1, 4481, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 244, -1, -1, + -1, -1, -1, 770, -1, -1, -1, -1, -1, -1, + 2133, -1, -1, -1, -1, -1, 10, -1, -1, 13, + -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, + -1, 4528, -1, -1, -1, -1, 4533, -1, 285, -1, + -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, + -1, 195, 299, 47, -1, 302, 200, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 223, + 224, -1, -1, -1, 851, -1, 80, -1, -1, -1, + -1, 4312, -1, -1, -1, -1, -1, -1, -1, -1, + 244, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, -1, -1, -1, 17, 18, 19, 4338, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4353, -1, 37, -1, 4357, -1, 4359, -1, + -1, 285, -1, -1, 47, 392, -1, -1, -1, -1, + -1, 54, -1, -1, -1, 299, -1, -1, 302, -1, + -1, -1, -1, -1, -1, -1, -1, 934, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 80, -1, -1, + -1, -1, -1, -1, 4405, -1, -1, -1, 4685, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4421, 195, -1, -1, -1, 4426, 200, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 223, + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1008, -1, 5499, -1, -1, -1, 494, 392, -1, + 244, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, 1033, -1, -1, 516, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1048, -1, 1050, -1, -1, -1, -1, -1, -1, + -1, 285, 195, 1060, -1, -1, 5552, 200, -1, -1, + 1067, -1, -1, -1, 4525, 299, -1, 4528, 302, -1, + -1, -1, -1, -1, -1, 4812, -1, -1, -1, -1, + 223, 224, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 244, -1, 1110, -1, 1112, -1, -1, -1, -1, + 494, -1, -1, -1, -1, 4852, -1, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, -1, -1, + -1, -1, 516, -1, -1, -1, -1, 4874, -1, -1, + -1, -1, 285, 4604, 4605, 4606, 4607, 642, 4609, 4610, + 4611, 4612, 4613, -1, -1, -1, 299, -1, 392, 302, + -1, -1, -1, -1, -1, -1, 661, -1, -1, 5665, + -1, -1, 667, -1, -1, -1, -1, -1, -1, 1186, + -1, 1188, -1, 1190, 679, 1192, -1, 1194, 1195, 1196, + -1, -1, -1, -1, 1201, -1, -1, -1, -1, -1, + 695, -1, -1, -1, -1, -1, 1213, -1, -1, -1, + 4947, -1, -1, -1, 709, 710, -1, -1, -1, 2582, + -1, 716, -1, 718, 719, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 732, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 742, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 494, -1, -1, 4724, -1, 4726, -1, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 10, -1, + -1, 13, 516, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 795, -1, -1, -1, -1, 37, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, -1, -1, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, 823, 5066, + -1, 5068, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 10, + -1, 494, 13, 848, -1, -1, 17, 18, 19, -1, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + -1, -1, -1, 516, -1, -1, 37, -1, -1, -1, + -1, -1, -1, -1, 2747, -1, 47, -1, 1395, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 908, -1, -1, -1, -1, 10, 80, + -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, -1, -1, -1, -1, + -1, -1, 54, 195, -1, -1, -1, 5204, 200, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4945, 4946, -1, -1, 80, -1, + -1, 223, 224, -1, -1, -1, -1, 4958, -1, 4960, + 4961, 4962, -1, -1, -1, -1, -1, -1, 1515, -1, + -1, -1, 244, 6009, -1, -1, -1, -1, -1, -1, + -1, -1, 2885, 1018, -1, 2888, -1, -1, -1, -1, + 1025, -1, -1, -1, 195, -1, 5273, -1, -1, 200, + -1, 1036, -1, -1, -1, 1040, -1, 1042, -1, -1, + -1, -1, -1, 285, -1, -1, -1, -1, -1, -1, + -1, -1, 223, 224, -1, 5026, -1, 299, -1, -1, + 302, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1587, -1, -1, 244, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 195, 5065, -1, -1, -1, 200, -1, + -1, -1, -1, 2976, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 285, -1, 2989, -1, -1, -1, + -1, 223, 224, -1, 2997, -1, -1, -1, 299, -1, + -1, 302, -1, -1, -1, -1, -1, 5108, -1, -1, + -1, -1, 244, -1, 1149, -1, 5393, -1, -1, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3036, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 285, 3057, -1, 10, -1, -1, 13, + -1, -1, -1, 17, 18, 19, -1, 299, -1, -1, + 302, -1, -1, -1, -1, 1210, -1, -1, -1, -1, + -1, -1, -1, 37, -1, -1, 1221, -1, -1, -1, + -1, 392, -1, 47, -1, -1, -1, 3100, -1, 3102, + 54, -1, -1, 1238, -1, -1, -1, -1, 1243, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 494, -1, -1, -1, 80, -1, -1, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, 10, -1, 516, 13, -1, -1, 5525, 17, + 18, 19, -1, 5530, 5531, -1, 1803, -1, -1, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, 37, + -1, -1, 5273, -1, -1, -1, -1, -1, -1, 47, + -1, -1, -1, -1, -1, -1, 54, 3190, -1, -1, + -1, 1838, -1, 494, 3197, -1, -1, -1, -1, -1, + -1, -1, 503, 504, 505, 506, 507, 508, 509, 510, + 511, -1, 80, -1, -1, 516, -1, -1, 5319, -1, + -1, -1, -1, -1, -1, -1, -1, 5328, -1, -1, + -1, -1, -1, -1, -1, 1370, -1, 1884, -1, -1, + -1, 195, -1, 1378, 1379, -1, 200, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1904, -1, -1, + -1, -1, 494, -1, -1, 5642, 5643, -1, -1, 223, + 224, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, -1, 1930, 516, 1932, -1, -1, -1, -1, + 244, -1, -1, -1, -1, -1, 1431, -1, -1, -1, + 1947, -1, 1949, -1, -1, -1, -1, -1, 1955, -1, + 1957, -1, 1959, -1, 1961, 5692, 1963, -1, -1, -1, + 1967, -1, -1, -1, -1, -1, -1, 195, -1, -1, + -1, 285, 200, 10, -1, -1, 13, -1, -1, -1, + 17, 18, 19, -1, -1, 299, -1, -1, 302, -1, + -1, -1, -1, -1, -1, 223, 224, 2004, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 47, -1, -1, -1, -1, -1, 244, 54, 10, -1, + -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 80, -1, 37, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, -1, 285, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 299, -1, -1, 302, -1, -1, -1, 392, -1, + -1, -1, -1, -1, 51, -1, -1, -1, 80, -1, + -1, -1, -1, -1, -1, -1, 5557, -1, -1, -1, + 5561, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 10, -1, -1, 13, -1, -1, -1, 17, + 18, 19, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, + -1, -1, -1, -1, 51, -1, -1, -1, -1, 47, + -1, -1, -1, -1, -1, -1, 54, -1, 195, -1, + -1, -1, -1, 200, 392, -1, -1, -1, -1, -1, + 3533, 3534, -1, -1, -1, -1, -1, -1, -1, -1, + 494, -1, 80, -1, -1, 1680, 223, 224, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, -1, -1, + -1, -1, 516, 195, -1, -1, -1, 244, 200, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 223, 224, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 285, -1, + -1, -1, 244, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 299, -1, -1, 302, 494, -1, -1, -1, + -1, -1, -1, -1, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -1, -1, -1, -1, 516, -1, + 51, -1, -1, 285, -1, 5756, -1, 195, -1, 5760, + 1795, 5762, 200, -1, -1, 5766, 5767, 299, -1, -1, + 302, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 223, 224, -1, -1, -1, + -1, -1, -1, -1, -1, 1830, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 244, -1, -1, -1, + -1, -1, -1, -1, -1, 392, -1, -1, 1853, -1, + -1, -1, -1, -1, -1, -1, 1861, -1, -1, -1, + -1, -1, -1, -1, 1869, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 285, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 392, 299, -1, -1, 302, -1, -1, -1, -1, -1, + 3773, -1, -1, -1, -1, 1910, 1911, -1, 1913, 1914, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1925, -1, 1927, 1928, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1940, 1941, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 494, -1, 6196, + -1, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, -1, -1, -1, 516, + -1, -1, -1, 1978, -1, -1, -1, 1982, 1983, -1, + -1, -1, -1, -1, 392, -1, -1, -1, -1, -1, + -1, -1, 494, -1, -1, -1, -1, -1, -1, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, -1, -1, 516, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, + -1, -1, -1, -1, -1, 6026, -1, -1, -1, -1, + 3933, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, -1, -1, -1, -1, -1, + -1, 54, -1, -1, -1, -1, 494, -1, -1, -1, + 2095, -1, -1, -1, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -1, -1, -1, 80, 516, -1, + -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, + 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2672, 2673, -1, 68, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 81, -1, -1, 2691, 2692, -1, 2694, 2695, -1, + -1, -1, 2699, 2700, -1, -1, -1, 97, -1, -1, + -1, -1, -1, 6164, -1, -1, 6167, 2714, -1, -1, + -1, -1, -1, -1, 2721, 115, -1, -1, 2725, 2726, + -1, -1, 2729, 2730, -1, -1, -1, -1, -1, 2736, + -1, -1, 195, -1, -1, -1, -1, 200, 705, 139, + -1, 2748, -1, -1, -1, -1, -1, -1, 6209, -1, + 150, -1, -1, 2760, -1, -1, -1, -1, 2765, 159, + 223, 224, -1, -1, 731, -1, 6227, -1, -1, 6230, + -1, -1, 172, 2780, -1, -1, -1, -1, 178, -1, + -1, 244, 2789, -1, -1, 2792, -1, 2794, 2795, 2796, + -1, -1, -1, -1, 2801, 2802, -1, -1, 705, -1, + -1, -1, -1, -1, 2811, 205, -1, -1, -1, -1, + 2817, -1, -1, -1, 2821, -1, -1, -1, -1, -1, + -1, -1, 285, -1, 731, -1, 2833, 2834, -1, -1, + -1, 2838, -1, -1, -1, -1, 299, 2844, 2845, 302, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2858, -1, -1, 2861, -1, -1, -1, 258, -1, + -1, 2868, 2869, -1, -1, -1, -1, 2874, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2886, + -1, -1, 2889, -1, -1, -1, -1, 2894, -1, -1, + -1, -1, -1, 2900, 2901, 10, -1, -1, 13, 299, + -1, 2908, 17, 18, 19, 2912, 873, -1, -1, 2916, + 2917, 2918, 2919, -1, 2921, -1, -1, -1, -1, -1, + -1, -1, 37, -1, -1, -1, -1, 2934, 2935, 392, + 2937, -1, 47, 333, 334, -1, -1, 337, -1, 54, + -1, 2948, 2949, 2950, 705, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 364, 80, 873, 367, -1, -1, + 731, -1, -1, -1, 374, -1, -1, -1, -1, -1, + -1, 381, -1, -1, 384, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3005, -1, + -1, -1, -1, 403, -1, -1, 3013, -1, -1, -1, + 410, -1, -1, -1, -1, -1, -1, 417, -1, -1, + 420, -1, -1, -1, 424, 3032, -1, 10, -1, -1, + 13, 494, 432, -1, 17, 18, 19, -1, -1, 439, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + -1, -1, -1, 516, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, 465, -1, -1, 1035, -1, + -1, 54, 4435, -1, -1, 3082, -1, -1, -1, 1046, + 195, -1, -1, -1, -1, 200, 4449, -1, -1, -1, + -1, -1, -1, -1, 3101, 1062, 3103, 80, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 223, 224, + -1, -1, 873, -1, -1, -1, -1, -1, -1, -1, + -1, 2616, -1, -1, -1, -1, -1, -1, 1035, 244, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1046, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1062, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 285, -1, -1, -1, -1, -1, 2671, -1, -1, -1, + -1, -1, -1, -1, 299, -1, -1, 302, -1, -1, + -1, 3198, -1, -1, 2689, -1, -1, -1, 2693, -1, + -1, -1, 2697, -1, -1, -1, -1, -1, -1, -1, + -1, 2706, 195, -1, -1, -1, -1, 200, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, 2724, + 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, + 223, 224, -1, -1, -1, -1, 2741, -1, 2743, 2744, + -1, -1, 1219, -1, 37, -1, -1, -1, -1, -1, + -1, 244, -1, 2758, 47, -1, -1, -1, -1, -1, + -1, 54, -1, -1, 1035, -1, -1, 392, -1, -1, + -1, -1, -1, 2778, 2779, 1046, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 80, -1, -1, + -1, 1062, 285, -1, 51, -1, -1, -1, -1, -1, + -1, -1, 1219, -1, 2809, 2810, 299, -1, 2813, 302, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2837, -1, 2839, -1, -1, -1, 2843, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2857, -1, -1, -1, -1, -1, -1, 2864, + -1, -1, 2867, -1, -1, -1, -1, 207, 2873, 494, + -1, -1, -1, -1, -1, -1, 216, -1, 503, 504, + 505, 506, 507, 508, 509, 510, 511, -1, 2893, -1, + 230, 516, -1, -1, 2899, -1, 1373, -1, -1, 392, + -1, 2906, 195, -1, -1, -1, -1, 200, -1, -1, + -1, -1, -1, -1, -1, 2920, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2933, -1, + 223, 224, -1, 2938, -1, -1, -1, -1, -1, 2944, + -1, -1, -1, -1, -1, -1, -1, -1, 1219, -1, + -1, 244, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3505, -1, + -1, -1, 285, -1, -1, -1, -1, 1474, -1, 3004, + -1, 494, -1, -1, -1, -1, 299, -1, 3525, 302, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + -1, -1, -1, 516, -1, 3542, -1, -1, -1, 3546, + -1, -1, -1, -1, 3551, 3552, 3553, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4927, -1, -1, 1474, -1, -1, + -1, -1, -1, -1, 1541, -1, -1, -1, -1, 4942, + 3587, 3588, 3589, 3590, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 392, + 3617, -1, -1, -1, -1, 1582, -1, -1, 3625, -1, + 3627, 3628, 3629, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1615, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3159, -1, 3161, -1, -1, -1, + 5033, -1, -1, -1, -1, 1582, -1, -1, -1, -1, + -1, -1, -1, 3178, -1, -1, -1, -1, -1, -1, + 3185, -1, -1, -1, -1, -1, -1, 3192, -1, 3194, + 3195, -1, -1, -1, -1, -1, -1, -1, 1615, -1, + -1, 494, -1, 1474, -1, -1, -1, -1, -1, -1, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + -1, -1, -1, 516, -1, -1, 3743, -1, -1, -1, + -1, -1, -1, -1, -1, 3752, -1, -1, -1, -1, + -1, -1, 25, -1, -1, -1, -1, 30, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3778, 3779, -1, -1, -1, 3783, -1, -1, -1, + 1541, 3276, -1, -1, -1, -1, -1, 3282, -1, -1, + -1, -1, -1, -1, -1, 68, -1, -1, 3805, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + -1, -1, 642, -1, -1, -1, -1, -1, -1, -1, + 93, 1582, -1, -1, 97, -1, -1, -1, -1, -1, + -1, 661, -1, -1, -1, -1, -1, 667, -1, -1, + 1807, -1, 115, -1, -1, -1, -1, -1, -1, 679, + 3857, 1818, -1, -1, 1615, 3862, -1, -1, -1, -1, + -1, 3868, -1, -1, -1, 695, 139, 1834, -1, -1, + -1, 5234, 3367, 5236, -1, -1, -1, 150, -1, -1, + 710, -1, -1, -1, -1, -1, 159, -1, 718, -1, + -1, 3898, -1, -1, -1, -1, -1, -1, -1, 172, + 1807, -1, 732, -1, -1, 178, -1, -1, -1, -1, + -1, 1818, 742, -1, -1, -1, -1, -1, -1, -1, + 3927, 1888, 3929, -1, -1, -1, -1, 1834, -1, -1, + -1, -1, 205, -1, -1, -1, 1903, -1, -1, 1906, + 1907, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 705, -1, + -1, -1, -1, 236, -1, 795, -1, -1, -1, -1, + 1937, 1938, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1888, -1, -1, 731, 258, -1, -1, -1, -1, + -1, -1, -1, 823, -1, -1, 1903, -1, -1, 1906, + 1907, -1, 3497, 3498, -1, -1, -1, -1, -1, -1, + -1, -1, 10, -1, -1, 13, -1, -1, 848, 17, + 18, 19, -1, -1, -1, 5388, 299, -1, -1, 3524, + 1937, 1938, 3527, -1, -1, -1, -1, -1, -1, 37, + -1, -1, -1, 41, -1, -1, 1807, -1, -1, 47, + 323, -1, -1, -1, -1, -1, 54, 1818, -1, -1, + 333, 334, -1, -1, 337, -1, -1, -1, 51, -1, + -1, -1, -1, 1834, -1, -1, -1, -1, 908, -1, + -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, + -1, 364, -1, -1, 367, -1, -1, -1, 371, -1, + -1, 374, -1, -1, 3599, 3600, 3601, 2074, 381, -1, + -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 873, 1888, -1, 3624, + 403, -1, -1, 131, -1, -1, -1, 410, -1, -1, + -1, -1, 1903, -1, 417, 1906, 1907, 420, 3643, -1, + -1, 424, -1, -1, -1, -1, -1, -1, -1, 432, + -1, 434, -1, -1, -1, -1, 439, 2074, -1, -1, + 3665, -1, -1, -1, -1, -1, 1937, 1938, -1, -1, + -1, -1, -1, -1, 5547, -1, 5549, -1, 1018, -1, + -1, -1, 465, -1, -1, 1025, -1, 195, -1, -1, + -1, -1, 200, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 223, 224, -1, -1, -1, + -1, 4238, -1, -1, 4241, -1, 4243, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 244, -1, -1, 4256, + -1, -1, -1, -1, -1, -1, 3751, -1, -1, -1, + -1, 4268, -1, -1, -1, 4272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4291, -1, -1, 285, 1035, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1046, + -1, 299, 4309, 3798, 302, -1, -1, -1, 4315, 3804, + -1, 3806, -1, 2074, -1, 1062, -1, -1, -1, 1149, + -1, 51, -1, -1, 3819, -1, 3821, -1, -1, -1, + -1, -1, -1, 4340, -1, -1, -1, 4344, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4360, 4361, 4362, 4363, -1, -1, -1, + -1, -1, -1, 4370, 4371, 4372, 4373, -1, -1, -1, + -1, -1, 4379, 4380, -1, -1, -1, -1, 4385, 4386, + 1210, 4388, 4389, 4390, 4391, 4392, 4393, 4394, -1, -1, + -1, 1221, -1, 3888, 392, -1, -1, 4404, -1, -1, + -1, 4408, 4409, 4410, 4411, -1, -1, 10, 1238, -1, + 13, -1, -1, 1243, 17, 18, 19, -1, -1, -1, + -1, -1, -1, -1, -1, 4432, -1, -1, -1, -1, + -1, -1, 5795, -1, 37, 3930, -1, -1, -1, -1, + -1, -1, -1, 4450, 47, -1, -1, -1, -1, -1, + -1, 54, -1, -1, 3949, 453, -1, -1, 3953, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1219, -1, -1, -1, -1, 80, -1, 3974, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 494, -1, -1, -1, + -1, -1, -1, -1, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -1, -1, -1, -1, -1, 4526, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1370, -1, -1, -1, -1, -1, -1, 5910, 1378, 1379, + -1, -1, 4559, -1, -1, -1, -1, -1, -1, 4566, + -1, 4568, -1, -1, -1, -1, -1, 170, -1, -1, + -1, -1, -1, 176, -1, -1, -1, -1, -1, 4074, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4596, + -1, -1, 195, -1, -1, -1, -1, 200, -1, -1, + -1, 1431, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 223, 224, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + -1, 244, 13, -1, -1, -1, 17, 18, 19, -1, + -1, -1, -1, -1, -1, -1, -1, 6020, -1, -1, + -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, -1, -1, + -1, -1, 285, 54, -1, -1, -1, 6050, 6051, -1, + -1, -1, -1, -1, -1, -1, 299, -1, -1, 302, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, + -1, 2678, -1, -1, -1, 2682, 2683, -1, -1, -1, + -1, -1, 705, -1, -1, -1, -1, 1474, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 731, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4255, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2678, -1, 2740, -1, 2682, 2683, -1, -1, 2746, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 392, + -1, 6154, -1, -1, 1541, -1, 51, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4813, 4814, 4815, -1, + -1, 4306, 4819, 4820, 4821, 4822, 4311, -1, 4313, 4826, + 2787, -1, -1, -1, 195, -1, -1, -1, -1, 200, + -1, -1, -1, 2740, -1, 1582, -1, -1, -1, 2746, + -1, -1, 4337, -1, -1, -1, -1, -1, -1, -1, + 1680, -1, 223, 224, -1, -1, -1, 4864, 4865, 4866, + 4867, 4868, -1, 4870, 4871, -1, -1, -1, 1615, -1, + -1, -1, -1, 244, -1, 4882, 4883, -1, -1, -1, + 2787, -1, -1, -1, -1, -1, -1, -1, -1, 4384, + 873, 494, 4387, -1, -1, -1, -1, -1, -1, -1, + 503, 504, 505, 506, 507, 508, 509, 510, 511, -1, + 4917, -1, -1, -1, 285, -1, -1, 2678, -1, -1, + -1, 2682, 2683, -1, -1, -1, -1, -1, 299, -1, + -1, 302, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 327, -1, -1, -1, + -1, -1, -1, -1, -1, 1795, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 705, -1, -1, -1, 2740, + -1, -1, 4477, 4478, -1, 2746, -1, -1, -1, -1, + -1, -1, -1, 4488, -1, -1, -1, -1, -1, -1, + 1830, 731, -1, -1, -1, -1, -1, -1, -1, -1, + 4505, -1, 5019, -1, -1, -1, -1, -1, -1, -1, + -1, 392, -1, 1853, -1, -1, 2787, -1, -1, 2996, + -1, 1861, -1, -1, -1, -1, -1, -1, 409, 1869, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1035, -1, -1, -1, -1, -1, -1, -1, + 1807, -1, -1, 1046, -1, -1, -1, -1, -1, -1, + -1, 1818, -1, -1, -1, -1, -1, 5084, -1, 1062, + -1, -1, -1, 1913, 1914, -1, -1, 1834, -1, 2996, + -1, 4586, -1, -1, 4589, -1, -1, 1927, -1, -1, + -1, -1, 3069, -1, -1, -1, 3073, -1, -1, 5116, + 1940, 1941, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 494, -1, -1, -1, -1, -1, -1, + -1, -1, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 1888, -1, 873, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1903, -1, -1, 1906, + 1907, -1, 3069, -1, -1, -1, 3073, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, + -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, + 1937, 1938, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 10, 5211, 37, 13, -1, -1, 3176, + 17, 18, 19, -1, -1, 47, -1, -1, -1, -1, + -1, -1, 54, -1, 3191, -1, -1, -1, -1, 3196, + 37, -1, -1, 40, -1, 2996, 1219, -1, -1, -1, + 47, -1, -1, -1, -1, -1, -1, 54, 80, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3225, -1, + -1, -1, -1, -1, -1, 2095, -1, -1, 5275, 3176, + -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3191, -1, -1, 5294, -1, 3196, + -1, -1, -1, 5300, 5301, -1, -1, -1, -1, -1, + -1, -1, -1, 5310, -1, 1035, -1, -1, 3069, -1, + 5317, -1, 3073, -1, -1, -1, 1046, -1, 3225, -1, + -1, -1, -1, -1, -1, -1, -1, 2074, -1, -1, + 4825, -1, 1062, -1, -1, -1, -1, 169, -1, -1, + -1, -1, -1, -1, -1, 5352, 5353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5365, -1, + 5367, -1, -1, 195, -1, -1, -1, -1, 200, -1, + -1, -1, -1, -1, 4869, 5382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4881, -1, 195, -1, + -1, 223, 224, 200, -1, -1, -1, -1, -1, -1, + 5407, -1, -1, -1, -1, -1, -1, -1, 5415, -1, + -1, -1, 244, -1, -1, 3176, 223, 224, -1, -1, + -1, 4916, -1, -1, -1, -1, -1, -1, -1, -1, + 3191, -1, -1, -1, -1, 3196, -1, 244, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 705, -1, -1, 285, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3225, -1, -1, 299, -1, -1, + 302, -1, -1, -1, -1, -1, 731, -1, 285, -1, + -1, -1, 5489, -1, -1, -1, -1, -1, -1, 1219, + -1, 1474, 299, 325, -1, 302, -1, -1, -1, 4994, + -1, -1, -1, -1, -1, 3472, 5513, -1, 3475, -1, + 3477, -1, -1, -1, -1, 3482, -1, 5524, 5013, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1541, -1, + 392, -1, -1, 3530, -1, 3472, -1, -1, 3475, -1, + 3477, 3538, -1, -1, -1, 3482, -1, -1, -1, -1, + -1, -1, -1, -1, 5591, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3563, -1, -1, 1582, + -1, -1, -1, -1, 5099, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 873, -1, + -1, -1, -1, 3530, -1, -1, -1, -1, -1, -1, + -1, 3538, 1615, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5661, -1, 3563, -1, -1, -1, + -1, -1, 494, -1, -1, -1, 3633, -1, 3635, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, -1, -1, -1, -1, -1, 494, -1, -1, + -1, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, -1, -1, -1, -1, + -1, 3472, -1, -1, 3475, -1, 3477, -1, -1, -1, + 5727, 3482, -1, -1, -1, -1, 3633, -1, 3635, -1, + -1, 5226, -1, 5228, 5741, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1474, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3729, -1, -1, -1, -1, -1, -1, 3530, + -1, -1, -1, -1, -1, -1, -1, 3538, -1, 5274, + 1035, -1, -1, -1, -1, -1, 2616, -1, -1, 5284, + -1, 1046, -1, 5800, -1, -1, -1, -1, -1, -1, + -1, -1, 3563, -1, 3771, -1, -1, 1062, -1, -1, + 10, 1541, -1, 13, -1, -1, -1, 17, 18, 19, + -1, -1, 3729, -1, 1807, -1, -1, -1, -1, 5324, + -1, -1, 3799, -1, 5329, 1818, -1, 37, -1, -1, + -1, 2671, -1, -1, -1, -1, -1, 47, -1, -1, + -1, 1834, 1582, -1, 54, -1, -1, -1, -1, 2689, + -1, -1, -1, 2693, 3771, -1, -1, 2697, -1, -1, + -1, -1, 3633, -1, 3635, -1, 2706, -1, -1, -1, + 80, -1, -1, -1, -1, 1615, -1, 5894, -1, -1, + -1, -1, 3799, -1, 2724, -1, -1, -1, -1, -1, + 3867, -1, -1, -1, -1, 1888, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5926, + 1903, -1, 3889, 1906, 1907, -1, -1, -1, 2758, -1, + 5937, 2678, -1, -1, -1, 2682, 2683, -1, -1, -1, + -1, -1, -1, -1, 3911, -1, -1, -1, 2778, 2779, + -1, -1, -1, -1, 1937, 1938, -1, -1, -1, -1, + 3867, -1, -1, -1, 1219, -1, -1, -1, 3729, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2809, + 2810, -1, 3889, 2813, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2740, -1, 195, -1, -1, -1, 2746, + 200, -1, -1, -1, 3911, -1, -1, 2837, 10, 2839, + 3771, 13, -1, 2843, -1, 17, 18, 19, -1, -1, + -1, -1, -1, 223, 224, -1, 3993, 2857, -1, -1, + -1, -1, 6039, -1, 2864, 37, -1, 2867, 3799, -1, + 2787, -1, -1, 2873, 244, 47, -1, -1, 5543, 208, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 220, 5557, 2893, -1, -1, -1, -1, -1, 2899, + 4037, -1, 231, -1, -1, -1, 2906, 1807, 80, -1, + -1, -1, -1, -1, -1, 285, 3993, -1, 1818, -1, + 2920, 2074, -1, 5588, -1, 4062, -1, -1, -1, 299, + -1, -1, 302, 2933, 1834, -1, 3867, -1, 2938, -1, + -1, -1, -1, -1, 2944, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3889, -1, + 4037, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, + 3911, -1, 17, 18, 19, 4062, -1, -1, 1888, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, 1903, 3004, 40, 1906, 1907, -1, -1, + -1, -1, 47, -1, -1, -1, -1, -1, -1, 54, + -1, -1, 392, 195, 5689, -1, -1, -1, 200, -1, + -1, -1, -1, -1, -1, -1, -1, 1937, 1938, -1, + -1, -1, -1, -1, -1, 80, -1, -1, -1, 1474, + -1, 223, 224, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3993, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 244, 10, -1, -1, 13, -1, -1, 2996, + 17, 18, 19, -1, -1, 4222, -1, -1, -1, 5754, + -1, 5756, -1, -1, -1, -1, -1, -1, -1, -1, + 37, -1, -1, -1, -1, -1, 4037, -1, -1, -1, + 47, -1, -1, 285, -1, -1, 1541, 54, -1, -1, + -1, -1, -1, 493, 494, -1, -1, 299, -1, -1, + 302, 4062, -1, 503, 504, 505, 506, 507, 508, 509, + 510, 511, -1, 80, -1, 4222, -1, -1, -1, 321, + -1, -1, 3069, -1, -1, -1, 3073, 1582, -1, 3159, + 195, 3161, -1, -1, -1, 200, -1, -1, -1, -1, + -1, -1, -1, -1, 2074, 4312, -1, -1, 3178, -1, + -1, -1, -1, -1, -1, 3185, -1, -1, 223, 224, + 1615, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4338, -1, -1, -1, -1, -1, -1, -1, 244, + -1, -1, -1, -1, -1, -1, -1, 5882, -1, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5895, -1, -1, -1, -1, 4312, -1, -1, -1, 176, + -1, -1, -1, 5908, -1, -1, -1, -1, -1, -1, + 285, -1, -1, -1, -1, -1, -1, -1, 195, 3176, + -1, 4338, -1, 200, 299, -1, -1, 302, -1, -1, + -1, -1, -1, -1, 3191, -1, 3276, -1, -1, 3196, + -1, -1, 3282, -1, -1, -1, 223, 224, -1, -1, + -1, 4222, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5967, 5968, -1, -1, -1, 244, 3225, -1, + -1, -1, -1, -1, 643, -1, -1, -1, -1, -1, + 649, -1, 494, -1, -1, -1, -1, -1, -1, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + -1, -1, -1, -1, 4481, -1, -1, -1, 285, -1, + -1, -1, -1, -1, -1, -1, -1, 392, -1, -1, + -1, 6026, 299, -1, -1, 302, -1, 3367, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4312, 1807, -1, -1, -1, -1, -1, -1, -1, + -1, 4528, -1, 1818, -1, -1, 4533, -1, -1, -1, + -1, -1, -1, -1, 4481, -1, -1, 4338, -1, 1834, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4528, -1, -1, -1, 392, 4533, -1, -1, 494, + -1, -1, -1, 1888, -1, -1, -1, -1, 503, 504, + 505, 506, 507, 508, 509, 510, 511, -1, 1903, -1, + -1, 1906, 1907, -1, -1, -1, -1, -1, -1, -1, + -1, 820, -1, -1, -1, -1, -1, 3497, 3498, 6164, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 839, -1, 1937, 1938, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3524, 2678, -1, 3527, -1, 2682, + 2683, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6209, -1, -1, -1, 4685, -1, + 4481, -1, 6217, 6218, -1, 3472, -1, 494, 3475, -1, + 3477, -1, 6227, -1, -1, 3482, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, -1, -1, -1, -1, + 909, -1, -1, -1, -1, -1, -1, 2740, -1, -1, + -1, -1, -1, 2746, -1, -1, -1, 4528, -1, 3599, + 3600, 3601, 4533, -1, -1, -1, -1, -1, 4685, -1, + -1, 10, -1, 3530, 13, -1, -1, -1, 17, 18, + 19, 3538, -1, -1, 3624, -1, -1, 956, -1, -1, + -1, -1, -1, -1, 2787, -1, -1, -1, 37, -1, + -1, 40, -1, 3643, -1, -1, 3563, -1, 47, 2074, + -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, 10, -1, 3665, 13, -1, -1, -1, + 17, 18, 19, -1, -1, 4812, -1, -1, -1, -1, + -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 47, -1, -1, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, 4852, 3633, -1, 3635, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 80, -1, 4812, -1, 4874, -1, -1, + -1, -1, 1071, -1, -1, -1, -1, -1, -1, -1, + 10, 3751, -1, 13, 4685, -1, -1, 17, 18, 19, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1100, 1101, 1102, -1, 4852, -1, 37, 2678, -1, + 40, -1, 2682, 2683, -1, -1, -1, 47, -1, -1, + -1, -1, -1, -1, 54, -1, 195, 4874, 3798, -1, + -1, 200, -1, -1, 3804, -1, 3806, -1, -1, -1, + 4947, -1, 3729, -1, -1, -1, -1, -1, -1, 3819, + 80, 3821, -1, -1, 223, 224, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2740, -1, -1, 2996, -1, 244, 2746, -1, 195, -1, + -1, -1, -1, 200, 3771, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4947, -1, -1, -1, -1, -1, 223, 224, -1, -1, + 1209, 4812, 3799, -1, -1, -1, 285, 2787, 3888, -1, + -1, -1, -1, -1, -1, -1, -1, 244, -1, -1, + 299, -1, -1, 302, -1, -1, -1, -1, 1237, -1, + -1, -1, -1, -1, -1, -1, 3069, -1, -1, -1, + 3073, 4852, -1, -1, -1, -1, -1, -1, -1, -1, + 3930, 5068, -1, -1, -1, 195, -1, -1, 285, -1, + 200, -1, -1, 4874, -1, -1, -1, -1, -1, 3949, + 3867, -1, 299, 3953, -1, 302, -1, -1, -1, -1, + -1, -1, -1, 223, 224, -1, -1, -1, -1, -1, + -1, -1, 3889, -1, 3974, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 244, -1, -1, -1, -1, -1, + -1, 5068, -1, 392, 3911, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4947, -1, -1, -1, + -1, -1, -1, 3176, -1, 285, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3191, 299, + -1, -1, 302, 3196, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1384, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5204, -1, -1, + -1, -1, 3225, -1, 4074, -1, 3993, -1, 425, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 494, 2996, -1, -1, -1, + -1, -1, -1, -1, 503, 504, 505, 506, 507, 508, + 509, 510, 511, -1, -1, -1, -1, -1, -1, -1, + 4037, -1, -1, -1, -1, -1, -1, 5204, -1, -1, + -1, -1, 392, -1, -1, 1464, 5273, 5068, -1, -1, + -1, -1, -1, -1, -1, 4062, -1, 494, -1, -1, + -1, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, -1, -1, -1, -1, 3069, + -1, -1, -1, 3073, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5273, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1547, -1, + -1, -1, -1, -1, -1, -1, -1, 1556, -1, -1, + -1, -1, -1, -1, 494, -1, -1, -1, -1, -1, + -1, -1, -1, 503, 504, 505, 506, 507, 508, 509, + 510, 511, -1, 2678, -1, 4255, 5393, 2682, 2683, 1588, + -1, -1, -1, -1, -1, 1594, 1595, -1, -1, 1598, + -1, -1, -1, 5204, -1, -1, 3176, -1, -1, -1, + -1, -1, 1611, -1, -1, 1614, -1, -1, -1, -1, + -1, 3191, -1, -1, -1, -1, 3196, -1, -1, -1, + -1, -1, -1, -1, -1, 4222, 4306, -1, -1, -1, + -1, 4311, -1, 4313, -1, 2740, 5393, -1, -1, 3472, + -1, 2746, 3475, -1, 3477, 3225, -1, -1, -1, 3482, + -1, -1, -1, -1, -1, -1, -1, 4337, -1, -1, + -1, 1670, 5273, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1684, -1, -1, -1, -1, + -1, -1, 2787, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3530, -1, -1, + -1, -1, -1, -1, 4384, 3538, -1, 4387, 5525, -1, + -1, -1, -1, 5530, 5531, 4312, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3563, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4338, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 817, 818, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5525, -1, + -1, -1, -1, 5530, 5531, -1, -1, -1, -1, -1, + -1, -1, 5393, -1, -1, 1794, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1805, 4477, 4478, -1, + 3633, -1, 3635, -1, 10, -1, -1, 13, 4488, -1, + -1, 17, 18, 19, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4505, 5643, -1, -1, -1, + -1, 37, -1, -1, -1, 895, -1, -1, 1847, 1848, + -1, 47, -1, -1, -1, -1, 10, -1, 54, 13, + -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, + -1, -1, -1, 1872, -1, -1, -1, -1, -1, -1, + 1879, -1, -1, 37, 80, 5692, -1, -1, -1, -1, + -1, -1, -1, 47, 4481, -1, 5643, -1, -1, -1, + 54, 2996, 3472, -1, -1, 3475, 3729, 3477, -1, -1, + -1, -1, 3482, -1, -1, -1, 4586, -1, -1, 4589, + -1, -1, -1, -1, 5525, -1, 80, -1, -1, 5530, + 5531, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4528, -1, -1, -1, 5692, 4533, -1, 3771, -1, + -1, -1, -1, 1952, -1, -1, -1, -1, -1, -1, + 3530, -1, -1, -1, -1, -1, 1016, 1017, 3538, -1, + -1, -1, -1, -1, 3069, -1, 3799, -1, 3073, -1, + 176, -1, -1, -1, -1, -1, 1985, 1986, -1, -1, + -1, -1, -1, 3563, -1, -1, -1, -1, -1, 195, + -1, -1, -1, 2002, 200, -1, 2005, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 176, -1, -1, -1, -1, 223, 224, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 195, 5643, -1, 3867, -1, 200, -1, 244, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3633, -1, 3635, 3889, -1, -1, 223, + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3176, -1, -1, -1, -1, -1, -1, 3911, 285, + 244, 5692, -1, -1, -1, 1335, 3191, -1, 4685, -1, + -1, 3196, -1, 299, -1, -1, 302, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3225, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 299, -1, -1, 302, -1, + -1, -1, 1392, -1, -1, 4825, -1, -1, -1, 3729, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3993, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 392, -1, -1, 4869, + -1, 3771, -1, -1, -1, 1255, -1, -1, -1, -1, + -1, 4881, -1, -1, 4037, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 10, 4812, -1, 13, -1, 3799, + -1, 17, 18, 19, -1, -1, -1, -1, 392, 4062, + 1290, -1, -1, -1, -1, -1, 4916, -1, -1, -1, + -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 47, -1, -1, -1, 4852, -1, -1, 54, 1319, + 1320, 1321, -1, 1323, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4874, -1, -1, + -1, -1, -1, 1343, 80, -1, -1, 3867, 494, -1, + -1, -1, -1, -1, -1, -1, -1, 503, 504, 505, + 506, 507, 508, 509, 510, 511, -1, -1, -1, 3889, + -1, -1, -1, -1, 4994, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 494, 3911, -1, 5013, -1, -1, -1, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, -1, -1, + 4947, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3472, -1, -1, + 3475, -1, 3477, -1, 170, -1, -1, 3482, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1448, 4222, + -1, -1, 1452, 1453, -1, -1, -1, -1, -1, 195, + -1, -1, -1, -1, 200, -1, -1, -1, -1, -1, + -1, -1, -1, 3993, -1, -1, -1, -1, -1, 5099, + -1, -1, -1, -1, -1, 3530, -1, 223, 224, -1, + -1, -1, -1, 3538, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 244, -1, + -1, 1701, -1, -1, -1, 1705, -1, 4037, 3563, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5068, -1, -1, -1, -1, -1, -1, -1, 4312, + -1, -1, 4062, -1, -1, -1, -1, -1, -1, 285, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 299, -1, 4338, 302, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2534, -1, -1, 3633, -1, + 3635, -1, -1, -1, -1, -1, 2545, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5226, -1, 5228, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 10, -1, -1, 13, 2577, -1, + -1, 17, 18, 19, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, -1, -1, 5274, -1, 392, -1, -1, -1, + -1, 47, -1, -1, -1, -1, -1, 5204, 54, -1, + -1, -1, -1, -1, -1, 2624, 2625, -1, -1, -1, + -1, -1, -1, -1, 3729, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, 1695, 1696, 1697, -1, -1, + -1, -1, 4222, -1, 5324, -1, -1, -1, 4481, 2658, + -1, -1, 10, -1, -1, 13, -1, -1, -1, 17, + 18, 19, -1, -1, -1, -1, 3771, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5273, -1, -1, 37, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, + -1, -1, -1, -1, 3799, 4528, 54, -1, 494, -1, + 4533, -1, -1, 149, -1, -1, -1, 503, 504, 505, + 506, 507, 508, 509, 510, 511, -1, -1, -1, -1, + -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4312, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 195, + -1, -1, -1, -1, 200, -1, -1, -1, 4338, -1, + -1, -1, 3867, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2022, -1, -1, -1, -1, 223, 224, -1, + -1, -1, 2791, -1, 3889, -1, -1, -1, -1, -1, + -1, 2041, -1, -1, -1, 2045, 5393, 2806, 244, -1, + -1, -1, -1, -1, -1, -1, 3911, -1, -1, -1, + 2060, 2061, 2062, -1, 2064, -1, -1, 10, -1, 2828, + 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 195, -1, 285, + -1, -1, 200, -1, 37, -1, -1, -1, -1, -1, + -1, -1, 4685, 299, 47, -1, 302, -1, -1, -1, + -1, 54, -1, 5543, -1, 223, 224, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5557, -1, -1, + -1, -1, -1, -1, -1, -1, 244, 80, 3993, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4481, -1, -1, -1, 2914, 2915, -1, 5588, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 285, 5525, -1, + -1, -1, 4037, 5530, 5531, -1, -1, -1, -1, -1, + -1, 299, -1, -1, 302, -1, 392, -1, 4528, -1, + -1, -1, -1, 4533, -1, -1, -1, 4062, -1, -1, + -1, -1, -1, -1, 2024, -1, -1, -1, -1, -1, + -1, -1, -1, 2033, 2034, 2035, 2036, 170, -1, 4812, + 2040, -1, 2042, -1, 2044, -1, -1, 2047, 2048, 2049, + -1, -1, -1, -1, -1, 2055, -1, -1, 2058, -1, + -1, -1, 195, -1, -1, -1, 3015, 200, -1, 5689, + -1, -1, -1, -1, -1, 2075, 2076, 2077, -1, 4852, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 223, 224, -1, 2093, 392, -1, -1, -1, -1, -1, + -1, 4874, -1, -1, -1, -1, 5643, -1, 494, -1, + -1, 244, -1, -1, -1, -1, -1, 503, 504, 505, + 506, 507, 508, 509, 510, 511, -1, -1, -1, -1, + -1, -1, -1, -1, 5754, -1, 5756, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 285, -1, 10, 5692, -1, 13, -1, -1, + -1, 17, 18, 19, -1, 4685, 299, -1, -1, 302, + 468, -1, -1, -1, 4947, -1, -1, 4222, -1, -1, + -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 47, -1, -1, -1, -1, 494, -1, 54, -1, + -1, -1, -1, -1, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2237, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 392, + -1, -1, 5882, -1, -1, -1, -1, 4312, -1, -1, + -1, -1, 27, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, 2284, 40, -1, -1, 5908, -1, + -1, -1, 4812, 4338, -1, 5068, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 78, -1, -1, -1, -1, -1, -1, + -1, -1, 4852, -1, -1, -1, -1, 2337, -1, 195, + -1, 2531, -1, -1, 200, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4874, -1, -1, -1, 113, -1, + -1, 494, -1, -1, -1, -1, -1, 223, 224, -1, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 134, + -1, -1, -1, -1, -1, -1, 141, -1, 244, 144, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3353, -1, 6026, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 171, -1, -1, -1, + -1, -1, -1, -1, -1, 3374, -1, 4947, -1, 285, + -1, 5204, -1, -1, -1, -1, 4481, -1, -1, -1, + -1, 2631, -1, 299, -1, -1, 302, -1, 203, -1, + -1, -1, 207, 2643, -1, -1, -1, -1, 2648, 27, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4528, -1, -1, -1, -1, 4533, -1, + -1, -1, -1, -1, 62, -1, -1, -1, -1, -1, + 5273, -1, -1, -1, 259, -1, -1, -1, 263, -1, + 78, -1, -1, -1, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, 278, 2524, -1, -1, 282, -1, -1, + -1, -1, -1, -1, -1, 2535, 392, 292, 2538, -1, + -1, -1, -1, -1, 6164, 113, 301, -1, 5068, -1, + -1, -1, -1, -1, -1, -1, -1, 312, 313, -1, + -1, -1, -1, -1, -1, -1, 134, -1, -1, -1, + -1, -1, -1, 141, -1, -1, 144, -1, -1, 2579, + -1, -1, -1, 2583, -1, -1, 2586, -1, 2588, 6209, + -1, 2591, -1, -1, -1, -1, -1, 352, -1, -1, + 355, 356, 357, 171, -1, -1, -1, 6227, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5393, -1, -1, -1, -1, -1, 381, -1, -1, -1, + -1, -1, 387, -1, -1, 203, -1, -1, 494, 207, + 4685, -1, -1, -1, 2644, 2645, 401, 503, 504, 505, + 506, 507, 508, 509, 510, 511, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5204, -1, -1, -1, -1, -1, + -1, 259, 3641, -1, -1, 263, -1, -1, -1, -1, + -1, 456, 3651, -1, -1, -1, -1, -1, -1, -1, + 278, -1, -1, -1, 282, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 292, -1, -1, 2727, -1, -1, + -1, -1, -1, 301, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 312, 313, -1, -1, -1, -1, + -1, -1, 5525, 5273, -1, -1, -1, 5530, 5531, -1, + -1, -1, -1, -1, -1, -1, -1, 4812, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, + -1, -1, -1, -1, 352, -1, -1, 355, 356, 357, + -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4852, -1, -1, + -1, -1, -1, 381, -1, -1, -1, -1, -1, 387, + -1, -1, 68, -1, -1, -1, -1, -1, -1, 4874, + -1, -1, -1, 401, -1, 81, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 97, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3810, 3811, 3812, -1, -1, -1, -1, -1, 115, + 5643, -1, -1, 5393, -1, 121, -1, -1, 3827, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 456, -1, + -1, -1, -1, 139, -1, -1, -1, -1, -1, -1, + -1, -1, 4947, -1, 150, -1, -1, -1, -1, -1, + -1, 3860, 3861, 159, -1, -1, 3865, -1, -1, 5692, + -1, -1, -1, -1, -1, -1, 172, -1, -1, -1, + -1, -1, -1, -1, -1, 181, -1, -1, -1, 185, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 205, + -1, -1, 2962, 2963, 2964, -1, -1, -1, 2968, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2995, -1, -1, -1, -1, + -1, -1, 248, -1, -1, 5525, -1, -1, -1, -1, + 5530, 5531, 258, -1, -1, -1, -1, 3207, -1, -1, + -1, -1, 3971, 5068, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3228, -1, + -1, -1, -1, 3233, -1, -1, -1, -1, -1, 3239, + -1, -1, -1, 299, 3244, 3245, 302, 3247, -1, -1, + -1, -1, 3252, 3253, -1, 3255, -1, 3257, -1, -1, + -1, 3261, -1, -1, 3264, -1, -1, 323, -1, 3269, + -1, -1, -1, -1, -1, -1, -1, -1, 3278, -1, + -1, 337, -1, 3283, -1, -1, -1, -1, 344, -1, + -1, 3291, 3292, 3293, 3294, -1, -1, -1, 3298, 3299, + -1, 3301, -1, -1, -1, -1, -1, -1, 364, -1, + -1, -1, -1, 5643, -1, -1, -1, -1, 374, -1, + 3320, -1, 3322, -1, -1, 381, -1, -1, 384, 3329, + 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, -1, + -1, -1, -1, -1, -1, -1, -1, 403, -1, 5204, + -1, -1, -1, -1, 410, -1, -1, -1, -1, -1, + -1, 417, 5692, -1, 420, 421, -1, 423, 424, -1, + -1, -1, 4131, 4132, 4133, 3375, -1, -1, -1, -1, + -1, -1, -1, 439, -1, -1, -1, -1, -1, -1, + 446, -1, -1, 449, 3204, -1, 452, -1, -1, 3209, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 465, + -1, -1, -1, -1, -1, -1, -1, -1, 5273, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3254, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3265, -1, 3267, 3268, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 3281, -1, -1, 3284, -1, 3286, -1, -1, -1, + -1, 33, -1, 35, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 3323, -1, 3325, -1, 3327, 3518, -1, + -1, -1, -1, 75, -1, 77, 78, -1, -1, -1, + -1, -1, 84, -1, 86, -1, -1, -1, 5393, -1, + -1, -1, -1, -1, -1, -1, 98, -1, 100, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 117, -1, -1, 120, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 135, -1, 137, -1, -1, -1, 141, + -1, -1, 25, -1, -1, 147, -1, 30, -1, -1, + -1, -1, -1, 155, -1, 157, -1, -1, 3418, -1, + -1, -1, 164, 3423, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3438, -1, + 182, -1, -1, -1, -1, 68, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 199, 81, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 97, -1, -1, -1, -1, -1, + 5525, -1, -1, -1, -1, 5530, 5531, -1, -1, -1, + -1, -1, 115, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3503, 246, 247, -1, -1, -1, 4458, + 252, -1, -1, -1, -1, -1, 139, -1, -1, -1, + -1, -1, -1, -1, 266, -1, -1, 150, -1, -1, + -1, -1, -1, -1, -1, -1, 159, -1, -1, -1, + -1, 4490, 284, -1, -1, -1, -1, -1, -1, 172, + -1, -1, -1, -1, -1, 178, -1, -1, -1, -1, + -1, -1, 185, -1, -1, -1, -1, -1, -1, -1, + 3760, 3761, -1, 4522, -1, 3765, -1, -1, -1, -1, + -1, -1, 205, -1, -1, -1, 328, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5643, -1, + 342, -1, -1, -1, 3794, -1, 348, 349, 4557, 351, + -1, -1, -1, -1, 356, -1, -1, 359, -1, -1, + 362, -1, -1, 365, -1, 4574, -1, -1, -1, -1, + 372, -1, -1, -1, -1, 258, -1, 379, 380, -1, + -1, -1, -1, -1, -1, 387, -1, 5692, -1, 391, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 401, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 417, 299, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 312, + -1, -1, -1, -1, -1, 437, -1, -1, -1, -1, + 323, -1, -1, -1, -1, -1, 448, -1, -1, -1, + 333, 334, 454, -1, 337, -1, -1, 459, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 472, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 364, -1, -1, 367, -1, -1, -1, 371, -1, + -1, 374, -1, -1, 496, -1, 3756, -1, 381, -1, + -1, 384, 3762, -1, -1, -1, -1, 4716, 4717, 4718, + 4719, -1, -1, 515, -1, -1, 518, -1, -1, -1, + 403, -1, -1, -1, -1, -1, -1, 410, -1, -1, + -1, -1, -1, -1, 417, -1, -1, 420, -1, 3989, + -1, 424, -1, -1, -1, 3995, -1, -1, -1, 432, + -1, 434, -1, -1, -1, -1, 439, 30, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 452, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3841, 465, -1, 4034, 4035, -1, -1, 4038, 4039, + 4040, 4041, -1, -1, 4044, 4045, 4046, 4047, 4048, 4049, + 4050, 4051, 4052, 4053, 4054, -1, -1, -1, 81, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 97, -1, -1, 4077, -1, -1, + 4080, -1, 4082, -1, -1, 4085, 4086, -1, -1, -1, + -1, -1, 115, -1, -1, -1, -1, -1, 121, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4109, + 4110, 4111, 4112, -1, 4114, -1, 139, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 150, -1, -1, + -1, -1, -1, -1, -1, -1, 159, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 172, + -1, -1, -1, -1, -1, 178, -1, -1, -1, -1, + -1, -1, 185, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3990, 4181, 205, -1, -1, -1, -1, -1, 3998, -1, + 4000, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4010, -1, -1, -1, 4014, 4015, -1, -1, -1, -1, + 4020, -1, -1, 236, -1, -1, -1, -1, 4028, -1, + 4030, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4231, -1, -1, -1, 258, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4057, 4058, 4059, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4076, -1, -1, -1, + -1, -1, -1, -1, 4084, -1, 299, 4087, -1, 4089, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4107, -1, -1, + 323, -1, 5061, -1, -1, 4115, 4116, -1, -1, -1, + 333, 334, 4122, 5072, 337, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 364, -1, -1, 367, -1, -1, -1, 371, -1, + -1, 374, -1, -1, -1, -1, -1, -1, 381, -1, + -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 403, -1, -1, -1, -1, -1, -1, 410, -1, 4199, + -1, -1, 415, -1, 417, -1, -1, 420, -1, -1, + -1, 424, -1, -1, -1, -1, 4216, -1, -1, -1, + -1, 434, -1, -1, -1, -1, 439, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 452, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 465, -1, -1, -1, -1, -1, -1, -1, + -1, 4451, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4494, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5346, -1, -1, + -1, -1, 5351, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5370, -1, -1, -1, -1, 4616, -1, -1, -1, + 4620, 4621, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4639, + 4640, -1, -1, -1, -1, 4645, 4646, 4647, 4648, -1, + -1, -1, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, + 4660, 4661, 4662, 4663, 4664, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4689, + -1, -1, 4692, -1, 4694, -1, -1, -1, -1, -1, + 4700, -1, -1, 4703, 4704, -1, -1, 4707, 4708, -1, + -1, -1, -1, 4713, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4534, 4535, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4545, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4765, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4779, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4615, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4629, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4643, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5610, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4682, 4683, -1, -1, -1, -1, -1, 5638, + 4690, 4691, -1, -1, -1, 4695, -1, -1, -1, -1, + -1, -1, 4702, -1, -1, 4705, 4706, -1, -1, -1, + -1, -1, 4712, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4755, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4766, -1, -1, -1, + -1, -1, -1, -1, 4774, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4976, -1, -1, -1, + -1, -1, -1, -1, 4794, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5063, 5064, -1, -1, -1, -1, -1, + -1, 5071, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4897, -1, -1, + -1, -1, -1, -1, 4904, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5114, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5132, 5133, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5151, -1, 5153, -1, -1, -1, 5157, 5158, 5159, + -1, -1, 5162, 4973, -1, 5165, 5166, -1, -1, -1, + -1, 5171, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5188, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5206, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5220, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5230, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5295, -1, 5297, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5130, -1, -1, -1, -1, -1, 5136, 5137, 5138, -1, + -1, -1, 5332, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5163, 5164, -1, -1, 5167, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5194, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5205, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5221, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5423, -1, 5425, 5426, 5427, 5428, 5429, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5442, 5443, 5444, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5456, -1, -1, 5459, + -1, -1, -1, 5463, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5481, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5496, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5430, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5474, -1, -1, 5667, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5686, -1, 5688, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5535, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5740, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5577, -1, -1, + -1, -1, -1, -1, -1, -1, 5776, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5842, -1, -1, -1, -1, -1, -1, 5849, + -1, -1, -1, -1, -1, -1, 5666, -1, -1, -1, + -1, -1, -1, -1, -1, 5675, 5676, 5677, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5701, -1, 5893, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5729, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5992, 5993, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6006, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5846, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6047, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5869, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5879, + -1, -1, 6072, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6083, 6084, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5949, + 6140, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5973, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -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, 5, 6, + -1, 8, 9, 10, 11, 12, -1, -1, -1, -1, + -1, -1, -1, -1, 6074, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 6088, -1, + -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, 136, + -1, 138, 139, 140, 141, 142, 6196, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, 175, -1, + 177, 178, 179, 180, 181, -1, 183, 184, -1, 186, + 187, 188, -1, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, + -1, -1, 299, 300, 301, -1, -1, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, 416, + -1, 418, 419, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, 452, -1, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, -1, 494, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 506, + 507, 508, -1, -1, -1, -1, -1, -1, 515, 516, + 3, -1, 5, 6, -1, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, 39, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 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, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, 452, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + -1, 494, -1, 496, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 506, 507, -1, -1, -1, -1, -1, + -1, -1, 515, 516, 3, -1, 5, 6, -1, 8, + 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, -1, 124, 125, 126, 127, 128, + 129, 130, -1, 132, 133, 134, 135, -1, -1, 138, + 139, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, -1, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, -1, 165, 166, 167, 168, + 169, -1, 171, -1, 173, 174, 175, -1, 177, 178, + 179, 180, 181, -1, 183, 184, -1, 186, 187, 188, + -1, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, -1, 201, 202, 203, 204, 205, 206, 207, 208, + -1, 210, 211, 212, 213, 214, 215, 216, 217, 218, + -1, 220, -1, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, + 299, 300, 301, -1, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, + 329, -1, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, -1, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, -1, 418, + 419, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, 452, -1, 454, 455, 456, 457, 458, + 459, 460, -1, 462, 463, 464, 465, 466, 467, -1, + -1, 470, -1, -1, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, -1, 494, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 506, 507, -1, + -1, -1, -1, -1, -1, -1, 515, 516, 3, -1, + 5, 6, -1, 8, 9, 10, 11, 12, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, -1, 124, + 125, 126, 127, 128, 129, 130, -1, 132, 133, 134, + 135, -1, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, -1, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + 175, -1, 177, 178, 179, 180, 181, -1, 183, 184, + -1, 186, 187, 188, -1, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, -1, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, + 215, 216, 217, 218, -1, 220, -1, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + -1, 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, -1, + 295, 296, -1, -1, 299, 300, 301, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, + 325, 326, 327, 328, 329, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, 416, -1, 418, 419, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, 452, -1, 454, + 455, 456, 457, 458, 459, 460, -1, 462, 463, 464, + 465, 466, 467, -1, -1, 470, -1, -1, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, -1, 494, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 506, 507, -1, -1, -1, -1, -1, -1, -1, + 515, 516, 3, -1, 5, 6, -1, 8, 9, 10, + 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, -1, 124, 125, 126, 127, 128, 129, 130, + -1, 132, 133, 134, 135, -1, -1, 138, 139, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + -1, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, -1, 165, 166, 167, 168, 169, -1, + 171, -1, 173, 174, 175, -1, 177, 178, 179, 180, + 181, -1, 183, 184, -1, 186, 187, 188, -1, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, -1, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + 211, 212, 213, 214, 215, 216, 217, 218, -1, 220, + -1, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, + 301, -1, -1, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + -1, 322, 323, 324, 325, 326, 327, 328, 329, -1, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, 416, -1, 418, 419, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, 452, -1, 454, 455, 456, 457, 458, 459, 460, + -1, 462, 463, 464, 465, 466, 467, -1, -1, 470, + -1, -1, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, -1, 494, -1, -1, -1, 3, -1, -1, + -1, -1, -1, -1, -1, 506, 507, -1, -1, -1, + -1, -1, -1, -1, 515, 516, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, 40, -1, 42, 43, 44, -1, + 46, 47, 48, 49, -1, 51, 52, 53, 54, 55, + -1, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, + 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, -1, + -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, -1, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, -1, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, -1, -1, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, -1, -1, + 246, 247, 248, -1, -1, 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, -1, 283, 284, -1, + 286, -1, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, -1, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + -1, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, -1, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 516, 22, 23, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, -1, -1, -1, -1, -1, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, -1, 55, 56, 57, 58, -1, 60, + 61, 62, 63, 64, 65, 66, -1, -1, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, -1, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, -1, -1, -1, 108, -1, -1, + -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, + -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, + -1, 132, 133, 134, 135, -1, -1, 138, 139, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + -1, 152, 153, 154, 155, -1, 157, 158, 159, 160, + -1, -1, 163, -1, 165, 166, 167, 168, 169, -1, + 171, -1, 173, 174, 175, -1, 177, 178, 179, 180, + 181, -1, 183, -1, -1, -1, 187, 188, -1, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + 211, 212, 213, 214, 215, 216, 217, 218, -1, 220, + -1, 222, 223, 224, 225, 226, 227, -1, -1, -1, + -1, 232, 233, 234, 235, 236, 237, -1, -1, 240, + -1, 242, 243, 244, -1, 246, 247, 248, -1, -1, + 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, -1, -1, + 281, -1, 283, 284, 285, 286, -1, -1, 289, 290, + 291, 292, 293, -1, 295, 296, -1, -1, 299, 300, + 301, -1, -1, 304, 305, 306, 307, 308, 309, -1, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + -1, 322, 323, -1, 325, -1, 327, 328, 329, -1, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, + 361, 362, 363, 364, 365, 366, 367, 368, -1, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + -1, 412, -1, 414, 415, -1, -1, 418, 419, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, 432, -1, 434, -1, -1, 437, 438, 439, 440, + 441, 442, 443, 444, -1, -1, 447, 448, 449, 450, + 451, -1, -1, 454, 455, 456, 457, 458, -1, 460, + 461, 462, 463, 464, 465, 466, 467, -1, -1, 470, + -1, -1, 473, 474, 475, 476, 477, 478, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 490, + 491, 492, -1, -1, -1, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + -1, -1, -1, -1, -1, 516, -1, 42, 43, 44, + -1, 46, 47, 48, 49, 50, 51, 52, 53, -1, + 55, 56, 57, 58, -1, 60, 61, 62, 63, 64, + 65, 66, -1, -1, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, -1, -1, 81, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, + -1, -1, -1, 108, -1, -1, -1, 112, 113, 114, + 115, 116, 117, 118, 119, 120, -1, 122, -1, 124, + 125, 126, 127, 128, 129, 130, -1, 132, 133, 134, + 135, -1, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, -1, 152, 153, 154, + 155, -1, 157, 158, 159, 160, -1, -1, 163, -1, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + 175, -1, 177, 178, 179, 180, 181, -1, 183, -1, + -1, -1, 187, 188, -1, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, + 215, 216, 217, 218, -1, 220, -1, 222, 223, 224, + 225, 226, 227, -1, -1, -1, -1, 232, 233, 234, + 235, 236, 237, -1, -1, 240, -1, 242, 243, 244, + -1, 246, 247, 248, -1, -1, 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, -1, -1, 281, -1, 283, 284, + 285, 286, -1, -1, 289, 290, 291, 292, 293, -1, + 295, 296, -1, -1, 299, 300, 301, -1, -1, 304, + 305, 306, 307, 308, 309, -1, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, -1, 322, 323, -1, + 325, -1, 327, 328, 329, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, + 365, 366, 367, 368, -1, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, -1, 412, -1, 414, + 415, -1, -1, 418, 419, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, 432, -1, 434, + -1, -1, 437, 438, 439, 440, 441, 442, 443, 444, + -1, -1, 447, 448, 449, 450, 451, -1, -1, 454, + 455, 456, 457, 458, -1, 460, 461, 462, 463, 464, + 465, 466, 467, -1, -1, 470, -1, -1, 473, 474, + 475, 476, 477, 478, 3, -1, 5, 6, -1, 8, + 9, 10, 11, 12, -1, 490, 491, 492, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, -1, -1, -1, -1, + 39, 516, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, -1, 124, 125, 126, 127, 128, + 129, 130, -1, 132, 133, 134, 135, -1, -1, 138, + 139, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, -1, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, -1, 165, 166, 167, 168, + 169, -1, 171, -1, 173, 174, 175, -1, 177, 178, + 179, 180, 181, -1, 183, 184, -1, 186, 187, 188, + -1, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, -1, 201, 202, 203, 204, 205, 206, 207, 208, + -1, 210, 211, 212, 213, 214, 215, 216, 217, 218, + -1, 220, -1, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, + 299, 300, 301, -1, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, + 329, -1, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 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, -1, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, 452, -1, 454, 455, 456, 457, 458, + 459, 460, -1, 462, 463, 464, 465, 466, 467, -1, + -1, 470, -1, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, -1, 494, -1, 496, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 506, 507, -1, + -1, -1, 3, -1, 5, 6, 515, 8, 9, 10, + 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, -1, 124, 125, 126, 127, 128, 129, 130, + -1, 132, 133, 134, 135, -1, -1, 138, 139, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + -1, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, -1, 165, 166, 167, 168, 169, -1, + 171, -1, 173, 174, 175, -1, 177, 178, 179, 180, + 181, -1, 183, 184, -1, 186, 187, 188, -1, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, -1, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + 211, 212, 213, 214, 215, 216, 217, 218, -1, 220, + -1, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, + 301, -1, -1, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + -1, 322, 323, 324, 325, 326, 327, 328, 329, -1, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, + 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, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, 452, -1, 454, 455, 456, 457, 458, 459, 460, + -1, 462, 463, 464, 465, 466, 467, -1, -1, 470, + -1, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, -1, 494, -1, 496, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 506, 507, -1, -1, -1, + 3, -1, 5, 6, 515, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, 39, -1, -1, 42, + 43, 44, -1, 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, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, 176, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, 239, 240, 241, 242, + 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, 416, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, 452, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + -1, 494, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 506, 507, -1, -1, -1, 3, -1, + 5, 6, 515, 8, 9, 10, 11, 12, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + -1, -1, -1, 38, 39, -1, -1, 42, 43, 44, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, -1, 124, + 125, 126, 127, 128, 129, 130, -1, 132, 133, 134, + 135, -1, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, -1, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + 175, -1, 177, 178, 179, 180, 181, -1, 183, 184, + -1, 186, 187, 188, -1, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, -1, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, + 215, 216, 217, 218, -1, 220, -1, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + -1, 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, -1, + 295, 296, -1, -1, 299, 300, 301, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, + 325, 326, 327, 328, 329, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 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, -1, 414, + 415, 416, -1, 418, 419, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, 452, -1, 454, + 455, 456, 457, 458, 459, 460, -1, 462, 463, 464, + 465, 466, 467, -1, -1, 470, -1, -1, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, -1, 494, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 506, 507, -1, -1, -1, 3, -1, 5, 6, + 515, 8, 9, 10, 11, 12, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, -1, -1, + -1, 38, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, -1, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, 175, -1, + 177, 178, 179, 180, 181, -1, 183, 184, -1, 186, + 187, 188, -1, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, + -1, -1, 299, 300, 301, -1, -1, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 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, -1, 414, 415, 416, + -1, 418, 419, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, 452, -1, 454, 455, 456, + 457, 458, 459, 460, -1, 462, 463, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, -1, 494, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 506, + 507, -1, -1, -1, 3, -1, 5, 6, 515, 8, + 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, -1, 124, 125, 126, 127, 128, + 129, 130, -1, 132, 133, 134, 135, -1, -1, 138, + 139, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, -1, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, -1, 165, 166, 167, 168, + 169, -1, 171, -1, 173, 174, 175, -1, 177, 178, + 179, 180, 181, -1, 183, 184, -1, 186, 187, 188, + -1, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, -1, 201, 202, 203, 204, 205, 206, 207, 208, + -1, 210, 211, 212, 213, 214, 215, 216, 217, 218, + -1, 220, -1, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, + 299, 300, 301, -1, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, + 329, -1, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, -1, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, -1, 418, + 419, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, 452, -1, 454, 455, 456, 457, 458, + 459, 460, -1, 462, 463, 464, 465, 466, 467, -1, + -1, 470, -1, -1, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, -1, 494, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 506, 507, -1, + -1, -1, -1, -1, 513, 514, 515, 3, -1, 5, + 6, -1, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, -1, + 446, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, 494, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 506, 507, 508, -1, -1, 3, -1, 5, 6, 515, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, 494, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 506, 507, + -1, -1, -1, 3, -1, 5, 6, 515, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 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, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, 446, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, 494, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 506, 507, -1, -1, + -1, 3, -1, 5, 6, 515, 8, 9, 10, 11, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, 494, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 506, 507, -1, -1, -1, 3, + -1, 5, 6, 515, 8, 9, 10, 11, 12, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, 39, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, 176, 177, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, 242, 243, + 244, -1, 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, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, 416, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, -1, 446, 447, 448, 449, 450, 451, 452, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + 494, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 506, 507, -1, -1, -1, 3, -1, 5, + 6, 515, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, 429, -1, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, -1, + 446, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, 494, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 506, 507, -1, -1, -1, 3, -1, 5, 6, 515, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, 494, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 506, 507, + -1, -1, -1, 3, -1, 5, 6, 515, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, 446, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, 494, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 506, 507, -1, -1, + -1, 3, -1, 5, 6, 515, 8, 9, 10, 11, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, 494, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 506, 507, -1, -1, -1, 3, + -1, 5, 6, 515, 8, 9, 10, 11, 12, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, 39, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, 242, 243, + 244, -1, 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, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, 416, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, -1, 446, 447, 448, 449, 450, 451, 452, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + 494, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 506, 507, -1, -1, -1, 3, -1, 5, + 6, 515, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, -1, + 446, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, 494, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 506, 507, -1, -1, -1, 3, -1, 5, 6, 515, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, 494, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 506, 507, + -1, -1, -1, 3, -1, 5, 6, 515, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, 446, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, 494, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 506, 507, -1, -1, + -1, 3, -1, 5, 6, 515, 8, 9, 10, 11, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, 494, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 506, 507, -1, -1, -1, 3, + -1, 5, 6, 515, 8, 9, 10, 11, 12, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, 39, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, 242, 243, + 244, -1, 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, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, 416, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, -1, 446, 447, 448, 449, 450, 451, 452, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + 494, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 506, 507, -1, -1, -1, 3, -1, 5, + 6, 515, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 506, 507, -1, -1, -1, 3, -1, 5, 6, 515, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, -1, -1, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 286, 287, + 288, 289, 290, 291, 292, 293, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, 494, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 506, 507, + -1, -1, -1, 3, -1, 5, 6, 515, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 506, 507, 3, -1, + 5, 6, -1, 8, 9, 515, 11, 12, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, -1, 122, -1, 124, + 125, 126, 127, 128, 129, 130, -1, 132, 133, 134, + 135, -1, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, -1, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + 175, -1, 177, 178, 179, 180, 181, -1, 183, 184, + -1, 186, 187, 188, -1, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, -1, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, + 215, 216, 217, 218, -1, 220, -1, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + -1, 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, -1, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, -1, + 295, 296, -1, -1, 299, 300, 301, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, + 325, 326, 327, 328, 329, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, 416, -1, 418, 419, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + -1, -1, 447, 448, 449, 450, 451, 452, -1, 454, + 455, 456, 457, 458, 459, 460, -1, 462, 463, 464, + 465, 466, 467, -1, -1, 470, -1, -1, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 506, 507, 3, -1, 5, 6, -1, 8, 9, + 515, 11, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, -1, -1, -1, 3, -1, 5, + 6, -1, 8, 9, -1, 11, 12, -1, -1, -1, + -1, -1, -1, -1, -1, 515, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, 3, -1, 5, 6, -1, 8, 9, -1, 11, + 12, -1, -1, -1, -1, -1, -1, -1, -1, 515, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, + -1, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, -1, -1, -1, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 515, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, -1, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, -1, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, -1, 240, 241, 242, 243, 244, -1, 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, -1, 283, 284, 285, 286, -1, + 288, 289, 290, 291, 292, 293, -1, 295, 296, -1, + 298, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 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, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, -1, 437, + 438, 439, 440, 441, 442, 443, 444, -1, -1, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, -1, -1, 496, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 515, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, -1, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, -1, 240, 241, 242, 243, + 244, -1, 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, -1, 283, + 284, 285, 286, -1, 288, 289, 290, 291, 292, 293, + -1, 295, 296, -1, 298, 299, 300, 301, -1, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, 416, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, -1, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, 452, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 515, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 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, -1, 283, 284, 285, 286, -1, 288, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, 452, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, -1, -1, -1, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 515, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 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, -1, 283, 284, 285, + 286, -1, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, 452, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 515, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, -1, -1, -1, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 515, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, -1, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, -1, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, -1, 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, -1, 283, 284, 285, 286, -1, + 288, 289, 290, 291, 292, 293, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, -1, 437, + 438, 439, 440, 441, 442, 443, 444, -1, -1, 447, + 448, 449, 450, 451, 452, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, -1, -1, -1, 3, + -1, 5, 6, -1, -1, -1, -1, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 515, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, -1, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, -1, -1, -1, 108, -1, -1, -1, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, 242, 243, + 244, -1, 246, 247, 248, -1, -1, 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, -1, 283, + 284, 285, 286, -1, 288, 289, 290, 291, 292, 293, + -1, 295, 296, 297, -1, 299, 300, 301, -1, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, -1, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, -1, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, 506, 507, 508, -1, -1, -1, -1, -1, + -1, 515, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, 35, 36, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, -1, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, -1, -1, -1, 108, -1, + -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, 242, 243, 244, -1, 246, 247, 248, -1, + -1, 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, -1, 283, 284, 285, 286, -1, 288, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 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, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, -1, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, -1, -1, 496, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 515, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, -1, + -1, -1, 108, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, -1, + 246, 247, 248, -1, -1, 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, -1, 283, 284, 285, + 286, -1, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + -1, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 515, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, -1, -1, 496, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 515, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, -1, 51, 52, 53, 54, 55, -1, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, -1, + -1, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, + 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, -1, 102, 103, 104, -1, -1, -1, + 108, -1, -1, -1, 112, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, -1, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, -1, -1, -1, + 178, 179, 180, 181, -1, 183, 184, -1, 186, 187, + 188, -1, 190, 191, 192, 193, 194, -1, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, -1, 212, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, -1, -1, 225, -1, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + -1, -1, 240, 241, -1, 243, -1, -1, 246, 247, + 248, -1, -1, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, -1, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, -1, 283, 284, -1, 286, -1, + 288, 289, 290, 291, 292, 293, -1, 295, 296, -1, + 298, 299, 300, 301, -1, -1, 304, 305, 306, -1, + 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, -1, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, -1, 437, + 438, 439, 440, 441, 442, 443, 444, -1, -1, 447, + 448, 449, 450, 451, -1, -1, 454, 455, 456, 457, + 458, 459, 460, -1, 462, -1, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, -1, -1, -1, -1, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 515, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, -1, 51, 52, 53, + 54, 55, -1, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, -1, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, -1, -1, -1, -1, -1, -1, -1, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, -1, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, -1, -1, -1, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, -1, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, -1, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, -1, + -1, 225, -1, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, -1, 243, + -1, -1, 246, 247, 248, -1, -1, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, -1, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, -1, 283, + 284, -1, 286, -1, 288, 289, 290, 291, 292, 293, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, 306, -1, 308, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, -1, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, -1, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, -1, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, -1, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, -1, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, -1, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 515, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + -1, 51, 52, 53, 54, 55, -1, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, -1, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, -1, -1, 83, 84, 85, 86, 87, 88, -1, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, -1, 102, 103, 104, -1, -1, -1, -1, -1, + -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, -1, -1, -1, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, 192, 193, 194, -1, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, -1, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, -1, -1, 225, -1, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, -1, -1, + 240, 241, -1, 243, -1, -1, 246, 247, 248, -1, + -1, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + -1, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, -1, 283, 284, -1, 286, -1, 288, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, 306, -1, 308, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, -1, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, -1, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, -1, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, 433, 434, 435, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, -1, -1, 454, 455, 456, 457, 458, 459, + 460, -1, 462, -1, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, -1, -1, -1, -1, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 515, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, -1, 51, 52, 53, 54, 55, + -1, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, + 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, -1, 102, 103, 104, -1, + -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, -1, + -1, -1, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, -1, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, -1, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, -1, -1, 225, + -1, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, -1, 243, -1, -1, + 246, 247, 248, -1, -1, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, -1, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, -1, 283, 284, -1, + 286, -1, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, + 326, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, -1, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, -1, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + -1, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, -1, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 515, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, -1, -1, -1, 3, -1, 5, 6, -1, + -1, -1, 10, 11, -1, -1, -1, -1, -1, 17, + 18, 19, -1, 515, 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, -1, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, -1, -1, 81, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, 171, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, + 78, -1, 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, -1, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, -1, 185, -1, 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, -1, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + -1, -1, -1, -1, 232, 233, 234, 235, 236, 237, + 238, 239, 240, -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 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, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, -1, 281, 282, 283, 284, 285, 286, 287, + -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, -1, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, -1, 325, -1, 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, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, + 368, -1, 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, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, 435, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, -1, 412, 413, 414, 415, 416, 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, 452, 453, 454, 455, 456, 457, + 458, -1, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, + 478, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 490, 491, 492, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 3, -1, 5, 6, -1, -1, + -1, 10, 11, -1, -1, -1, -1, -1, 17, 18, + 19, -1, -1, 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, -1, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, 171, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, 235, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, + 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, -1, 157, 158, + 159, 160, -1, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, -1, 185, -1, 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, -1, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, -1, + -1, -1, -1, 232, 233, 234, 235, 236, 237, 238, + 239, 240, -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 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, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, 285, 286, 287, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, -1, 307, 308, + 309, -1, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, -1, 325, -1, 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, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, + -1, 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, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, 435, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, -1, 412, 413, 414, 415, 416, 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, 452, 453, 454, 455, 456, 457, 458, + -1, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 490, 491, 492, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 3, -1, -1, -1, -1, -1, -1, + 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, 99, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - 180, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 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, -1, -1, 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, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, -1, 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, -1, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, -1, -1, 166, 167, 168, 169, + -1, 171, 172, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, 184, -1, 186, 187, 188, -1, + 190, 191, -1, 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, -1, + 220, -1, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, -1, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 260, 261, -1, 263, 264, -1, 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, -1, 295, 296, -1, 298, 299, + 300, 301, 302, -1, 304, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, -1, 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, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, -1, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 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, -1, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, -1, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, -1, + 470, -1, -1, -1, -1, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + -1, 491, 492, -1, 494, -1, -1, -1, -1, -1, + -1, -1, -1, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 3, -1, -1, -1, -1, -1, -1, 10, + -1, -1, -1, -1, -1, -1, 17, 18, 19, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, 99, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, 180, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, + -1, 32, 33, 34, -1, -1, -1, -1, -1, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, -1, + 51, 52, 53, 54, 55, -1, 57, 58, -1, 60, + 61, 62, 63, 64, 65, 66, -1, -1, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + -1, 102, 103, 104, -1, -1, -1, -1, -1, -1, + -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, + -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, + -1, 132, 133, 134, 135, -1, -1, 138, 139, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + -1, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, -1, 163, -1, 165, 166, 167, 168, 169, -1, + 171, -1, 173, 174, -1, -1, -1, 178, 179, 180, + 181, -1, 183, 184, -1, 186, 187, 188, -1, 190, + 191, 192, 193, 194, -1, 196, 197, 198, 199, -1, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + -1, 212, 213, 214, 215, 216, 217, 218, -1, 220, + -1, 222, -1, -1, 225, -1, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, -1, -1, 240, + 241, -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 261, 262, 263, 264, 265, 266, 267, 268, 269, -1, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, -1, 283, 284, -1, 286, -1, 288, 289, 290, + 291, 292, 293, -1, 295, 296, -1, -1, 299, 300, + 301, -1, -1, 304, 305, 306, -1, 308, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + -1, 322, 323, 324, 325, 326, 327, 328, 329, -1, 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, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, 171, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 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, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, 435, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, + 361, 362, -1, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, -1, 393, 394, 395, 396, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, -1, -1, 418, -1, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, 437, 438, 439, 440, + 441, 442, 443, 444, -1, -1, 447, 448, 449, 450, + 451, -1, -1, 454, 455, 456, 457, 458, 459, 460, + -1, 462, -1, 464, 465, 466, 467, -1, -1, 470, + -1, -1, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 3, -1, -1, -1, -1, -1, -1, 10, -1, + -1, -1, -1, -1, -1, 17, 18, 19, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 3, -1, -1, -1, -1, -1, -1, 10, -1, -1, + -1, -1, -1, -1, 17, 18, 19, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, -1, 51, 52, + 53, 54, 55, -1, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, + 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, + 103, 104, -1, -1, -1, -1, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, -1, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, -1, -1, -1, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, -1, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, -1, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + -1, -1, 225, -1, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, -1, + 243, -1, -1, 246, 247, 248, -1, -1, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, -1, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, -1, + 283, 284, -1, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, -1, -1, 299, 300, 301, -1, + -1, 304, 305, 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 323, 324, 325, 326, 327, 328, 329, -1, 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, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + -1, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, -1, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, -1, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + -1, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, 107, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, 289, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 3, + -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, + -1, -1, -1, 17, 18, 19, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, -1, 51, 52, 53, + 54, 55, -1, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, -1, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, -1, -1, -1, -1, -1, -1, -1, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, -1, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, -1, -1, -1, 178, 179, 180, 181, -1, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + 194, -1, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, -1, 212, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, -1, + -1, 225, -1, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, 240, 241, -1, 243, + -1, -1, 246, 247, 248, -1, -1, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, -1, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, -1, 283, + 284, -1, 286, -1, 288, 289, 290, 291, 292, 293, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, 406, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, 171, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, + 324, 325, 326, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, -1, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, -1, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, -1, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, -1, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, -1, -1, + 454, 455, 456, 457, 458, 459, 460, -1, 462, -1, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 3, -1, + -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, + -1, -1, 17, 18, 19, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + -1, -1, -1, -1, -1, -1, -1, 42, 43, 44, + -1, 46, 47, 48, 49, -1, 51, 52, 53, 54, + 55, -1, 57, 58, -1, 60, 61, 62, 63, 64, + 65, 66, -1, -1, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, + 85, 86, 87, 88, -1, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, -1, 102, 103, 104, + -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, + 115, 116, 117, 118, 119, 120, -1, 122, -1, 124, + 125, 126, 127, 128, 129, 130, -1, 132, 133, 134, + 135, -1, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, -1, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, -1, 163, -1, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + -1, -1, -1, 178, 179, 180, 181, -1, 183, 184, + -1, 186, 187, 188, -1, 190, 191, 192, 193, 194, + -1, 196, 197, 198, 199, -1, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, -1, 212, 213, 214, + 215, 216, 217, 218, -1, 220, -1, 222, -1, -1, + 225, -1, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, -1, -1, 240, 241, -1, 243, -1, + -1, 246, 247, 248, -1, -1, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, -1, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, -1, 283, 284, + -1, 286, -1, 288, 289, 290, 291, 292, 293, -1, + 295, 296, -1, -1, 299, 300, 301, -1, -1, 304, + 305, 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, 406, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 325, 326, 327, 328, 329, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, 361, 362, -1, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, -1, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, -1, -1, 418, -1, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, 437, 438, 439, 440, 441, 442, 443, 444, + -1, -1, 447, 448, 449, 450, 451, -1, -1, 454, + 455, 456, 457, 458, 459, 460, -1, 462, -1, 464, + 465, 466, 467, -1, -1, 470, -1, -1, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 3, -1, -1, + -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, + -1, 17, 18, 19, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, -1, 51, 52, 53, 54, 55, + -1, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, + 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, -1, 102, 103, 104, -1, + -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, -1, + -1, -1, 178, 179, 180, 181, -1, 183, 184, -1, + 186, 187, 188, -1, 190, 191, 192, 193, 194, -1, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, -1, 212, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, -1, -1, 225, + -1, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, -1, -1, 240, 241, -1, 243, -1, -1, + 246, 247, 248, -1, -1, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, -1, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, -1, 283, 284, -1, + 286, -1, 288, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + 306, -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 326, 327, 328, 329, -1, 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, 360, 361, 362, 363, 364, 365, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, 361, 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - 107, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, 289, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, -1, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + -1, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, 459, 460, -1, 462, -1, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 3, -1, -1, -1, + -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, + 17, 18, 19, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, -1, -1, + -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, -1, 51, 52, 53, 54, 55, -1, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + -1, -1, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, -1, -1, + -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, + 117, 118, 119, 120, -1, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, -1, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, -1, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, -1, -1, + -1, 178, 179, 180, 181, -1, 183, 184, -1, 186, + 187, 188, -1, 190, 191, 192, 193, 194, -1, 196, + 197, 198, 199, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, -1, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, -1, -1, 225, -1, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, -1, -1, 240, 241, -1, 243, -1, -1, 246, + 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, -1, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, -1, 283, 284, -1, 286, + -1, 288, 289, 290, 291, 292, 293, -1, 295, 296, + -1, -1, 299, 300, 301, -1, -1, 304, 305, 306, + -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, -1, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, -1, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, -1, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + 437, 438, 439, 440, 441, 442, 443, 444, -1, -1, + 447, 448, 449, 450, 451, -1, -1, 454, 455, 456, + 457, 458, 459, 460, -1, 462, -1, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 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, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, + 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, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, 406, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, + 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, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, 289, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, 6, -1, -1, - -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, -1, -1, + -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, -1, 51, 52, 53, 54, 55, -1, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + -1, -1, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, -1, -1, + -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, + 117, 118, 119, 120, -1, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, -1, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, -1, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, -1, -1, + -1, 178, 179, 180, 181, -1, 183, 184, -1, 186, + 187, 188, -1, 190, 191, 192, 193, 194, -1, 196, + 197, 198, 199, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, -1, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, -1, -1, 225, -1, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, -1, -1, 240, 241, -1, 243, -1, -1, 246, + 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, -1, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, -1, 283, 284, -1, 286, + -1, 288, 289, 290, 291, 292, 293, -1, 295, 296, + -1, -1, 299, 300, 301, -1, -1, 304, 305, 306, + -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, -1, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, -1, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, -1, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + 437, 438, 439, 440, 441, 442, 443, 444, -1, -1, + 447, 448, 449, 450, 451, -1, -1, 454, 455, 456, + 457, 458, 459, 460, -1, 462, -1, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, -1, -1, + -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, -1, 51, 52, 53, 54, 55, -1, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + -1, -1, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, -1, -1, + -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, + 117, 118, 119, 120, -1, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, -1, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, -1, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, -1, -1, + -1, 178, 179, 180, 181, -1, 183, 184, -1, 186, + 187, 188, -1, 190, 191, 192, 193, 194, -1, 196, + 197, 198, 199, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, -1, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, -1, -1, 225, -1, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, -1, -1, 240, 241, -1, 243, -1, -1, 246, + 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, -1, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, -1, 283, 284, -1, 286, + -1, 288, 289, 290, 291, 292, 293, -1, 295, 296, + -1, -1, 299, 300, 301, -1, -1, 304, 305, 306, + -1, 308, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, -1, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, -1, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, -1, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + 437, 438, 439, 440, 441, 442, 443, 444, -1, -1, + 447, 448, 449, 450, 451, -1, -1, 454, 455, 456, + 457, 458, 459, 460, -1, 462, -1, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, -1, -1, + -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, -1, 55, 56, + 57, 58, -1, 60, 61, 62, 63, 64, 65, 66, + -1, -1, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, -1, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, -1, -1, + -1, 108, -1, -1, -1, 112, 113, 114, 115, 116, + 117, 118, 119, 120, -1, 122, -1, 124, 125, 126, + 127, 128, 129, 130, -1, 132, 133, 134, 135, -1, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, -1, 152, 153, 154, 155, -1, + 157, 158, 159, 160, -1, -1, 163, -1, 165, 166, + 167, 168, 169, -1, 171, -1, 173, 174, 175, -1, + 177, 178, 179, 180, 181, -1, 183, -1, -1, -1, + 187, 188, -1, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + 217, 218, -1, 220, -1, 222, 223, 224, 225, 226, + 227, -1, -1, -1, -1, 232, 233, 234, 235, 236, + 237, -1, -1, 240, -1, 242, 243, 244, -1, 246, + 247, 248, -1, -1, 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, -1, -1, 281, -1, 283, 284, 285, 286, + -1, -1, 289, 290, 291, 292, 293, -1, 295, 296, + -1, -1, 299, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, -1, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -1, 322, 323, -1, 325, -1, + 327, 328, 329, -1, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, 361, 362, 363, 364, 365, 366, + 367, 368, -1, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, 412, -1, 414, 415, -1, + -1, 418, 419, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, 432, -1, 434, -1, -1, + 437, 438, 439, 440, 441, 442, 443, 444, -1, -1, + 447, 448, 449, 450, 451, -1, -1, 454, 455, 456, + 457, 458, -1, 460, 461, 462, 463, 464, 465, 466, + 467, -1, -1, 470, -1, -1, 473, 474, 475, 476, + 477, 478, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 490, 491, 492, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, 441, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - 441, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, + 30, 508, 32, 33, 34, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, -1, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, -1, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, -1, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, -1, -1, -1, 108, -1, + -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, -1, 157, 158, 159, + 160, -1, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, -1, -1, -1, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, 212, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, -1, -1, + -1, -1, 232, 233, 234, 235, 236, 237, -1, -1, + 240, -1, 242, 243, 244, -1, 246, 247, 248, -1, + -1, 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, -1, + -1, 281, -1, 283, 284, 285, 286, -1, -1, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, -1, 325, -1, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, -1, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, -1, 412, -1, 414, 415, -1, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, -1, 434, -1, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, -1, -1, 454, 455, 456, 457, 458, -1, + 460, 461, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, -1, + 3, -1, 5, 6, -1, -1, -1, -1, 11, 12, + 490, 491, 492, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 508, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 273, 274, 275, 276, 277, 278, 279, 280, 281, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, 289, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, 289, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, 5, 6, -1, -1, -1, -1, 11, 12, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 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, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, 5, 6, -1, -1, -1, -1, 11, -1, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 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, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, 5, 6, -1, -1, -1, -1, 11, 12, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 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, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, 5, 6, -1, -1, -1, -1, 11, -1, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 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, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, -1, -1, -1, -1, -1, -1, 11, -1, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, -1, 51, 52, + 53, 54, 55, -1, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, + 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, + 103, 104, -1, -1, -1, -1, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, -1, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, -1, 176, -1, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, -1, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, -1, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + -1, -1, 225, -1, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, -1, + 243, -1, -1, 246, 247, 248, -1, -1, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, -1, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, -1, + 283, 284, -1, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, -1, -1, 299, 300, 301, -1, + -1, 304, 305, 306, -1, 308, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + -1, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, -1, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, -1, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + -1, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 506, 507, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, 35, 36, -1, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, -1, 60, 61, 62, + 63, 64, 65, 66, -1, -1, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, -1, -1, -1, 108, -1, -1, -1, 112, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, -1, 132, + 133, 134, 135, -1, -1, 138, 139, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, -1, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, -1, + 163, -1, 165, 166, 167, 168, 169, -1, 171, -1, + 173, 174, 175, -1, 177, 178, 179, 180, 181, -1, + 183, 184, -1, 186, 187, 188, -1, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, -1, 220, -1, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, -1, 246, 247, 248, -1, -1, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 273, 274, 275, 276, 277, 278, 279, 280, 281, -1, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, -1, 295, 296, -1, -1, 299, 300, 301, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, 406, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, 11, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, 39, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, 39, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, + 323, 324, 325, 326, 327, 328, 329, -1, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, -1, -1, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, 437, 438, 439, 440, 441, 442, + 443, 444, -1, -1, 447, 448, 449, 450, 451, -1, + -1, 454, 455, 456, 457, 458, 459, 460, -1, 462, + 463, 464, 465, 466, 467, -1, -1, 470, -1, -1, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 3, -1, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, 107, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, + 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, -1, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, + 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, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 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, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 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, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, + 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, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, + 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, -1, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, + 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, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 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, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 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, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, + 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, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, + 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, -1, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, + 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, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 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, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 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, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, + 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, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, 5, 6, -1, 8, 9, -1, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, 185, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, 6, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, 107, 108, -1, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, 6, -1, -1, -1, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, 6, -1, -1, -1, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, 6, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, + -1, 283, 284, 285, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, -1, -1, + 82, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + 172, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + 172, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, 244, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, 100, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + 182, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 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, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, 100, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + 182, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 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, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + 172, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, 100, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 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, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + 172, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, 100, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 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, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, 6, -1, -1, -1, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - 39, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, -1, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + 452, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, - -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, -1, -1, -1, 82, 83, 84, - 85, 86, 87, -1, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, -1, 101, 102, 103, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, -1, -1, - -1, 176, 177, 178, 179, -1, 181, 182, -1, 184, - 185, 186, -1, 188, 189, 190, 191, 192, -1, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, -1, -1, 222, -1, 224, - 225, 226, 227, 228, -1, -1, 231, 232, -1, 234, - -1, -1, 237, 238, 239, -1, -1, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, -1, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 274, - 275, -1, 277, -1, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - 315, 316, 317, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, -1, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, -1, 404, - 405, -1, 407, -1, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, 422, 423, 424, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, 448, 449, -1, 451, -1, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 3, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 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, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, -1, -1, -1, 82, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, -1, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, -1, -1, -1, - 176, 177, 178, 179, -1, 181, 182, -1, 184, 185, - 186, -1, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, -1, -1, 222, -1, 224, 225, - 226, 227, 228, -1, -1, 231, 232, -1, 234, -1, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, 274, 275, - -1, 277, -1, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, - 316, 317, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, -1, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, -1, 404, 405, - -1, 407, -1, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, 422, 423, 424, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, 448, 449, -1, 451, -1, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 3, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, 41, 42, 43, -1, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 82, 83, 84, 85, 86, - 87, -1, 89, 90, 91, -1, 93, 94, 95, 96, - 97, 98, -1, -1, 101, 102, 103, -1, -1, -1, - -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, 121, -1, 123, 124, 125, 126, - 127, 128, 129, -1, 131, 132, 133, 134, -1, -1, - 137, 138, 139, 140, 141, -1, 143, 144, 145, -1, - 147, 148, 149, -1, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, -1, 162, -1, 164, 165, 166, - 167, 168, -1, 170, -1, 172, -1, -1, -1, 176, - 177, 178, 179, -1, 181, 182, -1, 184, 185, 186, - -1, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, -1, - 217, -1, 219, -1, -1, 222, -1, 224, 225, 226, - 227, 228, -1, -1, 231, 232, -1, 234, -1, -1, - 237, 238, 239, -1, -1, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, -1, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, 274, 275, -1, - 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, - 287, -1, -1, 290, 291, 292, -1, -1, 295, 296, - 297, -1, 299, -1, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, - 317, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - -1, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, -1, 352, 353, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, -1, 371, 372, 373, 374, 375, -1, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, -1, 404, 405, -1, - 407, -1, 409, 410, 411, 412, 413, -1, 415, 416, - 417, -1, -1, 420, 421, 422, 423, 424, -1, 426, - 427, 428, 429, 430, 431, 432, 433, -1, -1, 436, - 437, 438, 439, 440, -1, -1, 443, 444, 445, 446, - 447, 448, 449, -1, 451, -1, 453, 454, 455, 456, - -1, -1, 459, -1, -1, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, 41, 42, 43, -1, 45, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, - 78, -1, -1, -1, 82, 83, 84, 85, 86, 87, - -1, 89, 90, 91, -1, 93, 94, 95, 96, 97, - 98, -1, -1, 101, 102, 103, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, -1, 121, -1, 123, 124, 125, 126, 127, - 128, 129, -1, 131, 132, 133, 134, -1, -1, 137, - 138, 139, 140, 141, -1, 143, 144, 145, -1, 147, - 148, 149, -1, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, -1, 164, 165, 166, 167, - 168, -1, 170, -1, 172, -1, -1, -1, 176, 177, - 178, 179, -1, 181, 182, -1, 184, 185, 186, -1, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, -1, 217, - -1, 219, -1, -1, 222, -1, 224, 225, 226, 227, - 228, -1, -1, 231, 232, -1, 234, -1, -1, 237, - 238, 239, -1, -1, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, 274, 275, -1, 277, - -1, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, 290, 291, 292, -1, -1, 295, 296, 297, - -1, 299, -1, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, -1, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, -1, 352, 353, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, -1, 371, 372, 373, 374, 375, -1, 377, - 378, 379, 380, 381, -1, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, -1, 404, 405, -1, 407, - -1, 409, 410, 411, 412, 413, -1, 415, 416, 417, - -1, -1, 420, 421, 422, 423, 424, -1, 426, 427, - 428, 429, 430, 431, 432, 433, -1, -1, 436, 437, - 438, 439, 440, -1, -1, 443, 444, 445, 446, 447, - 448, 449, -1, 451, -1, 453, 454, 455, 456, -1, - -1, 459, -1, -1, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 3, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, 41, 42, 43, -1, 45, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, 65, -1, -1, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 82, 83, 84, 85, 86, 87, -1, - 89, 90, 91, -1, 93, 94, 95, 96, 97, 98, - -1, -1, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, 121, -1, 123, 124, 125, 126, 127, 128, - 129, -1, 131, 132, 133, 134, -1, -1, 137, 138, - 139, 140, 141, -1, 143, 144, 145, -1, 147, 148, - 149, -1, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, -1, 162, -1, 164, 165, 166, 167, 168, - -1, 170, -1, 172, -1, -1, -1, 176, 177, 178, - 179, -1, 181, 182, -1, 184, 185, 186, -1, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, - 209, 210, 211, 212, 213, 214, 215, -1, 217, -1, - 219, -1, -1, 222, -1, 224, 225, 226, 227, 228, - -1, -1, 231, 232, -1, 234, -1, -1, 237, 238, - 239, -1, -1, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, -1, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, 274, 275, -1, 277, -1, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, 290, 291, 292, -1, -1, 295, 296, 297, -1, - 299, -1, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, -1, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, -1, 371, 372, 373, 374, 375, -1, 377, 378, - 379, 380, 381, -1, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, -1, 404, 405, -1, 407, -1, - 409, 410, 411, 412, 413, -1, 415, 416, 417, -1, - -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, - 429, 430, 431, 432, 433, -1, -1, 436, 437, 438, - 439, 440, -1, -1, 443, 444, 445, 446, 447, 448, - 449, -1, 451, -1, 453, 454, 455, 456, -1, -1, - 459, -1, -1, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 3, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, 185, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, -1, -1, - -1, 82, 83, 84, 85, 86, 87, -1, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, -1, - 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, -1, -1, -1, 176, 177, 178, 179, -1, - 181, 182, -1, 184, 185, 186, -1, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, -1, - -1, 222, -1, 224, 225, 226, 227, 228, -1, -1, - 231, 232, -1, 234, -1, -1, 237, 238, 239, -1, - -1, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 274, 275, -1, 277, -1, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, 297, -1, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, -1, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 404, 405, -1, 407, -1, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, 422, 423, 424, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, 448, 449, -1, - 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, 41, - 42, 43, -1, 45, 46, 47, 48, -1, 50, 51, - 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, -1, -1, -1, - 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, - -1, 93, 94, 95, 96, 97, 98, -1, -1, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, - -1, 123, 124, 125, 126, 127, 128, 129, -1, 131, - 132, 133, 134, -1, -1, 137, 138, 139, 140, 141, - -1, 143, 144, 145, -1, 147, 148, 149, -1, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, - 162, -1, 164, 165, 166, 167, 168, -1, 170, -1, - 172, -1, -1, -1, 176, 177, 178, 179, -1, 181, - 182, -1, 184, 185, 186, -1, 188, 189, 190, 191, - 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, -1, 217, -1, 219, -1, -1, - 222, -1, 224, 225, 226, 227, 228, -1, -1, 231, - 232, -1, 234, -1, -1, 237, 238, 239, -1, -1, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, 40, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, 40, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, 40, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, -1, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, 187, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, -1, 51, + 52, 53, 54, 55, -1, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, -1, -1, -1, -1, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, -1, -1, -1, 178, 179, 180, 181, + -1, 183, 184, -1, 186, -1, 188, -1, 190, 191, + 192, 193, 194, -1, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, -1, -1, 225, -1, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, -1, -1, 240, 241, + -1, 243, -1, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, -1, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + -1, 283, 284, -1, 286, -1, 288, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, -1, 308, -1, 310, 311, + 312, 313, 314, 315, 316, 317, -1, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, -1, 364, 365, 366, 367, 368, 369, -1, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + -1, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, -1, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, 459, 460, -1, + 462, -1, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, -1, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, -1, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, -1, 157, 158, 159, 160, -1, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, -1, -1, -1, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, -1, -1, -1, -1, + 232, 233, 234, 235, 236, 237, -1, -1, 240, -1, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, 274, 275, -1, 277, -1, 279, 280, 281, - 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, - 292, -1, -1, 295, 296, 297, -1, 299, -1, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - -1, 313, 314, 315, 316, 317, 318, 319, 320, -1, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, -1, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, - 352, 353, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, -1, 371, - 372, 373, 374, 375, -1, 377, 378, 379, 380, 381, - -1, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 404, 405, -1, 407, -1, 409, 410, 411, - 412, 413, -1, 415, 416, 417, -1, -1, 420, 421, - 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, - 432, 433, -1, -1, 436, 437, 438, 439, 440, -1, - -1, 443, 444, 445, 446, 447, 448, 449, -1, 451, - -1, 453, 454, 455, 456, -1, -1, 459, -1, -1, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, 41, 42, - 43, -1, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, -1, -1, -1, 82, - 83, 84, 85, 86, 87, -1, 89, 90, 91, -1, - 93, 94, 95, 96, 97, 98, -1, -1, 101, 102, - 103, -1, -1, -1, -1, -1, -1, -1, 111, 112, - 113, 114, 115, 116, 117, 118, 119, -1, 121, -1, - 123, 124, 125, 126, 127, 128, 129, -1, 131, 132, - 133, 134, -1, -1, 137, 138, 139, 140, 141, -1, - 143, 144, 145, -1, 147, 148, 149, -1, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - -1, 164, 165, 166, 167, 168, -1, 170, -1, 172, - -1, -1, -1, 176, 177, 178, 179, -1, 181, 182, - -1, 184, 185, 186, -1, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, -1, 217, -1, 219, -1, -1, 222, - -1, 224, 225, 226, 227, 228, -1, -1, 231, 232, - -1, 234, -1, -1, 237, 238, 239, -1, -1, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, -1, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 274, 275, -1, 277, -1, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, - -1, -1, 295, 296, 297, -1, 299, -1, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, - 313, 314, 315, 316, 317, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, -1, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, - 353, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, -1, 371, 372, - 373, 374, 375, -1, 377, 378, 379, 380, 381, -1, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - -1, 404, 405, -1, 407, -1, 409, 410, 411, 412, - 413, -1, 415, 416, 417, -1, -1, 420, 421, 422, - 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, - 433, -1, -1, 436, 437, 438, 439, 440, -1, -1, - 443, 444, 445, 446, 447, 448, 449, -1, 451, -1, - 453, 454, 455, 456, -1, -1, 459, -1, -1, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, -1, 41, 42, 43, - -1, 45, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, -1, -1, -1, 82, 83, - 84, 85, 86, 87, -1, 89, 90, 91, -1, 93, - 94, 95, 96, 97, 98, -1, -1, 101, 102, 103, - -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, -1, 121, -1, 123, - 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, - 134, -1, -1, 137, 138, 139, 140, 141, -1, 143, - 144, 145, -1, 147, 148, 149, -1, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, -1, 162, -1, - 164, 165, 166, 167, 168, -1, 170, -1, 172, -1, - -1, -1, 176, 177, 178, 179, -1, 181, 182, -1, - 184, 185, 186, -1, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, -1, 217, -1, 219, -1, -1, 222, -1, - 224, 225, 226, 227, 228, -1, -1, 231, 232, -1, - 234, -1, -1, 237, 238, 239, -1, -1, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, -1, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - 274, 275, -1, 277, -1, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, 290, 291, 292, -1, - -1, 295, 296, 297, -1, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, - 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, -1, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, -1, 371, 372, 373, - 374, 375, -1, 377, 378, 379, 380, 381, -1, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, -1, - 404, 405, -1, 407, -1, 409, 410, 411, 412, 413, - -1, 415, 416, 417, -1, -1, 420, 421, 422, 423, - 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, - -1, -1, 436, 437, 438, 439, 440, -1, -1, 443, - 444, 445, 446, 447, 448, 449, -1, 451, -1, 453, - 454, 455, 456, -1, -1, 459, -1, -1, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, 41, 42, 43, -1, - 45, 46, 47, 48, 49, 50, 51, 52, -1, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, -1, -1, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, -1, 93, 94, - 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, - -1, -1, 107, -1, -1, -1, 111, 112, 113, 114, - 115, 116, 117, 118, 119, -1, 121, -1, 123, 124, - 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, - -1, -1, 137, 138, 139, 140, 141, -1, 143, 144, - 145, -1, 147, 148, 149, -1, 151, 152, 153, 154, - -1, 156, 157, 158, 159, -1, -1, 162, -1, 164, - 165, 166, 167, 168, -1, 170, -1, 172, 173, -1, - 175, 176, 177, 178, 179, -1, 181, -1, -1, -1, - 185, 186, -1, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, -1, 217, -1, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, -1, -1, 231, -1, 233, 234, - 235, -1, 237, 238, 239, -1, -1, 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, -1, -1, 272, -1, 274, - 275, 276, 277, -1, -1, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, 290, 291, 292, -1, -1, - 295, 296, 297, 298, 299, 300, -1, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, - -1, 316, -1, 318, 319, 320, -1, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, -1, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, -1, 352, 353, 354, - 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, - 365, 366, 367, 368, 369, -1, 371, 372, 373, 374, - 375, -1, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, -1, 402, -1, 404, - 405, -1, 407, 408, 409, 410, 411, 412, 413, -1, - 415, 416, 417, -1, -1, 420, 421, -1, 423, -1, - -1, 426, 427, 428, 429, 430, 431, 432, 433, -1, - -1, 436, 437, 438, 439, 440, -1, -1, 443, 444, - 445, 446, 447, -1, 449, 450, 451, 452, 453, 454, - 455, 456, -1, -1, 459, -1, -1, 462, 463, 464, - 465, 466, 467, 3, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 479, 480, 481, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, - -1, 41, 42, 43, -1, 45, 46, 47, 48, -1, - 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, - 90, 91, -1, 93, 94, 95, 96, 97, 98, -1, - -1, 101, 102, 103, -1, -1, -1, -1, -1, -1, - -1, 111, 112, 113, 114, 115, 116, 117, 118, 119, - -1, 121, -1, 123, 124, 125, 126, 127, 128, 129, - -1, 131, 132, 133, 134, -1, -1, 137, 138, 139, - 140, 141, -1, 143, 144, 145, -1, 147, 148, 149, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, -1, 164, 165, 166, 167, 168, -1, - 170, -1, 172, -1, -1, -1, 176, 177, 178, 179, - -1, 181, 182, -1, 184, -1, 186, -1, 188, 189, - 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, - 210, 211, 212, 213, 214, 215, -1, 217, -1, 219, - -1, -1, 222, -1, 224, 225, 226, 227, 228, -1, - -1, 231, 232, -1, 234, -1, -1, 237, 238, 239, - -1, -1, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 274, 275, -1, 277, -1, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - 290, 291, 292, -1, -1, 295, 296, 297, -1, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 308, -1, - 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, - 320, -1, 322, 323, 324, 325, 326, 327, 328, 329, - -1, 331, 332, 333, 334, 335, 336, -1, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, -1, 352, 353, -1, 355, 356, 357, 358, 359, - 360, -1, 362, 363, 364, 365, 366, 367, 368, 369, - -1, 371, 372, 373, 374, 375, -1, 377, 378, 379, - 380, 381, -1, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, 404, 405, -1, 407, -1, 409, - 410, 411, 412, 413, -1, 415, 416, 417, -1, -1, - 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, - 430, 431, 432, 433, -1, -1, 436, 437, 438, 439, - 440, -1, -1, 443, 444, 445, 446, 447, 448, 449, - -1, 451, -1, 453, 454, 455, 456, -1, -1, 459, - -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, -1, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, -1, 156, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, -1, -1, -1, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, -1, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, -1, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, - -1, 272, -1, 274, 275, 276, 277, 278, -1, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, -1, 316, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, -1, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - -1, 402, -1, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, -1, 423, -1, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, -1, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, -1, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, -1, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, -1, - 156, 157, 158, 159, -1, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, -1, -1, -1, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, -1, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, -1, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 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, -1, 272, -1, 274, 275, - 276, 277, -1, -1, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, -1, 298, 299, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, -1, - 316, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, -1, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, -1, 423, -1, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, -1, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 479, 480, 481, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, -1, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, -1, 156, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, -1, -1, -1, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, -1, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, -1, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, - -1, 272, -1, 274, 275, 276, 277, -1, -1, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, -1, 316, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, -1, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - -1, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, -1, 423, -1, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, -1, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, -1, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, -1, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, -1, - 156, 157, 158, 159, -1, -1, 162, -1, 164, 165, - 166, 167, 168, 169, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, -1, -1, -1, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, -1, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, -1, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 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, -1, -1, 272, -1, 274, 275, - 276, 277, -1, -1, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, -1, 298, 299, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, -1, - 316, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, -1, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, -1, 423, -1, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, -1, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 479, 480, 481, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, -1, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, -1, 156, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, -1, -1, -1, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, -1, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, -1, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, - -1, 272, -1, 274, 275, 276, 277, -1, -1, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, -1, 316, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, -1, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - -1, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, -1, 423, -1, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, -1, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, -1, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, -1, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, -1, - 156, 157, 158, 159, -1, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, -1, -1, -1, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, -1, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, -1, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 272, 273, 274, 275, 276, 277, 278, -1, -1, 281, + -1, 283, 284, 285, 286, -1, -1, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, 306, 307, 308, 309, -1, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, -1, 325, -1, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, -1, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, -1, 434, -1, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, -1, 460, 461, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 490, 491, + 492, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, -1, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, -1, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, -1, + -1, -1, 108, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + -1, 157, 158, 159, 160, -1, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, -1, -1, + -1, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, -1, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, -1, -1, -1, -1, 232, 233, 234, 235, + 236, 237, -1, -1, 240, -1, 242, 243, 244, -1, + 246, 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, -1, -1, 272, -1, 274, 275, - 276, 277, -1, -1, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, -1, 298, 299, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, -1, - 316, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, -1, -1, 281, -1, 283, 284, 285, + 286, 287, -1, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + -1, 307, 308, 309, -1, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, -1, 325, + -1, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, -1, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, -1, 423, -1, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, -1, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 479, 480, 481, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, -1, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, -1, 156, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, -1, -1, -1, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, -1, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, -1, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, - -1, 272, -1, 274, 275, 276, 277, -1, -1, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, -1, 316, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, -1, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - -1, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, -1, 423, -1, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, -1, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, -1, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, -1, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, 117, 118, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, -1, - 156, 157, 158, 159, -1, -1, 162, -1, 164, 165, - 166, 167, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, -1, -1, -1, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, -1, 210, 211, 212, 213, 214, 215, - -1, 217, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, -1, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 366, 367, 368, -1, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, -1, 412, -1, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, -1, 434, -1, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, -1, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 490, 491, 492, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, -1, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, -1, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, -1, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, -1, -1, -1, 108, -1, + -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, -1, 157, 158, 159, + 160, -1, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, -1, -1, -1, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, -1, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, -1, -1, + -1, -1, 232, 233, 234, 235, 236, 237, -1, -1, + 240, -1, 242, 243, 244, -1, 246, 247, 248, -1, + -1, 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, + -1, 281, -1, 283, 284, 285, 286, -1, -1, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, -1, 307, 308, 309, + -1, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, -1, 325, -1, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, -1, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, -1, 412, -1, 414, 415, -1, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, -1, 434, -1, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, -1, -1, 454, 455, 456, 457, 458, -1, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 490, 491, 492, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + -1, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, -1, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, -1, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, -1, -1, -1, 108, -1, -1, -1, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, -1, 157, 158, 159, 160, -1, -1, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + -1, -1, -1, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, -1, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, -1, -1, -1, -1, 232, 233, + 234, 235, 236, 237, -1, -1, 240, -1, 242, 243, + 244, -1, 246, 247, 248, -1, -1, 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, -1, 281, -1, 283, + 284, 285, 286, -1, -1, 289, 290, 291, 292, 293, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, -1, 307, 308, 309, -1, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + -1, 325, -1, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, -1, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, -1, 412, -1, + 414, 415, -1, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, -1, + 434, -1, -1, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, -1, -1, + 454, 455, 456, 457, 458, -1, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 490, 491, 492, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, -1, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, -1, + -1, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, -1, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, -1, -1, -1, + 108, -1, -1, -1, 112, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, -1, 157, + 158, 159, 160, -1, -1, 163, -1, 165, 166, 167, + 168, 169, 170, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, -1, -1, -1, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, -1, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + -1, -1, -1, -1, 232, 233, 234, 235, 236, 237, + -1, -1, 240, -1, 242, 243, 244, -1, 246, 247, + 248, -1, -1, 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, -1, -1, 281, -1, 283, 284, 285, 286, -1, + -1, 289, 290, 291, 292, 293, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, -1, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, -1, 325, -1, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, -1, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, -1, 412, -1, 414, 415, -1, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, -1, 434, -1, -1, 437, + 438, 439, 440, 441, 442, 443, 444, -1, -1, 447, + 448, 449, 450, 451, -1, -1, 454, 455, 456, 457, + 458, -1, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 490, 491, 492, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, -1, 55, 56, 57, 58, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, -1, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, -1, 157, 158, 159, 160, -1, + -1, 163, -1, 165, 166, 167, 168, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, -1, -1, -1, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + -1, 213, 214, 215, 216, 217, 218, -1, 220, -1, + 222, 223, 224, 225, 226, 227, -1, -1, -1, -1, + 232, 233, 234, 235, 236, 237, -1, -1, 240, -1, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 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, -1, -1, 281, + -1, 283, 284, 285, 286, -1, -1, 289, 290, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, -1, 307, 308, 309, -1, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, -1, 325, -1, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, -1, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + 432, -1, 434, -1, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, -1, 460, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 490, 491, + 492, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, -1, 55, + 56, 57, 58, -1, 60, 61, 62, 63, 64, 65, + 66, -1, -1, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, -1, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, -1, + -1, -1, 108, -1, -1, -1, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, -1, 132, 133, 134, 135, + -1, -1, 138, 139, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, -1, 152, 153, 154, 155, + -1, 157, 158, 159, 160, -1, -1, 163, -1, 165, + 166, 167, 168, 169, -1, 171, -1, 173, 174, 175, + -1, 177, 178, 179, 180, 181, -1, 183, -1, -1, + -1, 187, 188, -1, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, -1, 201, 202, 203, 204, 205, + 206, 207, 208, -1, 210, 211, -1, 213, 214, 215, + 216, 217, 218, -1, 220, -1, 222, 223, 224, 225, + 226, 227, -1, -1, -1, -1, 232, 233, 234, 235, + 236, 237, -1, -1, 240, -1, 242, 243, 244, -1, + 246, 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, -1, -1, 272, -1, 274, 275, - 276, 277, -1, -1, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, -1, 298, 299, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, -1, - 316, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, - 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, -1, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - 416, 417, -1, -1, 420, 421, -1, 423, -1, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, -1, 449, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 479, 480, 481, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, -1, -1, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, -1, -1, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, -1, 93, 94, 95, 96, 97, 98, -1, 100, - 101, 102, 103, -1, -1, -1, 107, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, - 121, -1, 123, 124, 125, 126, 127, 128, 129, -1, - 131, 132, 133, 134, -1, -1, 137, 138, 139, 140, - 141, -1, 143, 144, 145, -1, 147, 148, 149, -1, - 151, 152, 153, 154, -1, 156, 157, 158, 159, -1, - -1, 162, -1, 164, 165, 166, 167, 168, -1, 170, - -1, 172, 173, -1, 175, 176, 177, 178, 179, -1, - 181, -1, -1, -1, 185, 186, -1, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, 208, -1, 210, - 211, 212, 213, 214, 215, -1, 217, -1, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, -1, -1, - 231, -1, 233, 234, 235, -1, 237, 238, 239, -1, - -1, 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, -1, - -1, 272, -1, 274, 275, 276, 277, -1, -1, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, - 291, 292, -1, -1, 295, 296, -1, 298, 299, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, -1, 313, 314, -1, 316, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, -1, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - -1, 352, 353, 354, 355, 356, 357, 358, 359, -1, - 361, 362, 363, 364, 365, 366, 367, 368, 369, -1, - 371, 372, 373, 374, 375, -1, 377, 378, -1, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - -1, 402, -1, 404, 405, -1, 407, 408, 409, 410, - 411, 412, 413, -1, 415, 416, 417, -1, -1, 420, - 421, -1, 423, -1, -1, 426, 427, 428, 429, 430, - 431, 432, 433, -1, -1, 436, 437, 438, 439, 440, - -1, -1, 443, 444, 445, 446, 447, -1, 449, -1, - 451, 452, 453, 454, 455, 456, -1, -1, 459, -1, - -1, 462, 463, 464, 465, 466, 467, 3, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 479, 480, - 481, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, 41, 42, 43, -1, 45, - 46, 47, 48, 49, 50, 51, 52, -1, -1, 55, - -1, -1, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, 68, 69, -1, -1, 72, -1, 74, 75, - 76, 77, -1, -1, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, -1, 93, 94, 95, - 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, - -1, 107, -1, -1, -1, 111, 112, 113, 114, 115, - 116, -1, -1, 119, -1, 121, -1, 123, 124, 125, - 126, 127, 128, 129, -1, 131, 132, 133, 134, -1, - -1, 137, 138, 139, 140, 141, -1, 143, 144, 145, - -1, 147, 148, 149, -1, 151, 152, 153, 154, -1, - 156, 157, 158, 159, -1, -1, 162, -1, 164, 165, - 166, -1, 168, -1, 170, -1, 172, 173, -1, 175, - 176, 177, 178, 179, -1, 181, -1, -1, -1, 185, - 186, -1, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, -1, 210, 211, 212, 213, -1, -1, - -1, -1, -1, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, -1, -1, 231, -1, 233, 234, 235, - -1, 237, 238, 239, -1, -1, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, -1, 261, -1, 263, 264, 265, - 266, 267, 268, 269, -1, -1, 272, -1, 274, 275, - 276, 277, -1, -1, 280, -1, 282, 283, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, 295, - 296, -1, 298, 299, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, -1, 313, 314, -1, - 316, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, -1, 333, 334, 335, - 336, -1, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, -1, 352, 353, 354, 355, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, -1, -1, 281, -1, 283, 284, 285, + 286, -1, -1, 289, 290, 291, 292, 293, -1, 295, + 296, -1, -1, 299, 300, 301, -1, -1, 304, 305, + -1, 307, 308, 309, -1, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, -1, 322, 323, -1, 325, + -1, 327, 328, 329, -1, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, 364, 365, - 366, 367, 368, 369, -1, 371, 372, 373, 374, 375, - -1, 377, 378, -1, 380, 381, 382, 383, 384, -1, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, -1, 402, -1, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, -1, 415, - -1, -1, -1, -1, 420, 421, -1, 423, -1, -1, - 426, 427, 428, 429, 430, 431, 432, 433, -1, -1, - 436, 437, 438, 439, 440, -1, -1, 443, 444, 445, - 446, 447, -1, -1, -1, 451, 452, 453, 454, 455, - 456, -1, -1, 459, -1, -1, 462, 463, 464, 465, - 466, 467, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 479, 480, 481 + 366, 367, 368, -1, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, -1, 412, -1, 414, 415, + -1, -1, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, 432, -1, 434, -1, + -1, 437, 438, 439, 440, 441, 442, 443, 444, -1, + -1, 447, 448, 449, 450, 451, -1, -1, 454, 455, + 456, 457, 458, -1, 460, -1, 462, 463, 464, 465, + 466, 467, -1, -1, 470, -1, -1, 473, 474, 475, + 476, 477, 478, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 490, 491, 492, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, -1, 55, 56, 57, 58, -1, + 60, 61, 62, 63, 64, 65, 66, -1, -1, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, -1, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, -1, -1, -1, 108, -1, + -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, -1, 132, 133, 134, 135, -1, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, -1, 152, 153, 154, 155, -1, 157, 158, 159, + 160, -1, -1, 163, -1, 165, 166, 167, 168, 169, + -1, 171, -1, 173, 174, 175, -1, 177, 178, 179, + 180, 181, -1, 183, -1, -1, -1, 187, 188, -1, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + -1, 201, 202, 203, 204, 205, 206, 207, 208, -1, + 210, 211, -1, 213, 214, 215, 216, 217, 218, -1, + 220, -1, 222, 223, 224, 225, 226, 227, -1, -1, + -1, -1, 232, 233, 234, 235, 236, 237, -1, -1, + 240, -1, 242, 243, 244, -1, 246, 247, 248, -1, + -1, 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, -1, + -1, 281, -1, 283, 284, 285, 286, -1, -1, 289, + 290, 291, 292, 293, -1, 295, 296, -1, -1, 299, + 300, 301, -1, -1, 304, 305, -1, 307, 308, 309, + -1, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, -1, 322, 323, -1, 325, -1, 327, 328, 329, + -1, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + -1, 361, 362, 363, 364, 365, 366, 367, 368, -1, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, -1, 412, -1, 414, 415, -1, -1, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, 432, -1, 434, -1, -1, 437, 438, 439, + 440, 441, 442, 443, 444, -1, -1, 447, 448, 449, + 450, 451, -1, -1, 454, 455, 456, 457, 458, -1, + 460, -1, 462, 463, 464, 465, 466, 467, -1, -1, + 470, -1, -1, 473, 474, 475, 476, 477, 478, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 490, 491, 492, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + -1, 55, 56, 57, 58, -1, 60, 61, 62, 63, + 64, 65, 66, -1, -1, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, -1, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, -1, -1, -1, 108, -1, -1, -1, 112, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, -1, 132, 133, + 134, 135, -1, -1, 138, 139, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, -1, 152, 153, + 154, 155, -1, 157, 158, 159, 160, -1, -1, 163, + -1, 165, 166, 167, 168, 169, -1, 171, -1, 173, + 174, 175, -1, 177, 178, 179, 180, 181, -1, 183, + -1, -1, -1, 187, 188, -1, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, -1, 213, + 214, 215, 216, 217, 218, -1, 220, -1, 222, 223, + 224, 225, 226, 227, -1, -1, -1, -1, 232, 233, + 234, 235, 236, 237, -1, -1, 240, -1, 242, 243, + 244, -1, 246, 247, 248, -1, -1, 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, -1, -1, 281, -1, 283, + 284, 285, 286, -1, -1, 289, 290, 291, 292, 293, + -1, 295, 296, -1, -1, 299, 300, 301, -1, -1, + 304, 305, -1, 307, 308, 309, -1, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, -1, 322, 323, + -1, 325, -1, 327, 328, 329, -1, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, -1, 361, 362, 363, + 364, 365, 366, 367, 368, -1, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, -1, 412, -1, + 414, 415, -1, -1, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, 432, -1, + 434, -1, -1, 437, 438, 439, 440, 441, 442, 443, + 444, -1, -1, 447, 448, 449, 450, 451, -1, -1, + 454, 455, 456, 457, 458, -1, 460, -1, 462, 463, + 464, 465, 466, 467, -1, -1, 470, -1, -1, 473, + 474, 475, 476, 477, 478, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 490, 491, 492, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, -1, 55, 56, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, -1, + -1, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, -1, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, -1, -1, -1, + 108, -1, -1, -1, 112, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, -1, 132, 133, 134, 135, -1, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, -1, 152, 153, 154, 155, -1, 157, + 158, 159, 160, -1, -1, 163, -1, 165, 166, 167, + 168, 169, -1, 171, -1, 173, 174, 175, -1, 177, + 178, 179, 180, 181, -1, 183, -1, -1, -1, 187, + 188, -1, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, -1, 213, 214, 215, 216, 217, + 218, -1, 220, -1, 222, 223, 224, 225, 226, 227, + -1, -1, -1, -1, 232, 233, 234, 235, 236, 237, + -1, -1, 240, -1, 242, 243, 244, -1, 246, 247, + 248, -1, -1, 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, -1, -1, 281, -1, 283, 284, 285, 286, -1, + -1, 289, 290, 291, 292, 293, -1, 295, 296, -1, + -1, 299, 300, 301, -1, -1, 304, 305, -1, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, -1, 322, 323, -1, 325, -1, 327, + 328, 329, -1, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, -1, 361, 362, 363, 364, 365, 366, 367, + 368, -1, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 381, 382, 383, 384, 385, -1, 387, + 388, -1, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, -1, 412, -1, 414, 415, -1, -1, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, 432, -1, 434, -1, -1, 437, + 438, 439, 440, 441, 442, 443, 444, -1, -1, 447, + 448, 449, 450, 451, -1, -1, 454, 455, 456, 457, + 458, -1, 460, -1, 462, 463, 464, 465, 466, 467, + -1, -1, 470, -1, -1, 473, 474, 475, 476, 477, + 478, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 490, 491, 492, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, -1, -1, 56, -1, -1, -1, 60, 61, + 62, 63, 64, 65, 66, -1, -1, 69, 70, -1, + -1, 73, -1, 75, 76, 77, 78, -1, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, -1, -1, -1, 108, -1, -1, -1, + 112, 113, 114, 115, 116, 117, -1, -1, 120, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, -1, + 132, 133, 134, 135, -1, -1, 138, 139, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, -1, + 152, 153, 154, 155, -1, 157, 158, 159, 160, -1, + -1, 163, -1, 165, 166, 167, -1, 169, -1, 171, + -1, 173, 174, 175, -1, 177, 178, 179, 180, 181, + -1, 183, -1, -1, -1, 187, 188, -1, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, -1, 201, + 202, 203, 204, 205, 206, 207, 208, -1, 210, 211, + -1, 213, 214, 215, 216, -1, -1, -1, -1, -1, + 222, 223, 224, 225, 226, 227, -1, -1, -1, -1, + 232, 233, 234, 235, 236, 237, -1, -1, 240, -1, + 242, 243, 244, -1, 246, 247, 248, -1, -1, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, -1, 270, -1, + 272, 273, 274, 275, 276, 277, 278, -1, -1, 281, + -1, 283, 284, 285, 286, -1, -1, 289, -1, 291, + 292, 293, -1, 295, 296, -1, -1, 299, 300, 301, + -1, -1, 304, 305, -1, 307, 308, 309, -1, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 322, 323, -1, 325, -1, 327, 328, 329, -1, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, -1, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, -1, 361, + 362, 363, 364, 365, 366, 367, 368, -1, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, -1, 387, 388, -1, 390, 391, + 392, 393, 394, -1, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + 412, -1, 414, 415, -1, -1, 418, 419, 420, 421, + 422, 423, 424, -1, 426, -1, -1, -1, -1, 431, + 432, -1, 434, -1, -1, 437, 438, 439, 440, 441, + 442, 443, 444, -1, -1, 447, 448, 449, 450, 451, + -1, -1, 454, 455, 456, 457, 458, -1, -1, -1, + 462, 463, 464, 465, 466, 467, -1, -1, 470, -1, + -1, 473, 474, 475, 476, 477, 478, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 490, 491, + 492 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 22, 32, 34, 35, 52, 62, 74, 76, 77, - 83, 85, 97, 99, 116, 119, 134, 136, 140, 146, - 154, 156, 163, 180, 197, 237, 238, 243, 257, 275, - 319, 333, 339, 340, 342, 347, 353, 356, 363, 369, - 370, 377, 381, 391, 406, 426, 437, 443, 448, 461, - 484, 485, 486, 487, 488, 489, 502, 509, 510, 511, - 512, 513, 514, 520, 521, 523, 524, 525, 526, 528, - 532, 544, 549, 550, 553, 554, 555, 574, 577, 578, - 593, 640, 643, 644, 647, 650, 651, 652, 660, 667, - 669, 670, 673, 676, 677, 681, 690, 694, 695, 696, - 699, 701, 702, 703, 704, 712, 714, 734, 738, 740, - 741, 751, 753, 760, 761, 764, 765, 766, 767, 768, - 777, 779, 781, 784, 788, 789, 799, 800, 803, 808, - 822, 854, 857, 858, 859, 864, 867, 869, 871, 873, - 874, 877, 878, 881, 883, 884, 888, 889, 890, 893, - 894, 895, 896, 897, 904, 906, 907, 908, 909, 915, - 917, 918, 924, 925, 926, 929, 930, 931, 932, 934, - 935, 937, 938, 940, 941, 943, 955, 957, 960, 962, - 963, 972, 974, 979, 984, 992, 996, 997, 998, 999, - 1000, 1001, 1007, 1043, 420, 464, 910, 29, 80, 96, - 114, 120, 138, 149, 158, 171, 176, 183, 202, 227, - 249, 290, 314, 324, 325, 328, 355, 358, 362, 364, - 371, 374, 393, 400, 405, 406, 409, 413, 423, 428, - 441, 454, 666, 910, 3, 22, 23, 24, 25, 26, - 27, 28, 29, 31, 32, 33, 41, 42, 43, 45, + 0, 22, 33, 35, 36, 53, 63, 75, 77, 78, + 84, 86, 98, 100, 117, 120, 135, 137, 141, 147, + 155, 157, 164, 182, 199, 246, 247, 252, 266, 284, + 328, 342, 348, 349, 351, 356, 362, 365, 372, 379, + 380, 387, 391, 401, 417, 437, 448, 454, 459, 472, + 496, 498, 499, 500, 501, 502, 515, 522, 523, 524, + 525, 530, 531, 537, 538, 540, 541, 542, 543, 545, + 548, 560, 565, 566, 569, 570, 571, 589, 592, 593, + 608, 657, 660, 661, 664, 667, 668, 669, 677, 684, + 686, 687, 690, 693, 694, 698, 707, 711, 712, 713, + 716, 718, 719, 720, 721, 729, 731, 751, 755, 757, + 758, 768, 770, 777, 778, 781, 782, 783, 784, 785, + 794, 796, 798, 801, 805, 806, 816, 817, 822, 827, + 838, 870, 873, 874, 875, 880, 883, 885, 887, 889, + 890, 894, 895, 898, 900, 901, 905, 906, 907, 910, + 911, 912, 913, 914, 921, 923, 924, 925, 926, 932, + 934, 935, 941, 942, 943, 946, 947, 948, 949, 951, + 952, 954, 955, 957, 958, 960, 972, 974, 977, 979, + 980, 989, 991, 996, 1001, 1009, 1013, 1014, 1015, 1016, + 1017, 1018, 1024, 1060, 431, 475, 927, 30, 81, 97, + 115, 121, 139, 150, 159, 172, 178, 185, 205, 236, + 258, 299, 323, 333, 334, 337, 364, 367, 371, 374, + 381, 384, 403, 410, 415, 417, 420, 424, 434, 439, + 452, 465, 683, 927, 3, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 32, 33, 34, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 59, 60, 61, 62, 63, 64, 65, 68, - 69, 70, 71, 72, 74, 75, 76, 77, 78, 80, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 93, 94, 95, 96, 97, 98, 100, 101, 102, 103, - 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 121, 123, 124, 125, 126, 127, 128, 129, 131, 132, - 133, 134, 137, 138, 139, 140, 141, 143, 144, 145, - 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 162, 164, 165, 166, 167, 168, 170, - 172, 173, 175, 176, 177, 178, 179, 181, 182, 184, - 185, 186, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 199, 200, 201, 202, 203, 204, 205, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 217, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 231, - 232, 233, 234, 235, 237, 238, 239, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, + 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, + 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, + 104, 108, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 122, 124, 125, 126, 127, 128, 129, 130, 132, + 133, 134, 135, 138, 139, 140, 141, 142, 144, 145, + 146, 148, 149, 150, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 163, 165, 166, 167, 168, 169, + 171, 173, 174, 175, 177, 178, 179, 180, 181, 183, + 184, 186, 187, 188, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 220, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 240, 241, + 242, 243, 244, 246, 247, 248, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 274, 275, - 276, 277, 279, 280, 281, 282, 283, 284, 286, 287, - 290, 291, 292, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 371, 372, 373, 374, 375, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, - 411, 412, 413, 415, 416, 417, 420, 421, 422, 423, - 424, 426, 427, 428, 429, 430, 431, 432, 433, 436, - 437, 438, 439, 440, 443, 444, 445, 446, 447, 448, - 449, 451, 452, 453, 454, 455, 456, 459, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 1104, 1174, - 1186, 1187, 1191, 1192, 1193, 3, 30, 993, 1171, 1186, - 1191, 452, 502, 948, 288, 320, 910, 55, 502, 585, - 24, 42, 67, 80, 114, 120, 138, 149, 158, 171, - 179, 183, 239, 290, 293, 314, 328, 355, 364, 374, - 393, 400, 409, 410, 412, 413, 428, 435, 438, 441, - 594, 649, 756, 809, 823, 30, 319, 1171, 993, 30, - 313, 372, 410, 412, 6, 226, 865, 866, 1177, 24, - 29, 67, 80, 96, 114, 138, 149, 158, 171, 176, - 183, 202, 249, 290, 303, 314, 325, 328, 355, 358, - 362, 364, 371, 374, 393, 400, 406, 409, 413, 421, - 423, 428, 441, 454, 666, 769, 771, 772, 910, 1171, - 99, 452, 502, 644, 647, 650, 943, 956, 960, 963, - 972, 979, 984, 992, 996, 11, 23, 30, 50, 166, - 172, 174, 198, 228, 264, 322, 341, 493, 494, 785, - 786, 993, 1176, 1178, 30, 32, 99, 337, 370, 790, - 791, 792, 1186, 171, 1186, 1173, 1177, 406, 1010, 785, - 1186, 420, 1171, 303, 249, 114, 202, 364, 405, 406, - 502, 875, 876, 363, 1186, 30, 375, 416, 420, 536, - 545, 546, 1186, 27, 180, 790, 791, 320, 910, 1186, - 225, 30, 135, 1012, 1013, 68, 93, 239, 259, 355, - 364, 375, 416, 420, 467, 533, 534, 535, 536, 30, - 375, 416, 420, 536, 420, 289, 1055, 1056, 1169, 1186, - 1010, 495, 1186, 175, 502, 949, 502, 335, 1002, 1003, - 1171, 1002, 3, 54, 56, 57, 70, 71, 117, 118, - 139, 167, 214, 215, 217, 260, 262, 281, 332, 379, - 385, 416, 417, 449, 1078, 1080, 1082, 1084, 1086, 1088, - 1089, 1090, 1092, 1093, 1094, 1096, 1097, 1187, 1191, 1012, - 1013, 1014, 1182, 12, 1183, 1184, 1186, 1183, 1183, 997, - 998, 1001, 0, 505, 502, 948, 150, 216, 294, 434, - 1015, 1016, 997, 999, 1000, 125, 212, 251, 440, 506, - 36, 914, 839, 1174, 774, 1186, 774, 1171, 323, 774, - 423, 1171, 113, 406, 827, 1174, 1186, 1193, 3, 106, - 110, 376, 1179, 1180, 1188, 1191, 1192, 1193, 30, 192, - 1169, 282, 454, 10, 17, 18, 19, 75, 162, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 861, 863, - 1134, 1135, 1186, 192, 1171, 827, 1171, 30, 1179, 1180, - 827, 1171, 1171, 192, 1169, 1171, 192, 774, 1171, 347, - 377, 30, 192, 1055, 1171, 367, 1171, 774, 30, 246, - 1179, 1180, 192, 1169, 226, 122, 222, 273, 331, 911, - 912, 913, 502, 500, 504, 1160, 1162, 942, 943, 944, - 945, 1188, 1169, 1171, 1186, 29, 67, 81, 92, 114, - 138, 176, 202, 227, 290, 325, 355, 358, 400, 409, - 421, 428, 769, 770, 771, 772, 1177, 914, 959, 963, - 972, 979, 984, 996, 1169, 252, 774, 502, 192, 774, - 1171, 774, 423, 192, 1171, 113, 406, 410, 412, 1179, - 1180, 410, 412, 75, 162, 861, 345, 1171, 1171, 1179, - 192, 529, 1186, 192, 1171, 192, 774, 1171, 1171, 367, - 774, 246, 1179, 335, 371, 406, 454, 249, 96, 202, - 29, 92, 176, 325, 362, 421, 423, 427, 661, 30, - 1171, 994, 543, 1177, 1188, 866, 252, 192, 839, 840, - 192, 870, 192, 1171, 192, 776, 1078, 423, 113, 406, - 192, 826, 827, 192, 1180, 1181, 88, 454, 75, 162, - 192, 862, 863, 60, 192, 826, 192, 1181, 192, 826, - 192, 1171, 192, 1171, 367, 870, 192, 776, 192, 246, - 1181, 226, 192, 773, 774, 192, 1170, 1171, 192, 1171, - 914, 502, 961, 594, 956, 448, 942, 948, 1178, 786, - 787, 30, 787, 1178, 787, 30, 787, 1178, 787, 787, - 787, 1178, 1176, 1176, 993, 787, 323, 502, 405, 502, - 617, 617, 617, 288, 418, 506, 617, 364, 1055, 1057, - 506, 905, 1177, 502, 958, 60, 454, 942, 88, 810, - 810, 1186, 49, 481, 222, 504, 291, 291, 288, 174, - 1177, 418, 914, 169, 782, 288, 5, 8, 9, 10, - 12, 38, 54, 56, 57, 66, 67, 70, 71, 78, - 80, 104, 105, 106, 107, 108, 109, 110, 117, 118, - 120, 155, 160, 161, 167, 182, 184, 214, 215, 217, - 232, 240, 241, 260, 262, 271, 273, 278, 279, 281, - 290, 301, 315, 332, 360, 376, 385, 401, 416, 417, - 422, 424, 425, 435, 441, 449, 469, 470, 471, 472, - 474, 475, 476, 477, 482, 493, 494, 495, 502, 997, - 1081, 1084, 1087, 1088, 1089, 1091, 1092, 1093, 1096, 1097, - 1101, 1103, 1104, 1105, 1107, 1130, 1131, 1132, 1136, 1154, - 1159, 1166, 1167, 1174, 1175, 1176, 1177, 1186, 1165, 1166, - 1177, 30, 551, 1168, 1169, 375, 533, 120, 542, 1177, - 12, 543, 12, 1177, 49, 72, 533, 481, 386, 912, - 291, 174, 418, 492, 49, 481, 222, 913, 502, 1169, - 495, 1162, 1057, 942, 173, 950, 1101, 1139, 1002, 506, - 502, 951, 451, 1095, 1095, 1095, 502, 1083, 1083, 317, - 502, 1085, 70, 71, 1095, 1083, 1080, 463, 484, 502, - 1098, 502, 1098, 38, 1079, 502, 115, 190, 253, 256, - 368, 479, 502, 1099, 1100, 504, 775, 1083, 1165, 1163, - 503, 503, 511, 942, 952, 953, 954, 1169, 30, 135, - 1011, 1011, 60, 1011, 163, 169, 236, 285, 1019, 1021, - 1022, 1037, 1039, 1040, 1041, 1015, 1016, 174, 218, 218, - 1055, 1058, 502, 69, 269, 304, 343, 377, 502, 837, - 304, 339, 343, 377, 775, 304, 343, 377, 3, 91, - 144, 242, 304, 339, 343, 377, 409, 411, 461, 544, - 547, 919, 920, 921, 922, 804, 26, 140, 304, 343, - 377, 445, 560, 1171, 26, 140, 377, 440, 527, 465, - 192, 1055, 63, 98, 159, 195, 231, 269, 273, 304, - 305, 343, 352, 361, 369, 377, 389, 398, 402, 456, - 544, 548, 843, 855, 882, 502, 824, 1162, 343, 527, - 198, 155, 26, 32, 47, 77, 133, 140, 143, 170, - 204, 269, 273, 283, 292, 304, 343, 346, 347, 377, - 445, 556, 558, 559, 684, 882, 5, 493, 494, 658, - 1178, 30, 192, 1169, 774, 774, 502, 860, 304, 377, - 504, 155, 288, 304, 343, 377, 855, 882, 26, 140, - 304, 343, 377, 198, 522, 343, 461, 484, 515, 522, - 304, 343, 377, 855, 882, 288, 304, 343, 155, 39, - 61, 112, 201, 250, 254, 269, 303, 343, 348, 371, - 377, 391, 556, 655, 656, 304, 343, 453, 684, 692, - 155, 304, 343, 377, 26, 91, 133, 140, 143, 304, - 339, 343, 377, 384, 546, 534, 536, 198, 155, 47, - 131, 269, 343, 377, 556, 557, 304, 343, 347, 377, - 89, 132, 307, 411, 288, 26, 32, 140, 304, 343, - 377, 575, 576, 522, 169, 343, 515, 522, 155, 343, - 377, 556, 1171, 234, 122, 289, 466, 506, 911, 30, - 135, 450, 495, 503, 832, 1101, 1140, 1141, 1187, 1101, - 1161, 3, 30, 34, 35, 36, 37, 38, 39, 40, - 44, 58, 66, 67, 73, 79, 81, 92, 99, 104, - 105, 106, 108, 109, 110, 120, 122, 130, 135, 136, - 142, 146, 150, 161, 163, 169, 171, 174, 180, 183, - 187, 198, 206, 216, 218, 229, 230, 236, 240, 241, - 273, 278, 285, 288, 289, 293, 294, 312, 321, 337, - 351, 370, 376, 387, 403, 406, 414, 418, 419, 425, - 434, 435, 441, 442, 450, 457, 458, 460, 461, 495, - 1172, 1189, 1191, 1192, 1193, 1194, 1160, 503, 506, 161, - 288, 425, 540, 543, 658, 946, 442, 939, 288, 839, - 502, 774, 1171, 1078, 827, 282, 75, 162, 863, 827, - 827, 169, 1078, 774, 1171, 1171, 503, 617, 1171, 73, - 1078, 273, 174, 502, 742, 515, 39, 933, 1171, 273, - 515, 465, 192, 1169, 515, 774, 774, 742, 438, 594, - 288, 169, 461, 851, 515, 273, 49, 530, 273, 428, - 691, 273, 951, 91, 304, 668, 89, 132, 307, 411, - 39, 742, 169, 192, 515, 454, 192, 1169, 192, 645, - 1169, 1169, 454, 774, 810, 1174, 423, 1174, 1174, 1171, - 169, 1171, 666, 41, 55, 111, 211, 269, 366, 155, - 64, 349, 506, 561, 155, 502, 155, 515, 155, 506, - 561, 465, 155, 506, 561, 155, 506, 192, 773, 192, - 774, 192, 774, 155, 506, 561, 1181, 155, 561, 155, - 155, 561, 155, 561, 155, 89, 132, 307, 411, 169, - 155, 561, 155, 169, 192, 155, 506, 561, 155, 506, - 561, 155, 288, 1139, 406, 503, 956, 787, 993, 787, - 993, 787, 993, 787, 993, 787, 993, 993, 993, 787, - 993, 502, 618, 619, 1186, 618, 30, 114, 138, 171, - 176, 226, 227, 306, 325, 358, 364, 371, 406, 409, - 428, 795, 1168, 1181, 792, 1171, 198, 506, 975, 1177, - 1078, 1143, 39, 1181, 810, 503, 1169, 1171, 234, 1186, - 169, 169, 795, 1181, 363, 1186, 543, 288, 502, 1163, - 500, 997, 1144, 1101, 1158, 502, 502, 169, 502, 502, - 997, 502, 502, 502, 502, 502, 502, 502, 1101, 502, - 502, 502, 502, 502, 502, 502, 502, 280, 608, 502, - 502, 502, 502, 502, 502, 502, 502, 1101, 1101, 1101, - 997, 1101, 1139, 1162, 12, 1177, 12, 502, 1177, 3, - 10, 13, 17, 18, 19, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 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, 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, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 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, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 165, 166, 167, 168, 170, 171, 172, 173, 175, 176, - 177, 178, 179, 181, 182, 184, 185, 186, 188, 189, - 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, 217, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, - 255, 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, 286, - 287, 289, 290, 291, 292, 293, 295, 296, 297, 298, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 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, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 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, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, - 457, 459, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 480, 481, 482, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 1134, - 1136, 1138, 1190, 1195, 462, 1117, 300, 1101, 218, 506, - 1008, 12, 502, 1177, 1162, 1008, 123, 194, 552, 506, - 72, 12, 120, 543, 39, 3, 12, 120, 239, 541, - 658, 1097, 1177, 1177, 94, 137, 1113, 103, 12, 120, - 537, 538, 540, 658, 120, 537, 234, 1169, 95, 348, - 778, 503, 948, 36, 46, 53, 79, 193, 198, 220, - 235, 290, 293, 382, 503, 506, 1003, 1170, 39, 502, - 1139, 1176, 1095, 1095, 38, 1079, 416, 416, 1176, 1176, - 500, 500, 1176, 418, 418, 418, 502, 418, 1176, 1172, - 504, 1083, 174, 1044, 15, 492, 1160, 1185, 503, 506, - 951, 999, 999, 1017, 1018, 1101, 999, 166, 264, 1028, - 224, 269, 331, 380, 440, 30, 1023, 1101, 493, 494, - 1024, 1025, 1101, 1103, 1037, 1038, 1022, 1021, 1019, 1020, - 169, 1040, 283, 1042, 1019, 1037, 1058, 964, 1169, 1058, - 39, 1186, 377, 1139, 69, 418, 418, 364, 198, 209, - 294, 297, 379, 450, 495, 830, 831, 832, 834, 836, - 838, 1078, 1187, 418, 453, 418, 364, 418, 418, 364, - 236, 418, 80, 418, 409, 533, 304, 919, 921, 492, - 923, 169, 180, 198, 353, 805, 806, 73, 92, 151, - 171, 321, 435, 614, 615, 92, 120, 273, 418, 92, - 418, 120, 273, 364, 92, 133, 143, 304, 343, 739, - 364, 674, 29, 67, 138, 176, 290, 325, 358, 421, - 428, 769, 770, 1171, 155, 343, 377, 556, 288, 658, - 369, 231, 418, 1186, 418, 278, 658, 124, 219, 364, - 375, 420, 535, 774, 349, 377, 843, 856, 128, 503, - 825, 830, 418, 441, 409, 1169, 81, 151, 192, 601, - 614, 1186, 81, 92, 879, 309, 288, 360, 362, 423, - 92, 879, 33, 346, 360, 362, 423, 360, 1169, 170, - 204, 283, 774, 502, 418, 418, 191, 502, 565, 24, - 245, 409, 438, 463, 565, 92, 506, 128, 5, 5, - 304, 198, 155, 343, 377, 556, 882, 442, 442, 270, - 1078, 418, 364, 502, 861, 1171, 1169, 418, 418, 364, - 856, 128, 107, 406, 407, 891, 892, 1056, 1169, 1186, - 892, 418, 418, 742, 892, 114, 377, 547, 418, 517, - 547, 418, 418, 364, 856, 128, 1169, 418, 418, 1169, - 1080, 658, 60, 657, 658, 658, 112, 250, 254, 60, - 418, 515, 258, 364, 515, 269, 656, 418, 418, 278, - 1177, 684, 774, 418, 418, 364, 393, 328, 1177, 328, - 418, 328, 418, 328, 742, 742, 409, 1055, 309, 309, - 92, 418, 879, 364, 418, 418, 565, 565, 774, 774, - 774, 774, 1169, 48, 447, 48, 48, 418, 48, 418, - 447, 364, 502, 506, 547, 441, 700, 1180, 418, 517, - 547, 1169, 418, 879, 364, 304, 343, 331, 344, 373, - 539, 911, 1140, 1140, 1141, 503, 15, 16, 506, 1015, - 1016, 501, 507, 1169, 944, 1171, 1169, 220, 1078, 220, - 288, 220, 220, 658, 774, 774, 220, 220, 220, 1078, - 220, 220, 220, 288, 418, 174, 418, 579, 428, 502, - 39, 155, 774, 743, 744, 1189, 919, 1078, 288, 155, - 671, 1171, 273, 309, 502, 516, 756, 442, 335, 454, - 1169, 30, 892, 742, 516, 155, 1180, 99, 180, 531, - 593, 651, 714, 788, 808, 915, 155, 1177, 692, 693, - 155, 288, 1177, 1180, 242, 774, 774, 774, 774, 147, - 330, 502, 700, 273, 516, 1169, 273, 653, 655, 273, - 39, 283, 309, 502, 617, 617, 192, 648, 1169, 169, - 192, 811, 1171, 502, 746, 837, 1171, 502, 828, 828, - 39, 1078, 28, 51, 213, 715, 226, 461, 463, 995, - 366, 840, 839, 1078, 1171, 502, 776, 1078, 826, 827, - 1181, 1180, 155, 561, 155, 442, 155, 442, 862, 863, - 561, 826, 1181, 826, 1171, 1171, 1078, 776, 1181, 700, - 155, 773, 774, 1170, 1171, 1171, 774, 503, 192, 1169, - 956, 993, 993, 993, 993, 993, 993, 618, 503, 506, - 503, 177, 326, 359, 372, 407, 1170, 773, 113, 374, - 826, 1170, 282, 793, 794, 1186, 826, 826, 1170, 1168, - 1168, 1170, 773, 418, 461, 801, 150, 236, 697, 698, - 24, 153, 360, 380, 976, 1055, 277, 977, 503, 506, - 959, 418, 1169, 875, 876, 791, 790, 791, 174, 181, - 802, 1186, 29, 81, 138, 176, 227, 325, 358, 428, - 769, 770, 1139, 501, 1139, 1144, 1145, 457, 1155, 1156, - 1101, 1139, 502, 1176, 1176, 3, 12, 115, 190, 253, - 256, 368, 479, 1146, 1147, 1177, 1139, 1139, 1139, 1176, - 1176, 1101, 1101, 861, 1101, 1140, 1142, 1149, 360, 493, - 494, 502, 1102, 1103, 1136, 1150, 503, 1139, 1101, 1142, - 1151, 1101, 58, 174, 230, 419, 1101, 1139, 1152, 135, - 273, 997, 1139, 258, 1103, 1101, 1111, 1112, 1113, 258, - 1101, 1113, 503, 506, 1099, 1176, 1099, 1078, 1101, 1101, - 1101, 1101, 1189, 416, 44, 403, 1164, 774, 1101, 502, - 997, 1153, 135, 137, 161, 265, 266, 267, 268, 272, - 273, 278, 425, 436, 1148, 1101, 502, 1101, 418, 53, - 193, 198, 235, 382, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 30, 37, 387, 1133, 183, 164, - 1118, 360, 502, 1130, 179, 239, 406, 410, 412, 438, - 1009, 1169, 1167, 1044, 1140, 1044, 1169, 420, 502, 1177, - 506, 503, 191, 191, 561, 954, 943, 947, 1101, 503, - 249, 273, 1004, 1139, 503, 503, 500, 481, 481, 503, - 503, 1176, 501, 1176, 503, 190, 253, 1100, 253, 1100, - 1100, 1176, 256, 503, 1172, 229, 361, 478, 502, 997, - 1045, 1046, 1047, 1055, 1061, 1071, 1104, 1106, 1107, 1186, - 458, 1066, 1182, 954, 952, 506, 40, 130, 442, 820, - 360, 361, 493, 494, 1025, 1027, 1103, 380, 224, 289, - 506, 5, 1026, 1176, 1026, 360, 361, 1027, 1168, 277, - 384, 978, 1038, 1020, 442, 973, 120, 302, 502, 965, - 996, 39, 442, 1186, 502, 980, 981, 982, 1186, 503, - 1180, 1171, 1171, 297, 60, 1187, 503, 832, 834, 831, - 834, 1187, 294, 503, 506, 775, 1180, 1171, 1171, 1180, - 1171, 1171, 1180, 453, 1171, 1171, 120, 540, 658, 355, - 441, 790, 364, 180, 790, 502, 1171, 442, 812, 224, - 224, 442, 608, 639, 192, 1171, 278, 1180, 1171, 1171, - 1101, 278, 1171, 1171, 33, 346, 418, 418, 1171, 418, - 675, 839, 502, 1078, 827, 75, 162, 863, 827, 827, - 169, 1078, 774, 1171, 186, 269, 304, 343, 446, 678, - 679, 680, 1055, 418, 879, 364, 278, 124, 219, 1180, - 1171, 288, 1171, 288, 503, 506, 1179, 1181, 1171, 343, - 556, 192, 601, 273, 1078, 1171, 1176, 1186, 1169, 1171, - 234, 1171, 30, 441, 1171, 192, 1171, 192, 1186, 362, - 423, 362, 423, 234, 1171, 30, 441, 1171, 234, 360, - 1169, 26, 140, 377, 685, 686, 687, 688, 1189, 1180, - 1171, 120, 175, 274, 442, 564, 567, 568, 1189, 252, - 1171, 77, 286, 1171, 559, 288, 418, 409, 1169, 418, - 879, 364, 128, 1171, 1171, 506, 503, 506, 1180, 1171, - 885, 886, 1189, 288, 343, 418, 708, 1180, 1171, 1171, - 288, 1055, 198, 506, 617, 617, 1162, 1180, 1171, 1171, - 1179, 3, 91, 145, 204, 311, 433, 441, 444, 518, - 1180, 1171, 1171, 288, 343, 1180, 1171, 343, 377, 556, - 655, 658, 774, 1171, 658, 774, 1171, 658, 1180, 1171, - 377, 1180, 1171, 1171, 1178, 1170, 1170, 1180, 851, 1171, - 1170, 1171, 343, 377, 556, 557, 1169, 1169, 1171, 1171, - 1171, 1171, 1180, 1171, 26, 32, 140, 304, 343, 377, - 304, 343, 377, 742, 343, 377, 343, 377, 343, 882, - 1070, 1186, 192, 752, 1186, 192, 1186, 1180, 1171, 1171, - 1177, 1171, 885, 26, 576, 374, 1179, 343, 377, 556, - 1171, 1171, 1171, 418, 418, 86, 432, 331, 506, 1015, - 1015, 1015, 1101, 1101, 450, 1141, 503, 1101, 1161, 939, - 278, 780, 1177, 39, 780, 138, 774, 780, 780, 220, - 442, 442, 780, 780, 780, 226, 780, 780, 780, 774, - 327, 580, 580, 202, 406, 713, 1101, 1078, 774, 503, - 506, 492, 605, 1189, 1171, 64, 174, 364, 453, 672, - 679, 680, 155, 283, 235, 595, 597, 599, 601, 611, - 614, 27, 198, 355, 404, 518, 519, 169, 1171, 454, - 1169, 39, 709, 407, 851, 529, 1186, 530, 594, 823, - 1171, 171, 774, 502, 641, 642, 1106, 1186, 328, 1177, - 742, 742, 742, 742, 502, 742, 1068, 1069, 1070, 374, - 155, 502, 155, 155, 154, 996, 774, 283, 595, 1186, - 442, 634, 461, 566, 273, 39, 617, 1177, 273, 288, - 3, 747, 748, 742, 28, 503, 829, 830, 835, 39, - 226, 352, 421, 460, 841, 842, 843, 844, 841, 288, - 226, 283, 125, 212, 426, 440, 716, 717, 1171, 189, - 189, 169, 561, 39, 515, 170, 927, 928, 561, 561, - 773, 774, 1171, 774, 1171, 561, 561, 561, 561, 226, - 561, 374, 169, 561, 561, 288, 561, 273, 503, 619, - 198, 198, 198, 198, 198, 465, 1170, 658, 659, 506, - 504, 183, 796, 797, 1180, 27, 802, 418, 502, 174, - 153, 380, 153, 380, 360, 440, 255, 1078, 1180, 461, - 646, 810, 810, 174, 288, 796, 60, 561, 839, 774, - 1078, 827, 282, 827, 827, 1078, 774, 1171, 503, 501, - 501, 506, 1101, 142, 1156, 1157, 39, 503, 1101, 503, - 503, 174, 503, 174, 503, 503, 503, 503, 503, 503, - 506, 506, 503, 312, 503, 503, 502, 1102, 1102, 1139, - 13, 17, 18, 19, 198, 220, 290, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 1136, 1102, 503, 503, - 169, 174, 382, 503, 503, 39, 1152, 1139, 1152, 1152, - 174, 503, 135, 503, 1189, 310, 1115, 39, 503, 506, - 1101, 1189, 506, 1101, 1163, 1101, 503, 481, 1102, 1102, - 148, 1139, 174, 135, 137, 161, 272, 278, 425, 436, - 1148, 272, 148, 861, 1101, 403, 1164, 1101, 1153, 1101, - 418, 502, 997, 502, 502, 299, 1122, 502, 1139, 410, - 412, 410, 412, 1169, 1010, 1010, 1010, 1066, 1015, 1066, - 912, 1176, 1099, 538, 954, 249, 502, 503, 1176, 1098, - 1098, 501, 501, 503, 997, 1061, 1071, 174, 502, 997, - 1046, 1047, 39, 1048, 1049, 1186, 506, 100, 175, 208, - 223, 233, 261, 354, 1052, 1049, 39, 1048, 1051, 1186, - 1049, 484, 1065, 1162, 1101, 183, 1029, 1018, 290, 1134, - 1137, 483, 821, 5, 1176, 1027, 289, 461, 440, 1024, - 244, 1045, 458, 1067, 448, 405, 441, 966, 967, 968, - 1186, 288, 969, 1186, 1046, 982, 983, 506, 1044, 492, - 1163, 838, 775, 834, 834, 60, 836, 497, 1181, 1181, - 288, 1170, 291, 288, 1101, 615, 1171, 502, 502, 502, - 639, 202, 502, 732, 155, 561, 418, 1180, 1171, 543, - 1078, 774, 774, 1078, 662, 1171, 186, 446, 418, 418, - 662, 678, 684, 343, 377, 556, 1171, 1171, 1171, 210, - 278, 158, 830, 303, 377, 418, 273, 155, 87, 603, - 604, 732, 377, 26, 140, 347, 348, 377, 560, 569, - 570, 684, 880, 369, 155, 561, 155, 561, 1171, 1171, - 1171, 1171, 369, 369, 234, 687, 688, 687, 503, 506, - 689, 1177, 202, 503, 506, 492, 504, 1171, 158, 1180, - 1171, 343, 377, 556, 1171, 1171, 1171, 288, 304, 343, - 377, 26, 140, 304, 343, 377, 1078, 270, 1078, 503, - 506, 492, 1169, 418, 1181, 442, 705, 158, 617, 364, - 891, 458, 624, 624, 617, 236, 311, 12, 278, 1177, - 311, 1181, 439, 158, 418, 418, 364, 393, 851, 851, - 851, 303, 377, 92, 418, 879, 364, 120, 169, 571, - 165, 810, 418, 418, 246, 246, 246, 418, 418, 364, - 418, 418, 364, 418, 364, 418, 364, 418, 128, 561, - 1078, 273, 1177, 377, 880, 155, 561, 418, 418, 503, - 1171, 418, 879, 364, 418, 1180, 1171, 503, 503, 503, - 1141, 501, 1078, 774, 220, 780, 1171, 1171, 1171, 220, - 394, 395, 581, 1177, 581, 186, 503, 503, 174, 742, - 744, 270, 290, 493, 494, 658, 745, 834, 1137, 1177, - 1194, 73, 79, 92, 120, 122, 178, 206, 273, 278, - 321, 337, 435, 606, 607, 610, 154, 457, 515, 543, - 1171, 543, 292, 682, 1169, 1169, 1169, 503, 506, 1181, - 183, 355, 1181, 1176, 428, 1169, 617, 3, 169, 710, - 851, 49, 530, 406, 691, 113, 951, 1101, 174, 506, - 1170, 566, 749, 750, 1177, 503, 506, 1171, 169, 618, - 1169, 645, 1169, 1171, 646, 502, 596, 1169, 503, 1171, - 461, 463, 635, 565, 39, 155, 996, 634, 418, 155, - 1055, 492, 503, 506, 716, 503, 506, 120, 492, 845, - 1177, 543, 406, 833, 834, 169, 850, 52, 350, 846, - 847, 844, 847, 125, 212, 370, 440, 902, 1171, 283, - 288, 293, 186, 996, 1078, 502, 503, 506, 561, 442, - 561, 442, 561, 1171, 1171, 700, 774, 155, 364, 364, - 364, 364, 364, 1170, 506, 794, 1186, 1180, 461, 506, - 798, 291, 1057, 374, 153, 153, 113, 269, 1169, 1171, - 1181, 795, 802, 1180, 220, 220, 220, 220, 658, 220, - 220, 220, 220, 220, 1144, 414, 1101, 146, 1078, 503, - 1101, 1101, 1148, 1101, 1101, 503, 1139, 506, 1078, 1102, - 1102, 1102, 1102, 135, 137, 273, 1102, 1102, 1102, 1102, - 1102, 1102, 1102, 1102, 1102, 1102, 1101, 1101, 1101, 1078, - 503, 503, 503, 1139, 503, 506, 60, 1103, 1116, 503, - 1189, 1112, 318, 399, 1114, 503, 506, 453, 1108, 39, - 503, 12, 1177, 1101, 36, 36, 1101, 503, 1101, 174, - 272, 1101, 503, 148, 1102, 1102, 148, 148, 1101, 1101, - 1016, 458, 502, 1123, 1186, 503, 1139, 506, 1010, 1010, - 1010, 1010, 1169, 1169, 1169, 1029, 503, 1029, 503, 959, - 501, 1049, 1051, 1049, 502, 473, 1103, 503, 1186, 502, - 1046, 223, 298, 1053, 1046, 1053, 223, 1052, 1053, 223, - 408, 1059, 502, 1186, 502, 295, 60, 187, 1036, 502, - 821, 166, 228, 289, 461, 415, 103, 1101, 351, 971, - 447, 503, 506, 1163, 90, 971, 288, 503, 506, 981, - 1067, 1101, 503, 497, 838, 428, 177, 359, 365, 372, - 407, 429, 807, 169, 807, 503, 502, 622, 623, 815, - 1106, 1186, 618, 618, 732, 1171, 618, 122, 206, 269, - 273, 733, 1171, 1171, 39, 442, 442, 226, 775, 1180, - 1171, 418, 879, 364, 418, 210, 1171, 60, 409, 1171, - 155, 601, 120, 1186, 682, 393, 178, 157, 191, 273, - 565, 515, 113, 178, 273, 393, 396, 565, 603, 656, - 377, 570, 428, 1171, 1186, 369, 686, 1171, 568, 745, - 1189, 1171, 303, 377, 418, 879, 364, 418, 158, 418, - 418, 364, 176, 290, 396, 754, 755, 176, 290, 762, - 763, 418, 418, 364, 503, 503, 503, 886, 270, 658, - 834, 887, 1137, 1177, 1194, 343, 1171, 502, 461, 706, - 1171, 624, 107, 1186, 502, 624, 1178, 12, 1177, 1177, - 1177, 1171, 1171, 1171, 1171, 1178, 60, 409, 1171, 1171, - 1171, 1171, 448, 1171, 1171, 169, 169, 345, 169, 192, - 1180, 1171, 1171, 1180, 1171, 1171, 1171, 1171, 1171, 1171, - 1171, 288, 79, 562, 155, 28, 51, 428, 1186, 1171, - 1177, 684, 1171, 1171, 1171, 1171, 1015, 503, 220, 780, - 220, 220, 220, 780, 515, 442, 586, 587, 662, 732, - 461, 463, 774, 502, 774, 1171, 1102, 33, 60, 609, - 123, 194, 122, 278, 224, 1169, 608, 176, 325, 728, - 735, 736, 1186, 671, 502, 309, 502, 596, 612, 205, - 629, 599, 1181, 1181, 1078, 502, 566, 30, 125, 212, - 370, 440, 711, 418, 707, 1180, 192, 1169, 693, 465, - 288, 503, 1045, 642, 851, 503, 506, 1070, 682, 700, - 503, 653, 39, 283, 309, 502, 961, 598, 600, 602, - 614, 1186, 309, 630, 631, 596, 629, 565, 286, 288, - 636, 996, 648, 646, 566, 1177, 1171, 812, 745, 3, - 748, 288, 835, 1101, 1101, 506, 502, 841, 428, 506, - 45, 1101, 418, 502, 618, 1169, 717, 662, 503, 927, - 928, 1171, 1171, 561, 374, 561, 1170, 1170, 1170, 1170, - 1170, 658, 180, 797, 802, 503, 1171, 113, 802, 174, - 561, 278, 783, 1177, 783, 783, 783, 220, 783, 783, - 783, 783, 783, 1101, 503, 503, 503, 174, 503, 1101, - 174, 135, 137, 174, 169, 148, 503, 468, 1110, 1139, - 336, 447, 60, 1116, 1103, 459, 459, 503, 1101, 269, - 1101, 506, 1109, 1080, 1101, 1101, 1101, 1101, 36, 36, - 1101, 1101, 148, 503, 503, 1101, 1124, 1186, 503, 1101, - 1169, 1169, 1169, 1169, 1036, 12, 1177, 1036, 1177, 503, - 1062, 1063, 1106, 502, 1115, 1048, 502, 1170, 1046, 288, - 442, 1054, 1046, 223, 1046, 1174, 1069, 502, 1069, 1186, - 1011, 1101, 460, 1119, 861, 415, 283, 1166, 996, 302, - 996, 968, 288, 502, 970, 1101, 492, 982, 971, 428, - 503, 418, 790, 174, 732, 1101, 503, 506, 461, 79, - 814, 818, 814, 503, 503, 503, 123, 194, 204, 122, - 444, 561, 1078, 1171, 1171, 1171, 1171, 1171, 1171, 1171, - 1181, 1171, 601, 605, 1178, 609, 192, 192, 278, 658, - 609, 278, 1178, 1186, 1078, 561, 561, 492, 60, 409, - 1171, 1171, 1171, 1171, 1171, 1180, 1171, 1171, 1176, 1176, - 1078, 506, 1176, 1176, 506, 1180, 1171, 1171, 418, 1101, - 73, 1101, 1181, 1171, 418, 418, 174, 198, 461, 1170, - 1170, 774, 1170, 155, 158, 774, 1177, 1177, 1078, 561, - 561, 418, 503, 220, 780, 780, 780, 780, 502, 582, - 583, 515, 127, 176, 209, 176, 1101, 273, 607, 120, - 39, 851, 617, 851, 1174, 36, 154, 198, 683, 687, - 283, 595, 571, 152, 200, 502, 374, 442, 618, 39, - 1181, 705, 530, 273, 502, 171, 1171, 641, 1177, 374, - 566, 154, 996, 774, 283, 595, 646, 503, 506, 461, - 605, 60, 634, 571, 630, 85, 409, 637, 461, 916, - 39, 637, 174, 288, 502, 1169, 1177, 832, 852, 853, - 1187, 847, 1078, 169, 848, 1169, 174, 418, 872, 338, - 718, 207, 663, 561, 503, 561, 561, 1171, 291, 218, - 561, 796, 783, 1101, 503, 1102, 174, 1101, 1101, 1101, - 502, 503, 506, 503, 1116, 503, 447, 390, 503, 503, - 1101, 1101, 1101, 503, 309, 1125, 503, 1119, 1119, 367, - 1005, 503, 506, 39, 1064, 120, 1076, 1077, 1102, 82, - 1170, 503, 1101, 502, 1046, 1054, 502, 503, 1069, 503, - 102, 184, 357, 502, 1030, 1031, 1032, 1033, 1034, 1035, - 1101, 1120, 1121, 1186, 1015, 503, 993, 966, 92, 813, - 815, 136, 457, 985, 986, 1101, 796, 288, 796, 503, - 199, 620, 623, 290, 861, 774, 774, 819, 337, 620, - 620, 503, 418, 377, 977, 39, 155, 155, 562, 745, - 1181, 1171, 418, 502, 827, 861, 863, 755, 502, 502, - 763, 1171, 503, 502, 503, 377, 977, 1171, 1171, 502, - 502, 502, 461, 484, 936, 345, 936, 936, 169, 1171, - 562, 1171, 780, 588, 589, 1189, 55, 101, 126, 144, - 148, 170, 173, 188, 278, 329, 584, 582, 1177, 827, - 39, 868, 868, 503, 191, 502, 442, 638, 247, 621, - 638, 502, 736, 728, 502, 503, 506, 1169, 503, 374, - 30, 84, 87, 93, 121, 178, 191, 203, 393, 396, - 613, 613, 1168, 1171, 1171, 503, 996, 706, 155, 113, - 682, 174, 1171, 39, 1171, 646, 596, 1169, 503, 600, - 292, 1186, 635, 630, 634, 125, 140, 318, 1171, 65, - 73, 239, 996, 774, 1055, 813, 174, 731, 834, 503, - 506, 428, 146, 512, 846, 849, 1066, 388, 388, 503, - 263, 287, 719, 720, 721, 169, 724, 662, 269, 446, - 664, 665, 1171, 802, 169, 1102, 1111, 1139, 269, 480, - 60, 1015, 59, 129, 112, 1006, 1065, 1062, 502, 1102, - 503, 506, 39, 1072, 1073, 1186, 503, 1170, 1139, 503, - 502, 378, 502, 503, 506, 506, 39, 1020, 447, 1171, - 503, 506, 274, 440, 248, 273, 986, 798, 807, 561, - 814, 502, 851, 502, 565, 820, 1169, 851, 851, 1171, - 409, 191, 442, 563, 377, 977, 1171, 1143, 169, 758, - 758, 1143, 1143, 1101, 409, 1139, 1139, 572, 573, 1188, - 773, 774, 773, 774, 1170, 561, 503, 506, 495, 502, - 540, 590, 658, 933, 1177, 933, 273, 278, 329, 933, - 933, 1066, 868, 43, 196, 269, 616, 502, 654, 1101, - 202, 175, 308, 383, 288, 625, 626, 627, 503, 1174, - 6, 737, 687, 596, 629, 1171, 503, 682, 162, 757, - 566, 916, 1169, 465, 1045, 682, 996, 961, 630, 596, - 629, 605, 502, 636, 634, 635, 361, 361, 73, 291, - 73, 646, 812, 503, 1169, 732, 841, 852, 1078, 505, - 136, 461, 461, 720, 360, 406, 722, 141, 725, 457, - 727, 446, 662, 682, 561, 1101, 503, 503, 447, 1139, - 185, 330, 361, 1126, 166, 166, 618, 1069, 506, 1077, - 1189, 503, 506, 169, 1078, 503, 503, 1139, 502, 1139, - 1031, 1121, 1123, 1038, 996, 1066, 815, 377, 36, 987, - 248, 174, 618, 638, 861, 820, 821, 617, 638, 638, - 1171, 654, 1101, 409, 503, 294, 367, 334, 759, 759, - 503, 503, 503, 1171, 503, 503, 503, 506, 1176, 936, - 589, 540, 591, 592, 1177, 1177, 278, 618, 495, 618, - 1177, 1177, 204, 655, 503, 409, 125, 440, 288, 627, - 288, 626, 502, 503, 506, 571, 374, 682, 774, 39, - 39, 502, 1171, 916, 646, 634, 571, 630, 502, 632, - 633, 1106, 1186, 637, 635, 636, 291, 291, 502, 199, - 816, 169, 847, 31, 213, 903, 176, 176, 933, 360, - 392, 726, 502, 154, 53, 103, 431, 1101, 1127, 1128, - 1127, 1127, 503, 60, 60, 377, 503, 1103, 1073, 295, - 3, 120, 273, 278, 1074, 1075, 39, 1050, 344, 1060, - 503, 1030, 503, 980, 1101, 414, 987, 796, 503, 624, - 503, 821, 621, 732, 732, 977, 1171, 827, 60, 977, - 418, 572, 774, 503, 506, 618, 503, 397, 1171, 64, - 269, 349, 377, 628, 628, 503, 6, 374, 1171, 754, - 996, 682, 635, 630, 634, 1101, 503, 506, 818, 818, - 636, 637, 813, 502, 608, 141, 274, 502, 898, 900, - 904, 963, 972, 979, 996, 1007, 827, 827, 723, 1186, - 1101, 728, 1128, 360, 168, 316, 168, 316, 151, 1129, - 1129, 1129, 618, 618, 1186, 1115, 1102, 1102, 278, 1075, - 1186, 502, 503, 1066, 125, 136, 440, 988, 989, 414, - 561, 732, 625, 977, 774, 502, 592, 25, 120, 278, - 1171, 682, 916, 636, 634, 635, 503, 633, 774, 819, - 819, 637, 503, 815, 817, 566, 360, 899, 900, 901, - 997, 998, 506, 506, 503, 1174, 36, 103, 183, 269, - 415, 377, 377, 418, 442, 82, 1101, 274, 377, 136, - 212, 990, 732, 1139, 617, 617, 682, 637, 635, 636, - 818, 816, 503, 506, 637, 727, 503, 505, 418, 174, - 502, 1128, 360, 296, 1186, 1186, 1174, 1175, 1186, 1072, - 503, 980, 274, 120, 302, 448, 502, 991, 503, 636, - 637, 819, 608, 815, 1066, 154, 901, 388, 388, 5, - 729, 730, 1176, 1177, 1189, 502, 120, 503, 448, 966, - 502, 967, 637, 566, 728, 461, 461, 503, 506, 1140, - 1175, 447, 1139, 503, 637, 1174, 176, 176, 730, 1015, - 442, 991, 503, 302, 991, 1066, 502, 827, 827, 503, - 1186, 966, 729, 447, 503, 991 + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 283, 284, 285, + 286, 288, 289, 290, 291, 292, 293, 295, 296, 299, + 300, 301, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, + 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 381, 382, 383, 384, 385, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 414, 415, 418, 419, 420, 421, + 422, 423, 424, 426, 427, 428, 431, 432, 433, 434, + 435, 437, 438, 439, 440, 441, 442, 443, 444, 447, + 448, 449, 450, 451, 454, 455, 456, 457, 458, 459, + 460, 462, 463, 464, 465, 466, 467, 470, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 1121, 1205, + 1217, 1218, 1222, 1223, 1224, 3, 31, 1010, 1202, 1217, + 1222, 463, 515, 965, 297, 329, 927, 56, 515, 600, + 25, 43, 68, 81, 115, 121, 139, 150, 159, 172, + 181, 185, 248, 299, 302, 323, 337, 364, 374, 384, + 403, 410, 420, 421, 423, 424, 439, 446, 449, 452, + 609, 666, 773, 828, 839, 31, 328, 1202, 1010, 31, + 322, 382, 421, 423, 6, 235, 881, 882, 1208, 25, + 30, 68, 81, 97, 115, 139, 150, 159, 172, 178, + 185, 205, 258, 299, 312, 323, 334, 337, 364, 367, + 371, 374, 381, 384, 403, 410, 417, 420, 424, 432, + 434, 439, 452, 465, 683, 786, 788, 789, 927, 1202, + 100, 463, 515, 661, 664, 667, 960, 973, 977, 980, + 989, 996, 1001, 1009, 1013, 11, 24, 31, 51, 167, + 174, 176, 200, 237, 273, 331, 350, 506, 507, 802, + 803, 1010, 1207, 1209, 31, 33, 100, 346, 380, 807, + 808, 809, 1217, 172, 1217, 1204, 1208, 417, 1027, 802, + 1217, 431, 1202, 312, 258, 515, 893, 372, 1217, 31, + 385, 427, 431, 552, 561, 562, 1217, 182, 807, 808, + 1217, 329, 927, 1217, 234, 31, 136, 1029, 1030, 69, + 94, 248, 268, 364, 374, 385, 427, 431, 478, 549, + 550, 551, 552, 31, 385, 427, 431, 552, 431, 298, + 1072, 1073, 1200, 1217, 1027, 508, 1217, 177, 515, 966, + 515, 344, 1019, 1020, 1202, 1019, 3, 55, 57, 58, + 71, 72, 118, 119, 140, 168, 217, 218, 220, 269, + 271, 290, 341, 389, 395, 427, 428, 460, 1095, 1097, + 1099, 1101, 1103, 1105, 1106, 1107, 1109, 1110, 1111, 1113, + 1114, 1218, 1222, 1029, 1030, 1031, 1213, 12, 1214, 1215, + 1217, 1214, 1214, 1014, 1015, 1018, 0, 518, 515, 965, + 151, 219, 303, 445, 1032, 1033, 1014, 1016, 1017, 126, + 215, 260, 451, 519, 37, 931, 855, 1205, 791, 1217, + 791, 1202, 332, 791, 434, 1202, 114, 417, 843, 1205, + 1217, 1224, 3, 107, 111, 386, 1210, 1211, 1219, 1222, + 1223, 1224, 31, 194, 1200, 291, 465, 10, 17, 18, + 19, 76, 163, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 877, 879, 1152, 1153, 1217, 194, 1202, 843, + 1202, 31, 1210, 1211, 843, 1202, 1202, 194, 1200, 1202, + 194, 791, 1202, 356, 387, 31, 194, 1072, 1202, 377, + 1202, 791, 31, 255, 1210, 1211, 194, 1200, 235, 123, + 225, 282, 340, 928, 929, 930, 515, 513, 517, 1178, + 1180, 493, 959, 960, 961, 962, 1219, 1200, 1202, 1217, + 30, 68, 82, 93, 115, 139, 178, 205, 236, 299, + 334, 364, 367, 410, 420, 432, 439, 786, 787, 788, + 789, 1208, 931, 976, 980, 989, 996, 1001, 1013, 1200, + 261, 791, 515, 194, 791, 1202, 791, 434, 194, 1202, + 114, 417, 421, 423, 1210, 1211, 421, 423, 76, 163, + 877, 354, 1202, 1202, 1210, 194, 526, 1217, 194, 1202, + 194, 527, 791, 1202, 1202, 377, 791, 255, 1210, 344, + 381, 417, 465, 258, 97, 205, 30, 93, 178, 334, + 371, 432, 434, 438, 678, 31, 1202, 1011, 559, 1208, + 1219, 882, 261, 194, 855, 856, 194, 886, 194, 1202, + 194, 793, 1095, 434, 114, 417, 194, 842, 843, 194, + 1211, 1212, 89, 465, 76, 163, 194, 878, 879, 61, + 194, 842, 194, 1212, 194, 842, 194, 1202, 194, 1202, + 377, 886, 194, 793, 194, 255, 1212, 235, 194, 790, + 791, 194, 1201, 1202, 194, 1202, 931, 515, 978, 609, + 973, 459, 959, 965, 1209, 803, 804, 31, 804, 1209, + 804, 31, 804, 1209, 804, 804, 804, 1209, 1207, 1207, + 1010, 804, 332, 515, 415, 515, 634, 634, 634, 297, + 429, 519, 634, 374, 1072, 1074, 519, 922, 1208, 515, + 975, 61, 465, 959, 115, 205, 374, 415, 417, 891, + 892, 1217, 50, 492, 225, 517, 300, 297, 176, 300, + 1208, 429, 931, 170, 799, 297, 5, 8, 9, 10, + 12, 39, 55, 57, 58, 67, 68, 71, 72, 79, + 81, 105, 106, 107, 108, 109, 110, 111, 118, 119, + 121, 156, 161, 162, 168, 184, 186, 217, 218, 220, + 228, 229, 230, 231, 241, 249, 250, 269, 271, 280, + 282, 287, 288, 290, 299, 310, 324, 341, 369, 386, + 395, 411, 416, 427, 428, 433, 435, 436, 446, 452, + 460, 480, 481, 482, 483, 485, 486, 487, 488, 494, + 506, 507, 508, 515, 1014, 1098, 1101, 1104, 1105, 1106, + 1108, 1109, 1110, 1113, 1114, 1118, 1120, 1121, 1122, 1124, + 1148, 1149, 1150, 1154, 1172, 1177, 1194, 1197, 1198, 1205, + 1206, 1207, 1208, 1217, 1196, 1197, 1208, 31, 567, 1199, + 1200, 385, 549, 121, 558, 1208, 12, 559, 12, 1208, + 50, 73, 549, 492, 396, 929, 300, 176, 429, 505, + 50, 492, 225, 930, 515, 1200, 508, 1180, 1074, 959, + 175, 967, 1118, 1157, 1019, 519, 515, 968, 462, 1112, + 1112, 1112, 515, 1100, 1100, 326, 515, 1102, 71, 72, + 1112, 1100, 1097, 496, 497, 515, 1115, 515, 1115, 39, + 1096, 515, 116, 192, 262, 265, 378, 490, 515, 1116, + 1117, 517, 792, 1100, 1196, 1181, 516, 516, 524, 959, + 969, 970, 971, 1200, 31, 136, 1028, 1028, 61, 1028, + 164, 170, 245, 294, 1036, 1038, 1039, 1054, 1056, 1057, + 1058, 1032, 1033, 176, 221, 221, 1072, 1075, 515, 70, + 278, 313, 352, 387, 515, 853, 313, 348, 352, 387, + 792, 313, 352, 387, 3, 92, 145, 251, 313, 348, + 352, 387, 420, 422, 472, 560, 563, 936, 937, 938, + 939, 823, 27, 141, 313, 352, 387, 456, 576, 1202, + 27, 141, 387, 451, 544, 476, 194, 1072, 64, 99, + 160, 197, 240, 278, 282, 313, 314, 352, 361, 370, + 379, 387, 399, 408, 412, 467, 560, 564, 859, 871, + 899, 515, 840, 1180, 352, 544, 200, 156, 27, 33, + 48, 78, 134, 141, 144, 171, 207, 278, 282, 292, + 301, 313, 352, 355, 356, 387, 456, 572, 574, 575, + 701, 899, 5, 506, 507, 675, 1209, 31, 194, 1200, + 791, 791, 515, 876, 313, 387, 517, 156, 297, 313, + 352, 387, 871, 899, 27, 141, 313, 352, 387, 200, + 539, 352, 472, 496, 532, 539, 313, 352, 387, 871, + 899, 297, 313, 352, 156, 40, 62, 113, 203, 259, + 263, 278, 312, 352, 357, 381, 387, 401, 572, 672, + 673, 313, 352, 464, 701, 709, 156, 313, 352, 387, + 27, 92, 134, 141, 144, 313, 348, 352, 387, 394, + 562, 550, 552, 200, 156, 48, 132, 278, 352, 387, + 572, 573, 313, 352, 356, 387, 90, 133, 316, 422, + 297, 27, 33, 141, 313, 352, 387, 590, 591, 539, + 170, 352, 532, 539, 156, 352, 387, 572, 1202, 243, + 123, 298, 477, 519, 928, 31, 136, 461, 508, 516, + 848, 1118, 1158, 1159, 1218, 1118, 1179, 3, 31, 35, + 36, 37, 38, 39, 40, 41, 45, 59, 67, 68, + 74, 80, 82, 93, 100, 105, 106, 107, 109, 110, + 111, 121, 123, 131, 136, 137, 143, 147, 151, 162, + 164, 170, 172, 176, 182, 185, 189, 200, 209, 219, + 221, 238, 239, 245, 249, 250, 282, 287, 294, 297, + 298, 302, 303, 321, 330, 346, 360, 380, 386, 397, + 413, 416, 417, 425, 429, 430, 436, 445, 446, 452, + 453, 461, 468, 469, 471, 472, 508, 1203, 1220, 1222, + 1223, 1224, 1225, 1178, 516, 519, 162, 297, 436, 556, + 559, 675, 963, 453, 956, 297, 855, 515, 791, 1202, + 1095, 843, 291, 76, 163, 879, 843, 843, 170, 1095, + 791, 1202, 1202, 516, 634, 1202, 74, 1095, 282, 176, + 515, 759, 532, 40, 950, 1202, 282, 532, 476, 194, + 1200, 532, 791, 791, 759, 449, 609, 297, 170, 472, + 867, 532, 282, 50, 546, 282, 439, 708, 282, 968, + 92, 313, 685, 90, 133, 316, 422, 40, 759, 170, + 194, 532, 465, 194, 1200, 194, 662, 1200, 1200, 465, + 791, 89, 528, 1205, 434, 1205, 1205, 1202, 170, 1202, + 683, 42, 56, 112, 214, 278, 376, 156, 65, 358, + 519, 529, 156, 515, 156, 532, 156, 519, 529, 476, + 156, 519, 529, 156, 519, 194, 790, 194, 791, 194, + 791, 156, 519, 529, 1212, 156, 529, 156, 156, 529, + 156, 529, 156, 90, 133, 316, 422, 170, 156, 529, + 156, 170, 194, 156, 519, 529, 156, 519, 529, 156, + 297, 1157, 417, 516, 973, 804, 1010, 804, 1010, 804, + 1010, 804, 1010, 804, 1010, 1010, 1010, 804, 1010, 515, + 635, 636, 1217, 635, 31, 115, 139, 172, 178, 235, + 236, 315, 334, 367, 374, 381, 417, 420, 439, 812, + 1199, 1212, 809, 1202, 200, 519, 992, 1208, 1095, 1161, + 40, 1212, 528, 516, 528, 528, 528, 243, 1217, 170, + 812, 1212, 170, 372, 1217, 559, 297, 515, 1181, 513, + 1014, 1162, 1118, 1176, 515, 515, 170, 515, 515, 1014, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 1118, 515, 515, 515, 515, 515, 515, 515, 515, + 289, 625, 515, 515, 515, 515, 515, 515, 515, 515, + 1118, 1118, 1118, 1014, 1118, 1157, 1180, 12, 1208, 12, + 515, 1208, 3, 10, 13, 17, 18, 19, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 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, 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, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 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, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 166, 167, 168, 169, 171, 172, + 173, 174, 175, 177, 178, 179, 180, 181, 183, 184, + 186, 187, 188, 190, 191, 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, 220, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 263, 264, 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, 295, 296, 298, 299, 300, 301, 302, 304, 305, + 306, 307, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 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, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 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, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 463, + 464, 465, 466, 467, 468, 470, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 491, 492, 494, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 1152, 1154, 1156, 1221, 1226, 473, 1135, + 309, 1118, 165, 1136, 221, 519, 1025, 12, 515, 1208, + 1180, 1025, 124, 196, 568, 519, 73, 12, 121, 559, + 40, 3, 12, 121, 248, 557, 675, 1114, 1208, 1208, + 95, 138, 1130, 104, 12, 121, 553, 554, 556, 675, + 121, 553, 243, 1200, 96, 357, 795, 516, 965, 37, + 47, 54, 80, 195, 200, 223, 244, 299, 302, 392, + 516, 519, 1020, 1201, 40, 515, 1157, 1207, 1112, 1112, + 39, 1096, 427, 427, 1207, 1207, 513, 513, 1207, 429, + 429, 429, 515, 429, 1207, 1203, 517, 1100, 176, 1061, + 15, 505, 1178, 1216, 516, 519, 968, 1016, 1016, 1034, + 1035, 1118, 1016, 167, 273, 1045, 232, 278, 340, 390, + 451, 31, 1040, 1118, 506, 507, 1041, 1042, 1118, 1120, + 1054, 1055, 1039, 1038, 1036, 1037, 170, 1057, 292, 1059, + 1036, 1054, 1075, 981, 1200, 1075, 40, 1217, 387, 1157, + 70, 429, 429, 374, 200, 212, 303, 306, 389, 461, + 508, 846, 847, 848, 850, 852, 854, 1095, 1218, 429, + 464, 429, 374, 429, 429, 374, 245, 429, 81, 429, + 420, 549, 313, 936, 938, 505, 940, 170, 182, 200, + 362, 824, 825, 74, 93, 152, 172, 330, 446, 631, + 632, 93, 121, 282, 429, 93, 429, 121, 282, 374, + 93, 134, 144, 313, 352, 756, 374, 691, 30, 68, + 139, 178, 299, 334, 367, 432, 439, 786, 787, 1202, + 156, 352, 387, 572, 297, 675, 379, 240, 429, 1217, + 429, 287, 675, 125, 222, 374, 385, 431, 551, 791, + 358, 387, 859, 872, 129, 516, 841, 846, 429, 452, + 420, 1200, 82, 152, 194, 616, 631, 1217, 82, 93, + 896, 318, 297, 369, 371, 434, 93, 896, 34, 355, + 369, 371, 434, 369, 1200, 171, 207, 292, 791, 515, + 429, 429, 193, 515, 580, 25, 254, 420, 449, 474, + 580, 93, 519, 129, 5, 5, 313, 200, 156, 352, + 387, 572, 899, 453, 453, 279, 1095, 429, 374, 515, + 877, 1202, 1200, 429, 429, 374, 872, 129, 108, 417, + 418, 908, 909, 1073, 1200, 1217, 909, 429, 429, 759, + 909, 115, 387, 563, 429, 534, 563, 429, 429, 374, + 872, 129, 1200, 429, 429, 1200, 1097, 675, 61, 674, + 675, 675, 113, 259, 263, 61, 429, 532, 267, 374, + 532, 278, 673, 429, 429, 287, 1208, 701, 791, 429, + 429, 374, 403, 337, 1208, 337, 429, 337, 429, 337, + 759, 759, 420, 1072, 318, 318, 93, 429, 896, 374, + 429, 429, 580, 580, 791, 791, 791, 791, 1200, 49, + 458, 49, 49, 429, 49, 429, 458, 374, 515, 519, + 563, 452, 717, 1211, 429, 534, 563, 1200, 429, 896, + 374, 313, 352, 340, 353, 383, 555, 928, 1158, 1158, + 1159, 516, 15, 16, 519, 1032, 1033, 514, 520, 1200, + 961, 1202, 1200, 223, 1095, 223, 297, 223, 223, 675, + 791, 791, 223, 223, 223, 1095, 223, 223, 223, 297, + 429, 176, 429, 594, 439, 515, 40, 156, 791, 760, + 761, 1220, 936, 1095, 297, 156, 688, 1202, 282, 318, + 515, 533, 773, 453, 344, 465, 1200, 31, 909, 759, + 533, 156, 1211, 100, 182, 547, 608, 668, 731, 805, + 827, 932, 156, 1208, 709, 710, 156, 297, 1208, 1211, + 251, 791, 791, 791, 791, 148, 339, 515, 717, 282, + 533, 1200, 282, 670, 672, 282, 40, 292, 318, 515, + 634, 634, 194, 665, 1200, 170, 194, 526, 1217, 515, + 763, 853, 1202, 515, 844, 844, 40, 1095, 29, 52, + 216, 732, 235, 472, 474, 1012, 376, 856, 855, 1095, + 1202, 515, 793, 1095, 842, 843, 1212, 1211, 156, 529, + 156, 453, 156, 453, 878, 879, 529, 842, 1212, 842, + 1202, 1202, 1095, 793, 1212, 717, 156, 790, 791, 1201, + 1202, 1202, 791, 516, 194, 1200, 973, 1010, 1010, 1010, + 1010, 1010, 1010, 635, 516, 519, 516, 179, 335, 368, + 382, 418, 1201, 790, 114, 384, 842, 1201, 291, 810, + 811, 1217, 842, 842, 1201, 1199, 1199, 1201, 790, 429, + 183, 472, 821, 151, 245, 714, 715, 25, 154, 369, + 390, 993, 1072, 286, 994, 516, 519, 976, 429, 1200, + 1202, 1200, 526, 807, 808, 176, 821, 808, 1217, 30, + 82, 139, 178, 236, 334, 367, 439, 786, 787, 1157, + 514, 1157, 1162, 1163, 468, 1173, 1174, 1118, 1157, 515, + 1207, 1207, 3, 12, 116, 192, 262, 265, 378, 490, + 1164, 1165, 1208, 1157, 1157, 360, 1014, 1015, 1118, 1183, + 1186, 1193, 1183, 1118, 1120, 1158, 1186, 1189, 1190, 1118, + 1190, 1157, 1207, 1207, 1118, 1118, 877, 1118, 1158, 1160, + 1167, 369, 506, 507, 515, 1119, 1120, 1154, 1168, 516, + 1157, 1118, 1160, 1169, 1118, 59, 176, 239, 430, 1118, + 1157, 1170, 136, 282, 1014, 1157, 267, 1120, 1118, 1128, + 1129, 1130, 267, 1118, 1130, 516, 519, 1116, 1207, 1116, + 1095, 1118, 1118, 1118, 1118, 1220, 427, 45, 413, 1182, + 791, 1118, 515, 1014, 1171, 136, 138, 162, 227, 274, + 275, 276, 277, 281, 282, 287, 436, 447, 1166, 1187, + 1118, 515, 1118, 429, 54, 195, 200, 244, 392, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 31, + 38, 397, 1151, 185, 1136, 369, 515, 1148, 515, 308, + 1140, 181, 248, 417, 421, 423, 449, 1026, 1200, 1198, + 1061, 1158, 1061, 1200, 431, 515, 1208, 519, 516, 193, + 193, 529, 971, 960, 964, 1118, 516, 258, 282, 1021, + 1157, 516, 516, 513, 492, 492, 516, 516, 1207, 514, + 1207, 516, 192, 262, 1117, 262, 1117, 1117, 1207, 265, + 516, 1203, 238, 370, 489, 515, 1014, 1062, 1063, 1064, + 1072, 1078, 1088, 1121, 1123, 1124, 1194, 1217, 469, 1083, + 1213, 971, 969, 519, 41, 131, 453, 836, 369, 370, + 506, 507, 1042, 1044, 1120, 390, 232, 298, 519, 5, + 1043, 1207, 1043, 369, 370, 1044, 1199, 286, 394, 995, + 1055, 1037, 453, 990, 121, 311, 515, 982, 1013, 40, + 453, 1217, 515, 997, 998, 999, 1217, 516, 1211, 1202, + 1202, 306, 61, 1218, 516, 848, 850, 847, 850, 1218, + 303, 516, 519, 792, 1211, 1202, 1202, 1211, 1202, 1202, + 1211, 464, 1202, 1202, 121, 556, 675, 364, 452, 807, + 374, 182, 807, 515, 1202, 453, 829, 232, 232, 453, + 625, 656, 194, 1202, 287, 1211, 1202, 1202, 1118, 287, + 1202, 1202, 34, 355, 429, 429, 1202, 429, 692, 855, + 515, 1095, 843, 76, 163, 879, 843, 843, 170, 1095, + 791, 1202, 188, 278, 313, 352, 457, 695, 696, 697, + 1072, 429, 896, 374, 287, 125, 222, 1211, 1202, 297, + 1202, 297, 516, 519, 1210, 1212, 1202, 352, 572, 194, + 616, 282, 1095, 1202, 1207, 1217, 1200, 1202, 243, 1202, + 31, 452, 1202, 194, 1202, 194, 1217, 371, 434, 371, + 434, 243, 1202, 31, 452, 1202, 243, 369, 1200, 27, + 141, 387, 702, 703, 704, 705, 1220, 1211, 1202, 121, + 177, 283, 453, 579, 582, 583, 1220, 261, 1202, 78, + 295, 1202, 575, 297, 429, 420, 1200, 429, 896, 374, + 129, 1202, 1202, 519, 516, 519, 1211, 1202, 902, 903, + 1220, 297, 352, 429, 725, 1211, 1202, 1202, 297, 1072, + 200, 519, 634, 634, 1180, 1211, 1202, 1202, 1210, 3, + 92, 146, 207, 320, 444, 452, 455, 535, 1211, 1202, + 1202, 297, 352, 1211, 1202, 352, 387, 572, 672, 675, + 791, 1202, 675, 791, 1202, 675, 1211, 1202, 387, 1211, + 1202, 1202, 1209, 1201, 1201, 1211, 867, 1202, 1201, 1202, + 352, 387, 572, 573, 1200, 1200, 1202, 1202, 1202, 1202, + 1211, 1202, 27, 33, 141, 313, 352, 387, 313, 352, + 387, 759, 352, 387, 352, 387, 352, 899, 1087, 1217, + 194, 769, 1217, 194, 1217, 1211, 1202, 1202, 1208, 1202, + 902, 27, 591, 384, 1210, 352, 387, 572, 1202, 1202, + 1202, 429, 429, 87, 443, 340, 519, 1032, 1032, 1032, + 1118, 1118, 461, 1159, 516, 1118, 1179, 956, 287, 797, + 1208, 40, 797, 139, 791, 797, 797, 223, 453, 453, + 797, 797, 797, 235, 797, 797, 797, 791, 336, 595, + 595, 205, 417, 730, 1118, 1095, 791, 516, 519, 505, + 622, 1220, 1202, 65, 176, 374, 464, 689, 696, 697, + 156, 292, 244, 610, 612, 614, 616, 628, 631, 28, + 200, 364, 414, 535, 536, 170, 1202, 465, 1200, 40, + 726, 418, 867, 526, 1217, 546, 609, 839, 1202, 172, + 791, 515, 658, 659, 1123, 1217, 337, 1208, 759, 759, + 759, 759, 515, 759, 1085, 1086, 1087, 384, 156, 515, + 156, 156, 155, 1013, 791, 292, 610, 1217, 453, 651, + 472, 581, 282, 40, 634, 1208, 282, 297, 3, 764, + 765, 759, 29, 516, 845, 846, 851, 40, 235, 361, + 432, 471, 857, 858, 859, 860, 857, 297, 235, 292, + 126, 215, 437, 451, 733, 734, 1202, 191, 191, 170, + 529, 40, 532, 171, 944, 945, 529, 529, 790, 791, + 1202, 791, 1202, 529, 529, 529, 529, 235, 529, 384, + 170, 529, 529, 297, 529, 282, 516, 636, 200, 200, + 200, 200, 200, 476, 1201, 675, 676, 519, 517, 185, + 813, 814, 1211, 61, 818, 819, 1220, 429, 515, 176, + 154, 390, 154, 390, 369, 451, 264, 1095, 1211, 472, + 663, 297, 813, 529, 176, 855, 791, 1095, 843, 291, + 843, 843, 1095, 791, 1202, 516, 514, 514, 519, 1118, + 143, 1174, 1175, 40, 516, 1118, 516, 516, 176, 516, + 176, 516, 516, 1095, 493, 1184, 1184, 516, 23, 287, + 519, 1192, 303, 1195, 520, 458, 516, 516, 23, 287, + 519, 1191, 1191, 516, 516, 516, 516, 519, 519, 516, + 321, 516, 516, 515, 1119, 1119, 1157, 13, 17, 18, + 19, 200, 223, 299, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 1154, 1119, 516, 516, 170, 176, 392, + 516, 516, 40, 1170, 1157, 1170, 1170, 176, 516, 136, + 516, 1220, 319, 1133, 40, 516, 519, 1118, 1220, 519, + 1118, 1181, 1118, 516, 492, 1119, 1119, 149, 1157, 176, + 39, 291, 373, 458, 136, 138, 162, 281, 287, 436, + 447, 1166, 1187, 281, 472, 474, 1188, 149, 877, 1118, + 413, 1182, 1118, 1171, 1118, 429, 515, 1014, 515, 1140, + 515, 1157, 469, 515, 1141, 1217, 421, 423, 421, 423, + 1200, 1027, 1027, 1027, 1083, 1032, 1083, 929, 1207, 1116, + 554, 971, 258, 515, 516, 1207, 1115, 1115, 514, 514, + 516, 1014, 1078, 1088, 176, 515, 1014, 1063, 1064, 40, + 1065, 1066, 1217, 519, 101, 177, 211, 226, 242, 270, + 363, 1069, 1066, 40, 1065, 1068, 1217, 1066, 496, 1082, + 1180, 1118, 185, 1046, 1035, 299, 1152, 1155, 495, 837, + 5, 1207, 1044, 298, 472, 451, 1041, 253, 1062, 469, + 1084, 459, 415, 452, 983, 984, 985, 1217, 297, 986, + 1217, 1063, 999, 1000, 519, 1061, 505, 1181, 854, 792, + 850, 850, 61, 852, 510, 1212, 1212, 297, 1201, 300, + 297, 1118, 632, 1202, 515, 515, 515, 656, 205, 515, + 749, 156, 529, 429, 1211, 1202, 559, 1095, 791, 791, + 1095, 679, 1202, 188, 457, 429, 429, 679, 695, 701, + 352, 387, 572, 1202, 1202, 1202, 213, 287, 159, 846, + 312, 387, 429, 282, 156, 406, 620, 621, 749, 387, + 27, 141, 356, 357, 387, 576, 584, 585, 701, 897, + 379, 156, 529, 156, 529, 1202, 1202, 1202, 1202, 379, + 379, 243, 704, 705, 704, 516, 519, 706, 1208, 205, + 516, 519, 505, 517, 1202, 159, 1211, 1202, 352, 387, + 572, 1202, 1202, 1202, 297, 313, 352, 387, 27, 141, + 313, 352, 387, 1095, 279, 1095, 516, 519, 505, 1200, + 429, 1212, 453, 722, 159, 634, 374, 908, 469, 641, + 641, 634, 245, 320, 12, 287, 1208, 320, 1212, 450, + 159, 429, 429, 374, 403, 867, 867, 867, 312, 387, + 93, 429, 896, 374, 121, 170, 586, 166, 528, 429, + 429, 255, 255, 255, 429, 429, 374, 429, 429, 374, + 429, 374, 429, 374, 429, 129, 529, 1095, 282, 1208, + 387, 897, 156, 529, 429, 429, 516, 1202, 429, 896, + 374, 429, 1211, 1202, 516, 516, 516, 1159, 514, 1095, + 791, 223, 797, 1202, 1202, 1202, 223, 404, 405, 596, + 1208, 596, 188, 516, 516, 176, 759, 761, 279, 299, + 506, 507, 675, 762, 850, 1155, 1208, 1225, 74, 80, + 93, 121, 123, 180, 209, 282, 287, 330, 346, 446, + 623, 624, 627, 155, 468, 532, 559, 1202, 559, 301, + 699, 1200, 1200, 1200, 516, 519, 1212, 185, 364, 1212, + 1207, 439, 1200, 634, 3, 170, 727, 867, 50, 546, + 417, 708, 114, 968, 1118, 176, 519, 1201, 581, 766, + 767, 1208, 516, 519, 1202, 170, 635, 1200, 662, 1200, + 1202, 663, 515, 611, 1200, 516, 1202, 472, 474, 652, + 580, 40, 156, 1013, 651, 429, 156, 1072, 505, 516, + 519, 733, 516, 519, 121, 505, 861, 1208, 559, 417, + 849, 850, 170, 866, 53, 359, 862, 863, 860, 863, + 126, 215, 380, 451, 919, 1202, 292, 297, 302, 188, + 1013, 1095, 515, 516, 519, 529, 453, 529, 453, 529, + 1202, 1202, 717, 791, 156, 374, 374, 374, 374, 374, + 1201, 519, 811, 1217, 1211, 472, 519, 815, 1211, 519, + 821, 162, 300, 436, 820, 1074, 384, 154, 154, 114, + 278, 812, 821, 1212, 223, 223, 223, 223, 675, 223, + 223, 223, 223, 223, 1162, 425, 1118, 147, 1095, 516, + 1118, 1118, 1184, 227, 1186, 297, 297, 1183, 1186, 61, + 1192, 1183, 1183, 297, 297, 1190, 1188, 1188, 1166, 1118, + 1118, 516, 1157, 519, 1095, 1119, 1119, 1119, 1119, 136, + 138, 282, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1118, 1118, 1118, 1095, 516, 516, 516, 1157, + 516, 519, 61, 1120, 1134, 516, 1220, 1129, 327, 409, + 1132, 516, 519, 464, 1125, 40, 516, 12, 1208, 1118, + 37, 37, 1118, 516, 1118, 176, 281, 1188, 446, 446, + 1118, 516, 149, 1119, 1119, 149, 149, 1118, 1118, 1033, + 516, 1157, 519, 1118, 1142, 1217, 1027, 1027, 1027, 1027, + 1200, 1200, 1200, 1046, 516, 1046, 516, 976, 514, 1066, + 1068, 1066, 515, 484, 1120, 516, 1217, 515, 1063, 226, + 307, 1070, 1063, 1070, 226, 1069, 1070, 226, 419, 1076, + 515, 1217, 515, 304, 61, 189, 1053, 515, 837, 167, + 237, 298, 472, 426, 104, 1118, 360, 988, 458, 516, + 519, 1181, 91, 988, 297, 516, 519, 998, 1084, 1118, + 516, 510, 854, 439, 179, 368, 375, 382, 418, 440, + 826, 170, 826, 516, 515, 639, 640, 832, 1123, 1217, + 635, 635, 749, 1202, 635, 123, 209, 278, 282, 750, + 1202, 1202, 40, 453, 453, 235, 792, 1211, 1202, 429, + 896, 374, 429, 213, 1202, 61, 420, 1202, 156, 616, + 121, 1217, 88, 618, 619, 403, 180, 158, 193, 282, + 580, 532, 114, 180, 282, 403, 580, 618, 620, 673, + 387, 585, 439, 1202, 1217, 379, 703, 1202, 583, 762, + 1220, 1202, 312, 387, 429, 896, 374, 429, 159, 429, + 429, 374, 178, 299, 406, 771, 772, 178, 299, 779, + 780, 429, 429, 374, 516, 516, 516, 903, 279, 675, + 850, 904, 1155, 1208, 1225, 352, 1202, 515, 472, 723, + 1202, 641, 108, 1217, 515, 641, 1209, 12, 1208, 1208, + 1208, 1202, 1202, 1202, 1202, 1209, 61, 420, 1202, 1202, + 1202, 1202, 459, 1202, 1202, 170, 170, 354, 170, 194, + 1211, 1202, 1202, 1211, 1202, 1202, 1202, 1202, 1202, 1202, + 1202, 297, 80, 577, 156, 29, 52, 439, 1217, 1202, + 1208, 701, 1202, 1202, 1202, 1202, 1032, 516, 223, 797, + 223, 223, 223, 797, 532, 453, 601, 602, 679, 749, + 472, 474, 791, 515, 791, 1202, 1119, 34, 61, 626, + 124, 196, 123, 287, 232, 1200, 625, 178, 334, 745, + 752, 753, 1217, 688, 515, 318, 515, 611, 629, 208, + 646, 614, 1212, 1212, 1095, 515, 581, 31, 126, 215, + 380, 451, 728, 429, 724, 1211, 194, 1200, 710, 476, + 297, 516, 1062, 659, 867, 516, 519, 1087, 699, 717, + 516, 670, 40, 292, 318, 515, 978, 613, 615, 617, + 631, 1217, 318, 647, 648, 611, 646, 580, 295, 297, + 653, 1013, 665, 663, 581, 1208, 1202, 829, 762, 3, + 765, 297, 851, 1118, 1118, 519, 515, 857, 439, 519, + 46, 1118, 429, 515, 635, 1200, 734, 679, 516, 944, + 945, 1202, 1202, 529, 384, 529, 1201, 1201, 1201, 1201, + 1201, 675, 182, 814, 821, 819, 516, 1202, 114, 176, + 529, 821, 287, 800, 1208, 800, 800, 800, 223, 800, + 800, 800, 800, 800, 1118, 516, 145, 1185, 516, 287, + 287, 516, 1034, 1186, 287, 287, 1186, 1186, 516, 516, + 176, 516, 1118, 176, 136, 138, 176, 170, 149, 516, + 479, 1127, 1157, 345, 458, 61, 1134, 1120, 470, 470, + 516, 1118, 278, 1118, 519, 1126, 1097, 1118, 1118, 1118, + 233, 233, 1118, 37, 37, 1118, 1118, 149, 516, 516, + 516, 1118, 516, 318, 1143, 1200, 1200, 1200, 1200, 1053, + 12, 1208, 1053, 1208, 516, 1079, 1080, 1123, 515, 1133, + 1065, 515, 1201, 1063, 297, 453, 1071, 1063, 226, 1063, + 1205, 1086, 515, 1086, 1217, 1028, 1118, 471, 1137, 877, + 426, 292, 1197, 1013, 311, 1013, 985, 297, 515, 987, + 1118, 505, 999, 988, 439, 516, 429, 807, 176, 749, + 1118, 516, 519, 472, 80, 831, 835, 831, 516, 516, + 516, 124, 196, 207, 123, 455, 529, 1095, 1202, 1202, + 1202, 1202, 1202, 1202, 1202, 1212, 1202, 616, 121, 1217, + 699, 1209, 626, 194, 194, 287, 675, 626, 287, 1209, + 1095, 529, 529, 505, 61, 420, 1202, 1202, 1202, 1202, + 1202, 1211, 1202, 1202, 1207, 1207, 1095, 519, 1207, 1207, + 519, 1211, 1202, 1202, 429, 1118, 74, 1118, 1212, 1202, + 429, 429, 176, 200, 472, 1201, 1201, 791, 1201, 156, + 159, 791, 1208, 1208, 1095, 529, 529, 429, 516, 223, + 797, 797, 797, 797, 515, 597, 598, 532, 128, 178, + 212, 178, 1118, 282, 624, 121, 40, 867, 634, 867, + 1205, 37, 155, 200, 700, 704, 292, 610, 586, 153, + 202, 515, 384, 453, 635, 40, 1212, 722, 546, 282, + 515, 172, 1202, 658, 1208, 384, 581, 155, 1013, 791, + 292, 610, 663, 516, 519, 472, 622, 61, 651, 586, + 647, 86, 420, 654, 472, 933, 40, 654, 176, 297, + 515, 1200, 1208, 848, 868, 869, 1218, 863, 1095, 170, + 864, 1200, 176, 429, 888, 347, 735, 210, 680, 529, + 516, 529, 529, 1202, 300, 221, 813, 529, 800, 1202, + 516, 516, 516, 1118, 516, 1119, 176, 1118, 1118, 1118, + 515, 516, 519, 516, 1134, 516, 458, 400, 516, 204, + 278, 1131, 1118, 1118, 1118, 516, 61, 1032, 1137, 1137, + 377, 1022, 516, 519, 40, 1081, 121, 1093, 1094, 1119, + 83, 1201, 516, 1118, 515, 1063, 1071, 515, 516, 1086, + 516, 103, 186, 366, 515, 1047, 1048, 1049, 1050, 1051, + 1052, 1118, 1138, 1139, 1217, 1032, 516, 1010, 983, 93, + 830, 832, 137, 468, 1002, 1003, 1118, 813, 297, 813, + 516, 201, 637, 640, 299, 877, 791, 527, 791, 346, + 637, 637, 516, 429, 387, 994, 622, 40, 156, 156, + 577, 762, 1212, 1202, 429, 515, 843, 877, 879, 772, + 515, 515, 780, 1202, 516, 515, 516, 387, 994, 1202, + 1202, 515, 515, 515, 472, 496, 953, 354, 953, 953, + 170, 1202, 577, 1202, 797, 603, 604, 1220, 56, 102, + 127, 145, 149, 171, 175, 190, 287, 338, 599, 597, + 1208, 843, 40, 884, 884, 516, 193, 515, 453, 655, + 256, 638, 655, 515, 753, 745, 515, 516, 519, 1200, + 516, 384, 31, 85, 88, 94, 122, 180, 193, 206, + 403, 406, 630, 630, 1199, 1202, 1202, 516, 1013, 723, + 156, 114, 699, 176, 1202, 40, 1202, 663, 611, 1200, + 516, 615, 301, 1217, 652, 647, 651, 126, 141, 327, + 1202, 66, 74, 248, 1013, 791, 1072, 830, 176, 748, + 850, 516, 519, 439, 147, 525, 862, 865, 1083, 398, + 398, 516, 272, 296, 736, 737, 738, 170, 741, 679, + 278, 457, 681, 682, 1202, 821, 170, 1119, 1128, 1157, + 278, 491, 204, 516, 1157, 187, 339, 370, 1144, 60, + 130, 113, 1023, 1082, 1079, 515, 1119, 516, 519, 40, + 1089, 1090, 1217, 516, 1201, 1157, 516, 515, 388, 515, + 516, 519, 519, 40, 1037, 458, 1202, 516, 519, 283, + 451, 257, 282, 1003, 815, 826, 529, 831, 515, 867, + 515, 836, 580, 1200, 867, 867, 1202, 420, 193, 453, + 578, 387, 994, 1202, 1161, 170, 775, 775, 1161, 1161, + 1118, 420, 1157, 1157, 587, 588, 1219, 790, 791, 790, + 791, 1201, 529, 516, 519, 508, 515, 556, 605, 675, + 950, 1208, 950, 282, 287, 338, 950, 950, 1083, 884, + 44, 198, 278, 633, 515, 671, 1118, 205, 177, 317, + 393, 297, 642, 643, 644, 516, 1205, 6, 754, 704, + 611, 646, 1202, 516, 699, 163, 774, 581, 933, 1200, + 476, 1062, 699, 1013, 978, 647, 611, 646, 622, 515, + 653, 651, 652, 370, 370, 74, 300, 74, 663, 829, + 516, 1200, 749, 857, 868, 1095, 518, 137, 472, 472, + 737, 369, 417, 739, 142, 742, 468, 744, 457, 679, + 699, 529, 1118, 516, 516, 458, 54, 104, 442, 1118, + 1145, 1146, 1145, 1145, 516, 167, 167, 635, 1086, 519, + 1094, 1220, 516, 519, 170, 1095, 516, 516, 1157, 515, + 1157, 1048, 1139, 1141, 1055, 1013, 1083, 832, 387, 37, + 1004, 257, 176, 635, 655, 877, 837, 836, 634, 655, + 655, 1202, 671, 1118, 420, 516, 303, 377, 343, 776, + 776, 516, 516, 516, 1202, 516, 516, 516, 519, 1207, + 953, 604, 556, 606, 607, 1208, 1208, 287, 635, 508, + 635, 1208, 1208, 207, 672, 516, 420, 126, 451, 297, + 644, 297, 643, 515, 516, 519, 586, 384, 699, 791, + 40, 40, 515, 1202, 933, 663, 651, 586, 647, 515, + 649, 650, 1123, 1217, 654, 652, 653, 300, 300, 515, + 201, 833, 170, 863, 32, 216, 920, 178, 178, 950, + 369, 402, 743, 515, 155, 1146, 369, 169, 325, 169, + 325, 152, 1147, 1147, 1147, 61, 61, 387, 516, 1120, + 1090, 304, 3, 121, 282, 287, 1091, 1092, 40, 1067, + 353, 1077, 516, 1047, 516, 997, 1118, 425, 1004, 813, + 516, 641, 516, 837, 638, 749, 749, 994, 1202, 843, + 61, 994, 429, 587, 791, 516, 519, 635, 516, 407, + 1202, 65, 278, 358, 387, 645, 645, 516, 6, 384, + 1202, 771, 1013, 699, 652, 647, 651, 1118, 516, 519, + 835, 835, 653, 654, 830, 515, 625, 142, 283, 515, + 915, 917, 921, 980, 989, 996, 1013, 1024, 843, 843, + 740, 1217, 1118, 745, 37, 104, 185, 278, 426, 635, + 635, 1217, 1133, 1119, 1119, 287, 1092, 1217, 515, 516, + 1083, 126, 137, 451, 1005, 1006, 425, 529, 749, 642, + 994, 791, 515, 607, 26, 121, 287, 1202, 699, 933, + 653, 651, 652, 516, 650, 527, 527, 654, 516, 832, + 834, 581, 369, 916, 917, 918, 1014, 1015, 519, 519, + 516, 1205, 1146, 369, 305, 387, 387, 429, 453, 83, + 1118, 283, 387, 137, 215, 1007, 749, 1157, 634, 634, + 699, 654, 652, 653, 835, 833, 516, 519, 654, 744, + 516, 518, 429, 176, 515, 1217, 1217, 1205, 1206, 1217, + 1089, 516, 997, 283, 121, 311, 459, 515, 1008, 516, + 653, 654, 527, 625, 832, 1083, 155, 918, 398, 398, + 5, 746, 747, 1207, 1208, 1220, 515, 121, 516, 459, + 983, 515, 984, 654, 581, 745, 472, 472, 516, 519, + 1158, 1206, 458, 1157, 516, 654, 1205, 178, 178, 747, + 1032, 453, 1008, 516, 311, 1008, 1083, 515, 843, 843, + 516, 1217, 983, 746, 458, 516, 1008 }; #define yyerrok (yyerrstatus = 0) @@ -29644,7 +30682,7 @@ YYLTYPE yylloc; switch (yyn) { case 2: -#line 863 "gram.y" +#line 890 "gram.y" { pg_yyget_extra(yyscanner)->parsetree = (yyvsp[(1) - (1)].list); (void) yynerrs; /* suppress compiler warning */ @@ -29652,14 +30690,14 @@ YYLTYPE yylloc; break; case 3: -#line 868 "gram.y" +#line 895 "gram.y" { pg_yyget_extra(yyscanner)->parsetree = list_make1((yyvsp[(2) - (2)].typnam)); ;} break; case 4: -#line 872 "gram.y" +#line 899 "gram.y" { pg_yyget_extra(yyscanner)->parsetree = list_make1(makeRawStmt((yyvsp[(2) - (2)].node), 0)); @@ -29667,7 +30705,7 @@ YYLTYPE yylloc; break; case 5: -#line 877 "gram.y" +#line 904 "gram.y" { PLAssignStmt *n = (PLAssignStmt *) (yyvsp[(2) - (2)].node); @@ -29678,7 +30716,7 @@ YYLTYPE yylloc; break; case 6: -#line 885 "gram.y" +#line 912 "gram.y" { PLAssignStmt *n = (PLAssignStmt *) (yyvsp[(2) - (2)].node); @@ -29689,7 +30727,7 @@ YYLTYPE yylloc; break; case 7: -#line 893 "gram.y" +#line 920 "gram.y" { PLAssignStmt *n = (PLAssignStmt *) (yyvsp[(2) - (2)].node); @@ -29700,7 +30738,7 @@ YYLTYPE yylloc; break; case 8: -#line 913 "gram.y" +#line 940 "gram.y" { if ((yyvsp[(1) - (3)].list) != NIL) { @@ -29715,7 +30753,7 @@ YYLTYPE yylloc; break; case 9: -#line 925 "gram.y" +#line 952 "gram.y" { if ((yyvsp[(1) - (1)].node) != NULL) (yyval.list) = list_make1(makeRawStmt((yyvsp[(1) - (1)].node), 0)); @@ -29725,12 +30763,57 @@ YYLTYPE yylloc; break; case 136: -#line 1068 "gram.y" +#line 1095 "gram.y" { (yyval.node) = NULL; ;} break; case 137: -#line 1078 "gram.y" +#line 1102 "gram.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} + break; + + case 138: +#line 1103 "gram.y" + { (yyval.str) = NULL; ;} + break; + + case 139: +#line 1107 "gram.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} + break; + + case 140: +#line 1108 "gram.y" + { (yyval.list) = NIL; ;} + break; + + case 141: +#line 1112 "gram.y" + { (yyval.boolean) = true; ;} + break; + + case 142: +#line 1113 "gram.y" + { (yyval.boolean) = false; ;} + break; + + case 143: +#line 1117 "gram.y" + { (yyval.dbehavior) = DROP_CASCADE; ;} + break; + + case 144: +#line 1118 "gram.y" + { (yyval.dbehavior) = DROP_RESTRICT; ;} + break; + + case 145: +#line 1119 "gram.y" + { (yyval.dbehavior) = DROP_RESTRICT; /* default */ ;} + break; + + case 146: +#line 1129 "gram.y" { CallStmt *n = makeNode(CallStmt); @@ -29739,8 +30822,8 @@ YYLTYPE yylloc; ;} break; - case 138: -#line 1094 "gram.y" + case 147: +#line 1145 "gram.y" { CreateRoleStmt *n = makeNode(CreateRoleStmt); @@ -29751,51 +30834,51 @@ YYLTYPE yylloc; ;} break; - case 142: -#line 1116 "gram.y" + case 151: +#line 1167 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 143: -#line 1117 "gram.y" + case 152: +#line 1168 "gram.y" { (yyval.list) = NIL; ;} break; - case 144: -#line 1121 "gram.y" + case 153: +#line 1172 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 145: -#line 1122 "gram.y" + case 154: +#line 1173 "gram.y" { (yyval.list) = NIL; ;} break; - case 146: -#line 1127 "gram.y" + case 155: +#line 1178 "gram.y" { (yyval.defelt) = makeDefElem("password", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 147: -#line 1132 "gram.y" + case 156: +#line 1183 "gram.y" { (yyval.defelt) = makeDefElem("password", (Node *)makeParamRef((yyvsp[(2) - (2)].ival), (yylsp[(2) - (2)])), (yylsp[(1) - (2)])); ;} break; - case 148: -#line 1137 "gram.y" + case 157: +#line 1188 "gram.y" { (yyval.defelt) = makeDefElem("password", NULL, (yylsp[(1) - (2)])); ;} break; - case 149: -#line 1141 "gram.y" + case 158: +#line 1192 "gram.y" { /* * These days, passwords are always stored in encrypted @@ -29807,8 +30890,8 @@ YYLTYPE yylloc; ;} break; - case 150: -#line 1151 "gram.y" + case 159: +#line 1202 "gram.y" { /* * These days, passwords are always stored in encrypted @@ -29820,8 +30903,8 @@ YYLTYPE yylloc; ;} break; - case 151: -#line 1161 "gram.y" + case 160: +#line 1212 "gram.y" { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -29831,36 +30914,36 @@ YYLTYPE yylloc; ;} break; - case 152: -#line 1169 "gram.y" + case 161: +#line 1220 "gram.y" { (yyval.defelt) = makeDefElem("inherit", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 153: -#line 1173 "gram.y" + case 162: +#line 1224 "gram.y" { (yyval.defelt) = makeDefElem("connectionlimit", (Node *) makeInteger((yyvsp[(3) - (3)].ival)), (yylsp[(1) - (3)])); ;} break; - case 154: -#line 1177 "gram.y" + case 163: +#line 1228 "gram.y" { (yyval.defelt) = makeDefElem("validUntil", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 155: -#line 1182 "gram.y" + case 164: +#line 1233 "gram.y" { (yyval.defelt) = makeDefElem("rolemembers", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 156: -#line 1186 "gram.y" + case 165: +#line 1237 "gram.y" { /* * We handle identifiers that aren't parser keywords with @@ -29907,48 +30990,48 @@ YYLTYPE yylloc; ;} break; - case 157: -#line 1233 "gram.y" + case 166: +#line 1284 "gram.y" { (yyval.defelt) = (yyvsp[(1) - (1)].defelt); ;} break; - case 158: -#line 1236 "gram.y" + case 167: +#line 1287 "gram.y" { (yyval.defelt) = makeDefElem("sysid", (Node *) makeInteger((yyvsp[(2) - (2)].ival)), (yylsp[(1) - (2)])); ;} break; - case 159: -#line 1240 "gram.y" + case 168: +#line 1291 "gram.y" { (yyval.defelt) = makeDefElem("adminmembers", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 160: -#line 1244 "gram.y" + case 169: +#line 1295 "gram.y" { (yyval.defelt) = makeDefElem("rolemembers", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 161: -#line 1248 "gram.y" + case 170: +#line 1299 "gram.y" { (yyval.defelt) = makeDefElem("addroleto", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 162: -#line 1252 "gram.y" + case 171: +#line 1303 "gram.y" { (yyval.defelt) = makeDefElem("addroleto", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 163: -#line 1266 "gram.y" + case 172: +#line 1317 "gram.y" { CreateRoleStmt *n = makeNode(CreateRoleStmt); @@ -29959,8 +31042,8 @@ YYLTYPE yylloc; ;} break; - case 164: -#line 1285 "gram.y" + case 173: +#line 1336 "gram.y" { AlterRoleStmt *n = makeNode(AlterRoleStmt); @@ -29971,8 +31054,8 @@ YYLTYPE yylloc; ;} break; - case 165: -#line 1294 "gram.y" + case 174: +#line 1345 "gram.y" { AlterRoleStmt *n = makeNode(AlterRoleStmt); @@ -29983,18 +31066,18 @@ YYLTYPE yylloc; ;} break; - case 166: -#line 1305 "gram.y" + case 175: +#line 1356 "gram.y" { (yyval.str) = NULL; ;} break; - case 167: -#line 1306 "gram.y" + case 176: +#line 1357 "gram.y" { (yyval.str) = (yyvsp[(3) - (3)].str); ;} break; - case 168: -#line 1311 "gram.y" + case 177: +#line 1362 "gram.y" { AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); @@ -30005,8 +31088,8 @@ YYLTYPE yylloc; ;} break; - case 169: -#line 1320 "gram.y" + case 178: +#line 1371 "gram.y" { AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); @@ -30017,8 +31100,8 @@ YYLTYPE yylloc; ;} break; - case 170: -#line 1329 "gram.y" + case 179: +#line 1380 "gram.y" { AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); @@ -30029,8 +31112,8 @@ YYLTYPE yylloc; ;} break; - case 171: -#line 1338 "gram.y" + case 180: +#line 1389 "gram.y" { AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); @@ -30041,8 +31124,8 @@ YYLTYPE yylloc; ;} break; - case 172: -#line 1360 "gram.y" + case 181: +#line 1411 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30052,8 +31135,8 @@ YYLTYPE yylloc; ;} break; - case 173: -#line 1368 "gram.y" + case 182: +#line 1419 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30063,8 +31146,8 @@ YYLTYPE yylloc; ;} break; - case 174: -#line 1376 "gram.y" + case 183: +#line 1427 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30074,8 +31157,8 @@ YYLTYPE yylloc; ;} break; - case 175: -#line 1384 "gram.y" + case 184: +#line 1435 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30085,8 +31168,8 @@ YYLTYPE yylloc; ;} break; - case 176: -#line 1392 "gram.y" + case 185: +#line 1443 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30096,8 +31179,8 @@ YYLTYPE yylloc; ;} break; - case 177: -#line 1400 "gram.y" + case 186: +#line 1451 "gram.y" { DropRoleStmt *n = makeNode(DropRoleStmt); @@ -30107,8 +31190,8 @@ YYLTYPE yylloc; ;} break; - case 178: -#line 1418 "gram.y" + case 187: +#line 1469 "gram.y" { CreateRoleStmt *n = makeNode(CreateRoleStmt); @@ -30119,8 +31202,8 @@ YYLTYPE yylloc; ;} break; - case 179: -#line 1437 "gram.y" + case 188: +#line 1488 "gram.y" { AlterRoleStmt *n = makeNode(AlterRoleStmt); @@ -30132,18 +31215,18 @@ YYLTYPE yylloc; ;} break; - case 180: -#line 1448 "gram.y" + case 189: +#line 1499 "gram.y" { (yyval.ival) = +1; ;} break; - case 181: -#line 1449 "gram.y" + case 190: +#line 1500 "gram.y" { (yyval.ival) = -1; ;} break; - case 182: -#line 1461 "gram.y" + case 191: +#line 1512 "gram.y" { CreateSchemaStmt *n = makeNode(CreateSchemaStmt); @@ -30156,8 +31239,8 @@ YYLTYPE yylloc; ;} break; - case 183: -#line 1472 "gram.y" + case 192: +#line 1523 "gram.y" { CreateSchemaStmt *n = makeNode(CreateSchemaStmt); @@ -30170,8 +31253,8 @@ YYLTYPE yylloc; ;} break; - case 184: -#line 1483 "gram.y" + case 193: +#line 1534 "gram.y" { CreateSchemaStmt *n = makeNode(CreateSchemaStmt); @@ -30189,8 +31272,8 @@ YYLTYPE yylloc; ;} break; - case 185: -#line 1499 "gram.y" + case 194: +#line 1550 "gram.y" { CreateSchemaStmt *n = makeNode(CreateSchemaStmt); @@ -30208,18 +31291,8 @@ YYLTYPE yylloc; ;} break; - case 186: -#line 1517 "gram.y" - { (yyval.str) = (yyvsp[(1) - (1)].str); ;} - break; - - case 187: -#line 1518 "gram.y" - { (yyval.str) = NULL; ;} - break; - - case 188: -#line 1523 "gram.y" + case 195: +#line 1569 "gram.y" { if ((yyloc) < 0) /* see comments for YYLLOC_DEFAULT */ (yyloc) = (yylsp[(2) - (2)]); @@ -30227,13 +31300,13 @@ YYLTYPE yylloc; ;} break; - case 189: -#line 1529 "gram.y" + case 196: +#line 1575 "gram.y" { (yyval.list) = NIL; ;} break; - case 196: -#line 1557 "gram.y" + case 203: +#line 1603 "gram.y" { VariableSetStmt *n = (yyvsp[(2) - (2)].vsetstmt); @@ -30242,8 +31315,8 @@ YYLTYPE yylloc; ;} break; - case 197: -#line 1564 "gram.y" + case 204: +#line 1610 "gram.y" { VariableSetStmt *n = (yyvsp[(3) - (3)].vsetstmt); @@ -30252,8 +31325,8 @@ YYLTYPE yylloc; ;} break; - case 198: -#line 1571 "gram.y" + case 205: +#line 1617 "gram.y" { VariableSetStmt *n = (yyvsp[(3) - (3)].vsetstmt); @@ -30262,8 +31335,8 @@ YYLTYPE yylloc; ;} break; - case 199: -#line 1581 "gram.y" + case 206: +#line 1627 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30274,8 +31347,8 @@ YYLTYPE yylloc; ;} break; - case 200: -#line 1590 "gram.y" + case 207: +#line 1636 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30286,8 +31359,8 @@ YYLTYPE yylloc; ;} break; - case 202: -#line 1603 "gram.y" + case 209: +#line 1649 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30298,8 +31371,8 @@ YYLTYPE yylloc; ;} break; - case 203: -#line 1612 "gram.y" + case 210: +#line 1658 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30310,8 +31383,8 @@ YYLTYPE yylloc; ;} break; - case 204: -#line 1621 "gram.y" + case 211: +#line 1667 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30321,8 +31394,8 @@ YYLTYPE yylloc; ;} break; - case 205: -#line 1629 "gram.y" + case 212: +#line 1675 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30332,13 +31405,13 @@ YYLTYPE yylloc; ;} break; - case 206: -#line 1639 "gram.y" + case 213: +#line 1685 "gram.y" {(yyval.vsetstmt) = (yyvsp[(1) - (1)].vsetstmt);;} break; - case 207: -#line 1641 "gram.y" + case 214: +#line 1687 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30348,8 +31421,8 @@ YYLTYPE yylloc; ;} break; - case 208: -#line 1650 "gram.y" + case 215: +#line 1696 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30363,8 +31436,8 @@ YYLTYPE yylloc; ;} break; - case 209: -#line 1662 "gram.y" + case 216: +#line 1708 "gram.y" { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -30374,8 +31447,8 @@ YYLTYPE yylloc; ;} break; - case 210: -#line 1670 "gram.y" + case 217: +#line 1716 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30386,8 +31459,8 @@ YYLTYPE yylloc; ;} break; - case 211: -#line 1679 "gram.y" + case 218: +#line 1725 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); n->kind = VAR_SET_VALUE; @@ -30397,8 +31470,8 @@ YYLTYPE yylloc; ;} break; - case 212: -#line 1687 "gram.y" + case 219: +#line 1733 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30412,8 +31485,8 @@ YYLTYPE yylloc; ;} break; - case 213: -#line 1699 "gram.y" + case 220: +#line 1745 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30424,8 +31497,8 @@ YYLTYPE yylloc; ;} break; - case 214: -#line 1708 "gram.y" + case 221: +#line 1754 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); n->kind = VAR_SET_VALUE; @@ -30435,8 +31508,8 @@ YYLTYPE yylloc; ;} break; - case 215: -#line 1716 "gram.y" + case 222: +#line 1762 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30447,8 +31520,8 @@ YYLTYPE yylloc; ;} break; - case 216: -#line 1725 "gram.y" + case 223: +#line 1771 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); n->kind = VAR_SET_VALUE; @@ -30458,8 +31531,8 @@ YYLTYPE yylloc; ;} break; - case 217: -#line 1733 "gram.y" + case 224: +#line 1779 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30469,8 +31542,8 @@ YYLTYPE yylloc; ;} break; - case 218: -#line 1741 "gram.y" + case 225: +#line 1787 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30481,8 +31554,8 @@ YYLTYPE yylloc; ;} break; - case 219: -#line 1751 "gram.y" + case 226: +#line 1797 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30493,104 +31566,104 @@ YYLTYPE yylloc; ;} break; - case 220: -#line 1761 "gram.y" + case 227: +#line 1807 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 221: -#line 1763 "gram.y" + case 228: +#line 1809 "gram.y" { (yyval.str) = psprintf("%s.%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)); ;} break; - case 222: -#line 1766 "gram.y" + case 229: +#line 1812 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 223: -#line 1767 "gram.y" + case 230: +#line 1813 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 224: -#line 1771 "gram.y" + case 231: +#line 1817 "gram.y" { (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 225: -#line 1773 "gram.y" + case 232: +#line 1819 "gram.y" { (yyval.node) = makeAConst((yyvsp[(1) - (1)].node), (yylsp[(1) - (1)])); ;} break; - case 226: -#line 1775 "gram.y" + case 233: +#line 1821 "gram.y" { (yyval.node) = makeParamRef((yyvsp[(1) - (1)].ival), (yylsp[(1) - (1)])); ;} break; - case 227: -#line 1778 "gram.y" + case 234: +#line 1824 "gram.y" { (yyval.str) = "read uncommitted"; ;} break; - case 228: -#line 1779 "gram.y" + case 235: +#line 1825 "gram.y" { (yyval.str) = "read committed"; ;} break; - case 229: -#line 1780 "gram.y" + case 236: +#line 1826 "gram.y" { (yyval.str) = "repeatable read"; ;} break; - case 230: -#line 1781 "gram.y" + case 237: +#line 1827 "gram.y" { (yyval.str) = "serializable"; ;} break; - case 231: -#line 1785 "gram.y" + case 238: +#line 1831 "gram.y" { (yyval.str) = "true"; ;} break; - case 232: -#line 1786 "gram.y" + case 239: +#line 1832 "gram.y" { (yyval.str) = "false"; ;} break; - case 233: -#line 1787 "gram.y" + case 240: +#line 1833 "gram.y" { (yyval.str) = "on"; ;} break; - case 234: -#line 1793 "gram.y" + case 241: +#line 1839 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 235: -#line 1806 "gram.y" + case 242: +#line 1852 "gram.y" { (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 236: -#line 1810 "gram.y" + case 243: +#line 1856 "gram.y" { (yyval.node) = makeParamRef((yyvsp[(1) - (1)].ival), (yylsp[(1) - (1)])); ;} break; - case 237: -#line 1814 "gram.y" + case 244: +#line 1860 "gram.y" { (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 238: -#line 1818 "gram.y" + case 245: +#line 1864 "gram.y" { TypeName *t = (yyvsp[(1) - (3)].typnam); @@ -30609,8 +31682,8 @@ YYLTYPE yylloc; ;} break; - case 239: -#line 1835 "gram.y" + case 246: +#line 1881 "gram.y" { TypeName *t = (yyvsp[(1) - (5)].typnam); @@ -30620,58 +31693,58 @@ YYLTYPE yylloc; ;} break; - case 240: -#line 1842 "gram.y" + case 247: +#line 1888 "gram.y" { (yyval.node) = makeAConst((yyvsp[(1) - (1)].node), (yylsp[(1) - (1)])); ;} break; - case 241: -#line 1843 "gram.y" + case 248: +#line 1889 "gram.y" { (yyval.node) = NULL; ;} break; - case 242: -#line 1844 "gram.y" + case 249: +#line 1890 "gram.y" { (yyval.node) = NULL; ;} break; - case 243: -#line 1848 "gram.y" + case 250: +#line 1894 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 244: -#line 1849 "gram.y" + case 251: +#line 1895 "gram.y" { (yyval.str) = NULL; ;} break; - case 245: -#line 1850 "gram.y" + case 252: +#line 1896 "gram.y" { (yyval.str) = NULL; ;} break; - case 246: -#line 1854 "gram.y" + case 253: +#line 1900 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 247: -#line 1855 "gram.y" + case 254: +#line 1901 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 248: -#line 1859 "gram.y" + case 255: +#line 1905 "gram.y" { (yyval.node) = (Node *) (yyvsp[(2) - (2)].vsetstmt); ;} break; - case 249: -#line 1863 "gram.y" + case 256: +#line 1909 "gram.y" { (yyval.vsetstmt) = (yyvsp[(1) - (1)].vsetstmt); ;} break; - case 250: -#line 1865 "gram.y" + case 257: +#line 1911 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30681,8 +31754,8 @@ YYLTYPE yylloc; ;} break; - case 251: -#line 1873 "gram.y" + case 258: +#line 1919 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30692,8 +31765,8 @@ YYLTYPE yylloc; ;} break; - case 252: -#line 1881 "gram.y" + case 259: +#line 1927 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30703,8 +31776,8 @@ YYLTYPE yylloc; ;} break; - case 253: -#line 1892 "gram.y" + case 260: +#line 1938 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30714,8 +31787,8 @@ YYLTYPE yylloc; ;} break; - case 254: -#line 1900 "gram.y" + case 261: +#line 1946 "gram.y" { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -30724,28 +31797,28 @@ YYLTYPE yylloc; ;} break; - case 255: -#line 1910 "gram.y" + case 262: +#line 1956 "gram.y" { (yyval.vsetstmt) = (yyvsp[(2) - (2)].vsetstmt); ;} break; - case 256: -#line 1911 "gram.y" + case 263: +#line 1957 "gram.y" { (yyval.vsetstmt) = (VariableSetStmt *) (yyvsp[(1) - (1)].node); ;} break; - case 257: -#line 1916 "gram.y" + case 264: +#line 1962 "gram.y" { (yyval.vsetstmt) = (yyvsp[(2) - (2)].vsetstmt); ;} break; - case 258: -#line 1917 "gram.y" + case 265: +#line 1963 "gram.y" { (yyval.vsetstmt) = (VariableSetStmt *) (yyvsp[(1) - (1)].node); ;} break; - case 259: -#line 1923 "gram.y" + case 266: +#line 1969 "gram.y" { VariableShowStmt *n = makeNode(VariableShowStmt); @@ -30754,8 +31827,8 @@ YYLTYPE yylloc; ;} break; - case 260: -#line 1930 "gram.y" + case 267: +#line 1976 "gram.y" { VariableShowStmt *n = makeNode(VariableShowStmt); @@ -30764,8 +31837,8 @@ YYLTYPE yylloc; ;} break; - case 261: -#line 1937 "gram.y" + case 268: +#line 1983 "gram.y" { VariableShowStmt *n = makeNode(VariableShowStmt); @@ -30774,8 +31847,8 @@ YYLTYPE yylloc; ;} break; - case 262: -#line 1944 "gram.y" + case 269: +#line 1990 "gram.y" { VariableShowStmt *n = makeNode(VariableShowStmt); @@ -30784,8 +31857,8 @@ YYLTYPE yylloc; ;} break; - case 263: -#line 1951 "gram.y" + case 270: +#line 1997 "gram.y" { VariableShowStmt *n = makeNode(VariableShowStmt); @@ -30794,8 +31867,8 @@ YYLTYPE yylloc; ;} break; - case 264: -#line 1962 "gram.y" + case 271: +#line 2008 "gram.y" { ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt); @@ -30805,28 +31878,28 @@ YYLTYPE yylloc; ;} break; - case 265: -#line 1972 "gram.y" + case 272: +#line 2018 "gram.y" { (yyval.list) = NIL; ;} break; - case 266: -#line 1973 "gram.y" + case 273: +#line 2019 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 267: -#line 1977 "gram.y" + case 274: +#line 2023 "gram.y" { (yyval.boolean) = true; ;} break; - case 268: -#line 1978 "gram.y" + case 275: +#line 2024 "gram.y" { (yyval.boolean) = false; ;} break; - case 269: -#line 1987 "gram.y" + case 276: +#line 2033 "gram.y" { CheckPointStmt *n = makeNode(CheckPointStmt); @@ -30834,8 +31907,8 @@ YYLTYPE yylloc; ;} break; - case 270: -#line 2003 "gram.y" + case 277: +#line 2049 "gram.y" { DiscardStmt *n = makeNode(DiscardStmt); @@ -30844,8 +31917,8 @@ YYLTYPE yylloc; ;} break; - case 271: -#line 2010 "gram.y" + case 278: +#line 2056 "gram.y" { DiscardStmt *n = makeNode(DiscardStmt); @@ -30854,8 +31927,8 @@ YYLTYPE yylloc; ;} break; - case 272: -#line 2017 "gram.y" + case 279: +#line 2063 "gram.y" { DiscardStmt *n = makeNode(DiscardStmt); @@ -30864,8 +31937,8 @@ YYLTYPE yylloc; ;} break; - case 273: -#line 2024 "gram.y" + case 280: +#line 2070 "gram.y" { DiscardStmt *n = makeNode(DiscardStmt); @@ -30874,8 +31947,8 @@ YYLTYPE yylloc; ;} break; - case 274: -#line 2031 "gram.y" + case 281: +#line 2077 "gram.y" { DiscardStmt *n = makeNode(DiscardStmt); @@ -30884,8 +31957,8 @@ YYLTYPE yylloc; ;} break; - case 275: -#line 2051 "gram.y" + case 282: +#line 2097 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30897,8 +31970,8 @@ YYLTYPE yylloc; ;} break; - case 276: -#line 2061 "gram.y" + case 283: +#line 2107 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30910,8 +31983,8 @@ YYLTYPE yylloc; ;} break; - case 277: -#line 2071 "gram.y" + case 284: +#line 2117 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30923,8 +31996,8 @@ YYLTYPE yylloc; ;} break; - case 278: -#line 2081 "gram.y" + case 285: +#line 2127 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30936,8 +32009,8 @@ YYLTYPE yylloc; ;} break; - case 279: -#line 2091 "gram.y" + case 286: +#line 2137 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -30951,8 +32024,8 @@ YYLTYPE yylloc; ;} break; - case 280: -#line 2103 "gram.y" + case 287: +#line 2149 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -30966,8 +32039,8 @@ YYLTYPE yylloc; ;} break; - case 281: -#line 2115 "gram.y" + case 288: +#line 2161 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30979,8 +32052,8 @@ YYLTYPE yylloc; ;} break; - case 282: -#line 2125 "gram.y" + case 289: +#line 2171 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -30992,8 +32065,8 @@ YYLTYPE yylloc; ;} break; - case 283: -#line 2135 "gram.y" + case 290: +#line 2181 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31005,8 +32078,8 @@ YYLTYPE yylloc; ;} break; - case 284: -#line 2145 "gram.y" + case 291: +#line 2191 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -31020,8 +32093,8 @@ YYLTYPE yylloc; ;} break; - case 285: -#line 2157 "gram.y" + case 292: +#line 2203 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -31035,8 +32108,8 @@ YYLTYPE yylloc; ;} break; - case 286: -#line 2169 "gram.y" + case 293: +#line 2215 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31048,8 +32121,8 @@ YYLTYPE yylloc; ;} break; - case 287: -#line 2179 "gram.y" + case 294: +#line 2225 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31061,8 +32134,8 @@ YYLTYPE yylloc; ;} break; - case 288: -#line 2189 "gram.y" + case 295: +#line 2235 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31074,8 +32147,8 @@ YYLTYPE yylloc; ;} break; - case 289: -#line 2199 "gram.y" + case 296: +#line 2245 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31087,8 +32160,8 @@ YYLTYPE yylloc; ;} break; - case 290: -#line 2209 "gram.y" + case 297: +#line 2255 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31100,8 +32173,8 @@ YYLTYPE yylloc; ;} break; - case 291: -#line 2219 "gram.y" + case 298: +#line 2265 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31113,8 +32186,8 @@ YYLTYPE yylloc; ;} break; - case 292: -#line 2229 "gram.y" + case 299: +#line 2275 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -31128,8 +32201,8 @@ YYLTYPE yylloc; ;} break; - case 293: -#line 2241 "gram.y" + case 300: +#line 2287 "gram.y" { AlterTableMoveAllStmt *n = makeNode(AlterTableMoveAllStmt); @@ -31143,8 +32216,8 @@ YYLTYPE yylloc; ;} break; - case 294: -#line 2253 "gram.y" + case 301: +#line 2299 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31156,8 +32229,8 @@ YYLTYPE yylloc; ;} break; - case 295: -#line 2263 "gram.y" + case 302: +#line 2309 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -31169,18 +32242,18 @@ YYLTYPE yylloc; ;} break; - case 296: -#line 2275 "gram.y" + case 303: +#line 2321 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 297: -#line 2276 "gram.y" + case 304: +#line 2322 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 298: -#line 2282 "gram.y" + case 305: +#line 2328 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); PartitionCmd *cmd = makeNode(PartitionCmd); @@ -31195,8 +32268,8 @@ YYLTYPE yylloc; ;} break; - case 299: -#line 2296 "gram.y" + case 306: +#line 2342 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); PartitionCmd *cmd = makeNode(PartitionCmd); @@ -31211,8 +32284,8 @@ YYLTYPE yylloc; ;} break; - case 300: -#line 2309 "gram.y" + case 307: +#line 2355 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); PartitionCmd *cmd = makeNode(PartitionCmd); @@ -31226,8 +32299,8 @@ YYLTYPE yylloc; ;} break; - case 301: -#line 2325 "gram.y" + case 308: +#line 2371 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); PartitionCmd *cmd = makeNode(PartitionCmd); @@ -31242,8 +32315,8 @@ YYLTYPE yylloc; ;} break; - case 302: -#line 2342 "gram.y" + case 309: +#line 2388 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31254,8 +32327,8 @@ YYLTYPE yylloc; ;} break; - case 303: -#line 2352 "gram.y" + case 310: +#line 2398 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31266,8 +32339,8 @@ YYLTYPE yylloc; ;} break; - case 304: -#line 2362 "gram.y" + case 311: +#line 2408 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31278,8 +32351,8 @@ YYLTYPE yylloc; ;} break; - case 305: -#line 2372 "gram.y" + case 312: +#line 2418 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31290,8 +32363,8 @@ YYLTYPE yylloc; ;} break; - case 306: -#line 2382 "gram.y" + case 313: +#line 2428 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31302,8 +32375,8 @@ YYLTYPE yylloc; ;} break; - case 307: -#line 2392 "gram.y" + case 314: +#line 2438 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31313,8 +32386,8 @@ YYLTYPE yylloc; ;} break; - case 308: -#line 2401 "gram.y" + case 315: +#line 2447 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31324,8 +32397,8 @@ YYLTYPE yylloc; ;} break; - case 309: -#line 2410 "gram.y" + case 316: +#line 2456 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31335,8 +32408,8 @@ YYLTYPE yylloc; ;} break; - case 310: -#line 2419 "gram.y" + case 317: +#line 2465 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31347,8 +32420,8 @@ YYLTYPE yylloc; ;} break; - case 311: -#line 2429 "gram.y" + case 318: +#line 2475 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31359,8 +32432,8 @@ YYLTYPE yylloc; ;} break; - case 312: -#line 2439 "gram.y" + case 319: +#line 2485 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31377,8 +32450,8 @@ YYLTYPE yylloc; ;} break; - case 313: -#line 2455 "gram.y" + case 320: +#line 2501 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31389,8 +32462,8 @@ YYLTYPE yylloc; ;} break; - case 314: -#line 2465 "gram.y" + case 321: +#line 2511 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31401,20 +32474,20 @@ YYLTYPE yylloc; ;} break; - case 315: -#line 2475 "gram.y" + case 322: +#line 2521 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_SetStorage; - n->name = (yyvsp[(3) - (6)].str); - n->def = (Node *) makeString((yyvsp[(6) - (6)].str)); + n->name = (yyvsp[(3) - (5)].str); + n->def = (Node *) makeString((yyvsp[(5) - (5)].str)); (yyval.node) = (Node *) n; ;} break; - case 316: -#line 2485 "gram.y" + case 323: +#line 2531 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31425,8 +32498,8 @@ YYLTYPE yylloc; ;} break; - case 317: -#line 2495 "gram.y" + case 324: +#line 2541 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); Constraint *c = makeNode(Constraint); @@ -31444,8 +32517,8 @@ YYLTYPE yylloc; ;} break; - case 318: -#line 2512 "gram.y" + case 325: +#line 2558 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31456,8 +32529,8 @@ YYLTYPE yylloc; ;} break; - case 319: -#line 2522 "gram.y" + case 326: +#line 2568 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31468,8 +32541,8 @@ YYLTYPE yylloc; ;} break; - case 320: -#line 2532 "gram.y" + case 327: +#line 2578 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31480,8 +32553,8 @@ YYLTYPE yylloc; ;} break; - case 321: -#line 2542 "gram.y" + case 328: +#line 2588 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31493,8 +32566,8 @@ YYLTYPE yylloc; ;} break; - case 322: -#line 2553 "gram.y" + case 329: +#line 2599 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31506,8 +32579,8 @@ YYLTYPE yylloc; ;} break; - case 323: -#line 2567 "gram.y" + case 330: +#line 2613 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); ColumnDef *def = makeNode(ColumnDef); @@ -31524,8 +32597,8 @@ YYLTYPE yylloc; ;} break; - case 324: -#line 2583 "gram.y" + case 331: +#line 2629 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31536,8 +32609,8 @@ YYLTYPE yylloc; ;} break; - case 325: -#line 2593 "gram.y" + case 332: +#line 2639 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31547,8 +32620,8 @@ YYLTYPE yylloc; ;} break; - case 326: -#line 2602 "gram.y" + case 333: +#line 2648 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); Constraint *c = makeNode(Constraint); @@ -31565,8 +32638,8 @@ YYLTYPE yylloc; ;} break; - case 327: -#line 2618 "gram.y" + case 334: +#line 2664 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31576,8 +32649,8 @@ YYLTYPE yylloc; ;} break; - case 328: -#line 2627 "gram.y" + case 335: +#line 2673 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31589,8 +32662,8 @@ YYLTYPE yylloc; ;} break; - case 329: -#line 2638 "gram.y" + case 336: +#line 2684 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31602,8 +32675,8 @@ YYLTYPE yylloc; ;} break; - case 330: -#line 2649 "gram.y" + case 337: +#line 2695 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31612,8 +32685,8 @@ YYLTYPE yylloc; ;} break; - case 331: -#line 2657 "gram.y" + case 338: +#line 2703 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31623,8 +32696,8 @@ YYLTYPE yylloc; ;} break; - case 332: -#line 2666 "gram.y" + case 339: +#line 2712 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31634,8 +32707,8 @@ YYLTYPE yylloc; ;} break; - case 333: -#line 2675 "gram.y" + case 340: +#line 2721 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31644,8 +32717,8 @@ YYLTYPE yylloc; ;} break; - case 334: -#line 2683 "gram.y" + case 341: +#line 2729 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31654,8 +32727,8 @@ YYLTYPE yylloc; ;} break; - case 335: -#line 2691 "gram.y" + case 342: +#line 2737 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31665,8 +32738,8 @@ YYLTYPE yylloc; ;} break; - case 336: -#line 2700 "gram.y" + case 343: +#line 2746 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31676,8 +32749,8 @@ YYLTYPE yylloc; ;} break; - case 337: -#line 2709 "gram.y" + case 344: +#line 2755 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31687,8 +32760,8 @@ YYLTYPE yylloc; ;} break; - case 338: -#line 2718 "gram.y" + case 345: +#line 2764 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31697,8 +32770,8 @@ YYLTYPE yylloc; ;} break; - case 339: -#line 2726 "gram.y" + case 346: +#line 2772 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31707,8 +32780,8 @@ YYLTYPE yylloc; ;} break; - case 340: -#line 2734 "gram.y" + case 347: +#line 2780 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31718,8 +32791,8 @@ YYLTYPE yylloc; ;} break; - case 341: -#line 2743 "gram.y" + case 348: +#line 2789 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31728,8 +32801,8 @@ YYLTYPE yylloc; ;} break; - case 342: -#line 2751 "gram.y" + case 349: +#line 2797 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31738,8 +32811,8 @@ YYLTYPE yylloc; ;} break; - case 343: -#line 2759 "gram.y" + case 350: +#line 2805 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31749,8 +32822,8 @@ YYLTYPE yylloc; ;} break; - case 344: -#line 2768 "gram.y" + case 351: +#line 2814 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31760,8 +32833,8 @@ YYLTYPE yylloc; ;} break; - case 345: -#line 2777 "gram.y" + case 352: +#line 2823 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31771,8 +32844,8 @@ YYLTYPE yylloc; ;} break; - case 346: -#line 2786 "gram.y" + case 353: +#line 2832 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31782,8 +32855,8 @@ YYLTYPE yylloc; ;} break; - case 347: -#line 2795 "gram.y" + case 354: +#line 2841 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31793,8 +32866,8 @@ YYLTYPE yylloc; ;} break; - case 348: -#line 2804 "gram.y" + case 355: +#line 2850 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31804,8 +32877,8 @@ YYLTYPE yylloc; ;} break; - case 349: -#line 2813 "gram.y" + case 356: +#line 2859 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); TypeName *def = makeTypeNameFromNameList((yyvsp[(2) - (2)].list)); @@ -31817,8 +32890,8 @@ YYLTYPE yylloc; ;} break; - case 350: -#line 2824 "gram.y" + case 357: +#line 2870 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31827,8 +32900,8 @@ YYLTYPE yylloc; ;} break; - case 351: -#line 2832 "gram.y" + case 358: +#line 2878 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31838,8 +32911,8 @@ YYLTYPE yylloc; ;} break; - case 352: -#line 2841 "gram.y" + case 359: +#line 2887 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31849,8 +32922,8 @@ YYLTYPE yylloc; ;} break; - case 353: -#line 2850 "gram.y" + case 360: +#line 2896 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31860,8 +32933,8 @@ YYLTYPE yylloc; ;} break; - case 354: -#line 2859 "gram.y" + case 361: +#line 2905 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31871,8 +32944,8 @@ YYLTYPE yylloc; ;} break; - case 355: -#line 2868 "gram.y" + case 362: +#line 2914 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31882,8 +32955,8 @@ YYLTYPE yylloc; ;} break; - case 356: -#line 2877 "gram.y" + case 363: +#line 2923 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31893,8 +32966,8 @@ YYLTYPE yylloc; ;} break; - case 357: -#line 2886 "gram.y" + case 364: +#line 2932 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31903,8 +32976,8 @@ YYLTYPE yylloc; ;} break; - case 358: -#line 2894 "gram.y" + case 365: +#line 2940 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31913,8 +32986,8 @@ YYLTYPE yylloc; ;} break; - case 359: -#line 2902 "gram.y" + case 366: +#line 2948 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31923,8 +32996,8 @@ YYLTYPE yylloc; ;} break; - case 360: -#line 2910 "gram.y" + case 367: +#line 2956 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31933,8 +33006,8 @@ YYLTYPE yylloc; ;} break; - case 361: -#line 2917 "gram.y" + case 368: +#line 2963 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -31944,33 +33017,18 @@ YYLTYPE yylloc; ;} break; - case 362: -#line 2927 "gram.y" + case 369: +#line 2973 "gram.y" { (yyval.node) = (yyvsp[(3) - (3)].node); ;} break; - case 363: -#line 2928 "gram.y" + case 370: +#line 2974 "gram.y" { (yyval.node) = NULL; ;} break; - case 364: -#line 2932 "gram.y" - { (yyval.dbehavior) = DROP_CASCADE; ;} - break; - - case 365: -#line 2933 "gram.y" - { (yyval.dbehavior) = DROP_RESTRICT; ;} - break; - - case 366: -#line 2934 "gram.y" - { (yyval.dbehavior) = DROP_RESTRICT; /* default */ ;} - break; - - case 367: -#line 2939 "gram.y" + case 371: +#line 2979 "gram.y" { CollateClause *n = makeNode(CollateClause); @@ -31981,23 +33039,23 @@ YYLTYPE yylloc; ;} break; - case 368: -#line 2947 "gram.y" + case 372: +#line 2987 "gram.y" { (yyval.node) = NULL; ;} break; - case 369: -#line 2951 "gram.y" + case 373: +#line 2991 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 370: -#line 2952 "gram.y" + case 374: +#line 2992 "gram.y" { (yyval.node) = NULL; ;} break; - case 371: -#line 2957 "gram.y" + case 375: +#line 2997 "gram.y" { ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); @@ -32007,8 +33065,8 @@ YYLTYPE yylloc; ;} break; - case 372: -#line 2965 "gram.y" + case 376: +#line 3005 "gram.y" { ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); @@ -32018,8 +33076,8 @@ YYLTYPE yylloc; ;} break; - case 373: -#line 2973 "gram.y" + case 377: +#line 3013 "gram.y" { ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); @@ -32029,8 +33087,8 @@ YYLTYPE yylloc; ;} break; - case 374: -#line 2981 "gram.y" + case 378: +#line 3021 "gram.y" { ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); @@ -32040,86 +33098,86 @@ YYLTYPE yylloc; ;} break; - case 375: -#line 2991 "gram.y" + case 379: +#line 3031 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 376: -#line 2994 "gram.y" + case 380: +#line 3034 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 377: -#line 2995 "gram.y" + case 381: +#line 3035 "gram.y" { (yyval.list) = NIL; ;} break; - case 378: -#line 2999 "gram.y" + case 382: +#line 3039 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 379: -#line 3000 "gram.y" + case 383: +#line 3040 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 380: -#line 3006 "gram.y" + case 384: +#line 3046 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 381: -#line 3010 "gram.y" + case 385: +#line 3050 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (1)].str), NULL, (yylsp[(1) - (1)])); ;} break; - case 382: -#line 3014 "gram.y" + case 386: +#line 3054 "gram.y" { (yyval.defelt) = makeDefElemExtended((yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (Node *) (yyvsp[(5) - (5)].node), DEFELEM_UNSPEC, (yylsp[(1) - (5)])); ;} break; - case 383: -#line 3019 "gram.y" + case 387: +#line 3059 "gram.y" { (yyval.defelt) = makeDefElemExtended((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL, DEFELEM_UNSPEC, (yylsp[(1) - (3)])); ;} break; - case 384: -#line 3026 "gram.y" + case 388: +#line 3066 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 385: -#line 3028 "gram.y" + case 389: +#line 3068 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 386: -#line 3033 "gram.y" + case 390: +#line 3073 "gram.y" { (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[(1) - (1)])); ;} break; - case 387: -#line 3037 "gram.y" + case 391: +#line 3077 "gram.y" { (yyval.defelt) = makeDefElem("restart", (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 388: -#line 3041 "gram.y" + case 392: +#line 3081 "gram.y" { if (strcmp((yyvsp[(2) - (2)].defelt)->defname, "as") == 0 || strcmp((yyvsp[(2) - (2)].defelt)->defname, "restart") == 0 || @@ -32132,15 +33190,15 @@ YYLTYPE yylloc; ;} break; - case 389: -#line 3052 "gram.y" + case 393: +#line 3092 "gram.y" { (yyval.defelt) = makeDefElem("generated", (Node *) makeInteger((yyvsp[(3) - (3)].ival)), (yylsp[(1) - (3)])); ;} break; - case 390: -#line 3060 "gram.y" + case 394: +#line 3100 "gram.y" { ListCell *lc; PartitionBoundSpec *n = makeNode(PartitionBoundSpec); @@ -32193,8 +33251,8 @@ YYLTYPE yylloc; ;} break; - case 391: -#line 3113 "gram.y" + case 395: +#line 3153 "gram.y" { PartitionBoundSpec *n = makeNode(PartitionBoundSpec); @@ -32207,8 +33265,8 @@ YYLTYPE yylloc; ;} break; - case 392: -#line 3126 "gram.y" + case 396: +#line 3166 "gram.y" { PartitionBoundSpec *n = makeNode(PartitionBoundSpec); @@ -32222,8 +33280,8 @@ YYLTYPE yylloc; ;} break; - case 393: -#line 3140 "gram.y" + case 397: +#line 3180 "gram.y" { PartitionBoundSpec *n = makeNode(PartitionBoundSpec); @@ -32234,29 +33292,29 @@ YYLTYPE yylloc; ;} break; - case 394: -#line 3152 "gram.y" + case 398: +#line 3192 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (Node *) makeInteger((yyvsp[(2) - (2)].ival)), (yylsp[(1) - (2)])); ;} break; - case 395: -#line 3159 "gram.y" + case 399: +#line 3199 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 396: -#line 3163 "gram.y" + case 400: +#line 3203 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 397: -#line 3177 "gram.y" + case 401: +#line 3217 "gram.y" { AlterTableStmt *n = makeNode(AlterTableStmt); @@ -32268,18 +33326,18 @@ YYLTYPE yylloc; ;} break; - case 398: -#line 3189 "gram.y" + case 402: +#line 3229 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 399: -#line 3190 "gram.y" + case 403: +#line 3230 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 400: -#line 3196 "gram.y" + case 404: +#line 3236 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -32290,8 +33348,8 @@ YYLTYPE yylloc; ;} break; - case 401: -#line 3206 "gram.y" + case 405: +#line 3246 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -32303,8 +33361,8 @@ YYLTYPE yylloc; ;} break; - case 402: -#line 3217 "gram.y" + case 406: +#line 3257 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -32316,8 +33374,8 @@ YYLTYPE yylloc; ;} break; - case 403: -#line 3228 "gram.y" + case 407: +#line 3268 "gram.y" { AlterTableCmd *n = makeNode(AlterTableCmd); ColumnDef *def = makeNode(ColumnDef); @@ -32335,8 +33393,8 @@ YYLTYPE yylloc; ;} break; - case 404: -#line 3255 "gram.y" + case 408: +#line 3295 "gram.y" { ClosePortalStmt *n = makeNode(ClosePortalStmt); @@ -32345,8 +33403,8 @@ YYLTYPE yylloc; ;} break; - case 405: -#line 3262 "gram.y" + case 409: +#line 3302 "gram.y" { ClosePortalStmt *n = makeNode(ClosePortalStmt); @@ -32355,8 +33413,8 @@ YYLTYPE yylloc; ;} break; - case 406: -#line 3298 "gram.y" + case 410: +#line 3338 "gram.y" { CopyStmt *n = makeNode(CopyStmt); @@ -32392,8 +33450,8 @@ YYLTYPE yylloc; ;} break; - case 407: -#line 3332 "gram.y" + case 411: +#line 3372 "gram.y" { CopyStmt *n = makeNode(CopyStmt); @@ -32415,243 +33473,243 @@ YYLTYPE yylloc; ;} break; - case 408: -#line 3354 "gram.y" + case 412: +#line 3394 "gram.y" { (yyval.boolean) = true; ;} break; - case 409: -#line 3355 "gram.y" + case 413: +#line 3395 "gram.y" { (yyval.boolean) = false; ;} break; - case 410: -#line 3359 "gram.y" + case 414: +#line 3399 "gram.y" { (yyval.boolean) = true; ;} break; - case 411: -#line 3360 "gram.y" + case 415: +#line 3400 "gram.y" { (yyval.boolean) = false; ;} break; - case 412: -#line 3369 "gram.y" + case 416: +#line 3409 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 413: -#line 3370 "gram.y" + case 417: +#line 3410 "gram.y" { (yyval.str) = NULL; ;} break; - case 414: -#line 3371 "gram.y" + case 418: +#line 3411 "gram.y" { (yyval.str) = NULL; ;} break; - case 415: -#line 3374 "gram.y" + case 419: +#line 3414 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 416: -#line 3375 "gram.y" + case 420: +#line 3415 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 417: -#line 3380 "gram.y" + case 421: +#line 3420 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 418: -#line 3381 "gram.y" + case 422: +#line 3421 "gram.y" { (yyval.list) = NIL; ;} break; - case 419: -#line 3386 "gram.y" + case 423: +#line 3426 "gram.y" { (yyval.defelt) = makeDefElem("format", (Node *) makeString("binary"), (yylsp[(1) - (1)])); ;} break; - case 420: -#line 3390 "gram.y" + case 424: +#line 3430 "gram.y" { (yyval.defelt) = makeDefElem("freeze", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 421: -#line 3394 "gram.y" + case 425: +#line 3434 "gram.y" { (yyval.defelt) = makeDefElem("delimiter", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 422: -#line 3398 "gram.y" + case 426: +#line 3438 "gram.y" { (yyval.defelt) = makeDefElem("null", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 423: -#line 3402 "gram.y" + case 427: +#line 3442 "gram.y" { (yyval.defelt) = makeDefElem("format", (Node *) makeString("csv"), (yylsp[(1) - (1)])); ;} break; - case 424: -#line 3406 "gram.y" + case 428: +#line 3446 "gram.y" { (yyval.defelt) = makeDefElem("header", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 425: -#line 3410 "gram.y" + case 429: +#line 3450 "gram.y" { (yyval.defelt) = makeDefElem("quote", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 426: -#line 3414 "gram.y" + case 430: +#line 3454 "gram.y" { (yyval.defelt) = makeDefElem("escape", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 427: -#line 3418 "gram.y" + case 431: +#line 3458 "gram.y" { (yyval.defelt) = makeDefElem("force_quote", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 428: -#line 3422 "gram.y" + case 432: +#line 3462 "gram.y" { (yyval.defelt) = makeDefElem("force_quote", (Node *) makeNode(A_Star), (yylsp[(1) - (3)])); ;} break; - case 429: -#line 3426 "gram.y" + case 433: +#line 3466 "gram.y" { (yyval.defelt) = makeDefElem("force_not_null", (Node *) (yyvsp[(4) - (4)].list), (yylsp[(1) - (4)])); ;} break; - case 430: -#line 3430 "gram.y" + case 434: +#line 3470 "gram.y" { (yyval.defelt) = makeDefElem("force_null", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 431: -#line 3434 "gram.y" + case 435: +#line 3474 "gram.y" { (yyval.defelt) = makeDefElem("encoding", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 432: -#line 3443 "gram.y" + case 436: +#line 3483 "gram.y" { (yyval.defelt) = makeDefElem("format", (Node *) makeString("binary"), (yylsp[(1) - (1)])); ;} break; - case 433: -#line 3446 "gram.y" + case 437: +#line 3486 "gram.y" { (yyval.defelt) = NULL; ;} break; - case 434: -#line 3451 "gram.y" + case 438: +#line 3491 "gram.y" { (yyval.defelt) = makeDefElem("delimiter", (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(2) - (3)])); ;} break; - case 435: -#line 3454 "gram.y" + case 439: +#line 3494 "gram.y" { (yyval.defelt) = NULL; ;} break; - case 438: -#line 3465 "gram.y" + case 442: +#line 3505 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 439: -#line 3469 "gram.y" + case 443: +#line 3509 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 440: -#line 3476 "gram.y" + case 444: +#line 3516 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 441: -#line 3482 "gram.y" + case 445: +#line 3522 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 442: -#line 3483 "gram.y" + case 446: +#line 3523 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].node); ;} break; - case 443: -#line 3484 "gram.y" + case 447: +#line 3524 "gram.y" { (yyval.node) = (Node *) makeNode(A_Star); ;} break; - case 444: -#line 3485 "gram.y" + case 448: +#line 3525 "gram.y" { (yyval.node) = (Node *) (yyvsp[(2) - (3)].list); ;} break; - case 445: -#line 3486 "gram.y" + case 449: +#line 3526 "gram.y" { (yyval.node) = NULL; ;} break; - case 446: -#line 3491 "gram.y" + case 450: +#line 3531 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 447: -#line 3495 "gram.y" + case 451: +#line 3535 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 448: -#line 3502 "gram.y" + case 452: +#line 3542 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 449: -#line 3516 "gram.y" + case 453: +#line 3556 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32671,8 +33729,8 @@ YYLTYPE yylloc; ;} break; - case 450: -#line 3536 "gram.y" + case 454: +#line 3576 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32692,8 +33750,8 @@ YYLTYPE yylloc; ;} break; - case 451: -#line 3556 "gram.y" + case 455: +#line 3596 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32714,8 +33772,8 @@ YYLTYPE yylloc; ;} break; - case 452: -#line 3577 "gram.y" + case 456: +#line 3617 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32736,8 +33794,8 @@ YYLTYPE yylloc; ;} break; - case 453: -#line 3598 "gram.y" + case 457: +#line 3638 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32758,8 +33816,8 @@ YYLTYPE yylloc; ;} break; - case 454: -#line 3619 "gram.y" + case 458: +#line 3659 "gram.y" { CreateStmt *n = makeNode(CreateStmt); @@ -32780,28 +33838,28 @@ YYLTYPE yylloc; ;} break; - case 455: -#line 3650 "gram.y" + case 459: +#line 3690 "gram.y" { (yyval.ival) = RELPERSISTENCE_TEMP; ;} break; - case 456: -#line 3651 "gram.y" + case 460: +#line 3691 "gram.y" { (yyval.ival) = RELPERSISTENCE_TEMP; ;} break; - case 457: -#line 3652 "gram.y" + case 461: +#line 3692 "gram.y" { (yyval.ival) = RELPERSISTENCE_TEMP; ;} break; - case 458: -#line 3653 "gram.y" + case 462: +#line 3693 "gram.y" { (yyval.ival) = RELPERSISTENCE_TEMP; ;} break; - case 459: -#line 3655 "gram.y" + case 463: +#line 3695 "gram.y" { ereport(WARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), @@ -32810,8 +33868,8 @@ YYLTYPE yylloc; ;} break; - case 460: -#line 3662 "gram.y" + case 464: +#line 3702 "gram.y" { ereport(WARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), @@ -32820,97 +33878,98 @@ YYLTYPE yylloc; ;} break; - case 461: -#line 3668 "gram.y" + case 465: +#line 3708 "gram.y" { (yyval.ival) = RELPERSISTENCE_UNLOGGED; ;} break; - case 462: -#line 3669 "gram.y" + case 466: +#line 3709 "gram.y" { (yyval.ival) = RELPERSISTENCE_PERMANENT; ;} break; - case 463: -#line 3673 "gram.y" + case 467: +#line 3713 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 464: -#line 3674 "gram.y" + case 468: +#line 3714 "gram.y" { (yyval.list) = NIL; ;} break; - case 465: -#line 3678 "gram.y" + case 469: +#line 3718 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 466: -#line 3679 "gram.y" + case 470: +#line 3719 "gram.y" { (yyval.list) = NIL; ;} break; - case 467: -#line 3684 "gram.y" + case 471: +#line 3724 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 468: -#line 3688 "gram.y" + case 472: +#line 3728 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 469: -#line 3695 "gram.y" + case 473: +#line 3735 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 470: -#line 3699 "gram.y" + case 474: +#line 3739 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 471: -#line 3705 "gram.y" + case 475: +#line 3745 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 472: -#line 3706 "gram.y" + case 476: +#line 3746 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 473: -#line 3707 "gram.y" + case 477: +#line 3747 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 474: -#line 3711 "gram.y" + case 478: +#line 3751 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 475: -#line 3712 "gram.y" + case 479: +#line 3752 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 476: -#line 3716 "gram.y" + case 480: +#line 3756 "gram.y" { ColumnDef *n = makeNode(ColumnDef); - n->colname = (yyvsp[(1) - (5)].str); - n->typeName = (yyvsp[(2) - (5)].typnam); - n->compression = (yyvsp[(3) - (5)].str); + n->colname = (yyvsp[(1) - (6)].str); + n->typeName = (yyvsp[(2) - (6)].typnam); + n->storage_name = (yyvsp[(3) - (6)].str); + n->compression = (yyvsp[(4) - (6)].str); n->inhcount = 0; n->is_local = true; n->is_not_null = false; @@ -32919,16 +33978,16 @@ YYLTYPE yylloc; n->raw_default = NULL; n->cooked_default = NULL; n->collOid = InvalidOid; - n->fdwoptions = (yyvsp[(4) - (5)].list); - SplitColQualList((yyvsp[(5) - (5)].list), &n->constraints, &n->collClause, + n->fdwoptions = (yyvsp[(5) - (6)].list); + SplitColQualList((yyvsp[(6) - (6)].list), &n->constraints, &n->collClause, yyscanner); - n->location = (yylsp[(1) - (5)]); + n->location = (yylsp[(1) - (6)]); (yyval.node) = (Node *) n; ;} break; - case 477: -#line 3739 "gram.y" + case 481: +#line 3780 "gram.y" { ColumnDef *n = makeNode(ColumnDef); @@ -32949,8 +34008,8 @@ YYLTYPE yylloc; ;} break; - case 478: -#line 3758 "gram.y" + case 482: +#line 3799 "gram.y" { ColumnDef *n = makeNode(ColumnDef); @@ -32971,38 +34030,58 @@ YYLTYPE yylloc; ;} break; - case 479: -#line 3779 "gram.y" + case 483: +#line 3820 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 480: -#line 3780 "gram.y" + case 484: +#line 3821 "gram.y" { (yyval.str) = pstrdup("default"); ;} break; - case 481: -#line 3784 "gram.y" + case 485: +#line 3825 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 482: -#line 3785 "gram.y" + case 486: +#line 3826 "gram.y" { (yyval.str) = NULL; ;} break; - case 483: -#line 3789 "gram.y" + case 487: +#line 3830 "gram.y" + { (yyval.str) = (yyvsp[(2) - (2)].str); ;} + break; + + case 488: +#line 3831 "gram.y" + { (yyval.str) = pstrdup("default"); ;} + break; + + case 489: +#line 3835 "gram.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} + break; + + case 490: +#line 3836 "gram.y" + { (yyval.str) = NULL; ;} + break; + + case 491: +#line 3840 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 484: -#line 3790 "gram.y" + case 492: +#line 3841 "gram.y" { (yyval.list) = NIL; ;} break; - case 485: -#line 3795 "gram.y" + case 493: +#line 3846 "gram.y" { Constraint *n = castNode(Constraint, (yyvsp[(3) - (3)].node)); @@ -33012,18 +34091,18 @@ YYLTYPE yylloc; ;} break; - case 486: -#line 3802 "gram.y" + case 494: +#line 3853 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 487: -#line 3803 "gram.y" + case 495: +#line 3854 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 488: -#line 3805 "gram.y" + case 496: +#line 3856 "gram.y" { /* * Note: the CollateClause is momentarily included in @@ -33039,8 +34118,8 @@ YYLTYPE yylloc; ;} break; - case 489: -#line 3837 "gram.y" + case 497: +#line 3888 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33050,8 +34129,8 @@ YYLTYPE yylloc; ;} break; - case 490: -#line 3845 "gram.y" + case 498: +#line 3896 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33061,8 +34140,8 @@ YYLTYPE yylloc; ;} break; - case 491: -#line 3853 "gram.y" + case 499: +#line 3904 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33077,8 +34156,8 @@ YYLTYPE yylloc; ;} break; - case 492: -#line 3866 "gram.y" + case 500: +#line 3917 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33092,8 +34171,8 @@ YYLTYPE yylloc; ;} break; - case 493: -#line 3878 "gram.y" + case 501: +#line 3929 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33108,8 +34187,8 @@ YYLTYPE yylloc; ;} break; - case 494: -#line 3891 "gram.y" + case 502: +#line 3942 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33121,8 +34200,8 @@ YYLTYPE yylloc; ;} break; - case 495: -#line 3901 "gram.y" + case 503: +#line 3952 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33134,8 +34213,8 @@ YYLTYPE yylloc; ;} break; - case 496: -#line 3911 "gram.y" + case 504: +#line 3962 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33161,8 +34240,8 @@ YYLTYPE yylloc; ;} break; - case 497: -#line 3935 "gram.y" + case 505: +#line 3986 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33181,33 +34260,33 @@ YYLTYPE yylloc; ;} break; - case 498: -#line 3954 "gram.y" + case 506: +#line 4005 "gram.y" { (yyval.boolean) = true; ;} break; - case 499: -#line 3955 "gram.y" + case 507: +#line 4006 "gram.y" { (yyval.boolean) = false; ;} break; - case 500: -#line 3956 "gram.y" + case 508: +#line 4007 "gram.y" { (yyval.boolean) = true; ;} break; - case 501: -#line 3960 "gram.y" + case 509: +#line 4011 "gram.y" { (yyval.ival) = ATTRIBUTE_IDENTITY_ALWAYS; ;} break; - case 502: -#line 3961 "gram.y" + case 510: +#line 4012 "gram.y" { (yyval.ival) = ATTRIBUTE_IDENTITY_BY_DEFAULT; ;} break; - case 503: -#line 3981 "gram.y" + case 511: +#line 4032 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33217,8 +34296,8 @@ YYLTYPE yylloc; ;} break; - case 504: -#line 3989 "gram.y" + case 512: +#line 4040 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33228,8 +34307,8 @@ YYLTYPE yylloc; ;} break; - case 505: -#line 3997 "gram.y" + case 513: +#line 4048 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33239,8 +34318,8 @@ YYLTYPE yylloc; ;} break; - case 506: -#line 4005 "gram.y" + case 514: +#line 4056 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33250,8 +34329,8 @@ YYLTYPE yylloc; ;} break; - case 507: -#line 4017 "gram.y" + case 515: +#line 4068 "gram.y" { TableLikeClause *n = makeNode(TableLikeClause); @@ -33262,73 +34341,73 @@ YYLTYPE yylloc; ;} break; - case 508: -#line 4028 "gram.y" + case 516: +#line 4079 "gram.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival); ;} break; - case 509: -#line 4029 "gram.y" + case 517: +#line 4080 "gram.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) & ~(yyvsp[(3) - (3)].ival); ;} break; - case 510: -#line 4030 "gram.y" + case 518: +#line 4081 "gram.y" { (yyval.ival) = 0; ;} break; - case 511: -#line 4034 "gram.y" + case 519: +#line 4085 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_COMMENTS; ;} break; - case 512: -#line 4035 "gram.y" + case 520: +#line 4086 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_COMPRESSION; ;} break; - case 513: -#line 4036 "gram.y" + case 521: +#line 4087 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_CONSTRAINTS; ;} break; - case 514: -#line 4037 "gram.y" + case 522: +#line 4088 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_DEFAULTS; ;} break; - case 515: -#line 4038 "gram.y" + case 523: +#line 4089 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_IDENTITY; ;} break; - case 516: -#line 4039 "gram.y" + case 524: +#line 4090 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_GENERATED; ;} break; - case 517: -#line 4040 "gram.y" + case 525: +#line 4091 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_INDEXES; ;} break; - case 518: -#line 4041 "gram.y" + case 526: +#line 4092 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_STATISTICS; ;} break; - case 519: -#line 4042 "gram.y" + case 527: +#line 4093 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_STORAGE; ;} break; - case 520: -#line 4043 "gram.y" + case 528: +#line 4094 "gram.y" { (yyval.ival) = CREATE_TABLE_LIKE_ALL; ;} break; - case 521: -#line 4053 "gram.y" + case 529: +#line 4104 "gram.y" { Constraint *n = castNode(Constraint, (yyvsp[(3) - (3)].node)); @@ -33338,13 +34417,13 @@ YYLTYPE yylloc; ;} break; - case 522: -#line 4060 "gram.y" + case 530: +#line 4111 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 523: -#line 4065 "gram.y" + case 531: +#line 4116 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33360,8 +34439,8 @@ YYLTYPE yylloc; ;} break; - case 524: -#line 4080 "gram.y" + case 532: +#line 4131 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33380,8 +34459,8 @@ YYLTYPE yylloc; ;} break; - case 525: -#line 4097 "gram.y" + case 533: +#line 4148 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33399,8 +34478,8 @@ YYLTYPE yylloc; ;} break; - case 526: -#line 4114 "gram.y" + case 534: +#line 4165 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33418,8 +34497,8 @@ YYLTYPE yylloc; ;} break; - case 527: -#line 4130 "gram.y" + case 535: +#line 4181 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33437,8 +34516,8 @@ YYLTYPE yylloc; ;} break; - case 528: -#line 4148 "gram.y" + case 536: +#line 4199 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33458,8 +34537,8 @@ YYLTYPE yylloc; ;} break; - case 529: -#line 4167 "gram.y" + case 537: +#line 4218 "gram.y" { Constraint *n = makeNode(Constraint); @@ -33481,62 +34560,62 @@ YYLTYPE yylloc; ;} break; - case 530: -#line 4188 "gram.y" + case 538: +#line 4239 "gram.y" { (yyval.boolean) = true; ;} break; - case 531: -#line 4189 "gram.y" + case 539: +#line 4240 "gram.y" { (yyval.boolean) = false; ;} break; - case 532: -#line 4193 "gram.y" + case 540: +#line 4244 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 533: -#line 4194 "gram.y" + case 541: +#line 4245 "gram.y" { (yyval.list) = NIL; ;} break; - case 534: -#line 4198 "gram.y" + case 542: +#line 4249 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 535: -#line 4199 "gram.y" + case 543: +#line 4250 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 536: -#line 4203 "gram.y" + case 544: +#line 4254 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 537: -#line 4208 "gram.y" + case 545: +#line 4259 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 538: -#line 4209 "gram.y" + case 546: +#line 4260 "gram.y" { (yyval.list) = NIL; ;} break; - case 539: -#line 4213 "gram.y" + case 547: +#line 4264 "gram.y" { (yyval.ival) = FKCONSTR_MATCH_FULL; ;} break; - case 540: -#line 4217 "gram.y" + case 548: +#line 4268 "gram.y" { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -33546,56 +34625,56 @@ YYLTYPE yylloc; ;} break; - case 541: -#line 4225 "gram.y" + case 549: +#line 4276 "gram.y" { (yyval.ival) = FKCONSTR_MATCH_SIMPLE; ;} break; - case 542: -#line 4229 "gram.y" + case 550: +#line 4280 "gram.y" { (yyval.ival) = FKCONSTR_MATCH_SIMPLE; ;} break; - case 543: -#line 4235 "gram.y" + case 551: +#line 4286 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 544: -#line 4237 "gram.y" + case 552: +#line 4288 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 545: -#line 4241 "gram.y" + case 553: +#line 4292 "gram.y" { (yyval.list) = list_make2((yyvsp[(1) - (3)].ielem), (yyvsp[(3) - (3)].list)); ;} break; - case 546: -#line 4246 "gram.y" + case 554: +#line 4297 "gram.y" { (yyval.list) = list_make2((yyvsp[(1) - (6)].ielem), (yyvsp[(5) - (6)].list)); ;} break; - case 547: -#line 4252 "gram.y" + case 555: +#line 4303 "gram.y" { (yyval.node) = (yyvsp[(3) - (4)].node); ;} break; - case 548: -#line 4253 "gram.y" + case 556: +#line 4304 "gram.y" { (yyval.node) = NULL; ;} break; - case 549: -#line 4258 "gram.y" + case 557: +#line 4309 "gram.y" { KeyActions *n = palloc(sizeof(KeyActions)); @@ -33607,8 +34686,8 @@ YYLTYPE yylloc; ;} break; - case 550: -#line 4268 "gram.y" + case 558: +#line 4319 "gram.y" { KeyActions *n = palloc(sizeof(KeyActions)); @@ -33620,8 +34699,8 @@ YYLTYPE yylloc; ;} break; - case 551: -#line 4278 "gram.y" + case 559: +#line 4329 "gram.y" { KeyActions *n = palloc(sizeof(KeyActions)); @@ -33631,8 +34710,8 @@ YYLTYPE yylloc; ;} break; - case 552: -#line 4286 "gram.y" + case 560: +#line 4337 "gram.y" { KeyActions *n = palloc(sizeof(KeyActions)); @@ -33642,8 +34721,8 @@ YYLTYPE yylloc; ;} break; - case 553: -#line 4294 "gram.y" + case 561: +#line 4345 "gram.y" { KeyActions *n = palloc(sizeof(KeyActions)); @@ -33657,8 +34736,8 @@ YYLTYPE yylloc; ;} break; - case 554: -#line 4308 "gram.y" + case 562: +#line 4359 "gram.y" { if (((yyvsp[(3) - (3)].keyaction))->cols) ereport(ERROR, @@ -33670,15 +34749,15 @@ YYLTYPE yylloc; ;} break; - case 555: -#line 4320 "gram.y" + case 563: +#line 4371 "gram.y" { (yyval.keyaction) = (yyvsp[(3) - (3)].keyaction); ;} break; - case 556: -#line 4327 "gram.y" + case 564: +#line 4378 "gram.y" { KeyAction *n = palloc(sizeof(KeyAction)); @@ -33688,8 +34767,8 @@ YYLTYPE yylloc; ;} break; - case 557: -#line 4335 "gram.y" + case 565: +#line 4386 "gram.y" { KeyAction *n = palloc(sizeof(KeyAction)); @@ -33699,8 +34778,8 @@ YYLTYPE yylloc; ;} break; - case 558: -#line 4343 "gram.y" + case 566: +#line 4394 "gram.y" { KeyAction *n = palloc(sizeof(KeyAction)); @@ -33710,8 +34789,8 @@ YYLTYPE yylloc; ;} break; - case 559: -#line 4351 "gram.y" + case 567: +#line 4402 "gram.y" { KeyAction *n = palloc(sizeof(KeyAction)); @@ -33721,8 +34800,8 @@ YYLTYPE yylloc; ;} break; - case 560: -#line 4359 "gram.y" + case 568: +#line 4410 "gram.y" { KeyAction *n = palloc(sizeof(KeyAction)); @@ -33732,32 +34811,32 @@ YYLTYPE yylloc; ;} break; - case 561: -#line 4368 "gram.y" + case 569: +#line 4419 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 562: -#line 4369 "gram.y" + case 570: +#line 4420 "gram.y" { (yyval.list) = NIL; ;} break; - case 563: -#line 4373 "gram.y" + case 571: +#line 4424 "gram.y" { (yyval.partspec) = (yyvsp[(1) - (1)].partspec); ;} break; - case 564: -#line 4374 "gram.y" + case 572: +#line 4425 "gram.y" { (yyval.partspec) = NULL; ;} break; - case 565: -#line 4378 "gram.y" + case 573: +#line 4429 "gram.y" { PartitionSpec *n = makeNode(PartitionSpec); - n->strategy = (yyvsp[(3) - (6)].str); + n->strategy = parsePartitionStrategy((yyvsp[(3) - (6)].str)); n->partParams = (yyvsp[(5) - (6)].list); n->location = (yylsp[(1) - (6)]); @@ -33765,18 +34844,18 @@ YYLTYPE yylloc; ;} break; - case 566: -#line 4389 "gram.y" + case 574: +#line 4440 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].partelem)); ;} break; - case 567: -#line 4390 "gram.y" + case 575: +#line 4441 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].partelem)); ;} break; - case 568: -#line 4394 "gram.y" + case 576: +#line 4445 "gram.y" { PartitionElem *n = makeNode(PartitionElem); @@ -33789,8 +34868,8 @@ YYLTYPE yylloc; ;} break; - case 569: -#line 4405 "gram.y" + case 577: +#line 4456 "gram.y" { PartitionElem *n = makeNode(PartitionElem); @@ -33803,8 +34882,8 @@ YYLTYPE yylloc; ;} break; - case 570: -#line 4416 "gram.y" + case 578: +#line 4467 "gram.y" { PartitionElem *n = makeNode(PartitionElem); @@ -33817,78 +34896,78 @@ YYLTYPE yylloc; ;} break; - case 571: -#line 4429 "gram.y" + case 579: +#line 4480 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 572: -#line 4430 "gram.y" + case 580: +#line 4481 "gram.y" { (yyval.str) = NULL; ;} break; - case 573: -#line 4435 "gram.y" + case 581: +#line 4486 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 574: -#line 4436 "gram.y" + case 582: +#line 4487 "gram.y" { (yyval.list) = NIL; ;} break; - case 575: -#line 4437 "gram.y" + case 583: +#line 4488 "gram.y" { (yyval.list) = NIL; ;} break; - case 576: -#line 4440 "gram.y" + case 584: +#line 4491 "gram.y" { (yyval.oncommit) = ONCOMMIT_DROP; ;} break; - case 577: -#line 4441 "gram.y" + case 585: +#line 4492 "gram.y" { (yyval.oncommit) = ONCOMMIT_DELETE_ROWS; ;} break; - case 578: -#line 4442 "gram.y" + case 586: +#line 4493 "gram.y" { (yyval.oncommit) = ONCOMMIT_PRESERVE_ROWS; ;} break; - case 579: -#line 4443 "gram.y" + case 587: +#line 4494 "gram.y" { (yyval.oncommit) = ONCOMMIT_NOOP; ;} break; - case 580: -#line 4446 "gram.y" + case 588: +#line 4497 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 581: -#line 4447 "gram.y" + case 589: +#line 4498 "gram.y" { (yyval.str) = NULL; ;} break; - case 582: -#line 4450 "gram.y" + case 590: +#line 4501 "gram.y" { (yyval.str) = (yyvsp[(4) - (4)].str); ;} break; - case 583: -#line 4451 "gram.y" + case 591: +#line 4502 "gram.y" { (yyval.str) = NULL; ;} break; - case 584: -#line 4454 "gram.y" + case 592: +#line 4505 "gram.y" { (yyval.str) = (yyvsp[(3) - (3)].str); ;} break; - case 585: -#line 4474 "gram.y" + case 593: +#line 4527 "gram.y" { CreateStatsStmt *n = makeNode(CreateStatsStmt); @@ -33902,8 +34981,8 @@ YYLTYPE yylloc; ;} break; - case 586: -#line 4487 "gram.y" + case 594: +#line 4540 "gram.y" { CreateStatsStmt *n = makeNode(CreateStatsStmt); @@ -33917,18 +34996,18 @@ YYLTYPE yylloc; ;} break; - case 587: -#line 4507 "gram.y" + case 595: +#line 4560 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].selem)); ;} break; - case 588: -#line 4508 "gram.y" + case 596: +#line 4561 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].selem)); ;} break; - case 589: -#line 4512 "gram.y" + case 597: +#line 4565 "gram.y" { (yyval.selem) = makeNode(StatsElem); (yyval.selem)->name = (yyvsp[(1) - (1)].str); @@ -33936,8 +35015,8 @@ YYLTYPE yylloc; ;} break; - case 590: -#line 4518 "gram.y" + case 598: +#line 4571 "gram.y" { (yyval.selem) = makeNode(StatsElem); (yyval.selem)->name = NULL; @@ -33945,8 +35024,8 @@ YYLTYPE yylloc; ;} break; - case 591: -#line 4524 "gram.y" + case 599: +#line 4577 "gram.y" { (yyval.selem) = makeNode(StatsElem); (yyval.selem)->name = NULL; @@ -33954,8 +35033,8 @@ YYLTYPE yylloc; ;} break; - case 592: -#line 4541 "gram.y" + case 600: +#line 4594 "gram.y" { AlterStatsStmt *n = makeNode(AlterStatsStmt); @@ -33966,8 +35045,8 @@ YYLTYPE yylloc; ;} break; - case 593: -#line 4550 "gram.y" + case 601: +#line 4603 "gram.y" { AlterStatsStmt *n = makeNode(AlterStatsStmt); @@ -33978,8 +35057,8 @@ YYLTYPE yylloc; ;} break; - case 594: -#line 4572 "gram.y" + case 602: +#line 4625 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); @@ -33995,8 +35074,8 @@ YYLTYPE yylloc; ;} break; - case 595: -#line 4586 "gram.y" + case 603: +#line 4639 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); @@ -34012,8 +35091,8 @@ YYLTYPE yylloc; ;} break; - case 596: -#line 4604 "gram.y" + case 604: +#line 4657 "gram.y" { (yyval.into) = makeNode(IntoClause); (yyval.into)->rel = (yyvsp[(1) - (6)].range); @@ -34027,23 +35106,23 @@ YYLTYPE yylloc; ;} break; - case 597: -#line 4618 "gram.y" + case 605: +#line 4671 "gram.y" { (yyval.boolean) = true; ;} break; - case 598: -#line 4619 "gram.y" + case 606: +#line 4672 "gram.y" { (yyval.boolean) = false; ;} break; - case 599: -#line 4620 "gram.y" + case 607: +#line 4673 "gram.y" { (yyval.boolean) = true; ;} break; - case 600: -#line 4633 "gram.y" + case 608: +#line 4686 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); @@ -34059,8 +35138,8 @@ YYLTYPE yylloc; ;} break; - case 601: -#line 4647 "gram.y" + case 609: +#line 4700 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); @@ -34076,8 +35155,8 @@ YYLTYPE yylloc; ;} break; - case 602: -#line 4664 "gram.y" + case 610: +#line 4717 "gram.y" { (yyval.into) = makeNode(IntoClause); (yyval.into)->rel = (yyvsp[(1) - (5)].range); @@ -34091,18 +35170,18 @@ YYLTYPE yylloc; ;} break; - case 603: -#line 4677 "gram.y" + case 611: +#line 4730 "gram.y" { (yyval.ival) = RELPERSISTENCE_UNLOGGED; ;} break; - case 604: -#line 4678 "gram.y" + case 612: +#line 4731 "gram.y" { (yyval.ival) = RELPERSISTENCE_PERMANENT; ;} break; - case 605: -#line 4691 "gram.y" + case 613: +#line 4744 "gram.y" { RefreshMatViewStmt *n = makeNode(RefreshMatViewStmt); @@ -34113,8 +35192,8 @@ YYLTYPE yylloc; ;} break; - case 606: -#line 4712 "gram.y" + case 614: +#line 4765 "gram.y" { CreateSeqStmt *n = makeNode(CreateSeqStmt); @@ -34127,8 +35206,8 @@ YYLTYPE yylloc; ;} break; - case 607: -#line 4723 "gram.y" + case 615: +#line 4776 "gram.y" { CreateSeqStmt *n = makeNode(CreateSeqStmt); @@ -34141,8 +35220,8 @@ YYLTYPE yylloc; ;} break; - case 608: -#line 4737 "gram.y" + case 616: +#line 4790 "gram.y" { AlterSeqStmt *n = makeNode(AlterSeqStmt); @@ -34153,8 +35232,8 @@ YYLTYPE yylloc; ;} break; - case 609: -#line 4746 "gram.y" + case 617: +#line 4799 "gram.y" { AlterSeqStmt *n = makeNode(AlterSeqStmt); @@ -34165,147 +35244,147 @@ YYLTYPE yylloc; ;} break; - case 610: -#line 4757 "gram.y" + case 618: +#line 4810 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 611: -#line 4758 "gram.y" + case 619: +#line 4811 "gram.y" { (yyval.list) = NIL; ;} break; - case 612: -#line 4761 "gram.y" + case 620: +#line 4814 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 613: -#line 4762 "gram.y" + case 621: +#line 4815 "gram.y" { (yyval.list) = NIL; ;} break; - case 614: -#line 4765 "gram.y" + case 622: +#line 4818 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 615: -#line 4766 "gram.y" + case 623: +#line 4819 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 616: -#line 4770 "gram.y" + case 624: +#line 4823 "gram.y" { (yyval.defelt) = makeDefElem("as", (Node *) (yyvsp[(2) - (2)].typnam), (yylsp[(1) - (2)])); ;} break; - case 617: -#line 4774 "gram.y" + case 625: +#line 4827 "gram.y" { (yyval.defelt) = makeDefElem("cache", (Node *) (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 618: -#line 4778 "gram.y" + case 626: +#line 4831 "gram.y" { (yyval.defelt) = makeDefElem("cycle", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 619: -#line 4782 "gram.y" + case 627: +#line 4835 "gram.y" { (yyval.defelt) = makeDefElem("cycle", (Node *) makeBoolean(false), (yylsp[(1) - (2)])); ;} break; - case 620: -#line 4786 "gram.y" + case 628: +#line 4839 "gram.y" { (yyval.defelt) = makeDefElem("increment", (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 621: -#line 4790 "gram.y" + case 629: +#line 4843 "gram.y" { (yyval.defelt) = makeDefElem("maxvalue", (Node *) (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 622: -#line 4794 "gram.y" + case 630: +#line 4847 "gram.y" { (yyval.defelt) = makeDefElem("minvalue", (Node *) (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 623: -#line 4798 "gram.y" + case 631: +#line 4851 "gram.y" { (yyval.defelt) = makeDefElem("maxvalue", NULL, (yylsp[(1) - (2)])); ;} break; - case 624: -#line 4802 "gram.y" + case 632: +#line 4855 "gram.y" { (yyval.defelt) = makeDefElem("minvalue", NULL, (yylsp[(1) - (2)])); ;} break; - case 625: -#line 4806 "gram.y" + case 633: +#line 4859 "gram.y" { (yyval.defelt) = makeDefElem("owned_by", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 626: -#line 4810 "gram.y" + case 634: +#line 4863 "gram.y" { /* not documented, only used by pg_dump */ (yyval.defelt) = makeDefElem("sequence_name", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 627: -#line 4815 "gram.y" + case 635: +#line 4868 "gram.y" { (yyval.defelt) = makeDefElem("start", (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 628: -#line 4819 "gram.y" + case 636: +#line 4872 "gram.y" { (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[(1) - (1)])); ;} break; - case 629: -#line 4823 "gram.y" + case 637: +#line 4876 "gram.y" { (yyval.defelt) = makeDefElem("restart", (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 632: -#line 4833 "gram.y" + case 640: +#line 4886 "gram.y" { (yyval.node) = (Node *) makeFloat((yyvsp[(1) - (1)].str)); ;} break; - case 633: -#line 4834 "gram.y" + case 641: +#line 4887 "gram.y" { (yyval.node) = (Node *) makeFloat((yyvsp[(2) - (2)].str)); ;} break; - case 634: -#line 4836 "gram.y" + case 642: +#line 4889 "gram.y" { Float *f = makeFloat((yyvsp[(2) - (2)].str)); @@ -34314,23 +35393,23 @@ YYLTYPE yylloc; ;} break; - case 635: -#line 4842 "gram.y" + case 643: +#line 4895 "gram.y" { (yyval.node) = (Node *) makeInteger((yyvsp[(1) - (1)].ival)); ;} break; - case 636: -#line 4845 "gram.y" + case 644: +#line 4898 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 637: -#line 4846 "gram.y" + case 645: +#line 4899 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 638: -#line 4859 "gram.y" + case 646: +#line 4912 "gram.y" { /* * We now interpret parameterless CREATE LANGUAGE as @@ -34348,8 +35427,8 @@ YYLTYPE yylloc; ;} break; - case 639: -#line 4876 "gram.y" + case 647: +#line 4929 "gram.y" { CreatePLangStmt *n = makeNode(CreatePLangStmt); @@ -34363,58 +35442,58 @@ YYLTYPE yylloc; ;} break; - case 640: -#line 4890 "gram.y" + case 648: +#line 4943 "gram.y" { (yyval.boolean) = true; ;} break; - case 641: -#line 4891 "gram.y" + case 649: +#line 4944 "gram.y" { (yyval.boolean) = false; ;} break; - case 642: -#line 4899 "gram.y" + case 650: +#line 4952 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 643: -#line 4900 "gram.y" + case 651: +#line 4953 "gram.y" { (yyval.list) = lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)); ;} break; - case 644: -#line 4904 "gram.y" + case 652: +#line 4957 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 645: -#line 4905 "gram.y" + case 653: +#line 4958 "gram.y" { (yyval.list) = NIL; ;} break; - case 646: -#line 4909 "gram.y" + case 654: +#line 4962 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 647: -#line 4910 "gram.y" + case 655: +#line 4963 "gram.y" { (yyval.list) = NIL; ;} break; - case 648: -#line 4914 "gram.y" + case 656: +#line 4967 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 649: -#line 4915 "gram.y" + case 657: +#line 4968 "gram.y" { (yyval.list) = NIL; ;} break; - case 652: -#line 4931 "gram.y" + case 660: +#line 4984 "gram.y" { CreateTableSpaceStmt *n = makeNode(CreateTableSpaceStmt); @@ -34426,18 +35505,18 @@ YYLTYPE yylloc; ;} break; - case 653: -#line 4942 "gram.y" + case 661: +#line 4995 "gram.y" { (yyval.rolespec) = (yyvsp[(2) - (2)].rolespec); ;} break; - case 654: -#line 4943 "gram.y" + case 662: +#line 4996 "gram.y" { (yyval.rolespec) = NULL; ;} break; - case 655: -#line 4957 "gram.y" + case 663: +#line 5010 "gram.y" { DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); @@ -34447,8 +35526,8 @@ YYLTYPE yylloc; ;} break; - case 656: -#line 4965 "gram.y" + case 664: +#line 5018 "gram.y" { DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); @@ -34458,8 +35537,8 @@ YYLTYPE yylloc; ;} break; - case 657: -#line 4983 "gram.y" + case 665: +#line 5036 "gram.y" { CreateExtensionStmt *n = makeNode(CreateExtensionStmt); @@ -34470,8 +35549,8 @@ YYLTYPE yylloc; ;} break; - case 658: -#line 4992 "gram.y" + case 666: +#line 5045 "gram.y" { CreateExtensionStmt *n = makeNode(CreateExtensionStmt); @@ -34482,32 +35561,32 @@ YYLTYPE yylloc; ;} break; - case 659: -#line 5004 "gram.y" + case 667: +#line 5057 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 660: -#line 5006 "gram.y" + case 668: +#line 5059 "gram.y" { (yyval.list) = NIL; ;} break; - case 661: -#line 5011 "gram.y" + case 669: +#line 5064 "gram.y" { (yyval.defelt) = makeDefElem("schema", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 662: -#line 5015 "gram.y" + case 670: +#line 5068 "gram.y" { (yyval.defelt) = makeDefElem("new_version", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 663: -#line 5019 "gram.y" + case 671: +#line 5072 "gram.y" { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -34516,15 +35595,15 @@ YYLTYPE yylloc; ;} break; - case 664: -#line 5026 "gram.y" + case 672: +#line 5079 "gram.y" { (yyval.defelt) = makeDefElem("cascade", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 665: -#line 5038 "gram.y" + case 673: +#line 5091 "gram.y" { AlterExtensionStmt *n = makeNode(AlterExtensionStmt); @@ -34534,25 +35613,25 @@ YYLTYPE yylloc; ;} break; - case 666: -#line 5049 "gram.y" + case 674: +#line 5102 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 667: -#line 5051 "gram.y" + case 675: +#line 5104 "gram.y" { (yyval.list) = NIL; ;} break; - case 668: -#line 5056 "gram.y" + case 676: +#line 5109 "gram.y" { (yyval.defelt) = makeDefElem("new_version", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 669: -#line 5069 "gram.y" + case 677: +#line 5122 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34564,8 +35643,8 @@ YYLTYPE yylloc; ;} break; - case 670: -#line 5079 "gram.y" + case 678: +#line 5132 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34577,8 +35656,8 @@ YYLTYPE yylloc; ;} break; - case 671: -#line 5089 "gram.y" + case 679: +#line 5142 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34590,8 +35669,8 @@ YYLTYPE yylloc; ;} break; - case 672: -#line 5099 "gram.y" + case 680: +#line 5152 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34603,8 +35682,8 @@ YYLTYPE yylloc; ;} break; - case 673: -#line 5109 "gram.y" + case 681: +#line 5162 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34616,8 +35695,8 @@ YYLTYPE yylloc; ;} break; - case 674: -#line 5119 "gram.y" + case 682: +#line 5172 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34629,8 +35708,8 @@ YYLTYPE yylloc; ;} break; - case 675: -#line 5129 "gram.y" + case 683: +#line 5182 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34642,8 +35721,8 @@ YYLTYPE yylloc; ;} break; - case 676: -#line 5139 "gram.y" + case 684: +#line 5192 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34655,8 +35734,8 @@ YYLTYPE yylloc; ;} break; - case 677: -#line 5149 "gram.y" + case 685: +#line 5202 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34668,8 +35747,8 @@ YYLTYPE yylloc; ;} break; - case 678: -#line 5159 "gram.y" + case 686: +#line 5212 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34681,8 +35760,8 @@ YYLTYPE yylloc; ;} break; - case 679: -#line 5169 "gram.y" + case 687: +#line 5222 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34694,8 +35773,8 @@ YYLTYPE yylloc; ;} break; - case 680: -#line 5179 "gram.y" + case 688: +#line 5232 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34707,8 +35786,8 @@ YYLTYPE yylloc; ;} break; - case 681: -#line 5189 "gram.y" + case 689: +#line 5242 "gram.y" { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); @@ -34720,8 +35799,8 @@ YYLTYPE yylloc; ;} break; - case 682: -#line 5208 "gram.y" + case 690: +#line 5261 "gram.y" { CreateFdwStmt *n = makeNode(CreateFdwStmt); @@ -34732,48 +35811,48 @@ YYLTYPE yylloc; ;} break; - case 683: -#line 5219 "gram.y" + case 691: +#line 5272 "gram.y" { (yyval.defelt) = makeDefElem("handler", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 684: -#line 5220 "gram.y" + case 692: +#line 5273 "gram.y" { (yyval.defelt) = makeDefElem("handler", NULL, (yylsp[(1) - (2)])); ;} break; - case 685: -#line 5221 "gram.y" + case 693: +#line 5274 "gram.y" { (yyval.defelt) = makeDefElem("validator", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 686: -#line 5222 "gram.y" + case 694: +#line 5275 "gram.y" { (yyval.defelt) = makeDefElem("validator", NULL, (yylsp[(1) - (2)])); ;} break; - case 687: -#line 5226 "gram.y" + case 695: +#line 5279 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 688: -#line 5227 "gram.y" + case 696: +#line 5280 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 689: -#line 5231 "gram.y" + case 697: +#line 5284 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 690: -#line 5232 "gram.y" + case 698: +#line 5285 "gram.y" { (yyval.list) = NIL; ;} break; - case 691: -#line 5243 "gram.y" + case 699: +#line 5296 "gram.y" { AlterFdwStmt *n = makeNode(AlterFdwStmt); @@ -34784,8 +35863,8 @@ YYLTYPE yylloc; ;} break; - case 692: -#line 5252 "gram.y" + case 700: +#line 5305 "gram.y" { AlterFdwStmt *n = makeNode(AlterFdwStmt); @@ -34796,98 +35875,98 @@ YYLTYPE yylloc; ;} break; - case 693: -#line 5264 "gram.y" + case 701: +#line 5317 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 694: -#line 5265 "gram.y" + case 702: +#line 5318 "gram.y" { (yyval.list) = NIL; ;} break; - case 695: -#line 5270 "gram.y" + case 703: +#line 5323 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 696: -#line 5274 "gram.y" + case 704: +#line 5327 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 697: -#line 5281 "gram.y" + case 705: +#line 5334 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 698: -#line 5286 "gram.y" + case 706: +#line 5339 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 699: -#line 5290 "gram.y" + case 707: +#line 5343 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 700: -#line 5297 "gram.y" + case 708: +#line 5350 "gram.y" { (yyval.defelt) = (yyvsp[(1) - (1)].defelt); ;} break; - case 701: -#line 5301 "gram.y" + case 709: +#line 5354 "gram.y" { (yyval.defelt) = (yyvsp[(2) - (2)].defelt); (yyval.defelt)->defaction = DEFELEM_SET; ;} break; - case 702: -#line 5306 "gram.y" + case 710: +#line 5359 "gram.y" { (yyval.defelt) = (yyvsp[(2) - (2)].defelt); (yyval.defelt)->defaction = DEFELEM_ADD; ;} break; - case 703: -#line 5311 "gram.y" + case 711: +#line 5364 "gram.y" { (yyval.defelt) = makeDefElemExtended(NULL, (yyvsp[(2) - (2)].str), NULL, DEFELEM_DROP, (yylsp[(2) - (2)])); ;} break; - case 704: -#line 5318 "gram.y" + case 712: +#line 5371 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 705: -#line 5324 "gram.y" + case 713: +#line 5377 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 706: -#line 5329 "gram.y" + case 714: +#line 5382 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 707: -#line 5341 "gram.y" + case 715: +#line 5394 "gram.y" { CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); @@ -34901,8 +35980,8 @@ YYLTYPE yylloc; ;} break; - case 708: -#line 5354 "gram.y" + case 716: +#line 5407 "gram.y" { CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); @@ -34916,38 +35995,38 @@ YYLTYPE yylloc; ;} break; - case 709: -#line 5368 "gram.y" + case 717: +#line 5421 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 710: -#line 5369 "gram.y" + case 718: +#line 5422 "gram.y" { (yyval.str) = NULL; ;} break; - case 711: -#line 5374 "gram.y" + case 719: +#line 5427 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 712: -#line 5375 "gram.y" + case 720: +#line 5428 "gram.y" { (yyval.str) = NULL; ;} break; - case 713: -#line 5379 "gram.y" + case 721: +#line 5432 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 714: -#line 5380 "gram.y" + case 722: +#line 5433 "gram.y" { (yyval.str) = NULL; ;} break; - case 715: -#line 5391 "gram.y" + case 723: +#line 5444 "gram.y" { AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); @@ -34959,8 +36038,8 @@ YYLTYPE yylloc; ;} break; - case 716: -#line 5401 "gram.y" + case 724: +#line 5454 "gram.y" { AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); @@ -34971,8 +36050,8 @@ YYLTYPE yylloc; ;} break; - case 717: -#line 5410 "gram.y" + case 725: +#line 5463 "gram.y" { AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); @@ -34982,8 +36061,8 @@ YYLTYPE yylloc; ;} break; - case 718: -#line 5430 "gram.y" + case 726: +#line 5483 "gram.y" { CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); @@ -35004,8 +36083,8 @@ YYLTYPE yylloc; ;} break; - case 719: -#line 5451 "gram.y" + case 727: +#line 5504 "gram.y" { CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); @@ -35026,8 +36105,8 @@ YYLTYPE yylloc; ;} break; - case 720: -#line 5472 "gram.y" + case 728: +#line 5525 "gram.y" { CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); @@ -35049,8 +36128,8 @@ YYLTYPE yylloc; ;} break; - case 721: -#line 5494 "gram.y" + case 729: +#line 5547 "gram.y" { CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); @@ -35072,8 +36151,8 @@ YYLTYPE yylloc; ;} break; - case 722: -#line 5527 "gram.y" + case 730: +#line 5580 "gram.y" { ImportForeignSchemaStmt *n = makeNode(ImportForeignSchemaStmt); @@ -35087,18 +36166,18 @@ YYLTYPE yylloc; ;} break; - case 723: -#line 5541 "gram.y" + case 731: +#line 5594 "gram.y" { (yyval.ival) = FDW_IMPORT_SCHEMA_LIMIT_TO; ;} break; - case 724: -#line 5542 "gram.y" + case 732: +#line 5595 "gram.y" { (yyval.ival) = FDW_IMPORT_SCHEMA_EXCEPT; ;} break; - case 725: -#line 5547 "gram.y" + case 733: +#line 5600 "gram.y" { ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); @@ -35108,8 +36187,8 @@ YYLTYPE yylloc; ;} break; - case 726: -#line 5555 "gram.y" + case 734: +#line 5608 "gram.y" { ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); n->type = FDW_IMPORT_SCHEMA_ALL; @@ -35118,8 +36197,8 @@ YYLTYPE yylloc; ;} break; - case 727: -#line 5571 "gram.y" + case 735: +#line 5624 "gram.y" { CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); @@ -35131,8 +36210,8 @@ YYLTYPE yylloc; ;} break; - case 728: -#line 5581 "gram.y" + case 736: +#line 5634 "gram.y" { CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); @@ -35144,18 +36223,18 @@ YYLTYPE yylloc; ;} break; - case 729: -#line 5593 "gram.y" + case 737: +#line 5646 "gram.y" { (yyval.rolespec) = (yyvsp[(1) - (1)].rolespec); ;} break; - case 730: -#line 5594 "gram.y" + case 738: +#line 5647 "gram.y" { (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_USER, (yylsp[(1) - (1)])); ;} break; - case 731: -#line 5607 "gram.y" + case 739: +#line 5660 "gram.y" { DropUserMappingStmt *n = makeNode(DropUserMappingStmt); @@ -35166,8 +36245,8 @@ YYLTYPE yylloc; ;} break; - case 732: -#line 5616 "gram.y" + case 740: +#line 5669 "gram.y" { DropUserMappingStmt *n = makeNode(DropUserMappingStmt); @@ -35178,8 +36257,8 @@ YYLTYPE yylloc; ;} break; - case 733: -#line 5634 "gram.y" + case 741: +#line 5687 "gram.y" { AlterUserMappingStmt *n = makeNode(AlterUserMappingStmt); @@ -35190,8 +36269,8 @@ YYLTYPE yylloc; ;} break; - case 734: -#line 5661 "gram.y" + case 742: +#line 5714 "gram.y" { CreatePolicyStmt *n = makeNode(CreatePolicyStmt); @@ -35206,8 +36285,8 @@ YYLTYPE yylloc; ;} break; - case 735: -#line 5678 "gram.y" + case 743: +#line 5731 "gram.y" { AlterPolicyStmt *n = makeNode(AlterPolicyStmt); @@ -35220,48 +36299,48 @@ YYLTYPE yylloc; ;} break; - case 736: -#line 5691 "gram.y" + case 744: +#line 5744 "gram.y" { (yyval.node) = (yyvsp[(3) - (4)].node); ;} break; - case 737: -#line 5692 "gram.y" + case 745: +#line 5745 "gram.y" { (yyval.node) = NULL; ;} break; - case 738: -#line 5696 "gram.y" + case 746: +#line 5749 "gram.y" { (yyval.node) = (yyvsp[(4) - (5)].node); ;} break; - case 739: -#line 5697 "gram.y" + case 747: +#line 5750 "gram.y" { (yyval.node) = NULL; ;} break; - case 740: -#line 5701 "gram.y" + case 748: +#line 5754 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 741: -#line 5702 "gram.y" + case 749: +#line 5755 "gram.y" { (yyval.list) = list_make1(makeRoleSpec(ROLESPEC_PUBLIC, -1)); ;} break; - case 742: -#line 5706 "gram.y" + case 750: +#line 5759 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 743: -#line 5707 "gram.y" + case 751: +#line 5760 "gram.y" { (yyval.list) = NULL; ;} break; - case 744: -#line 5712 "gram.y" + case 752: +#line 5765 "gram.y" { if (strcmp((yyvsp[(2) - (2)].str), "permissive") == 0) (yyval.boolean) = true; @@ -35277,48 +36356,48 @@ YYLTYPE yylloc; ;} break; - case 745: -#line 5725 "gram.y" + case 753: +#line 5778 "gram.y" { (yyval.boolean) = true; ;} break; - case 746: -#line 5729 "gram.y" + case 754: +#line 5782 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 747: -#line 5730 "gram.y" + case 755: +#line 5783 "gram.y" { (yyval.str) = "all"; ;} break; - case 748: -#line 5734 "gram.y" + case 756: +#line 5787 "gram.y" { (yyval.str) = "all"; ;} break; - case 749: -#line 5735 "gram.y" + case 757: +#line 5788 "gram.y" { (yyval.str) = "select"; ;} break; - case 750: -#line 5736 "gram.y" + case 758: +#line 5789 "gram.y" { (yyval.str) = "insert"; ;} break; - case 751: -#line 5737 "gram.y" + case 759: +#line 5790 "gram.y" { (yyval.str) = "update"; ;} break; - case 752: -#line 5738 "gram.y" + case 760: +#line 5791 "gram.y" { (yyval.str) = "delete"; ;} break; - case 753: -#line 5749 "gram.y" + case 761: +#line 5802 "gram.y" { CreateAmStmt *n = makeNode(CreateAmStmt); @@ -35329,18 +36408,18 @@ YYLTYPE yylloc; ;} break; - case 754: -#line 5760 "gram.y" + case 762: +#line 5813 "gram.y" { (yyval.chr) = AMTYPE_INDEX; ;} break; - case 755: -#line 5761 "gram.y" + case 763: +#line 5814 "gram.y" { (yyval.chr) = AMTYPE_TABLE; ;} break; - case 756: -#line 5775 "gram.y" + case 764: +#line 5828 "gram.y" { CreateTrigStmt *n = makeNode(CreateTrigStmt); @@ -35363,8 +36442,8 @@ YYLTYPE yylloc; ;} break; - case 757: -#line 5799 "gram.y" + case 765: +#line 5852 "gram.y" { CreateTrigStmt *n = makeNode(CreateTrigStmt); @@ -35392,28 +36471,28 @@ YYLTYPE yylloc; ;} break; - case 758: -#line 5827 "gram.y" + case 766: +#line 5880 "gram.y" { (yyval.ival) = TRIGGER_TYPE_BEFORE; ;} break; - case 759: -#line 5828 "gram.y" + case 767: +#line 5881 "gram.y" { (yyval.ival) = TRIGGER_TYPE_AFTER; ;} break; - case 760: -#line 5829 "gram.y" + case 768: +#line 5882 "gram.y" { (yyval.ival) = TRIGGER_TYPE_INSTEAD; ;} break; - case 761: -#line 5834 "gram.y" + case 769: +#line 5887 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 762: -#line 5836 "gram.y" + case 770: +#line 5889 "gram.y" { int events1 = intVal(linitial((yyvsp[(1) - (3)].list))); int events2 = intVal(linitial((yyvsp[(3) - (3)].list))); @@ -35434,53 +36513,53 @@ YYLTYPE yylloc; ;} break; - case 763: -#line 5858 "gram.y" + case 771: +#line 5911 "gram.y" { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_INSERT), NIL); ;} break; - case 764: -#line 5860 "gram.y" + case 772: +#line 5913 "gram.y" { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_DELETE), NIL); ;} break; - case 765: -#line 5862 "gram.y" + case 773: +#line 5915 "gram.y" { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), NIL); ;} break; - case 766: -#line 5864 "gram.y" + case 774: +#line 5917 "gram.y" { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), (yyvsp[(3) - (3)].list)); ;} break; - case 767: -#line 5866 "gram.y" + case 775: +#line 5919 "gram.y" { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_TRUNCATE), NIL); ;} break; - case 768: -#line 5870 "gram.y" + case 776: +#line 5923 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 769: -#line 5871 "gram.y" + case 777: +#line 5924 "gram.y" { (yyval.list) = NIL; ;} break; - case 770: -#line 5875 "gram.y" + case 778: +#line 5928 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 771: -#line 5876 "gram.y" + case 779: +#line 5929 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 772: -#line 5881 "gram.y" + case 780: +#line 5934 "gram.y" { TriggerTransition *n = makeNode(TriggerTransition); @@ -35491,40 +36570,40 @@ YYLTYPE yylloc; ;} break; - case 773: -#line 5892 "gram.y" + case 781: +#line 5945 "gram.y" { (yyval.boolean) = true; ;} break; - case 774: -#line 5893 "gram.y" + case 782: +#line 5946 "gram.y" { (yyval.boolean) = false; ;} break; - case 775: -#line 5897 "gram.y" + case 783: +#line 5950 "gram.y" { (yyval.boolean) = true; ;} break; - case 776: -#line 5906 "gram.y" + case 784: +#line 5959 "gram.y" { (yyval.boolean) = false; ;} break; - case 777: -#line 5910 "gram.y" + case 785: +#line 5963 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 778: -#line 5915 "gram.y" + case 786: +#line 5968 "gram.y" { (yyval.boolean) = (yyvsp[(3) - (3)].boolean); ;} break; - case 779: -#line 5919 "gram.y" + case 787: +#line 5972 "gram.y" { /* * If ROW/STATEMENT not specified, default to @@ -35534,80 +36613,80 @@ YYLTYPE yylloc; ;} break; - case 782: -#line 5934 "gram.y" + case 790: +#line 5987 "gram.y" { (yyval.boolean) = true; ;} break; - case 783: -#line 5935 "gram.y" + case 791: +#line 5988 "gram.y" { (yyval.boolean) = false; ;} break; - case 784: -#line 5939 "gram.y" + case 792: +#line 5992 "gram.y" { (yyval.node) = (yyvsp[(3) - (4)].node); ;} break; - case 785: -#line 5940 "gram.y" + case 793: +#line 5993 "gram.y" { (yyval.node) = NULL; ;} break; - case 788: -#line 5949 "gram.y" + case 796: +#line 6002 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 789: -#line 5950 "gram.y" + case 797: +#line 6003 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 790: -#line 5951 "gram.y" + case 798: +#line 6004 "gram.y" { (yyval.list) = NIL; ;} break; - case 791: -#line 5956 "gram.y" + case 799: +#line 6009 "gram.y" { (yyval.node) = (Node *) makeString(psprintf("%d", (yyvsp[(1) - (1)].ival))); ;} break; - case 792: -#line 5959 "gram.y" + case 800: +#line 6012 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 793: -#line 5960 "gram.y" + case 801: +#line 6013 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 794: -#line 5961 "gram.y" + case 802: +#line 6014 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 795: -#line 5965 "gram.y" + case 803: +#line 6018 "gram.y" { (yyval.range) = (yyvsp[(2) - (2)].range); ;} break; - case 796: -#line 5966 "gram.y" + case 804: +#line 6019 "gram.y" { (yyval.range) = NULL; ;} break; - case 797: -#line 5971 "gram.y" + case 805: +#line 6024 "gram.y" { (yyval.ival) = 0; ;} break; - case 798: -#line 5973 "gram.y" + case 806: +#line 6026 "gram.y" { /* * We must complain about conflicting options. @@ -35633,38 +36712,38 @@ YYLTYPE yylloc; ;} break; - case 799: -#line 5999 "gram.y" + case 807: +#line 6052 "gram.y" { (yyval.ival) = CAS_NOT_DEFERRABLE; ;} break; - case 800: -#line 6000 "gram.y" + case 808: +#line 6053 "gram.y" { (yyval.ival) = CAS_DEFERRABLE; ;} break; - case 801: -#line 6001 "gram.y" + case 809: +#line 6054 "gram.y" { (yyval.ival) = CAS_INITIALLY_IMMEDIATE; ;} break; - case 802: -#line 6002 "gram.y" + case 810: +#line 6055 "gram.y" { (yyval.ival) = CAS_INITIALLY_DEFERRED; ;} break; - case 803: -#line 6003 "gram.y" + case 811: +#line 6056 "gram.y" { (yyval.ival) = CAS_NOT_VALID; ;} break; - case 804: -#line 6004 "gram.y" + case 812: +#line 6057 "gram.y" { (yyval.ival) = CAS_NO_INHERIT; ;} break; - case 805: -#line 6019 "gram.y" + case 813: +#line 6072 "gram.y" { CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); @@ -35676,8 +36755,8 @@ YYLTYPE yylloc; ;} break; - case 806: -#line 6031 "gram.y" + case 814: +#line 6084 "gram.y" { CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); @@ -35689,33 +36768,33 @@ YYLTYPE yylloc; ;} break; - case 807: -#line 6044 "gram.y" + case 815: +#line 6097 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 808: -#line 6046 "gram.y" + case 816: +#line 6099 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 809: -#line 6051 "gram.y" + case 817: +#line 6104 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (5)].str), (Node *) (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); ;} break; - case 810: -#line 6056 "gram.y" + case 818: +#line 6109 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 811: -#line 6058 "gram.y" + case 819: +#line 6111 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 812: -#line 6063 "gram.y" + case 820: +#line 6116 "gram.y" { AlterEventTrigStmt *n = makeNode(AlterEventTrigStmt); @@ -35725,28 +36804,28 @@ YYLTYPE yylloc; ;} break; - case 813: -#line 6073 "gram.y" + case 821: +#line 6126 "gram.y" { (yyval.chr) = TRIGGER_FIRES_ON_ORIGIN; ;} break; - case 814: -#line 6074 "gram.y" + case 822: +#line 6127 "gram.y" { (yyval.chr) = TRIGGER_FIRES_ON_REPLICA; ;} break; - case 815: -#line 6075 "gram.y" + case 823: +#line 6128 "gram.y" { (yyval.chr) = TRIGGER_FIRES_ALWAYS; ;} break; - case 816: -#line 6076 "gram.y" + case 824: +#line 6129 "gram.y" { (yyval.chr) = TRIGGER_DISABLED; ;} break; - case 817: -#line 6088 "gram.y" + case 825: +#line 6141 "gram.y" { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -35756,8 +36835,8 @@ YYLTYPE yylloc; ;} break; - case 818: -#line 6107 "gram.y" + case 826: +#line 6160 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35771,8 +36850,8 @@ YYLTYPE yylloc; ;} break; - case 819: -#line 6119 "gram.y" + case 827: +#line 6172 "gram.y" { /* old-style (pre-8.2) syntax for CREATE AGGREGATE */ DefineStmt *n = makeNode(DefineStmt); @@ -35787,8 +36866,8 @@ YYLTYPE yylloc; ;} break; - case 820: -#line 6132 "gram.y" + case 828: +#line 6185 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35801,8 +36880,8 @@ YYLTYPE yylloc; ;} break; - case 821: -#line 6143 "gram.y" + case 829: +#line 6196 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35815,8 +36894,8 @@ YYLTYPE yylloc; ;} break; - case 822: -#line 6154 "gram.y" + case 830: +#line 6207 "gram.y" { /* Shell type (identified by lack of definition) */ DefineStmt *n = makeNode(DefineStmt); @@ -35830,8 +36909,8 @@ YYLTYPE yylloc; ;} break; - case 823: -#line 6166 "gram.y" + case 831: +#line 6219 "gram.y" { CompositeTypeStmt *n = makeNode(CompositeTypeStmt); @@ -35842,8 +36921,8 @@ YYLTYPE yylloc; ;} break; - case 824: -#line 6175 "gram.y" + case 832: +#line 6228 "gram.y" { CreateEnumStmt *n = makeNode(CreateEnumStmt); @@ -35853,8 +36932,8 @@ YYLTYPE yylloc; ;} break; - case 825: -#line 6183 "gram.y" + case 833: +#line 6236 "gram.y" { CreateRangeStmt *n = makeNode(CreateRangeStmt); @@ -35864,8 +36943,8 @@ YYLTYPE yylloc; ;} break; - case 826: -#line 6191 "gram.y" + case 834: +#line 6244 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35877,8 +36956,8 @@ YYLTYPE yylloc; ;} break; - case 827: -#line 6201 "gram.y" + case 835: +#line 6254 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35890,8 +36969,8 @@ YYLTYPE yylloc; ;} break; - case 828: -#line 6211 "gram.y" + case 836: +#line 6264 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35903,8 +36982,8 @@ YYLTYPE yylloc; ;} break; - case 829: -#line 6221 "gram.y" + case 837: +#line 6274 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35916,8 +36995,8 @@ YYLTYPE yylloc; ;} break; - case 830: -#line 6231 "gram.y" + case 838: +#line 6284 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35929,8 +37008,8 @@ YYLTYPE yylloc; ;} break; - case 831: -#line 6241 "gram.y" + case 839: +#line 6294 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35943,8 +37022,8 @@ YYLTYPE yylloc; ;} break; - case 832: -#line 6252 "gram.y" + case 840: +#line 6305 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35956,8 +37035,8 @@ YYLTYPE yylloc; ;} break; - case 833: -#line 6262 "gram.y" + case 841: +#line 6315 "gram.y" { DefineStmt *n = makeNode(DefineStmt); @@ -35970,109 +37049,109 @@ YYLTYPE yylloc; ;} break; - case 834: -#line 6274 "gram.y" + case 842: +#line 6327 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 835: -#line 6277 "gram.y" + case 843: +#line 6330 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 836: -#line 6278 "gram.y" + case 844: +#line 6331 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 837: -#line 6282 "gram.y" + case 845: +#line 6335 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 838: -#line 6286 "gram.y" + case 846: +#line 6339 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (1)].str), NULL, (yylsp[(1) - (1)])); ;} break; - case 839: -#line 6292 "gram.y" + case 847: +#line 6345 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].typnam); ;} break; - case 840: -#line 6293 "gram.y" + case 848: +#line 6346 "gram.y" { (yyval.node) = (Node *) makeString(pstrdup((yyvsp[(1) - (1)].keyword))); ;} break; - case 841: -#line 6294 "gram.y" + case 849: +#line 6347 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].list); ;} break; - case 842: -#line 6295 "gram.y" + case 850: +#line 6348 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].node); ;} break; - case 843: -#line 6296 "gram.y" + case 851: +#line 6349 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 844: -#line 6297 "gram.y" + case 852: +#line 6350 "gram.y" { (yyval.node) = (Node *) makeString(pstrdup((yyvsp[(1) - (1)].keyword))); ;} break; - case 845: -#line 6300 "gram.y" + case 853: +#line 6353 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 846: -#line 6303 "gram.y" + case 854: +#line 6356 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 847: -#line 6304 "gram.y" + case 855: +#line 6357 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 848: -#line 6313 "gram.y" + case 856: +#line 6366 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 849: -#line 6319 "gram.y" + case 857: +#line 6372 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 850: -#line 6320 "gram.y" + case 858: +#line 6373 "gram.y" { (yyval.list) = NIL; ;} break; - case 851: -#line 6324 "gram.y" + case 859: +#line 6377 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 852: -#line 6326 "gram.y" + case 860: +#line 6379 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 853: -#line 6337 "gram.y" + case 861: +#line 6390 "gram.y" { AlterEnumStmt *n = makeNode(AlterEnumStmt); @@ -36086,8 +37165,8 @@ YYLTYPE yylloc; ;} break; - case 854: -#line 6349 "gram.y" + case 862: +#line 6402 "gram.y" { AlterEnumStmt *n = makeNode(AlterEnumStmt); @@ -36101,8 +37180,8 @@ YYLTYPE yylloc; ;} break; - case 855: -#line 6361 "gram.y" + case 863: +#line 6414 "gram.y" { AlterEnumStmt *n = makeNode(AlterEnumStmt); @@ -36116,8 +37195,8 @@ YYLTYPE yylloc; ;} break; - case 856: -#line 6373 "gram.y" + case 864: +#line 6426 "gram.y" { AlterEnumStmt *n = makeNode(AlterEnumStmt); @@ -36131,18 +37210,18 @@ YYLTYPE yylloc; ;} break; - case 857: -#line 6386 "gram.y" + case 865: +#line 6439 "gram.y" { (yyval.boolean) = true; ;} break; - case 858: -#line 6387 "gram.y" + case 866: +#line 6440 "gram.y" { (yyval.boolean) = false; ;} break; - case 859: -#line 6405 "gram.y" + case 867: +#line 6458 "gram.y" { CreateOpClassStmt *n = makeNode(CreateOpClassStmt); @@ -36156,18 +37235,18 @@ YYLTYPE yylloc; ;} break; - case 860: -#line 6419 "gram.y" + case 868: +#line 6472 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 861: -#line 6420 "gram.y" + case 869: +#line 6473 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 862: -#line 6425 "gram.y" + case 870: +#line 6478 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); ObjectWithArgs *owa = makeNode(ObjectWithArgs); @@ -36182,8 +37261,8 @@ YYLTYPE yylloc; ;} break; - case 863: -#line 6439 "gram.y" + case 871: +#line 6492 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36195,8 +37274,8 @@ YYLTYPE yylloc; ;} break; - case 864: -#line 6449 "gram.y" + case 872: +#line 6502 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36207,8 +37286,8 @@ YYLTYPE yylloc; ;} break; - case 865: -#line 6458 "gram.y" + case 873: +#line 6511 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36220,8 +37299,8 @@ YYLTYPE yylloc; ;} break; - case 866: -#line 6468 "gram.y" + case 874: +#line 6521 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36231,43 +37310,43 @@ YYLTYPE yylloc; ;} break; - case 867: -#line 6477 "gram.y" + case 875: +#line 6530 "gram.y" { (yyval.boolean) = true; ;} break; - case 868: -#line 6478 "gram.y" + case 876: +#line 6531 "gram.y" { (yyval.boolean) = false; ;} break; - case 869: -#line 6481 "gram.y" + case 877: +#line 6534 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 870: -#line 6482 "gram.y" + case 878: +#line 6535 "gram.y" { (yyval.list) = NIL; ;} break; - case 871: -#line 6485 "gram.y" + case 879: +#line 6538 "gram.y" { (yyval.list) = NIL; ;} break; - case 872: -#line 6486 "gram.y" + case 880: +#line 6539 "gram.y" { (yyval.list) = (yyvsp[(4) - (4)].list); ;} break; - case 873: -#line 6487 "gram.y" + case 881: +#line 6540 "gram.y" { (yyval.list) = NIL; ;} break; - case 874: -#line 6491 "gram.y" + case 882: +#line 6544 "gram.y" { /* * RECHECK no longer does anything in opclass definitions, @@ -36283,13 +37362,13 @@ YYLTYPE yylloc; ;} break; - case 875: -#line 6504 "gram.y" + case 883: +#line 6557 "gram.y" { (yyval.boolean) = false; ;} break; - case 876: -#line 6510 "gram.y" + case 884: +#line 6563 "gram.y" { CreateOpFamilyStmt *n = makeNode(CreateOpFamilyStmt); @@ -36299,8 +37378,8 @@ YYLTYPE yylloc; ;} break; - case 877: -#line 6521 "gram.y" + case 885: +#line 6574 "gram.y" { AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); @@ -36312,8 +37391,8 @@ YYLTYPE yylloc; ;} break; - case 878: -#line 6531 "gram.y" + case 886: +#line 6584 "gram.y" { AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); @@ -36325,18 +37404,18 @@ YYLTYPE yylloc; ;} break; - case 879: -#line 6543 "gram.y" + case 887: +#line 6596 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 880: -#line 6544 "gram.y" + case 888: +#line 6597 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 881: -#line 6549 "gram.y" + case 889: +#line 6602 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36347,8 +37426,8 @@ YYLTYPE yylloc; ;} break; - case 882: -#line 6558 "gram.y" + case 890: +#line 6611 "gram.y" { CreateOpClassItem *n = makeNode(CreateOpClassItem); @@ -36359,8 +37438,8 @@ YYLTYPE yylloc; ;} break; - case 883: -#line 6571 "gram.y" + case 891: +#line 6624 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36373,8 +37452,8 @@ YYLTYPE yylloc; ;} break; - case 884: -#line 6582 "gram.y" + case 892: +#line 6635 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36387,8 +37466,8 @@ YYLTYPE yylloc; ;} break; - case 885: -#line 6596 "gram.y" + case 893: +#line 6649 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36401,8 +37480,8 @@ YYLTYPE yylloc; ;} break; - case 886: -#line 6607 "gram.y" + case 894: +#line 6660 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36415,8 +37494,8 @@ YYLTYPE yylloc; ;} break; - case 887: -#line 6630 "gram.y" + case 895: +#line 6683 "gram.y" { DropOwnedStmt *n = makeNode(DropOwnedStmt); @@ -36426,8 +37505,8 @@ YYLTYPE yylloc; ;} break; - case 888: -#line 6641 "gram.y" + case 896: +#line 6694 "gram.y" { ReassignOwnedStmt *n = makeNode(ReassignOwnedStmt); @@ -36437,8 +37516,8 @@ YYLTYPE yylloc; ;} break; - case 889: -#line 6660 "gram.y" + case 897: +#line 6713 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36451,8 +37530,8 @@ YYLTYPE yylloc; ;} break; - case 890: -#line 6671 "gram.y" + case 898: +#line 6724 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36465,8 +37544,8 @@ YYLTYPE yylloc; ;} break; - case 891: -#line 6682 "gram.y" + case 899: +#line 6735 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36479,8 +37558,8 @@ YYLTYPE yylloc; ;} break; - case 892: -#line 6693 "gram.y" + case 900: +#line 6746 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36493,8 +37572,8 @@ YYLTYPE yylloc; ;} break; - case 893: -#line 6704 "gram.y" + case 901: +#line 6757 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36507,8 +37586,8 @@ YYLTYPE yylloc; ;} break; - case 894: -#line 6715 "gram.y" + case 902: +#line 6768 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36521,8 +37600,8 @@ YYLTYPE yylloc; ;} break; - case 895: -#line 6726 "gram.y" + case 903: +#line 6779 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36535,8 +37614,8 @@ YYLTYPE yylloc; ;} break; - case 896: -#line 6737 "gram.y" + case 904: +#line 6790 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36549,8 +37628,8 @@ YYLTYPE yylloc; ;} break; - case 897: -#line 6748 "gram.y" + case 905: +#line 6801 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36563,8 +37642,8 @@ YYLTYPE yylloc; ;} break; - case 898: -#line 6759 "gram.y" + case 906: +#line 6812 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36577,8 +37656,8 @@ YYLTYPE yylloc; ;} break; - case 899: -#line 6770 "gram.y" + case 907: +#line 6823 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36591,8 +37670,8 @@ YYLTYPE yylloc; ;} break; - case 900: -#line 6781 "gram.y" + case 908: +#line 6834 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -36605,193 +37684,193 @@ YYLTYPE yylloc; ;} break; - case 901: -#line 6795 "gram.y" + case 909: +#line 6848 "gram.y" { (yyval.objtype) = OBJECT_TABLE; ;} break; - case 902: -#line 6796 "gram.y" + case 910: +#line 6849 "gram.y" { (yyval.objtype) = OBJECT_SEQUENCE; ;} break; - case 903: -#line 6797 "gram.y" + case 911: +#line 6850 "gram.y" { (yyval.objtype) = OBJECT_VIEW; ;} break; - case 904: -#line 6798 "gram.y" + case 912: +#line 6851 "gram.y" { (yyval.objtype) = OBJECT_MATVIEW; ;} break; - case 905: -#line 6799 "gram.y" + case 913: +#line 6852 "gram.y" { (yyval.objtype) = OBJECT_INDEX; ;} break; - case 906: -#line 6800 "gram.y" + case 914: +#line 6853 "gram.y" { (yyval.objtype) = OBJECT_FOREIGN_TABLE; ;} break; - case 907: -#line 6801 "gram.y" + case 915: +#line 6854 "gram.y" { (yyval.objtype) = OBJECT_COLLATION; ;} break; - case 908: -#line 6802 "gram.y" + case 916: +#line 6855 "gram.y" { (yyval.objtype) = OBJECT_CONVERSION; ;} break; - case 909: -#line 6803 "gram.y" + case 917: +#line 6856 "gram.y" { (yyval.objtype) = OBJECT_STATISTIC_EXT; ;} break; - case 910: -#line 6804 "gram.y" + case 918: +#line 6857 "gram.y" { (yyval.objtype) = OBJECT_TSPARSER; ;} break; - case 911: -#line 6805 "gram.y" + case 919: +#line 6858 "gram.y" { (yyval.objtype) = OBJECT_TSDICTIONARY; ;} break; - case 912: -#line 6806 "gram.y" + case 920: +#line 6859 "gram.y" { (yyval.objtype) = OBJECT_TSTEMPLATE; ;} break; - case 913: -#line 6807 "gram.y" + case 921: +#line 6860 "gram.y" { (yyval.objtype) = OBJECT_TSCONFIGURATION; ;} break; - case 914: -#line 6817 "gram.y" + case 922: +#line 6870 "gram.y" { (yyval.objtype) = (yyvsp[(1) - (1)].objtype); ;} break; - case 915: -#line 6818 "gram.y" + case 923: +#line 6871 "gram.y" { (yyval.objtype) = OBJECT_DATABASE; ;} break; - case 916: -#line 6819 "gram.y" + case 924: +#line 6872 "gram.y" { (yyval.objtype) = OBJECT_ROLE; ;} break; - case 917: -#line 6820 "gram.y" + case 925: +#line 6873 "gram.y" { (yyval.objtype) = OBJECT_SUBSCRIPTION; ;} break; - case 918: -#line 6821 "gram.y" + case 926: +#line 6874 "gram.y" { (yyval.objtype) = OBJECT_TABLESPACE; ;} break; - case 919: -#line 6825 "gram.y" + case 927: +#line 6878 "gram.y" { (yyval.objtype) = OBJECT_ACCESS_METHOD; ;} break; - case 920: -#line 6826 "gram.y" + case 928: +#line 6879 "gram.y" { (yyval.objtype) = OBJECT_EVENT_TRIGGER; ;} break; - case 921: -#line 6827 "gram.y" + case 929: +#line 6880 "gram.y" { (yyval.objtype) = OBJECT_EXTENSION; ;} break; - case 922: -#line 6828 "gram.y" + case 930: +#line 6881 "gram.y" { (yyval.objtype) = OBJECT_FDW; ;} break; - case 923: -#line 6829 "gram.y" + case 931: +#line 6882 "gram.y" { (yyval.objtype) = OBJECT_LANGUAGE; ;} break; - case 924: -#line 6830 "gram.y" + case 932: +#line 6883 "gram.y" { (yyval.objtype) = OBJECT_PUBLICATION; ;} break; - case 925: -#line 6831 "gram.y" + case 933: +#line 6884 "gram.y" { (yyval.objtype) = OBJECT_SCHEMA; ;} break; - case 926: -#line 6832 "gram.y" + case 934: +#line 6885 "gram.y" { (yyval.objtype) = OBJECT_FOREIGN_SERVER; ;} break; - case 927: -#line 6837 "gram.y" + case 935: +#line 6890 "gram.y" { (yyval.objtype) = OBJECT_POLICY; ;} break; - case 928: -#line 6838 "gram.y" + case 936: +#line 6891 "gram.y" { (yyval.objtype) = OBJECT_RULE; ;} break; - case 929: -#line 6839 "gram.y" + case 937: +#line 6892 "gram.y" { (yyval.objtype) = OBJECT_TRIGGER; ;} break; - case 930: -#line 6843 "gram.y" + case 938: +#line 6896 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 931: -#line 6844 "gram.y" + case 939: +#line 6897 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 932: -#line 6847 "gram.y" + case 940: +#line 6900 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 933: -#line 6848 "gram.y" + case 941: +#line 6901 "gram.y" { (yyval.list) = lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)); ;} break; - case 934: -#line 6852 "gram.y" + case 942: +#line 6905 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(2) - (2)].str))); ;} break; - case 935: -#line 6854 "gram.y" + case 943: +#line 6907 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 936: -#line 6858 "gram.y" + case 944: +#line 6911 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].typnam)); ;} break; - case 937: -#line 6859 "gram.y" + case 945: +#line 6912 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typnam)); ;} break; - case 938: -#line 6871 "gram.y" + case 946: +#line 6924 "gram.y" { TruncateStmt *n = makeNode(TruncateStmt); @@ -36802,23 +37881,23 @@ YYLTYPE yylloc; ;} break; - case 939: -#line 6882 "gram.y" + case 947: +#line 6935 "gram.y" { (yyval.boolean) = false; ;} break; - case 940: -#line 6883 "gram.y" + case 948: +#line 6936 "gram.y" { (yyval.boolean) = true; ;} break; - case 941: -#line 6884 "gram.y" + case 949: +#line 6937 "gram.y" { (yyval.boolean) = false; ;} break; - case 942: -#line 6895 "gram.y" + case 950: +#line 6948 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36829,8 +37908,8 @@ YYLTYPE yylloc; ;} break; - case 943: -#line 6904 "gram.y" + case 951: +#line 6957 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36841,8 +37920,8 @@ YYLTYPE yylloc; ;} break; - case 944: -#line 6913 "gram.y" + case 952: +#line 6966 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36853,8 +37932,8 @@ YYLTYPE yylloc; ;} break; - case 945: -#line 6922 "gram.y" + case 953: +#line 6975 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36865,8 +37944,8 @@ YYLTYPE yylloc; ;} break; - case 946: -#line 6931 "gram.y" + case 954: +#line 6984 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36877,8 +37956,8 @@ YYLTYPE yylloc; ;} break; - case 947: -#line 6940 "gram.y" + case 955: +#line 6993 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36889,8 +37968,8 @@ YYLTYPE yylloc; ;} break; - case 948: -#line 6949 "gram.y" + case 956: +#line 7002 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36901,8 +37980,8 @@ YYLTYPE yylloc; ;} break; - case 949: -#line 6958 "gram.y" + case 957: +#line 7011 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36913,8 +37992,8 @@ YYLTYPE yylloc; ;} break; - case 950: -#line 6967 "gram.y" + case 958: +#line 7020 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36925,8 +38004,8 @@ YYLTYPE yylloc; ;} break; - case 951: -#line 6976 "gram.y" + case 959: +#line 7029 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36942,8 +38021,8 @@ YYLTYPE yylloc; ;} break; - case 952: -#line 6990 "gram.y" + case 960: +#line 7043 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36954,8 +38033,8 @@ YYLTYPE yylloc; ;} break; - case 953: -#line 6999 "gram.y" + case 961: +#line 7052 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36966,8 +38045,8 @@ YYLTYPE yylloc; ;} break; - case 954: -#line 7008 "gram.y" + case 962: +#line 7061 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36978,8 +38057,8 @@ YYLTYPE yylloc; ;} break; - case 955: -#line 7017 "gram.y" + case 963: +#line 7070 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -36990,8 +38069,8 @@ YYLTYPE yylloc; ;} break; - case 956: -#line 7026 "gram.y" + case 964: +#line 7079 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -37002,8 +38081,8 @@ YYLTYPE yylloc; ;} break; - case 957: -#line 7035 "gram.y" + case 965: +#line 7088 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -37014,8 +38093,8 @@ YYLTYPE yylloc; ;} break; - case 958: -#line 7044 "gram.y" + case 966: +#line 7097 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -37026,8 +38105,8 @@ YYLTYPE yylloc; ;} break; - case 959: -#line 7053 "gram.y" + case 967: +#line 7106 "gram.y" { CommentStmt *n = makeNode(CommentStmt); @@ -37038,18 +38117,18 @@ YYLTYPE yylloc; ;} break; - case 960: -#line 7064 "gram.y" + case 968: +#line 7117 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 961: -#line 7065 "gram.y" + case 969: +#line 7118 "gram.y" { (yyval.str) = NULL; ;} break; - case 962: -#line 7081 "gram.y" + case 970: +#line 7134 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37061,8 +38140,8 @@ YYLTYPE yylloc; ;} break; - case 963: -#line 7092 "gram.y" + case 971: +#line 7145 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37074,8 +38153,8 @@ YYLTYPE yylloc; ;} break; - case 964: -#line 7103 "gram.y" + case 972: +#line 7156 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37087,8 +38166,8 @@ YYLTYPE yylloc; ;} break; - case 965: -#line 7114 "gram.y" + case 973: +#line 7167 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37100,8 +38179,8 @@ YYLTYPE yylloc; ;} break; - case 966: -#line 7125 "gram.y" + case 974: +#line 7178 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37113,8 +38192,8 @@ YYLTYPE yylloc; ;} break; - case 967: -#line 7136 "gram.y" + case 975: +#line 7189 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37126,8 +38205,8 @@ YYLTYPE yylloc; ;} break; - case 968: -#line 7147 "gram.y" + case 976: +#line 7200 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37139,8 +38218,8 @@ YYLTYPE yylloc; ;} break; - case 969: -#line 7158 "gram.y" + case 977: +#line 7211 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37152,8 +38231,8 @@ YYLTYPE yylloc; ;} break; - case 970: -#line 7169 "gram.y" + case 978: +#line 7222 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37165,8 +38244,8 @@ YYLTYPE yylloc; ;} break; - case 971: -#line 7180 "gram.y" + case 979: +#line 7233 "gram.y" { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -37178,28 +38257,28 @@ YYLTYPE yylloc; ;} break; - case 972: -#line 7191 "gram.y" + case 980: +#line 7244 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 973: -#line 7192 "gram.y" + case 981: +#line 7245 "gram.y" { (yyval.str) = NULL; ;} break; - case 974: -#line 7195 "gram.y" + case 982: +#line 7248 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 975: -#line 7196 "gram.y" + case 983: +#line 7249 "gram.y" { (yyval.str) = NULL; ;} break; - case 976: -#line 7207 "gram.y" + case 984: +#line 7260 "gram.y" { FetchStmt *n = (FetchStmt *) (yyvsp[(2) - (2)].node); @@ -37208,8 +38287,8 @@ YYLTYPE yylloc; ;} break; - case 977: -#line 7214 "gram.y" + case 985: +#line 7267 "gram.y" { FetchStmt *n = (FetchStmt *) (yyvsp[(2) - (2)].node); @@ -37218,8 +38297,8 @@ YYLTYPE yylloc; ;} break; - case 978: -#line 7223 "gram.y" + case 986: +#line 7276 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37230,8 +38309,8 @@ YYLTYPE yylloc; ;} break; - case 979: -#line 7232 "gram.y" + case 987: +#line 7285 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37242,8 +38321,8 @@ YYLTYPE yylloc; ;} break; - case 980: -#line 7241 "gram.y" + case 988: +#line 7294 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37254,8 +38333,8 @@ YYLTYPE yylloc; ;} break; - case 981: -#line 7250 "gram.y" + case 989: +#line 7303 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37266,8 +38345,8 @@ YYLTYPE yylloc; ;} break; - case 982: -#line 7259 "gram.y" + case 990: +#line 7312 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37278,8 +38357,8 @@ YYLTYPE yylloc; ;} break; - case 983: -#line 7268 "gram.y" + case 991: +#line 7321 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37290,8 +38369,8 @@ YYLTYPE yylloc; ;} break; - case 984: -#line 7277 "gram.y" + case 992: +#line 7330 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37302,8 +38381,8 @@ YYLTYPE yylloc; ;} break; - case 985: -#line 7286 "gram.y" + case 993: +#line 7339 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37314,8 +38393,8 @@ YYLTYPE yylloc; ;} break; - case 986: -#line 7295 "gram.y" + case 994: +#line 7348 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37326,8 +38405,8 @@ YYLTYPE yylloc; ;} break; - case 987: -#line 7304 "gram.y" + case 995: +#line 7357 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37338,8 +38417,8 @@ YYLTYPE yylloc; ;} break; - case 988: -#line 7313 "gram.y" + case 996: +#line 7366 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37350,8 +38429,8 @@ YYLTYPE yylloc; ;} break; - case 989: -#line 7322 "gram.y" + case 997: +#line 7375 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37362,8 +38441,8 @@ YYLTYPE yylloc; ;} break; - case 990: -#line 7331 "gram.y" + case 998: +#line 7384 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37374,8 +38453,8 @@ YYLTYPE yylloc; ;} break; - case 991: -#line 7340 "gram.y" + case 999: +#line 7393 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37386,8 +38465,8 @@ YYLTYPE yylloc; ;} break; - case 992: -#line 7349 "gram.y" + case 1000: +#line 7402 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37398,8 +38477,8 @@ YYLTYPE yylloc; ;} break; - case 993: -#line 7358 "gram.y" + case 1001: +#line 7411 "gram.y" { FetchStmt *n = makeNode(FetchStmt); @@ -37410,8 +38489,8 @@ YYLTYPE yylloc; ;} break; - case 998: -#line 7385 "gram.y" + case 1006: +#line 7438 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -37427,8 +38506,8 @@ YYLTYPE yylloc; ;} break; - case 999: -#line 7403 "gram.y" + case 1007: +#line 7456 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -37445,8 +38524,8 @@ YYLTYPE yylloc; ;} break; - case 1000: -#line 7419 "gram.y" + case 1008: +#line 7472 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -37463,23 +38542,23 @@ YYLTYPE yylloc; ;} break; - case 1001: -#line 7446 "gram.y" + case 1009: +#line 7499 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1002: -#line 7448 "gram.y" + case 1010: +#line 7501 "gram.y" { (yyval.list) = NIL; ;} break; - case 1003: -#line 7450 "gram.y" + case 1011: +#line 7503 "gram.y" { (yyval.list) = NIL; ;} break; - case 1004: -#line 7452 "gram.y" + case 1012: +#line 7505 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37489,8 +38568,8 @@ YYLTYPE yylloc; ;} break; - case 1005: -#line 7460 "gram.y" + case 1013: +#line 7513 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37500,18 +38579,18 @@ YYLTYPE yylloc; ;} break; - case 1006: -#line 7469 "gram.y" + case 1014: +#line 7522 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].accesspriv)); ;} break; - case 1007: -#line 7470 "gram.y" + case 1015: +#line 7523 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].accesspriv)); ;} break; - case 1008: -#line 7474 "gram.y" + case 1016: +#line 7527 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37521,8 +38600,8 @@ YYLTYPE yylloc; ;} break; - case 1009: -#line 7482 "gram.y" + case 1017: +#line 7535 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37532,8 +38611,8 @@ YYLTYPE yylloc; ;} break; - case 1010: -#line 7490 "gram.y" + case 1018: +#line 7543 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37543,8 +38622,8 @@ YYLTYPE yylloc; ;} break; - case 1011: -#line 7498 "gram.y" + case 1019: +#line 7551 "gram.y" { AccessPriv *n = makeNode(AccessPriv); n->priv_name = pstrdup("alter system"); @@ -37553,8 +38632,8 @@ YYLTYPE yylloc; ;} break; - case 1012: -#line 7505 "gram.y" + case 1020: +#line 7558 "gram.y" { AccessPriv *n = makeNode(AccessPriv); @@ -37564,36 +38643,36 @@ YYLTYPE yylloc; ;} break; - case 1013: -#line 7516 "gram.y" + case 1021: +#line 7569 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1014: -#line 7520 "gram.y" + case 1022: +#line 7573 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 1015: -#line 7527 "gram.y" + case 1023: +#line 7580 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1016: -#line 7531 "gram.y" + case 1024: +#line 7584 "gram.y" { (yyval.str) = psprintf("%s.%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)); ;} break; - case 1017: -#line 7542 "gram.y" + case 1025: +#line 7595 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37604,8 +38683,8 @@ YYLTYPE yylloc; ;} break; - case 1018: -#line 7551 "gram.y" + case 1026: +#line 7604 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37616,8 +38695,8 @@ YYLTYPE yylloc; ;} break; - case 1019: -#line 7560 "gram.y" + case 1027: +#line 7613 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37628,8 +38707,8 @@ YYLTYPE yylloc; ;} break; - case 1020: -#line 7569 "gram.y" + case 1028: +#line 7622 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37640,8 +38719,8 @@ YYLTYPE yylloc; ;} break; - case 1021: -#line 7578 "gram.y" + case 1029: +#line 7631 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37652,8 +38731,8 @@ YYLTYPE yylloc; ;} break; - case 1022: -#line 7587 "gram.y" + case 1030: +#line 7640 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37664,8 +38743,8 @@ YYLTYPE yylloc; ;} break; - case 1023: -#line 7596 "gram.y" + case 1031: +#line 7649 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37676,8 +38755,8 @@ YYLTYPE yylloc; ;} break; - case 1024: -#line 7605 "gram.y" + case 1032: +#line 7658 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37688,8 +38767,8 @@ YYLTYPE yylloc; ;} break; - case 1025: -#line 7614 "gram.y" + case 1033: +#line 7667 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37700,8 +38779,8 @@ YYLTYPE yylloc; ;} break; - case 1026: -#line 7623 "gram.y" + case 1034: +#line 7676 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37712,8 +38791,8 @@ YYLTYPE yylloc; ;} break; - case 1027: -#line 7632 "gram.y" + case 1035: +#line 7685 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37724,8 +38803,8 @@ YYLTYPE yylloc; ;} break; - case 1028: -#line 7641 "gram.y" + case 1036: +#line 7694 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37736,8 +38815,8 @@ YYLTYPE yylloc; ;} break; - case 1029: -#line 7650 "gram.y" + case 1037: +#line 7703 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); n->targtype = ACL_TARGET_OBJECT; @@ -37747,8 +38826,8 @@ YYLTYPE yylloc; ;} break; - case 1030: -#line 7658 "gram.y" + case 1038: +#line 7711 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37759,8 +38838,8 @@ YYLTYPE yylloc; ;} break; - case 1031: -#line 7667 "gram.y" + case 1039: +#line 7720 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37771,8 +38850,8 @@ YYLTYPE yylloc; ;} break; - case 1032: -#line 7676 "gram.y" + case 1040: +#line 7729 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37783,8 +38862,8 @@ YYLTYPE yylloc; ;} break; - case 1033: -#line 7685 "gram.y" + case 1041: +#line 7738 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37795,8 +38874,8 @@ YYLTYPE yylloc; ;} break; - case 1034: -#line 7694 "gram.y" + case 1042: +#line 7747 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37807,8 +38886,8 @@ YYLTYPE yylloc; ;} break; - case 1035: -#line 7703 "gram.y" + case 1043: +#line 7756 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37819,8 +38898,8 @@ YYLTYPE yylloc; ;} break; - case 1036: -#line 7712 "gram.y" + case 1044: +#line 7765 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37831,8 +38910,8 @@ YYLTYPE yylloc; ;} break; - case 1037: -#line 7721 "gram.y" + case 1045: +#line 7774 "gram.y" { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); @@ -37843,100 +38922,141 @@ YYLTYPE yylloc; ;} break; - case 1038: -#line 7733 "gram.y" + case 1046: +#line 7786 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].rolespec)); ;} break; - case 1039: -#line 7734 "gram.y" + case 1047: +#line 7787 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].rolespec)); ;} break; - case 1040: -#line 7738 "gram.y" + case 1048: +#line 7791 "gram.y" { (yyval.rolespec) = (yyvsp[(1) - (1)].rolespec); ;} break; - case 1041: -#line 7739 "gram.y" + case 1049: +#line 7792 "gram.y" { (yyval.rolespec) = (yyvsp[(2) - (2)].rolespec); ;} break; - case 1042: -#line 7744 "gram.y" + case 1050: +#line 7797 "gram.y" { (yyval.boolean) = true; ;} break; - case 1043: -#line 7745 "gram.y" + case 1051: +#line 7798 "gram.y" { (yyval.boolean) = false; ;} break; - case 1044: -#line 7756 "gram.y" + case 1052: +#line 7809 "gram.y" { GrantRoleStmt *n = makeNode(GrantRoleStmt); n->is_grant = true; - n->granted_roles = (yyvsp[(2) - (6)].list); - n->grantee_roles = (yyvsp[(4) - (6)].list); - n->admin_opt = (yyvsp[(5) - (6)].boolean); - n->grantor = (yyvsp[(6) - (6)].rolespec); + n->granted_roles = (yyvsp[(2) - (5)].list); + n->grantee_roles = (yyvsp[(4) - (5)].list); + n->opt = NIL; + n->grantor = (yyvsp[(5) - (5)].rolespec); (yyval.node) = (Node *) n; ;} break; - case 1045: -#line 7770 "gram.y" + case 1053: +#line 7820 "gram.y" + { + GrantRoleStmt *n = makeNode(GrantRoleStmt); + + n->is_grant = true; + n->granted_roles = (yyvsp[(2) - (7)].list); + n->grantee_roles = (yyvsp[(4) - (7)].list); + n->opt = (yyvsp[(6) - (7)].list); + n->grantor = (yyvsp[(7) - (7)].rolespec); + (yyval.node) = (Node *) n; + ;} + break; + + case 1054: +#line 7834 "gram.y" { GrantRoleStmt *n = makeNode(GrantRoleStmt); n->is_grant = false; - n->admin_opt = false; + n->opt = NIL; n->granted_roles = (yyvsp[(2) - (6)].list); n->grantee_roles = (yyvsp[(4) - (6)].list); + n->grantor = (yyvsp[(5) - (6)].rolespec); n->behavior = (yyvsp[(6) - (6)].dbehavior); (yyval.node) = (Node *) n; ;} break; - case 1046: -#line 7781 "gram.y" + case 1055: +#line 7846 "gram.y" { GrantRoleStmt *n = makeNode(GrantRoleStmt); + DefElem *opt; + opt = makeDefElem(pstrdup((yyvsp[(2) - (9)].str)), + (Node *) makeBoolean(false), (yylsp[(2) - (9)])); n->is_grant = false; - n->admin_opt = true; + n->opt = list_make1(opt); n->granted_roles = (yyvsp[(5) - (9)].list); n->grantee_roles = (yyvsp[(7) - (9)].list); + n->grantor = (yyvsp[(8) - (9)].rolespec); n->behavior = (yyvsp[(9) - (9)].dbehavior); (yyval.node) = (Node *) n; ;} break; - case 1047: -#line 7793 "gram.y" - { (yyval.boolean) = true; ;} + case 1056: +#line 7863 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 1048: -#line 7794 "gram.y" - { (yyval.boolean) = false; ;} + case 1057: +#line 7864 "gram.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1049: -#line 7797 "gram.y" + case 1058: +#line 7869 "gram.y" + { + (yyval.defelt) = makeDefElem(pstrdup((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); + ;} + break; + + case 1059: +#line 7875 "gram.y" + { (yyval.node) = (Node *) makeBoolean(true); ;} + break; + + case 1060: +#line 7876 "gram.y" + { (yyval.node) = (Node *) makeBoolean(true); ;} + break; + + case 1061: +#line 7877 "gram.y" + { (yyval.node) = (Node *) makeBoolean(false); ;} + break; + + case 1062: +#line 7880 "gram.y" { (yyval.rolespec) = (yyvsp[(3) - (3)].rolespec); ;} break; - case 1050: -#line 7798 "gram.y" + case 1063: +#line 7881 "gram.y" { (yyval.rolespec) = NULL; ;} break; - case 1051: -#line 7809 "gram.y" + case 1064: +#line 7892 "gram.y" { AlterDefaultPrivilegesStmt *n = makeNode(AlterDefaultPrivilegesStmt); @@ -37946,39 +39066,39 @@ YYLTYPE yylloc; ;} break; - case 1052: -#line 7819 "gram.y" + case 1065: +#line 7902 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1053: -#line 7820 "gram.y" + case 1066: +#line 7903 "gram.y" { (yyval.list) = NIL; ;} break; - case 1054: -#line 7825 "gram.y" + case 1067: +#line 7908 "gram.y" { (yyval.defelt) = makeDefElem("schemas", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 1055: -#line 7829 "gram.y" + case 1068: +#line 7912 "gram.y" { (yyval.defelt) = makeDefElem("roles", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 1056: -#line 7833 "gram.y" + case 1069: +#line 7916 "gram.y" { (yyval.defelt) = makeDefElem("roles", (Node *) (yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 1057: -#line 7845 "gram.y" + case 1070: +#line 7928 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -37993,8 +39113,8 @@ YYLTYPE yylloc; ;} break; - case 1058: -#line 7859 "gram.y" + case 1071: +#line 7942 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -38010,8 +39130,8 @@ YYLTYPE yylloc; ;} break; - case 1059: -#line 7874 "gram.y" + case 1072: +#line 7957 "gram.y" { GrantStmt *n = makeNode(GrantStmt); @@ -38027,38 +39147,38 @@ YYLTYPE yylloc; ;} break; - case 1060: -#line 7890 "gram.y" + case 1073: +#line 7973 "gram.y" { (yyval.ival) = OBJECT_TABLE; ;} break; - case 1061: -#line 7891 "gram.y" + case 1074: +#line 7974 "gram.y" { (yyval.ival) = OBJECT_FUNCTION; ;} break; - case 1062: -#line 7892 "gram.y" + case 1075: +#line 7975 "gram.y" { (yyval.ival) = OBJECT_FUNCTION; ;} break; - case 1063: -#line 7893 "gram.y" + case 1076: +#line 7976 "gram.y" { (yyval.ival) = OBJECT_SEQUENCE; ;} break; - case 1064: -#line 7894 "gram.y" + case 1077: +#line 7977 "gram.y" { (yyval.ival) = OBJECT_TYPE; ;} break; - case 1065: -#line 7895 "gram.y" + case 1078: +#line 7978 "gram.y" { (yyval.ival) = OBJECT_SCHEMA; ;} break; - case 1066: -#line 7910 "gram.y" + case 1079: +#line 7993 "gram.y" { IndexStmt *n = makeNode(IndexStmt); @@ -38076,9 +39196,9 @@ YYLTYPE yylloc; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; - n->oldNode = InvalidOid; + n->oldNumber = InvalidRelFileNumber; n->oldCreateSubid = InvalidSubTransactionId; - n->oldFirstRelfilenodeSubid = InvalidSubTransactionId; + n->oldFirstRelfilelocatorSubid = InvalidSubTransactionId; n->primary = false; n->isconstraint = false; n->deferrable = false; @@ -38090,8 +39210,8 @@ YYLTYPE yylloc; ;} break; - case 1067: -#line 7942 "gram.y" + case 1080: +#line 8025 "gram.y" { IndexStmt *n = makeNode(IndexStmt); @@ -38109,9 +39229,9 @@ YYLTYPE yylloc; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; - n->oldNode = InvalidOid; + n->oldNumber = InvalidRelFileNumber; n->oldCreateSubid = InvalidSubTransactionId; - n->oldFirstRelfilenodeSubid = InvalidSubTransactionId; + n->oldFirstRelfilelocatorSubid = InvalidSubTransactionId; n->primary = false; n->isconstraint = false; n->deferrable = false; @@ -38123,58 +39243,38 @@ YYLTYPE yylloc; ;} break; - case 1068: -#line 7974 "gram.y" - { (yyval.boolean) = true; ;} - break; - - case 1069: -#line 7975 "gram.y" - { (yyval.boolean) = false; ;} - break; - - case 1070: -#line 7979 "gram.y" + case 1081: +#line 8057 "gram.y" { (yyval.boolean) = true; ;} break; - case 1071: -#line 7980 "gram.y" + case 1082: +#line 8058 "gram.y" { (yyval.boolean) = false; ;} break; - case 1072: -#line 7984 "gram.y" - { (yyval.str) = (yyvsp[(1) - (1)].str); ;} - break; - - case 1073: -#line 7985 "gram.y" - { (yyval.str) = NULL; ;} - break; - - case 1074: -#line 7989 "gram.y" + case 1083: +#line 8062 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 1075: -#line 7990 "gram.y" + case 1084: +#line 8063 "gram.y" { (yyval.str) = DEFAULT_INDEX_TYPE; ;} break; - case 1076: -#line 7993 "gram.y" + case 1085: +#line 8066 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].ielem)); ;} break; - case 1077: -#line 7994 "gram.y" + case 1086: +#line 8067 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].ielem)); ;} break; - case 1078: -#line 8000 "gram.y" + case 1087: +#line 8073 "gram.y" { (yyval.ielem) = makeNode(IndexElem); (yyval.ielem)->name = NULL; @@ -38188,8 +39288,8 @@ YYLTYPE yylloc; ;} break; - case 1079: -#line 8012 "gram.y" + case 1088: +#line 8085 "gram.y" { (yyval.ielem) = makeNode(IndexElem); (yyval.ielem)->name = NULL; @@ -38203,102 +39303,92 @@ YYLTYPE yylloc; ;} break; - case 1080: -#line 8031 "gram.y" + case 1089: +#line 8104 "gram.y" { (yyval.ielem) = (yyvsp[(2) - (2)].ielem); (yyval.ielem)->name = (yyvsp[(1) - (2)].str); ;} break; - case 1081: -#line 8036 "gram.y" + case 1090: +#line 8109 "gram.y" { (yyval.ielem) = (yyvsp[(2) - (2)].ielem); (yyval.ielem)->expr = (yyvsp[(1) - (2)].node); ;} break; - case 1082: -#line 8041 "gram.y" + case 1091: +#line 8114 "gram.y" { (yyval.ielem) = (yyvsp[(4) - (4)].ielem); (yyval.ielem)->expr = (yyvsp[(2) - (4)].node); ;} break; - case 1083: -#line 8047 "gram.y" + case 1092: +#line 8120 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1084: -#line 8048 "gram.y" + case 1093: +#line 8121 "gram.y" { (yyval.list) = NIL; ;} break; - case 1085: -#line 8051 "gram.y" + case 1094: +#line 8124 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].ielem)); ;} break; - case 1086: -#line 8052 "gram.y" + case 1095: +#line 8125 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].ielem)); ;} break; - case 1087: -#line 8055 "gram.y" + case 1096: +#line 8128 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1088: -#line 8056 "gram.y" - { (yyval.list) = NIL; ;} - break; - - case 1089: -#line 8059 "gram.y" - { (yyval.list) = (yyvsp[(1) - (1)].list); ;} - break; - - case 1090: -#line 8060 "gram.y" + case 1097: +#line 8129 "gram.y" { (yyval.list) = NIL; ;} break; - case 1091: -#line 8063 "gram.y" + case 1098: +#line 8133 "gram.y" { (yyval.ival) = SORTBY_ASC; ;} break; - case 1092: -#line 8064 "gram.y" + case 1099: +#line 8134 "gram.y" { (yyval.ival) = SORTBY_DESC; ;} break; - case 1093: -#line 8065 "gram.y" + case 1100: +#line 8135 "gram.y" { (yyval.ival) = SORTBY_DEFAULT; ;} break; - case 1094: -#line 8068 "gram.y" + case 1101: +#line 8138 "gram.y" { (yyval.ival) = SORTBY_NULLS_FIRST; ;} break; - case 1095: -#line 8069 "gram.y" + case 1102: +#line 8139 "gram.y" { (yyval.ival) = SORTBY_NULLS_LAST; ;} break; - case 1096: -#line 8070 "gram.y" + case 1103: +#line 8140 "gram.y" { (yyval.ival) = SORTBY_NULLS_DEFAULT; ;} break; - case 1097: -#line 8088 "gram.y" + case 1104: +#line 8158 "gram.y" { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); @@ -38313,8 +39403,8 @@ YYLTYPE yylloc; ;} break; - case 1098: -#line 8102 "gram.y" + case 1105: +#line 8172 "gram.y" { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); @@ -38330,8 +39420,8 @@ YYLTYPE yylloc; ;} break; - case 1099: -#line 8117 "gram.y" + case 1106: +#line 8187 "gram.y" { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); @@ -38346,8 +39436,8 @@ YYLTYPE yylloc; ;} break; - case 1100: -#line 8131 "gram.y" + case 1107: +#line 8201 "gram.y" { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); @@ -38362,48 +39452,48 @@ YYLTYPE yylloc; ;} break; - case 1101: -#line 8146 "gram.y" + case 1108: +#line 8216 "gram.y" { (yyval.boolean) = true; ;} break; - case 1102: -#line 8147 "gram.y" + case 1109: +#line 8217 "gram.y" { (yyval.boolean) = false; ;} break; - case 1103: -#line 8150 "gram.y" + case 1110: +#line 8220 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1104: -#line 8151 "gram.y" + case 1111: +#line 8221 "gram.y" { (yyval.list) = NIL; ;} break; - case 1105: -#line 8155 "gram.y" + case 1112: +#line 8225 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].fun_param)); ;} break; - case 1106: -#line 8156 "gram.y" + case 1113: +#line 8226 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].fun_param)); ;} break; - case 1107: -#line 8160 "gram.y" + case 1114: +#line 8230 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].objwithargs)); ;} break; - case 1108: -#line 8162 "gram.y" + case 1115: +#line 8232 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].objwithargs)); ;} break; - case 1109: -#line 8167 "gram.y" + case 1116: +#line 8237 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -38414,8 +39504,8 @@ YYLTYPE yylloc; ;} break; - case 1110: -#line 8181 "gram.y" + case 1117: +#line 8251 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -38425,8 +39515,8 @@ YYLTYPE yylloc; ;} break; - case 1111: -#line 8189 "gram.y" + case 1118: +#line 8259 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -38436,8 +39526,8 @@ YYLTYPE yylloc; ;} break; - case 1112: -#line 8197 "gram.y" + case 1119: +#line 8267 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -38448,28 +39538,28 @@ YYLTYPE yylloc; ;} break; - case 1113: -#line 8212 "gram.y" + case 1120: +#line 8282 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1114: -#line 8213 "gram.y" + case 1121: +#line 8283 "gram.y" { (yyval.list) = NIL; ;} break; - case 1115: -#line 8217 "gram.y" + case 1122: +#line 8287 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].fun_param)); ;} break; - case 1116: -#line 8219 "gram.y" + case 1123: +#line 8289 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].fun_param)); ;} break; - case 1117: -#line 8234 "gram.y" + case 1124: +#line 8304 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38481,8 +39571,8 @@ YYLTYPE yylloc; ;} break; - case 1118: -#line 8244 "gram.y" + case 1125: +#line 8314 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38494,8 +39584,8 @@ YYLTYPE yylloc; ;} break; - case 1119: -#line 8254 "gram.y" + case 1126: +#line 8324 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38507,8 +39597,8 @@ YYLTYPE yylloc; ;} break; - case 1120: -#line 8264 "gram.y" + case 1127: +#line 8334 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38520,8 +39610,8 @@ YYLTYPE yylloc; ;} break; - case 1121: -#line 8274 "gram.y" + case 1128: +#line 8344 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38533,33 +39623,33 @@ YYLTYPE yylloc; ;} break; - case 1122: -#line 8286 "gram.y" + case 1129: +#line 8356 "gram.y" { (yyval.fun_param_mode) = FUNC_PARAM_IN; ;} break; - case 1123: -#line 8287 "gram.y" + case 1130: +#line 8357 "gram.y" { (yyval.fun_param_mode) = FUNC_PARAM_OUT; ;} break; - case 1124: -#line 8288 "gram.y" + case 1131: +#line 8358 "gram.y" { (yyval.fun_param_mode) = FUNC_PARAM_INOUT; ;} break; - case 1125: -#line 8289 "gram.y" + case 1132: +#line 8359 "gram.y" { (yyval.fun_param_mode) = FUNC_PARAM_INOUT; ;} break; - case 1126: -#line 8290 "gram.y" + case 1133: +#line 8360 "gram.y" { (yyval.fun_param_mode) = FUNC_PARAM_VARIADIC; ;} break; - case 1128: -#line 8301 "gram.y" + case 1135: +#line 8371 "gram.y" { /* We can catch over-specified results here if we want to, * but for now better to silently swallow typmod, etc. @@ -38569,13 +39659,13 @@ YYLTYPE yylloc; ;} break; - case 1129: -#line 8315 "gram.y" + case 1136: +#line 8385 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1130: -#line 8317 "gram.y" + case 1137: +#line 8387 "gram.y" { (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[(1) - (4)].str)), (yyvsp[(2) - (4)].list))); (yyval.typnam)->pct_type = true; @@ -38583,8 +39673,8 @@ YYLTYPE yylloc; ;} break; - case 1131: -#line 8323 "gram.y" + case 1138: +#line 8393 "gram.y" { (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[(2) - (5)].str)), (yyvsp[(3) - (5)].list))); (yyval.typnam)->pct_type = true; @@ -38593,31 +39683,31 @@ YYLTYPE yylloc; ;} break; - case 1132: -#line 8333 "gram.y" + case 1139: +#line 8403 "gram.y" { (yyval.fun_param) = (yyvsp[(1) - (1)].fun_param); ;} break; - case 1133: -#line 8337 "gram.y" + case 1140: +#line 8407 "gram.y" { (yyval.fun_param) = (yyvsp[(1) - (3)].fun_param); (yyval.fun_param)->defexpr = (yyvsp[(3) - (3)].node); ;} break; - case 1134: -#line 8342 "gram.y" + case 1141: +#line 8412 "gram.y" { (yyval.fun_param) = (yyvsp[(1) - (3)].fun_param); (yyval.fun_param)->defexpr = (yyvsp[(3) - (3)].node); ;} break; - case 1135: -#line 8350 "gram.y" + case 1142: +#line 8420 "gram.y" { if (!((yyvsp[(1) - (1)].fun_param)->mode == FUNC_PARAM_DEFAULT || (yyvsp[(1) - (1)].fun_param)->mode == FUNC_PARAM_IN || @@ -38630,47 +39720,47 @@ YYLTYPE yylloc; ;} break; - case 1136: -#line 8392 "gram.y" + case 1143: +#line 8462 "gram.y" { (yyval.list) = list_make2(NIL, makeInteger(-1)); ;} break; - case 1137: -#line 8396 "gram.y" + case 1144: +#line 8466 "gram.y" { (yyval.list) = list_make2((yyvsp[(2) - (3)].list), makeInteger(-1)); ;} break; - case 1138: -#line 8400 "gram.y" + case 1145: +#line 8470 "gram.y" { (yyval.list) = list_make2((yyvsp[(4) - (5)].list), makeInteger(0)); ;} break; - case 1139: -#line 8404 "gram.y" + case 1146: +#line 8474 "gram.y" { /* this is the only case requiring consistency checking */ (yyval.list) = makeOrderedSetArgs((yyvsp[(2) - (6)].list), (yyvsp[(5) - (6)].list), yyscanner); ;} break; - case 1140: -#line 8411 "gram.y" + case 1147: +#line 8481 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].fun_param)); ;} break; - case 1141: -#line 8412 "gram.y" + case 1148: +#line 8482 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].fun_param)); ;} break; - case 1142: -#line 8417 "gram.y" + case 1149: +#line 8487 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -38681,200 +39771,200 @@ YYLTYPE yylloc; ;} break; - case 1143: -#line 8428 "gram.y" + case 1150: +#line 8498 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].objwithargs)); ;} break; - case 1144: -#line 8430 "gram.y" + case 1151: +#line 8500 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].objwithargs)); ;} break; - case 1146: -#line 8435 "gram.y" + case 1153: +#line 8505 "gram.y" { (yyval.list) = NIL; ;} break; - case 1147: -#line 8440 "gram.y" + case 1154: +#line 8510 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1148: -#line 8441 "gram.y" + case 1155: +#line 8511 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1149: -#line 8449 "gram.y" + case 1156: +#line 8519 "gram.y" { (yyval.defelt) = makeDefElem("strict", (Node *) makeBoolean(false), (yylsp[(1) - (4)])); ;} break; - case 1150: -#line 8453 "gram.y" + case 1157: +#line 8523 "gram.y" { (yyval.defelt) = makeDefElem("strict", (Node *) makeBoolean(true), (yylsp[(1) - (5)])); ;} break; - case 1151: -#line 8457 "gram.y" + case 1158: +#line 8527 "gram.y" { (yyval.defelt) = makeDefElem("strict", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 1152: -#line 8461 "gram.y" + case 1159: +#line 8531 "gram.y" { (yyval.defelt) = makeDefElem("volatility", (Node *) makeString("immutable"), (yylsp[(1) - (1)])); ;} break; - case 1153: -#line 8465 "gram.y" + case 1160: +#line 8535 "gram.y" { (yyval.defelt) = makeDefElem("volatility", (Node *) makeString("stable"), (yylsp[(1) - (1)])); ;} break; - case 1154: -#line 8469 "gram.y" + case 1161: +#line 8539 "gram.y" { (yyval.defelt) = makeDefElem("volatility", (Node *) makeString("volatile"), (yylsp[(1) - (1)])); ;} break; - case 1155: -#line 8473 "gram.y" + case 1162: +#line 8543 "gram.y" { (yyval.defelt) = makeDefElem("security", (Node *) makeBoolean(true), (yylsp[(1) - (3)])); ;} break; - case 1156: -#line 8477 "gram.y" + case 1163: +#line 8547 "gram.y" { (yyval.defelt) = makeDefElem("security", (Node *) makeBoolean(false), (yylsp[(1) - (3)])); ;} break; - case 1157: -#line 8481 "gram.y" + case 1164: +#line 8551 "gram.y" { (yyval.defelt) = makeDefElem("security", (Node *) makeBoolean(true), (yylsp[(1) - (2)])); ;} break; - case 1158: -#line 8485 "gram.y" + case 1165: +#line 8555 "gram.y" { (yyval.defelt) = makeDefElem("security", (Node *) makeBoolean(false), (yylsp[(1) - (2)])); ;} break; - case 1159: -#line 8489 "gram.y" + case 1166: +#line 8559 "gram.y" { (yyval.defelt) = makeDefElem("leakproof", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 1160: -#line 8493 "gram.y" + case 1167: +#line 8563 "gram.y" { (yyval.defelt) = makeDefElem("leakproof", (Node *) makeBoolean(false), (yylsp[(1) - (2)])); ;} break; - case 1161: -#line 8497 "gram.y" + case 1168: +#line 8567 "gram.y" { (yyval.defelt) = makeDefElem("cost", (Node *) (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1162: -#line 8501 "gram.y" + case 1169: +#line 8571 "gram.y" { (yyval.defelt) = makeDefElem("rows", (Node *) (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1163: -#line 8505 "gram.y" + case 1170: +#line 8575 "gram.y" { (yyval.defelt) = makeDefElem("support", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 1164: -#line 8509 "gram.y" + case 1171: +#line 8579 "gram.y" { /* we abuse the normal content of a DefElem here */ (yyval.defelt) = makeDefElem("set", (Node *) (yyvsp[(1) - (1)].vsetstmt), (yylsp[(1) - (1)])); ;} break; - case 1165: -#line 8514 "gram.y" + case 1172: +#line 8584 "gram.y" { (yyval.defelt) = makeDefElem("parallel", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 1166: -#line 8521 "gram.y" + case 1173: +#line 8591 "gram.y" { (yyval.defelt) = makeDefElem("as", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 1167: -#line 8525 "gram.y" + case 1174: +#line 8595 "gram.y" { (yyval.defelt) = makeDefElem("language", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 1168: -#line 8529 "gram.y" + case 1175: +#line 8599 "gram.y" { (yyval.defelt) = makeDefElem("transform", (Node *) (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)])); ;} break; - case 1169: -#line 8533 "gram.y" + case 1176: +#line 8603 "gram.y" { (yyval.defelt) = makeDefElem("window", (Node *) makeBoolean(true), (yylsp[(1) - (1)])); ;} break; - case 1170: -#line 8537 "gram.y" + case 1177: +#line 8607 "gram.y" { (yyval.defelt) = (yyvsp[(1) - (1)].defelt); ;} break; - case 1171: -#line 8542 "gram.y" + case 1178: +#line 8612 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1172: -#line 8544 "gram.y" + case 1179: +#line 8614 "gram.y" { (yyval.list) = list_make2(makeString((yyvsp[(1) - (3)].str)), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 1173: -#line 8550 "gram.y" + case 1180: +#line 8620 "gram.y" { ReturnStmt *r = makeNode(ReturnStmt); @@ -38883,15 +39973,15 @@ YYLTYPE yylloc; ;} break; - case 1174: -#line 8560 "gram.y" + case 1181: +#line 8630 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1175: -#line 8564 "gram.y" + case 1182: +#line 8634 "gram.y" { /* * A compound statement is stored as a single-item list @@ -38903,15 +39993,15 @@ YYLTYPE yylloc; ;} break; - case 1176: -#line 8574 "gram.y" + case 1183: +#line 8644 "gram.y" { (yyval.node) = NULL; ;} break; - case 1177: -#line 8581 "gram.y" + case 1184: +#line 8651 "gram.y" { /* As in stmtmulti, discard empty statements */ if ((yyvsp[(2) - (3)].node) != NULL) @@ -38921,35 +40011,35 @@ YYLTYPE yylloc; ;} break; - case 1178: -#line 8589 "gram.y" + case 1185: +#line 8659 "gram.y" { (yyval.list) = NIL; ;} break; - case 1181: -#line 8600 "gram.y" + case 1188: +#line 8670 "gram.y" { (yyval.list) = list_make1((yyvsp[(3) - (3)].typnam)); ;} break; - case 1182: -#line 8601 "gram.y" + case 1189: +#line 8671 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (5)].list), (yyvsp[(5) - (5)].typnam)); ;} break; - case 1183: -#line 8605 "gram.y" + case 1190: +#line 8675 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1184: -#line 8606 "gram.y" + case 1191: +#line 8676 "gram.y" { (yyval.list) = NIL; ;} break; - case 1185: -#line 8610 "gram.y" + case 1192: +#line 8680 "gram.y" { FunctionParameter *n = makeNode(FunctionParameter); @@ -38961,22 +40051,22 @@ YYLTYPE yylloc; ;} break; - case 1186: -#line 8623 "gram.y" + case 1193: +#line 8693 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].fun_param)); ;} break; - case 1187: -#line 8627 "gram.y" + case 1194: +#line 8697 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].fun_param)); ;} break; - case 1188: -#line 8642 "gram.y" + case 1195: +#line 8712 "gram.y" { AlterFunctionStmt *n = makeNode(AlterFunctionStmt); @@ -38987,8 +40077,8 @@ YYLTYPE yylloc; ;} break; - case 1189: -#line 8651 "gram.y" + case 1196: +#line 8721 "gram.y" { AlterFunctionStmt *n = makeNode(AlterFunctionStmt); @@ -38999,8 +40089,8 @@ YYLTYPE yylloc; ;} break; - case 1190: -#line 8660 "gram.y" + case 1197: +#line 8730 "gram.y" { AlterFunctionStmt *n = makeNode(AlterFunctionStmt); @@ -39011,18 +40101,18 @@ YYLTYPE yylloc; ;} break; - case 1191: -#line 8672 "gram.y" + case 1198: +#line 8742 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1192: -#line 8673 "gram.y" + case 1199: +#line 8743 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1195: -#line 8697 "gram.y" + case 1202: +#line 8767 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39035,8 +40125,8 @@ YYLTYPE yylloc; ;} break; - case 1196: -#line 8708 "gram.y" + case 1203: +#line 8778 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39049,8 +40139,8 @@ YYLTYPE yylloc; ;} break; - case 1197: -#line 8719 "gram.y" + case 1204: +#line 8789 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39063,8 +40153,8 @@ YYLTYPE yylloc; ;} break; - case 1198: -#line 8730 "gram.y" + case 1205: +#line 8800 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39077,8 +40167,8 @@ YYLTYPE yylloc; ;} break; - case 1199: -#line 8741 "gram.y" + case 1206: +#line 8811 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39091,8 +40181,8 @@ YYLTYPE yylloc; ;} break; - case 1200: -#line 8752 "gram.y" + case 1207: +#line 8822 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39105,8 +40195,8 @@ YYLTYPE yylloc; ;} break; - case 1201: -#line 8766 "gram.y" + case 1208: +#line 8836 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39119,8 +40209,8 @@ YYLTYPE yylloc; ;} break; - case 1202: -#line 8777 "gram.y" + case 1209: +#line 8847 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39133,8 +40223,8 @@ YYLTYPE yylloc; ;} break; - case 1203: -#line 8791 "gram.y" + case 1210: +#line 8861 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39147,8 +40237,8 @@ YYLTYPE yylloc; ;} break; - case 1204: -#line 8802 "gram.y" + case 1211: +#line 8872 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39161,8 +40251,8 @@ YYLTYPE yylloc; ;} break; - case 1205: -#line 8816 "gram.y" + case 1212: +#line 8886 "gram.y" { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), @@ -39172,43 +40262,43 @@ YYLTYPE yylloc; ;} break; - case 1206: -#line 8824 "gram.y" + case 1213: +#line 8894 "gram.y" { (yyval.list) = list_make2((yyvsp[(2) - (5)].typnam), (yyvsp[(4) - (5)].typnam)); ;} break; - case 1207: -#line 8826 "gram.y" + case 1214: +#line 8896 "gram.y" { (yyval.list) = list_make2(NULL, (yyvsp[(4) - (5)].typnam)); ;} break; - case 1208: -#line 8828 "gram.y" + case 1215: +#line 8898 "gram.y" { (yyval.list) = list_make2((yyvsp[(2) - (5)].typnam), NULL); ;} break; - case 1209: -#line 8833 "gram.y" + case 1216: +#line 8903 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1210: -#line 8835 "gram.y" + case 1217: +#line 8905 "gram.y" { (yyval.list) = lcons(makeString((yyvsp[(1) - (3)].str)), (yyvsp[(3) - (3)].list)); ;} break; - case 1211: -#line 8839 "gram.y" + case 1218: +#line 8909 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].objwithargs)); ;} break; - case 1212: -#line 8841 "gram.y" + case 1219: +#line 8911 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].objwithargs)); ;} break; - case 1213: -#line 8846 "gram.y" + case 1220: +#line 8916 "gram.y" { ObjectWithArgs *n = makeNode(ObjectWithArgs); @@ -39218,8 +40308,8 @@ YYLTYPE yylloc; ;} break; - case 1214: -#line 8865 "gram.y" + case 1221: +#line 8935 "gram.y" { DoStmt *n = makeNode(DoStmt); @@ -39228,32 +40318,32 @@ YYLTYPE yylloc; ;} break; - case 1215: -#line 8874 "gram.y" + case 1222: +#line 8944 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1216: -#line 8875 "gram.y" + case 1223: +#line 8945 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1217: -#line 8880 "gram.y" + case 1224: +#line 8950 "gram.y" { (yyval.defelt) = makeDefElem("as", (Node *) makeString((yyvsp[(1) - (1)].str)), (yylsp[(1) - (1)])); ;} break; - case 1218: -#line 8884 "gram.y" + case 1225: +#line 8954 "gram.y" { (yyval.defelt) = makeDefElem("language", (Node *) makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); ;} break; - case 1219: -#line 8897 "gram.y" + case 1226: +#line 8967 "gram.y" { CreateCastStmt *n = makeNode(CreateCastStmt); @@ -39266,8 +40356,8 @@ YYLTYPE yylloc; ;} break; - case 1220: -#line 8909 "gram.y" + case 1227: +#line 8979 "gram.y" { CreateCastStmt *n = makeNode(CreateCastStmt); @@ -39280,8 +40370,8 @@ YYLTYPE yylloc; ;} break; - case 1221: -#line 8921 "gram.y" + case 1228: +#line 8991 "gram.y" { CreateCastStmt *n = makeNode(CreateCastStmt); @@ -39294,23 +40384,23 @@ YYLTYPE yylloc; ;} break; - case 1222: -#line 8933 "gram.y" + case 1229: +#line 9003 "gram.y" { (yyval.ival) = COERCION_IMPLICIT; ;} break; - case 1223: -#line 8934 "gram.y" + case 1230: +#line 9004 "gram.y" { (yyval.ival) = COERCION_ASSIGNMENT; ;} break; - case 1224: -#line 8935 "gram.y" + case 1231: +#line 9005 "gram.y" { (yyval.ival) = COERCION_EXPLICIT; ;} break; - case 1225: -#line 8940 "gram.y" + case 1232: +#line 9010 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39323,18 +40413,18 @@ YYLTYPE yylloc; ;} break; - case 1226: -#line 8952 "gram.y" + case 1233: +#line 9022 "gram.y" { (yyval.boolean) = true; ;} break; - case 1227: -#line 8953 "gram.y" + case 1234: +#line 9023 "gram.y" { (yyval.boolean) = false; ;} break; - case 1228: -#line 8964 "gram.y" + case 1235: +#line 9034 "gram.y" { CreateTransformStmt *n = makeNode(CreateTransformStmt); @@ -39347,36 +40437,36 @@ YYLTYPE yylloc; ;} break; - case 1229: -#line 8977 "gram.y" + case 1236: +#line 9047 "gram.y" { (yyval.list) = list_make2((yyvsp[(5) - (11)].objwithargs), (yyvsp[(11) - (11)].objwithargs)); ;} break; - case 1230: -#line 8981 "gram.y" + case 1237: +#line 9051 "gram.y" { (yyval.list) = list_make2((yyvsp[(11) - (11)].objwithargs), (yyvsp[(5) - (11)].objwithargs)); ;} break; - case 1231: -#line 8985 "gram.y" + case 1238: +#line 9055 "gram.y" { (yyval.list) = list_make2((yyvsp[(5) - (5)].objwithargs), NULL); ;} break; - case 1232: -#line 8989 "gram.y" + case 1239: +#line 9059 "gram.y" { (yyval.list) = list_make2(NULL, (yyvsp[(5) - (5)].objwithargs)); ;} break; - case 1233: -#line 8996 "gram.y" + case 1240: +#line 9066 "gram.y" { DropStmt *n = makeNode(DropStmt); @@ -39388,97 +40478,86 @@ YYLTYPE yylloc; ;} break; - case 1234: -#line 9017 "gram.y" + case 1241: +#line 9088 "gram.y" { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = (yyvsp[(2) - (4)].ival); - n->relation = (yyvsp[(4) - (4)].range); + n->kind = (yyvsp[(3) - (5)].ival); + n->relation = (yyvsp[(5) - (5)].range); n->name = NULL; - n->params = NIL; - if ((yyvsp[(3) - (4)].boolean)) + n->params = (yyvsp[(2) - (5)].list); + if ((yyvsp[(4) - (5)].boolean)) n->params = lappend(n->params, - makeDefElem("concurrently", NULL, (yylsp[(3) - (4)]))); + makeDefElem("concurrently", NULL, (yylsp[(4) - (5)]))); (yyval.node) = (Node *) n; ;} break; - case 1235: -#line 9030 "gram.y" + case 1242: +#line 9101 "gram.y" { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = (yyvsp[(2) - (4)].ival); - n->name = (yyvsp[(4) - (4)].str); + n->kind = REINDEX_OBJECT_SCHEMA; n->relation = NULL; - n->params = NIL; - if ((yyvsp[(3) - (4)].boolean)) - n->params = lappend(n->params, - makeDefElem("concurrently", NULL, (yylsp[(3) - (4)]))); - (yyval.node) = (Node *) n; - ;} - break; - - case 1236: -#line 9043 "gram.y" - { - ReindexStmt *n = makeNode(ReindexStmt); - - n->kind = (yyvsp[(5) - (7)].ival); - n->relation = (yyvsp[(7) - (7)].range); - n->name = NULL; - n->params = (yyvsp[(3) - (7)].list); - if ((yyvsp[(6) - (7)].boolean)) + n->name = (yyvsp[(5) - (5)].str); + n->params = (yyvsp[(2) - (5)].list); + if ((yyvsp[(4) - (5)].boolean)) n->params = lappend(n->params, - makeDefElem("concurrently", NULL, (yylsp[(6) - (7)]))); + makeDefElem("concurrently", NULL, (yylsp[(4) - (5)]))); (yyval.node) = (Node *) n; ;} break; - case 1237: -#line 9056 "gram.y" + case 1243: +#line 9114 "gram.y" { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = (yyvsp[(5) - (7)].ival); - n->name = (yyvsp[(7) - (7)].str); + n->kind = (yyvsp[(3) - (5)].ival); n->relation = NULL; - n->params = (yyvsp[(3) - (7)].list); - if ((yyvsp[(6) - (7)].boolean)) + n->name = (yyvsp[(5) - (5)].str); + n->params = (yyvsp[(2) - (5)].list); + if ((yyvsp[(4) - (5)].boolean)) n->params = lappend(n->params, - makeDefElem("concurrently", NULL, (yylsp[(6) - (7)]))); + makeDefElem("concurrently", NULL, (yylsp[(4) - (5)]))); (yyval.node) = (Node *) n; ;} break; - case 1238: -#line 9070 "gram.y" + case 1244: +#line 9128 "gram.y" { (yyval.ival) = REINDEX_OBJECT_INDEX; ;} break; - case 1239: -#line 9071 "gram.y" + case 1245: +#line 9129 "gram.y" { (yyval.ival) = REINDEX_OBJECT_TABLE; ;} break; - case 1240: -#line 9074 "gram.y" - { (yyval.ival) = REINDEX_OBJECT_SCHEMA; ;} - break; - - case 1241: -#line 9075 "gram.y" + case 1246: +#line 9132 "gram.y" { (yyval.ival) = REINDEX_OBJECT_SYSTEM; ;} break; - case 1242: -#line 9076 "gram.y" + case 1247: +#line 9133 "gram.y" { (yyval.ival) = REINDEX_OBJECT_DATABASE; ;} break; - case 1243: -#line 9087 "gram.y" + case 1248: +#line 9136 "gram.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} + break; + + case 1249: +#line 9137 "gram.y" + { (yyval.list) = NULL; ;} + break; + + case 1250: +#line 9148 "gram.y" { AlterTableSpaceOptionsStmt *n = makeNode(AlterTableSpaceOptionsStmt); @@ -39490,8 +40569,8 @@ YYLTYPE yylloc; ;} break; - case 1244: -#line 9097 "gram.y" + case 1251: +#line 9158 "gram.y" { AlterTableSpaceOptionsStmt *n = makeNode(AlterTableSpaceOptionsStmt); @@ -39503,8 +40582,8 @@ YYLTYPE yylloc; ;} break; - case 1245: -#line 9115 "gram.y" + case 1252: +#line 9176 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39516,8 +40595,8 @@ YYLTYPE yylloc; ;} break; - case 1246: -#line 9125 "gram.y" + case 1253: +#line 9186 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39529,8 +40608,8 @@ YYLTYPE yylloc; ;} break; - case 1247: -#line 9135 "gram.y" + case 1254: +#line 9196 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39542,8 +40621,8 @@ YYLTYPE yylloc; ;} break; - case 1248: -#line 9145 "gram.y" + case 1255: +#line 9206 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39555,8 +40634,8 @@ YYLTYPE yylloc; ;} break; - case 1249: -#line 9155 "gram.y" + case 1256: +#line 9216 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39568,8 +40647,8 @@ YYLTYPE yylloc; ;} break; - case 1250: -#line 9165 "gram.y" + case 1257: +#line 9226 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39581,8 +40660,8 @@ YYLTYPE yylloc; ;} break; - case 1251: -#line 9175 "gram.y" + case 1258: +#line 9236 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39594,8 +40673,8 @@ YYLTYPE yylloc; ;} break; - case 1252: -#line 9185 "gram.y" + case 1259: +#line 9246 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39607,8 +40686,8 @@ YYLTYPE yylloc; ;} break; - case 1253: -#line 9195 "gram.y" + case 1260: +#line 9256 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39620,8 +40699,8 @@ YYLTYPE yylloc; ;} break; - case 1254: -#line 9205 "gram.y" + case 1261: +#line 9266 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39633,8 +40712,8 @@ YYLTYPE yylloc; ;} break; - case 1255: -#line 9215 "gram.y" + case 1262: +#line 9276 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39646,8 +40725,8 @@ YYLTYPE yylloc; ;} break; - case 1256: -#line 9225 "gram.y" + case 1263: +#line 9286 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39659,8 +40738,8 @@ YYLTYPE yylloc; ;} break; - case 1257: -#line 9235 "gram.y" + case 1264: +#line 9296 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39673,8 +40752,8 @@ YYLTYPE yylloc; ;} break; - case 1258: -#line 9246 "gram.y" + case 1265: +#line 9307 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39687,8 +40766,8 @@ YYLTYPE yylloc; ;} break; - case 1259: -#line 9257 "gram.y" + case 1266: +#line 9318 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39700,8 +40779,8 @@ YYLTYPE yylloc; ;} break; - case 1260: -#line 9267 "gram.y" + case 1267: +#line 9328 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39713,8 +40792,8 @@ YYLTYPE yylloc; ;} break; - case 1261: -#line 9277 "gram.y" + case 1268: +#line 9338 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39726,8 +40805,8 @@ YYLTYPE yylloc; ;} break; - case 1262: -#line 9287 "gram.y" + case 1269: +#line 9348 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39739,8 +40818,8 @@ YYLTYPE yylloc; ;} break; - case 1263: -#line 9297 "gram.y" + case 1270: +#line 9358 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39752,8 +40831,8 @@ YYLTYPE yylloc; ;} break; - case 1264: -#line 9307 "gram.y" + case 1271: +#line 9368 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39765,8 +40844,8 @@ YYLTYPE yylloc; ;} break; - case 1265: -#line 9317 "gram.y" + case 1272: +#line 9378 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39779,8 +40858,8 @@ YYLTYPE yylloc; ;} break; - case 1266: -#line 9328 "gram.y" + case 1273: +#line 9389 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39793,8 +40872,8 @@ YYLTYPE yylloc; ;} break; - case 1267: -#line 9339 "gram.y" + case 1274: +#line 9400 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39807,8 +40886,8 @@ YYLTYPE yylloc; ;} break; - case 1268: -#line 9350 "gram.y" + case 1275: +#line 9411 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39821,8 +40900,8 @@ YYLTYPE yylloc; ;} break; - case 1269: -#line 9361 "gram.y" + case 1276: +#line 9422 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39835,8 +40914,8 @@ YYLTYPE yylloc; ;} break; - case 1270: -#line 9372 "gram.y" + case 1277: +#line 9433 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39849,8 +40928,8 @@ YYLTYPE yylloc; ;} break; - case 1271: -#line 9383 "gram.y" + case 1278: +#line 9444 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39863,8 +40942,8 @@ YYLTYPE yylloc; ;} break; - case 1272: -#line 9394 "gram.y" + case 1279: +#line 9455 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39877,8 +40956,8 @@ YYLTYPE yylloc; ;} break; - case 1273: -#line 9405 "gram.y" + case 1280: +#line 9466 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39891,8 +40970,8 @@ YYLTYPE yylloc; ;} break; - case 1274: -#line 9416 "gram.y" + case 1281: +#line 9477 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39905,8 +40984,8 @@ YYLTYPE yylloc; ;} break; - case 1275: -#line 9427 "gram.y" + case 1282: +#line 9488 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39919,8 +40998,8 @@ YYLTYPE yylloc; ;} break; - case 1276: -#line 9438 "gram.y" + case 1283: +#line 9499 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39933,8 +41012,8 @@ YYLTYPE yylloc; ;} break; - case 1277: -#line 9449 "gram.y" + case 1284: +#line 9510 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39948,8 +41027,8 @@ YYLTYPE yylloc; ;} break; - case 1278: -#line 9461 "gram.y" + case 1285: +#line 9522 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39963,8 +41042,8 @@ YYLTYPE yylloc; ;} break; - case 1279: -#line 9473 "gram.y" + case 1286: +#line 9534 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39978,8 +41057,8 @@ YYLTYPE yylloc; ;} break; - case 1280: -#line 9485 "gram.y" + case 1287: +#line 9546 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -39993,8 +41072,8 @@ YYLTYPE yylloc; ;} break; - case 1281: -#line 9497 "gram.y" + case 1288: +#line 9558 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40008,8 +41087,8 @@ YYLTYPE yylloc; ;} break; - case 1282: -#line 9509 "gram.y" + case 1289: +#line 9570 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40023,8 +41102,8 @@ YYLTYPE yylloc; ;} break; - case 1283: -#line 9521 "gram.y" + case 1290: +#line 9582 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40037,8 +41116,8 @@ YYLTYPE yylloc; ;} break; - case 1284: -#line 9532 "gram.y" + case 1291: +#line 9593 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40051,8 +41130,8 @@ YYLTYPE yylloc; ;} break; - case 1285: -#line 9543 "gram.y" + case 1292: +#line 9604 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40066,8 +41145,8 @@ YYLTYPE yylloc; ;} break; - case 1286: -#line 9555 "gram.y" + case 1293: +#line 9616 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40081,8 +41160,8 @@ YYLTYPE yylloc; ;} break; - case 1287: -#line 9567 "gram.y" + case 1294: +#line 9628 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40095,8 +41174,8 @@ YYLTYPE yylloc; ;} break; - case 1288: -#line 9578 "gram.y" + case 1295: +#line 9639 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40109,8 +41188,8 @@ YYLTYPE yylloc; ;} break; - case 1289: -#line 9589 "gram.y" + case 1296: +#line 9650 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40121,8 +41200,8 @@ YYLTYPE yylloc; ;} break; - case 1290: -#line 9598 "gram.y" + case 1297: +#line 9659 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40134,8 +41213,8 @@ YYLTYPE yylloc; ;} break; - case 1291: -#line 9608 "gram.y" + case 1298: +#line 9669 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40147,8 +41226,8 @@ YYLTYPE yylloc; ;} break; - case 1292: -#line 9618 "gram.y" + case 1299: +#line 9679 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40160,8 +41239,8 @@ YYLTYPE yylloc; ;} break; - case 1293: -#line 9628 "gram.y" + case 1300: +#line 9689 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40173,8 +41252,8 @@ YYLTYPE yylloc; ;} break; - case 1294: -#line 9638 "gram.y" + case 1301: +#line 9699 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40186,8 +41265,8 @@ YYLTYPE yylloc; ;} break; - case 1295: -#line 9648 "gram.y" + case 1302: +#line 9709 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40199,8 +41278,8 @@ YYLTYPE yylloc; ;} break; - case 1296: -#line 9658 "gram.y" + case 1303: +#line 9719 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40212,8 +41291,8 @@ YYLTYPE yylloc; ;} break; - case 1297: -#line 9668 "gram.y" + case 1304: +#line 9729 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40225,8 +41304,8 @@ YYLTYPE yylloc; ;} break; - case 1298: -#line 9678 "gram.y" + case 1305: +#line 9739 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40238,8 +41317,8 @@ YYLTYPE yylloc; ;} break; - case 1299: -#line 9688 "gram.y" + case 1306: +#line 9749 "gram.y" { RenameStmt *n = makeNode(RenameStmt); @@ -40254,18 +41333,18 @@ YYLTYPE yylloc; ;} break; - case 1302: -#line 9706 "gram.y" + case 1309: +#line 9767 "gram.y" { (yyval.ival) = 1; ;} break; - case 1303: -#line 9707 "gram.y" + case 1310: +#line 9768 "gram.y" { (yyval.ival) = 0; ;} break; - case 1304: -#line 9718 "gram.y" + case 1311: +#line 9779 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40277,8 +41356,8 @@ YYLTYPE yylloc; ;} break; - case 1305: -#line 9728 "gram.y" + case 1312: +#line 9789 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40290,8 +41369,8 @@ YYLTYPE yylloc; ;} break; - case 1306: -#line 9738 "gram.y" + case 1313: +#line 9799 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40303,8 +41382,8 @@ YYLTYPE yylloc; ;} break; - case 1307: -#line 9748 "gram.y" + case 1314: +#line 9809 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40317,8 +41396,8 @@ YYLTYPE yylloc; ;} break; - case 1308: -#line 9759 "gram.y" + case 1315: +#line 9820 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40330,8 +41409,8 @@ YYLTYPE yylloc; ;} break; - case 1309: -#line 9769 "gram.y" + case 1316: +#line 9830 "gram.y" { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); @@ -40343,18 +41422,18 @@ YYLTYPE yylloc; ;} break; - case 1310: -#line 9780 "gram.y" + case 1317: +#line 9841 "gram.y" { (yyval.boolean) = true; ;} break; - case 1311: -#line 9781 "gram.y" + case 1318: +#line 9842 "gram.y" { (yyval.boolean) = false; ;} break; - case 1312: -#line 9792 "gram.y" + case 1319: +#line 9853 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40366,8 +41445,8 @@ YYLTYPE yylloc; ;} break; - case 1313: -#line 9802 "gram.y" + case 1320: +#line 9863 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40379,8 +41458,8 @@ YYLTYPE yylloc; ;} break; - case 1314: -#line 9812 "gram.y" + case 1321: +#line 9873 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40392,8 +41471,8 @@ YYLTYPE yylloc; ;} break; - case 1315: -#line 9822 "gram.y" + case 1322: +#line 9883 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40405,8 +41484,8 @@ YYLTYPE yylloc; ;} break; - case 1316: -#line 9832 "gram.y" + case 1323: +#line 9893 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40418,8 +41497,8 @@ YYLTYPE yylloc; ;} break; - case 1317: -#line 9842 "gram.y" + case 1324: +#line 9903 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40431,8 +41510,8 @@ YYLTYPE yylloc; ;} break; - case 1318: -#line 9852 "gram.y" + case 1325: +#line 9913 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40444,8 +41523,8 @@ YYLTYPE yylloc; ;} break; - case 1319: -#line 9862 "gram.y" + case 1326: +#line 9923 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40457,8 +41536,8 @@ YYLTYPE yylloc; ;} break; - case 1320: -#line 9872 "gram.y" + case 1327: +#line 9933 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40470,8 +41549,8 @@ YYLTYPE yylloc; ;} break; - case 1321: -#line 9882 "gram.y" + case 1328: +#line 9943 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40483,8 +41562,8 @@ YYLTYPE yylloc; ;} break; - case 1322: -#line 9892 "gram.y" + case 1329: +#line 9953 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40496,8 +41575,8 @@ YYLTYPE yylloc; ;} break; - case 1323: -#line 9902 "gram.y" + case 1330: +#line 9963 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40509,8 +41588,8 @@ YYLTYPE yylloc; ;} break; - case 1324: -#line 9912 "gram.y" + case 1331: +#line 9973 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40522,8 +41601,8 @@ YYLTYPE yylloc; ;} break; - case 1325: -#line 9922 "gram.y" + case 1332: +#line 9983 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40535,8 +41614,8 @@ YYLTYPE yylloc; ;} break; - case 1326: -#line 9932 "gram.y" + case 1333: +#line 9993 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40548,8 +41627,8 @@ YYLTYPE yylloc; ;} break; - case 1327: -#line 9942 "gram.y" + case 1334: +#line 10003 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40561,8 +41640,8 @@ YYLTYPE yylloc; ;} break; - case 1328: -#line 9952 "gram.y" + case 1335: +#line 10013 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40574,8 +41653,8 @@ YYLTYPE yylloc; ;} break; - case 1329: -#line 9962 "gram.y" + case 1336: +#line 10023 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40587,8 +41666,8 @@ YYLTYPE yylloc; ;} break; - case 1330: -#line 9972 "gram.y" + case 1337: +#line 10033 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40600,8 +41679,8 @@ YYLTYPE yylloc; ;} break; - case 1331: -#line 9982 "gram.y" + case 1338: +#line 10043 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40613,8 +41692,8 @@ YYLTYPE yylloc; ;} break; - case 1332: -#line 9992 "gram.y" + case 1339: +#line 10053 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40626,8 +41705,8 @@ YYLTYPE yylloc; ;} break; - case 1333: -#line 10002 "gram.y" + case 1340: +#line 10063 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40639,8 +41718,8 @@ YYLTYPE yylloc; ;} break; - case 1334: -#line 10012 "gram.y" + case 1341: +#line 10073 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40652,8 +41731,8 @@ YYLTYPE yylloc; ;} break; - case 1335: -#line 10022 "gram.y" + case 1342: +#line 10083 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40665,8 +41744,8 @@ YYLTYPE yylloc; ;} break; - case 1336: -#line 10032 "gram.y" + case 1343: +#line 10093 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40678,8 +41757,8 @@ YYLTYPE yylloc; ;} break; - case 1337: -#line 10042 "gram.y" + case 1344: +#line 10103 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40691,8 +41770,8 @@ YYLTYPE yylloc; ;} break; - case 1338: -#line 10052 "gram.y" + case 1345: +#line 10113 "gram.y" { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); @@ -40704,8 +41783,8 @@ YYLTYPE yylloc; ;} break; - case 1339: -#line 10071 "gram.y" + case 1346: +#line 10132 "gram.y" { AlterOperatorStmt *n = makeNode(AlterOperatorStmt); @@ -40715,53 +41794,53 @@ YYLTYPE yylloc; ;} break; - case 1340: -#line 10080 "gram.y" + case 1347: +#line 10141 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1341: -#line 10081 "gram.y" + case 1348: +#line 10142 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 1342: -#line 10085 "gram.y" + case 1349: +#line 10146 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), NULL, (yylsp[(1) - (3)])); ;} break; - case 1343: -#line 10087 "gram.y" + case 1350: +#line 10148 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (Node *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 1344: -#line 10092 "gram.y" + case 1351: +#line 10153 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].typnam); ;} break; - case 1345: -#line 10093 "gram.y" + case 1352: +#line 10154 "gram.y" { (yyval.node) = (Node *) makeString(pstrdup((yyvsp[(1) - (1)].keyword))); ;} break; - case 1346: -#line 10094 "gram.y" + case 1353: +#line 10155 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].list); ;} break; - case 1347: -#line 10095 "gram.y" + case 1354: +#line 10156 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].node); ;} break; - case 1348: -#line 10096 "gram.y" + case 1355: +#line 10157 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 1349: -#line 10109 "gram.y" + case 1356: +#line 10170 "gram.y" { AlterTypeStmt *n = makeNode(AlterTypeStmt); @@ -40771,8 +41850,8 @@ YYLTYPE yylloc; ;} break; - case 1350: -#line 10125 "gram.y" + case 1357: +#line 10186 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40783,8 +41862,8 @@ YYLTYPE yylloc; ;} break; - case 1351: -#line 10134 "gram.y" + case 1358: +#line 10195 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40795,8 +41874,8 @@ YYLTYPE yylloc; ;} break; - case 1352: -#line 10143 "gram.y" + case 1359: +#line 10204 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40807,8 +41886,8 @@ YYLTYPE yylloc; ;} break; - case 1353: -#line 10152 "gram.y" + case 1360: +#line 10213 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40819,8 +41898,8 @@ YYLTYPE yylloc; ;} break; - case 1354: -#line 10161 "gram.y" + case 1361: +#line 10222 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40831,8 +41910,8 @@ YYLTYPE yylloc; ;} break; - case 1355: -#line 10170 "gram.y" + case 1362: +#line 10231 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40843,8 +41922,8 @@ YYLTYPE yylloc; ;} break; - case 1356: -#line 10179 "gram.y" + case 1363: +#line 10240 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40855,8 +41934,8 @@ YYLTYPE yylloc; ;} break; - case 1357: -#line 10188 "gram.y" + case 1364: +#line 10249 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40867,8 +41946,8 @@ YYLTYPE yylloc; ;} break; - case 1358: -#line 10197 "gram.y" + case 1365: +#line 10258 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40879,8 +41958,8 @@ YYLTYPE yylloc; ;} break; - case 1359: -#line 10206 "gram.y" + case 1366: +#line 10267 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40891,8 +41970,8 @@ YYLTYPE yylloc; ;} break; - case 1360: -#line 10215 "gram.y" + case 1367: +#line 10276 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40903,8 +41982,8 @@ YYLTYPE yylloc; ;} break; - case 1361: -#line 10224 "gram.y" + case 1368: +#line 10285 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40915,8 +41994,8 @@ YYLTYPE yylloc; ;} break; - case 1362: -#line 10233 "gram.y" + case 1369: +#line 10294 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40927,8 +42006,8 @@ YYLTYPE yylloc; ;} break; - case 1363: -#line 10242 "gram.y" + case 1370: +#line 10303 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40939,8 +42018,8 @@ YYLTYPE yylloc; ;} break; - case 1364: -#line 10251 "gram.y" + case 1371: +#line 10312 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40951,8 +42030,8 @@ YYLTYPE yylloc; ;} break; - case 1365: -#line 10260 "gram.y" + case 1372: +#line 10321 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40963,8 +42042,8 @@ YYLTYPE yylloc; ;} break; - case 1366: -#line 10269 "gram.y" + case 1373: +#line 10330 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40975,8 +42054,8 @@ YYLTYPE yylloc; ;} break; - case 1367: -#line 10278 "gram.y" + case 1374: +#line 10339 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40987,8 +42066,8 @@ YYLTYPE yylloc; ;} break; - case 1368: -#line 10287 "gram.y" + case 1375: +#line 10348 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -40999,8 +42078,8 @@ YYLTYPE yylloc; ;} break; - case 1369: -#line 10296 "gram.y" + case 1376: +#line 10357 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -41011,8 +42090,8 @@ YYLTYPE yylloc; ;} break; - case 1370: -#line 10305 "gram.y" + case 1377: +#line 10366 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -41023,8 +42102,8 @@ YYLTYPE yylloc; ;} break; - case 1371: -#line 10314 "gram.y" + case 1378: +#line 10375 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -41035,8 +42114,8 @@ YYLTYPE yylloc; ;} break; - case 1372: -#line 10323 "gram.y" + case 1379: +#line 10384 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -41047,8 +42126,8 @@ YYLTYPE yylloc; ;} break; - case 1373: -#line 10332 "gram.y" + case 1380: +#line 10393 "gram.y" { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); @@ -41059,8 +42138,8 @@ YYLTYPE yylloc; ;} break; - case 1374: -#line 10360 "gram.y" + case 1381: +#line 10421 "gram.y" { CreatePublicationStmt *n = makeNode(CreatePublicationStmt); @@ -41070,8 +42149,8 @@ YYLTYPE yylloc; ;} break; - case 1375: -#line 10368 "gram.y" + case 1382: +#line 10429 "gram.y" { CreatePublicationStmt *n = makeNode(CreatePublicationStmt); @@ -41082,8 +42161,8 @@ YYLTYPE yylloc; ;} break; - case 1376: -#line 10377 "gram.y" + case 1383: +#line 10438 "gram.y" { CreatePublicationStmt *n = makeNode(CreatePublicationStmt); @@ -41095,8 +42174,8 @@ YYLTYPE yylloc; ;} break; - case 1377: -#line 10403 "gram.y" + case 1384: +#line 10464 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_TABLE; @@ -41107,8 +42186,8 @@ YYLTYPE yylloc; ;} break; - case 1378: -#line 10412 "gram.y" + case 1385: +#line 10473 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_TABLES_IN_SCHEMA; @@ -41117,8 +42196,8 @@ YYLTYPE yylloc; ;} break; - case 1379: -#line 10419 "gram.y" + case 1386: +#line 10480 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA; @@ -41126,8 +42205,8 @@ YYLTYPE yylloc; ;} break; - case 1380: -#line 10425 "gram.y" + case 1387: +#line 10486 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_CONTINUATION; @@ -41156,8 +42235,8 @@ YYLTYPE yylloc; ;} break; - case 1381: -#line 10452 "gram.y" + case 1388: +#line 10513 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_CONTINUATION; @@ -41169,8 +42248,8 @@ YYLTYPE yylloc; ;} break; - case 1382: -#line 10463 "gram.y" + case 1389: +#line 10524 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_CONTINUATION; @@ -41181,8 +42260,8 @@ YYLTYPE yylloc; ;} break; - case 1383: -#line 10472 "gram.y" + case 1390: +#line 10533 "gram.y" { (yyval.publicationobjectspec) = makeNode(PublicationObjSpec); (yyval.publicationobjectspec)->pubobjtype = PUBLICATIONOBJ_CONTINUATION; @@ -41190,18 +42269,18 @@ YYLTYPE yylloc; ;} break; - case 1384: -#line 10480 "gram.y" + case 1391: +#line 10541 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].publicationobjectspec)); ;} break; - case 1385: -#line 10482 "gram.y" + case 1392: +#line 10543 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].publicationobjectspec)); ;} break; - case 1386: -#line 10504 "gram.y" + case 1393: +#line 10565 "gram.y" { AlterPublicationStmt *n = makeNode(AlterPublicationStmt); @@ -41211,8 +42290,8 @@ YYLTYPE yylloc; ;} break; - case 1387: -#line 10512 "gram.y" + case 1394: +#line 10573 "gram.y" { AlterPublicationStmt *n = makeNode(AlterPublicationStmt); @@ -41224,8 +42303,8 @@ YYLTYPE yylloc; ;} break; - case 1388: -#line 10522 "gram.y" + case 1395: +#line 10583 "gram.y" { AlterPublicationStmt *n = makeNode(AlterPublicationStmt); @@ -41237,8 +42316,8 @@ YYLTYPE yylloc; ;} break; - case 1389: -#line 10532 "gram.y" + case 1396: +#line 10593 "gram.y" { AlterPublicationStmt *n = makeNode(AlterPublicationStmt); @@ -41250,8 +42329,8 @@ YYLTYPE yylloc; ;} break; - case 1390: -#line 10551 "gram.y" + case 1397: +#line 10612 "gram.y" { CreateSubscriptionStmt *n = makeNode(CreateSubscriptionStmt); @@ -41263,8 +42342,8 @@ YYLTYPE yylloc; ;} break; - case 1391: -#line 10570 "gram.y" + case 1398: +#line 10631 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41276,8 +42355,8 @@ YYLTYPE yylloc; ;} break; - case 1392: -#line 10580 "gram.y" + case 1399: +#line 10641 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41289,8 +42368,8 @@ YYLTYPE yylloc; ;} break; - case 1393: -#line 10590 "gram.y" + case 1400: +#line 10651 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41302,8 +42381,8 @@ YYLTYPE yylloc; ;} break; - case 1394: -#line 10600 "gram.y" + case 1401: +#line 10661 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41316,8 +42395,8 @@ YYLTYPE yylloc; ;} break; - case 1395: -#line 10611 "gram.y" + case 1402: +#line 10672 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41330,8 +42409,8 @@ YYLTYPE yylloc; ;} break; - case 1396: -#line 10622 "gram.y" + case 1403: +#line 10683 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41344,8 +42423,8 @@ YYLTYPE yylloc; ;} break; - case 1397: -#line 10633 "gram.y" + case 1404: +#line 10694 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41358,8 +42437,8 @@ YYLTYPE yylloc; ;} break; - case 1398: -#line 10644 "gram.y" + case 1405: +#line 10705 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41372,8 +42451,8 @@ YYLTYPE yylloc; ;} break; - case 1399: -#line 10655 "gram.y" + case 1406: +#line 10716 "gram.y" { AlterSubscriptionStmt *n = makeNode(AlterSubscriptionStmt); @@ -41385,8 +42464,8 @@ YYLTYPE yylloc; ;} break; - case 1400: -#line 10673 "gram.y" + case 1407: +#line 10734 "gram.y" { DropSubscriptionStmt *n = makeNode(DropSubscriptionStmt); @@ -41397,8 +42476,8 @@ YYLTYPE yylloc; ;} break; - case 1401: -#line 10682 "gram.y" + case 1408: +#line 10743 "gram.y" { DropSubscriptionStmt *n = makeNode(DropSubscriptionStmt); @@ -41409,8 +42488,8 @@ YYLTYPE yylloc; ;} break; - case 1402: -#line 10701 "gram.y" + case 1409: +#line 10762 "gram.y" { RuleStmt *n = makeNode(RuleStmt); @@ -41425,23 +42504,23 @@ YYLTYPE yylloc; ;} break; - case 1403: -#line 10716 "gram.y" + case 1410: +#line 10777 "gram.y" { (yyval.list) = NIL; ;} break; - case 1404: -#line 10717 "gram.y" + case 1411: +#line 10778 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1405: -#line 10718 "gram.y" + case 1412: +#line 10779 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1406: -#line 10724 "gram.y" + case 1413: +#line 10785 "gram.y" { if ((yyvsp[(3) - (3)].node) != NULL) (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); else @@ -41449,8 +42528,8 @@ YYLTYPE yylloc; ;} break; - case 1407: -#line 10730 "gram.y" + case 1414: +#line 10791 "gram.y" { if ((yyvsp[(1) - (1)].node) != NULL) (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); else @@ -41458,53 +42537,53 @@ YYLTYPE yylloc; ;} break; - case 1413: -#line 10746 "gram.y" + case 1420: +#line 10807 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1414: -#line 10747 "gram.y" + case 1421: +#line 10808 "gram.y" { (yyval.node) = NULL; ;} break; - case 1415: -#line 10750 "gram.y" + case 1422: +#line 10811 "gram.y" { (yyval.ival) = CMD_SELECT; ;} break; - case 1416: -#line 10751 "gram.y" + case 1423: +#line 10812 "gram.y" { (yyval.ival) = CMD_UPDATE; ;} break; - case 1417: -#line 10752 "gram.y" + case 1424: +#line 10813 "gram.y" { (yyval.ival) = CMD_DELETE; ;} break; - case 1418: -#line 10753 "gram.y" + case 1425: +#line 10814 "gram.y" { (yyval.ival) = CMD_INSERT; ;} break; - case 1419: -#line 10757 "gram.y" + case 1426: +#line 10818 "gram.y" { (yyval.boolean) = true; ;} break; - case 1420: -#line 10758 "gram.y" + case 1427: +#line 10819 "gram.y" { (yyval.boolean) = false; ;} break; - case 1421: -#line 10759 "gram.y" + case 1428: +#line 10820 "gram.y" { (yyval.boolean) = false; ;} break; - case 1422: -#line 10772 "gram.y" + case 1429: +#line 10833 "gram.y" { NotifyStmt *n = makeNode(NotifyStmt); @@ -41514,18 +42593,18 @@ YYLTYPE yylloc; ;} break; - case 1423: -#line 10782 "gram.y" + case 1430: +#line 10843 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 1424: -#line 10783 "gram.y" + case 1431: +#line 10844 "gram.y" { (yyval.str) = NULL; ;} break; - case 1425: -#line 10787 "gram.y" + case 1432: +#line 10848 "gram.y" { ListenStmt *n = makeNode(ListenStmt); @@ -41534,8 +42613,8 @@ YYLTYPE yylloc; ;} break; - case 1426: -#line 10797 "gram.y" + case 1433: +#line 10858 "gram.y" { UnlistenStmt *n = makeNode(UnlistenStmt); @@ -41544,8 +42623,8 @@ YYLTYPE yylloc; ;} break; - case 1427: -#line 10804 "gram.y" + case 1434: +#line 10865 "gram.y" { UnlistenStmt *n = makeNode(UnlistenStmt); @@ -41554,8 +42633,8 @@ YYLTYPE yylloc; ;} break; - case 1428: -#line 10824 "gram.y" + case 1435: +#line 10885 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41566,8 +42645,8 @@ YYLTYPE yylloc; ;} break; - case 1429: -#line 10833 "gram.y" + case 1436: +#line 10894 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41577,8 +42656,8 @@ YYLTYPE yylloc; ;} break; - case 1430: -#line 10841 "gram.y" + case 1437: +#line 10902 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41589,8 +42668,8 @@ YYLTYPE yylloc; ;} break; - case 1431: -#line 10850 "gram.y" + case 1438: +#line 10911 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41601,8 +42680,8 @@ YYLTYPE yylloc; ;} break; - case 1432: -#line 10859 "gram.y" + case 1439: +#line 10920 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41612,8 +42691,8 @@ YYLTYPE yylloc; ;} break; - case 1433: -#line 10867 "gram.y" + case 1440: +#line 10928 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41623,8 +42702,8 @@ YYLTYPE yylloc; ;} break; - case 1434: -#line 10875 "gram.y" + case 1441: +#line 10936 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41634,8 +42713,8 @@ YYLTYPE yylloc; ;} break; - case 1435: -#line 10883 "gram.y" + case 1442: +#line 10944 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41645,8 +42724,8 @@ YYLTYPE yylloc; ;} break; - case 1436: -#line 10891 "gram.y" + case 1443: +#line 10952 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41656,8 +42735,8 @@ YYLTYPE yylloc; ;} break; - case 1437: -#line 10899 "gram.y" + case 1444: +#line 10960 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41667,8 +42746,8 @@ YYLTYPE yylloc; ;} break; - case 1438: -#line 10907 "gram.y" + case 1445: +#line 10968 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41678,8 +42757,8 @@ YYLTYPE yylloc; ;} break; - case 1439: -#line 10915 "gram.y" + case 1446: +#line 10976 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41689,8 +42768,8 @@ YYLTYPE yylloc; ;} break; - case 1440: -#line 10926 "gram.y" + case 1447: +#line 10987 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41700,8 +42779,8 @@ YYLTYPE yylloc; ;} break; - case 1441: -#line 10934 "gram.y" + case 1448: +#line 10995 "gram.y" { TransactionStmt *n = makeNode(TransactionStmt); @@ -41712,73 +42791,73 @@ YYLTYPE yylloc; ;} break; - case 1445: -#line 10951 "gram.y" + case 1452: +#line 11012 "gram.y" { (yyval.defelt) = makeDefElem("transaction_isolation", makeStringConst((yyvsp[(3) - (3)].str), (yylsp[(3) - (3)])), (yylsp[(1) - (3)])); ;} break; - case 1446: -#line 10954 "gram.y" + case 1453: +#line 11015 "gram.y" { (yyval.defelt) = makeDefElem("transaction_read_only", makeIntConst(true, (yylsp[(1) - (2)])), (yylsp[(1) - (2)])); ;} break; - case 1447: -#line 10957 "gram.y" + case 1454: +#line 11018 "gram.y" { (yyval.defelt) = makeDefElem("transaction_read_only", makeIntConst(false, (yylsp[(1) - (2)])), (yylsp[(1) - (2)])); ;} break; - case 1448: -#line 10960 "gram.y" + case 1455: +#line 11021 "gram.y" { (yyval.defelt) = makeDefElem("transaction_deferrable", makeIntConst(true, (yylsp[(1) - (1)])), (yylsp[(1) - (1)])); ;} break; - case 1449: -#line 10963 "gram.y" + case 1456: +#line 11024 "gram.y" { (yyval.defelt) = makeDefElem("transaction_deferrable", makeIntConst(false, (yylsp[(1) - (2)])), (yylsp[(1) - (2)])); ;} break; - case 1450: -#line 10970 "gram.y" + case 1457: +#line 11031 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1451: -#line 10972 "gram.y" + case 1458: +#line 11033 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 1452: -#line 10974 "gram.y" + case 1459: +#line 11035 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1454: -#line 10980 "gram.y" + case 1461: +#line 11041 "gram.y" { (yyval.list) = NIL; ;} break; - case 1455: -#line 10984 "gram.y" + case 1462: +#line 11045 "gram.y" { (yyval.boolean) = true; ;} break; - case 1456: -#line 10985 "gram.y" + case 1463: +#line 11046 "gram.y" { (yyval.boolean) = false; ;} break; - case 1457: -#line 10986 "gram.y" + case 1464: +#line 11047 "gram.y" { (yyval.boolean) = false; ;} break; - case 1458: -#line 11000 "gram.y" + case 1465: +#line 11061 "gram.y" { ViewStmt *n = makeNode(ViewStmt); @@ -41793,8 +42872,8 @@ YYLTYPE yylloc; ;} break; - case 1459: -#line 11014 "gram.y" + case 1466: +#line 11075 "gram.y" { ViewStmt *n = makeNode(ViewStmt); @@ -41809,8 +42888,8 @@ YYLTYPE yylloc; ;} break; - case 1460: -#line 11028 "gram.y" + case 1467: +#line 11089 "gram.y" { ViewStmt *n = makeNode(ViewStmt); @@ -41830,8 +42909,8 @@ YYLTYPE yylloc; ;} break; - case 1461: -#line 11047 "gram.y" + case 1468: +#line 11108 "gram.y" { ViewStmt *n = makeNode(ViewStmt); @@ -41851,28 +42930,28 @@ YYLTYPE yylloc; ;} break; - case 1462: -#line 11067 "gram.y" + case 1469: +#line 11128 "gram.y" { (yyval.ival) = CASCADED_CHECK_OPTION; ;} break; - case 1463: -#line 11068 "gram.y" + case 1470: +#line 11129 "gram.y" { (yyval.ival) = CASCADED_CHECK_OPTION; ;} break; - case 1464: -#line 11069 "gram.y" + case 1471: +#line 11130 "gram.y" { (yyval.ival) = LOCAL_CHECK_OPTION; ;} break; - case 1465: -#line 11070 "gram.y" + case 1472: +#line 11131 "gram.y" { (yyval.ival) = NO_CHECK_OPTION; ;} break; - case 1466: -#line 11081 "gram.y" + case 1473: +#line 11142 "gram.y" { LoadStmt *n = makeNode(LoadStmt); @@ -41881,8 +42960,8 @@ YYLTYPE yylloc; ;} break; - case 1467: -#line 11098 "gram.y" + case 1474: +#line 11159 "gram.y" { CreatedbStmt *n = makeNode(CreatedbStmt); @@ -41892,84 +42971,84 @@ YYLTYPE yylloc; ;} break; - case 1468: -#line 11108 "gram.y" + case 1475: +#line 11169 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1469: -#line 11109 "gram.y" + case 1476: +#line 11170 "gram.y" { (yyval.list) = NIL; ;} break; - case 1470: -#line 11113 "gram.y" + case 1477: +#line 11174 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1471: -#line 11114 "gram.y" + case 1478: +#line 11175 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1472: -#line 11119 "gram.y" + case 1479: +#line 11180 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); ;} break; - case 1473: -#line 11123 "gram.y" + case 1480: +#line 11184 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (Node *) makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); ;} break; - case 1474: -#line 11127 "gram.y" + case 1481: +#line 11188 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), NULL, (yylsp[(1) - (3)])); ;} break; - case 1475: -#line 11144 "gram.y" + case 1482: +#line 11205 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1476: -#line 11145 "gram.y" + case 1483: +#line 11206 "gram.y" { (yyval.str) = pstrdup("connection_limit"); ;} break; - case 1477: -#line 11146 "gram.y" + case 1484: +#line 11207 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1478: -#line 11147 "gram.y" + case 1485: +#line 11208 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1479: -#line 11148 "gram.y" + case 1486: +#line 11209 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1480: -#line 11149 "gram.y" + case 1487: +#line 11210 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1481: -#line 11150 "gram.y" + case 1488: +#line 11211 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1484: -#line 11170 "gram.y" + case 1491: +#line 11231 "gram.y" { AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); @@ -41979,8 +43058,8 @@ YYLTYPE yylloc; ;} break; - case 1485: -#line 11178 "gram.y" + case 1492: +#line 11239 "gram.y" { AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); @@ -41990,8 +43069,8 @@ YYLTYPE yylloc; ;} break; - case 1486: -#line 11186 "gram.y" + case 1493: +#line 11247 "gram.y" { AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); @@ -42002,8 +43081,8 @@ YYLTYPE yylloc; ;} break; - case 1487: -#line 11195 "gram.y" + case 1494: +#line 11256 "gram.y" { AlterDatabaseRefreshCollStmt *n = makeNode(AlterDatabaseRefreshCollStmt); @@ -42012,8 +43091,8 @@ YYLTYPE yylloc; ;} break; - case 1488: -#line 11205 "gram.y" + case 1495: +#line 11266 "gram.y" { AlterDatabaseSetStmt *n = makeNode(AlterDatabaseSetStmt); @@ -42023,8 +43102,8 @@ YYLTYPE yylloc; ;} break; - case 1489: -#line 11223 "gram.y" + case 1496: +#line 11284 "gram.y" { DropdbStmt *n = makeNode(DropdbStmt); @@ -42035,8 +43114,8 @@ YYLTYPE yylloc; ;} break; - case 1490: -#line 11232 "gram.y" + case 1497: +#line 11293 "gram.y" { DropdbStmt *n = makeNode(DropdbStmt); @@ -42047,8 +43126,8 @@ YYLTYPE yylloc; ;} break; - case 1491: -#line 11241 "gram.y" + case 1498: +#line 11302 "gram.y" { DropdbStmt *n = makeNode(DropdbStmt); @@ -42059,8 +43138,8 @@ YYLTYPE yylloc; ;} break; - case 1492: -#line 11250 "gram.y" + case 1499: +#line 11311 "gram.y" { DropdbStmt *n = makeNode(DropdbStmt); @@ -42071,29 +43150,29 @@ YYLTYPE yylloc; ;} break; - case 1493: -#line 11262 "gram.y" + case 1500: +#line 11323 "gram.y" { (yyval.list) = list_make1((Node *) (yyvsp[(1) - (1)].defelt)); ;} break; - case 1494: -#line 11266 "gram.y" + case 1501: +#line 11327 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (Node *) (yyvsp[(3) - (3)].defelt)); ;} break; - case 1495: -#line 11277 "gram.y" + case 1502: +#line 11338 "gram.y" { (yyval.defelt) = makeDefElem("force", NULL, (yylsp[(1) - (1)])); ;} break; - case 1496: -#line 11289 "gram.y" + case 1503: +#line 11350 "gram.y" { AlterCollationStmt *n = makeNode(AlterCollationStmt); @@ -42102,8 +43181,8 @@ YYLTYPE yylloc; ;} break; - case 1497: -#line 11307 "gram.y" + case 1504: +#line 11368 "gram.y" { AlterSystemStmt *n = makeNode(AlterSystemStmt); @@ -42112,8 +43191,8 @@ YYLTYPE yylloc; ;} break; - case 1498: -#line 11314 "gram.y" + case 1505: +#line 11375 "gram.y" { AlterSystemStmt *n = makeNode(AlterSystemStmt); @@ -42122,8 +43201,8 @@ YYLTYPE yylloc; ;} break; - case 1499: -#line 11331 "gram.y" + case 1506: +#line 11392 "gram.y" { CreateDomainStmt *n = makeNode(CreateDomainStmt); @@ -42135,8 +43214,8 @@ YYLTYPE yylloc; ;} break; - case 1500: -#line 11345 "gram.y" + case 1507: +#line 11406 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42147,8 +43226,8 @@ YYLTYPE yylloc; ;} break; - case 1501: -#line 11355 "gram.y" + case 1508: +#line 11416 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42158,8 +43237,8 @@ YYLTYPE yylloc; ;} break; - case 1502: -#line 11364 "gram.y" + case 1509: +#line 11425 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42169,8 +43248,8 @@ YYLTYPE yylloc; ;} break; - case 1503: -#line 11373 "gram.y" + case 1510: +#line 11434 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42181,8 +43260,8 @@ YYLTYPE yylloc; ;} break; - case 1504: -#line 11383 "gram.y" + case 1511: +#line 11444 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42195,8 +43274,8 @@ YYLTYPE yylloc; ;} break; - case 1505: -#line 11395 "gram.y" + case 1512: +#line 11456 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42209,8 +43288,8 @@ YYLTYPE yylloc; ;} break; - case 1506: -#line 11407 "gram.y" + case 1513: +#line 11468 "gram.y" { AlterDomainStmt *n = makeNode(AlterDomainStmt); @@ -42221,8 +43300,8 @@ YYLTYPE yylloc; ;} break; - case 1509: -#line 11430 "gram.y" + case 1516: +#line 11491 "gram.y" { AlterTSDictionaryStmt *n = makeNode(AlterTSDictionaryStmt); @@ -42232,8 +43311,8 @@ YYLTYPE yylloc; ;} break; - case 1510: -#line 11441 "gram.y" + case 1517: +#line 11502 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42247,8 +43326,8 @@ YYLTYPE yylloc; ;} break; - case 1511: -#line 11453 "gram.y" + case 1518: +#line 11514 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42262,8 +43341,8 @@ YYLTYPE yylloc; ;} break; - case 1512: -#line 11465 "gram.y" + case 1519: +#line 11526 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42277,8 +43356,8 @@ YYLTYPE yylloc; ;} break; - case 1513: -#line 11477 "gram.y" + case 1520: +#line 11538 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42292,8 +43371,8 @@ YYLTYPE yylloc; ;} break; - case 1514: -#line 11489 "gram.y" + case 1521: +#line 11550 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42305,8 +43384,8 @@ YYLTYPE yylloc; ;} break; - case 1515: -#line 11499 "gram.y" + case 1522: +#line 11560 "gram.y" { AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); @@ -42318,8 +43397,8 @@ YYLTYPE yylloc; ;} break; - case 1518: -#line 11528 "gram.y" + case 1525: +#line 11589 "gram.y" { CreateConversionStmt *n = makeNode(CreateConversionStmt); @@ -42332,8 +43411,8 @@ YYLTYPE yylloc; ;} break; - case 1519: -#line 11552 "gram.y" + case 1526: +#line 11613 "gram.y" { ClusterStmt *n = makeNode(ClusterStmt); @@ -42346,8 +43425,8 @@ YYLTYPE yylloc; ;} break; - case 1520: -#line 11564 "gram.y" + case 1527: +#line 11625 "gram.y" { ClusterStmt *n = makeNode(ClusterStmt); @@ -42358,8 +43437,8 @@ YYLTYPE yylloc; ;} break; - case 1521: -#line 11573 "gram.y" + case 1528: +#line 11634 "gram.y" { ClusterStmt *n = makeNode(ClusterStmt); @@ -42372,8 +43451,8 @@ YYLTYPE yylloc; ;} break; - case 1522: -#line 11585 "gram.y" + case 1529: +#line 11646 "gram.y" { ClusterStmt *n = makeNode(ClusterStmt); @@ -42386,18 +43465,18 @@ YYLTYPE yylloc; ;} break; - case 1523: -#line 11598 "gram.y" + case 1530: +#line 11659 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 1524: -#line 11599 "gram.y" + case 1531: +#line 11660 "gram.y" { (yyval.str) = NULL; ;} break; - case 1525: -#line 11612 "gram.y" + case 1532: +#line 11673 "gram.y" { VacuumStmt *n = makeNode(VacuumStmt); @@ -42420,8 +43499,8 @@ YYLTYPE yylloc; ;} break; - case 1526: -#line 11633 "gram.y" + case 1533: +#line 11694 "gram.y" { VacuumStmt *n = makeNode(VacuumStmt); @@ -42432,8 +43511,8 @@ YYLTYPE yylloc; ;} break; - case 1527: -#line 11644 "gram.y" + case 1534: +#line 11705 "gram.y" { VacuumStmt *n = makeNode(VacuumStmt); @@ -42447,8 +43526,8 @@ YYLTYPE yylloc; ;} break; - case 1528: -#line 11656 "gram.y" + case 1535: +#line 11717 "gram.y" { VacuumStmt *n = makeNode(VacuumStmt); @@ -42459,131 +43538,136 @@ YYLTYPE yylloc; ;} break; - case 1529: -#line 11668 "gram.y" + case 1536: +#line 11729 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1530: -#line 11672 "gram.y" + case 1537: +#line 11733 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 1533: -#line 11684 "gram.y" + case 1540: +#line 11745 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1534: -#line 11690 "gram.y" + case 1541: +#line 11751 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1535: -#line 11691 "gram.y" + case 1542: +#line 11752 "gram.y" { (yyval.str) = "analyze"; ;} break; - case 1536: -#line 11695 "gram.y" + case 1543: +#line 11753 "gram.y" + { (yyval.str) = "format"; ;} + break; + + case 1544: +#line 11757 "gram.y" { (yyval.node) = (Node *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 1537: -#line 11696 "gram.y" + case 1545: +#line 11758 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].node); ;} break; - case 1538: -#line 11697 "gram.y" + case 1546: +#line 11759 "gram.y" { (yyval.node) = NULL; ;} break; - case 1539: -#line 11701 "gram.y" + case 1547: +#line 11763 "gram.y" { (yyval.boolean) = true; ;} break; - case 1540: -#line 11702 "gram.y" + case 1548: +#line 11764 "gram.y" { (yyval.boolean) = false; ;} break; - case 1541: -#line 11706 "gram.y" + case 1549: +#line 11768 "gram.y" { (yyval.boolean) = true; ;} break; - case 1542: -#line 11707 "gram.y" + case 1550: +#line 11769 "gram.y" { (yyval.boolean) = false; ;} break; - case 1543: -#line 11710 "gram.y" + case 1551: +#line 11772 "gram.y" { (yyval.boolean) = true; ;} break; - case 1544: -#line 11711 "gram.y" + case 1552: +#line 11773 "gram.y" { (yyval.boolean) = false; ;} break; - case 1545: -#line 11714 "gram.y" + case 1553: +#line 11776 "gram.y" { (yyval.boolean) = true; ;} break; - case 1546: -#line 11715 "gram.y" + case 1554: +#line 11777 "gram.y" { (yyval.boolean) = false; ;} break; - case 1547: -#line 11719 "gram.y" + case 1555: +#line 11781 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1548: -#line 11720 "gram.y" + case 1556: +#line 11782 "gram.y" { (yyval.list) = NIL; ;} break; - case 1549: -#line 11725 "gram.y" + case 1557: +#line 11787 "gram.y" { (yyval.node) = (Node *) makeVacuumRelation((yyvsp[(1) - (2)].range), InvalidOid, (yyvsp[(2) - (2)].list)); ;} break; - case 1550: -#line 11732 "gram.y" + case 1558: +#line 11794 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1551: -#line 11734 "gram.y" + case 1559: +#line 11796 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1552: -#line 11738 "gram.y" + case 1560: +#line 11800 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1553: -#line 11739 "gram.y" + case 1561: +#line 11801 "gram.y" { (yyval.list) = NIL; ;} break; - case 1554: -#line 11753 "gram.y" + case 1562: +#line 11815 "gram.y" { ExplainStmt *n = makeNode(ExplainStmt); @@ -42593,8 +43677,8 @@ YYLTYPE yylloc; ;} break; - case 1555: -#line 11761 "gram.y" + case 1563: +#line 11823 "gram.y" { ExplainStmt *n = makeNode(ExplainStmt); @@ -42607,8 +43691,8 @@ YYLTYPE yylloc; ;} break; - case 1556: -#line 11772 "gram.y" + case 1564: +#line 11834 "gram.y" { ExplainStmt *n = makeNode(ExplainStmt); @@ -42618,8 +43702,8 @@ YYLTYPE yylloc; ;} break; - case 1557: -#line 11780 "gram.y" + case 1565: +#line 11842 "gram.y" { ExplainStmt *n = makeNode(ExplainStmt); @@ -42629,8 +43713,8 @@ YYLTYPE yylloc; ;} break; - case 1568: -#line 11810 "gram.y" + case 1576: +#line 11872 "gram.y" { PrepareStmt *n = makeNode(PrepareStmt); @@ -42641,18 +43725,18 @@ YYLTYPE yylloc; ;} break; - case 1569: -#line 11820 "gram.y" + case 1577: +#line 11882 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1570: -#line 11821 "gram.y" + case 1578: +#line 11883 "gram.y" { (yyval.list) = NIL; ;} break; - case 1576: -#line 11840 "gram.y" + case 1584: +#line 11902 "gram.y" { ExecuteStmt *n = makeNode(ExecuteStmt); @@ -42662,8 +43746,8 @@ YYLTYPE yylloc; ;} break; - case 1577: -#line 11849 "gram.y" + case 1585: +#line 11911 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); ExecuteStmt *n = makeNode(ExecuteStmt); @@ -42682,8 +43766,8 @@ YYLTYPE yylloc; ;} break; - case 1578: -#line 11867 "gram.y" + case 1586: +#line 11929 "gram.y" { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); ExecuteStmt *n = makeNode(ExecuteStmt); @@ -42702,18 +43786,18 @@ YYLTYPE yylloc; ;} break; - case 1579: -#line 11885 "gram.y" + case 1587: +#line 11947 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1580: -#line 11886 "gram.y" + case 1588: +#line 11948 "gram.y" { (yyval.list) = NIL; ;} break; - case 1581: -#line 11897 "gram.y" + case 1589: +#line 11959 "gram.y" { DeallocateStmt *n = makeNode(DeallocateStmt); @@ -42722,8 +43806,8 @@ YYLTYPE yylloc; ;} break; - case 1582: -#line 11904 "gram.y" + case 1590: +#line 11966 "gram.y" { DeallocateStmt *n = makeNode(DeallocateStmt); @@ -42732,8 +43816,8 @@ YYLTYPE yylloc; ;} break; - case 1583: -#line 11911 "gram.y" + case 1591: +#line 11973 "gram.y" { DeallocateStmt *n = makeNode(DeallocateStmt); @@ -42742,8 +43826,8 @@ YYLTYPE yylloc; ;} break; - case 1584: -#line 11918 "gram.y" + case 1592: +#line 11980 "gram.y" { DeallocateStmt *n = makeNode(DeallocateStmt); @@ -42752,8 +43836,8 @@ YYLTYPE yylloc; ;} break; - case 1585: -#line 11936 "gram.y" + case 1593: +#line 11998 "gram.y" { (yyvsp[(5) - (7)].istmt)->relation = (yyvsp[(4) - (7)].range); (yyvsp[(5) - (7)].istmt)->onConflictClause = (yyvsp[(6) - (7)].onconflict); @@ -42763,23 +43847,23 @@ YYLTYPE yylloc; ;} break; - case 1586: -#line 11953 "gram.y" + case 1594: +#line 12015 "gram.y" { (yyval.range) = (yyvsp[(1) - (1)].range); ;} break; - case 1587: -#line 11957 "gram.y" + case 1595: +#line 12019 "gram.y" { (yyvsp[(1) - (3)].range)->alias = makeAlias((yyvsp[(3) - (3)].str), NIL); (yyval.range) = (yyvsp[(1) - (3)].range); ;} break; - case 1588: -#line 11965 "gram.y" + case 1596: +#line 12027 "gram.y" { (yyval.istmt) = makeNode(InsertStmt); (yyval.istmt)->cols = NIL; @@ -42787,8 +43871,8 @@ YYLTYPE yylloc; ;} break; - case 1589: -#line 11971 "gram.y" + case 1597: +#line 12033 "gram.y" { (yyval.istmt) = makeNode(InsertStmt); (yyval.istmt)->cols = NIL; @@ -42797,8 +43881,8 @@ YYLTYPE yylloc; ;} break; - case 1590: -#line 11978 "gram.y" + case 1598: +#line 12040 "gram.y" { (yyval.istmt) = makeNode(InsertStmt); (yyval.istmt)->cols = (yyvsp[(2) - (4)].list); @@ -42806,8 +43890,8 @@ YYLTYPE yylloc; ;} break; - case 1591: -#line 11984 "gram.y" + case 1599: +#line 12046 "gram.y" { (yyval.istmt) = makeNode(InsertStmt); (yyval.istmt)->cols = (yyvsp[(2) - (7)].list); @@ -42816,8 +43900,8 @@ YYLTYPE yylloc; ;} break; - case 1592: -#line 11991 "gram.y" + case 1600: +#line 12053 "gram.y" { (yyval.istmt) = makeNode(InsertStmt); (yyval.istmt)->cols = NIL; @@ -42825,28 +43909,28 @@ YYLTYPE yylloc; ;} break; - case 1593: -#line 11999 "gram.y" + case 1601: +#line 12061 "gram.y" { (yyval.ival) = OVERRIDING_USER_VALUE; ;} break; - case 1594: -#line 12000 "gram.y" + case 1602: +#line 12062 "gram.y" { (yyval.ival) = OVERRIDING_SYSTEM_VALUE; ;} break; - case 1595: -#line 12005 "gram.y" + case 1603: +#line 12067 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 1596: -#line 12007 "gram.y" + case 1604: +#line 12069 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 1597: -#line 12012 "gram.y" + case 1605: +#line 12074 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(1) - (2)].str); @@ -42856,8 +43940,8 @@ YYLTYPE yylloc; ;} break; - case 1598: -#line 12023 "gram.y" + case 1606: +#line 12085 "gram.y" { (yyval.onconflict) = makeNode(OnConflictClause); (yyval.onconflict)->action = ONCONFLICT_UPDATE; @@ -42868,8 +43952,8 @@ YYLTYPE yylloc; ;} break; - case 1599: -#line 12033 "gram.y" + case 1607: +#line 12095 "gram.y" { (yyval.onconflict) = makeNode(OnConflictClause); (yyval.onconflict)->action = ONCONFLICT_NOTHING; @@ -42880,15 +43964,15 @@ YYLTYPE yylloc; ;} break; - case 1600: -#line 12042 "gram.y" + case 1608: +#line 12104 "gram.y" { (yyval.onconflict) = NULL; ;} break; - case 1601: -#line 12049 "gram.y" + case 1609: +#line 12111 "gram.y" { (yyval.infer) = makeNode(InferClause); (yyval.infer)->indexElems = (yyvsp[(2) - (4)].list); @@ -42898,8 +43982,8 @@ YYLTYPE yylloc; ;} break; - case 1602: -#line 12058 "gram.y" + case 1610: +#line 12120 "gram.y" { (yyval.infer) = makeNode(InferClause); (yyval.infer)->indexElems = NIL; @@ -42909,25 +43993,25 @@ YYLTYPE yylloc; ;} break; - case 1603: -#line 12066 "gram.y" + case 1611: +#line 12128 "gram.y" { (yyval.infer) = NULL; ;} break; - case 1604: -#line 12072 "gram.y" + case 1612: +#line 12134 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1605: -#line 12073 "gram.y" + case 1613: +#line 12135 "gram.y" { (yyval.list) = NIL; ;} break; - case 1606: -#line 12086 "gram.y" + case 1614: +#line 12148 "gram.y" { DeleteStmt *n = makeNode(DeleteStmt); @@ -42940,18 +44024,18 @@ YYLTYPE yylloc; ;} break; - case 1607: -#line 12099 "gram.y" + case 1615: +#line 12161 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1608: -#line 12100 "gram.y" + case 1616: +#line 12162 "gram.y" { (yyval.list) = NIL; ;} break; - case 1609: -#line 12112 "gram.y" + case 1617: +#line 12174 "gram.y" { LockStmt *n = makeNode(LockStmt); @@ -42962,83 +44046,83 @@ YYLTYPE yylloc; ;} break; - case 1610: -#line 12122 "gram.y" + case 1618: +#line 12184 "gram.y" { (yyval.ival) = (yyvsp[(2) - (3)].ival); ;} break; - case 1611: -#line 12123 "gram.y" + case 1619: +#line 12185 "gram.y" { (yyval.ival) = AccessExclusiveLock; ;} break; - case 1612: -#line 12126 "gram.y" + case 1620: +#line 12188 "gram.y" { (yyval.ival) = AccessShareLock; ;} break; - case 1613: -#line 12127 "gram.y" + case 1621: +#line 12189 "gram.y" { (yyval.ival) = RowShareLock; ;} break; - case 1614: -#line 12128 "gram.y" + case 1622: +#line 12190 "gram.y" { (yyval.ival) = RowExclusiveLock; ;} break; - case 1615: -#line 12129 "gram.y" + case 1623: +#line 12191 "gram.y" { (yyval.ival) = ShareUpdateExclusiveLock; ;} break; - case 1616: -#line 12130 "gram.y" + case 1624: +#line 12192 "gram.y" { (yyval.ival) = ShareLock; ;} break; - case 1617: -#line 12131 "gram.y" + case 1625: +#line 12193 "gram.y" { (yyval.ival) = ShareRowExclusiveLock; ;} break; - case 1618: -#line 12132 "gram.y" + case 1626: +#line 12194 "gram.y" { (yyval.ival) = ExclusiveLock; ;} break; - case 1619: -#line 12133 "gram.y" + case 1627: +#line 12195 "gram.y" { (yyval.ival) = AccessExclusiveLock; ;} break; - case 1620: -#line 12136 "gram.y" + case 1628: +#line 12198 "gram.y" { (yyval.boolean) = true; ;} break; - case 1621: -#line 12137 "gram.y" + case 1629: +#line 12199 "gram.y" { (yyval.boolean) = false; ;} break; - case 1622: -#line 12141 "gram.y" + case 1630: +#line 12203 "gram.y" { (yyval.ival) = LockWaitError; ;} break; - case 1623: -#line 12142 "gram.y" + case 1631: +#line 12204 "gram.y" { (yyval.ival) = LockWaitSkip; ;} break; - case 1624: -#line 12143 "gram.y" + case 1632: +#line 12205 "gram.y" { (yyval.ival) = LockWaitBlock; ;} break; - case 1625: -#line 12159 "gram.y" + case 1633: +#line 12221 "gram.y" { UpdateStmt *n = makeNode(UpdateStmt); @@ -43052,26 +44136,26 @@ YYLTYPE yylloc; ;} break; - case 1626: -#line 12173 "gram.y" + case 1634: +#line 12235 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1627: -#line 12174 "gram.y" + case 1635: +#line 12236 "gram.y" { (yyval.list) = list_concat((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].list)); ;} break; - case 1628: -#line 12179 "gram.y" + case 1636: +#line 12241 "gram.y" { (yyvsp[(1) - (3)].target)->val = (Node *) (yyvsp[(3) - (3)].node); (yyval.list) = list_make1((yyvsp[(1) - (3)].target)); ;} break; - case 1629: -#line 12184 "gram.y" + case 1637: +#line 12246 "gram.y" { int ncolumns = list_length((yyvsp[(2) - (5)].list)); int i = 1; @@ -43094,8 +44178,8 @@ YYLTYPE yylloc; ;} break; - case 1630: -#line 12208 "gram.y" + case 1638: +#line 12270 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(1) - (2)].str); @@ -43105,18 +44189,18 @@ YYLTYPE yylloc; ;} break; - case 1631: -#line 12218 "gram.y" + case 1639: +#line 12280 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 1632: -#line 12219 "gram.y" + case 1640: +#line 12281 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].target)); ;} break; - case 1633: -#line 12235 "gram.y" + case 1641: +#line 12297 "gram.y" { MergeStmt *m = makeNode(MergeStmt); @@ -43130,18 +44214,18 @@ YYLTYPE yylloc; ;} break; - case 1634: -#line 12249 "gram.y" + case 1642: +#line 12311 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1635: -#line 12250 "gram.y" + case 1643: +#line 12312 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list),(yyvsp[(2) - (2)].node)); ;} break; - case 1636: -#line 12255 "gram.y" + case 1644: +#line 12317 "gram.y" { (yyvsp[(5) - (5)].mergewhen)->matched = true; (yyvsp[(5) - (5)].mergewhen)->condition = (yyvsp[(3) - (5)].node); @@ -43150,8 +44234,8 @@ YYLTYPE yylloc; ;} break; - case 1637: -#line 12262 "gram.y" + case 1645: +#line 12324 "gram.y" { (yyvsp[(5) - (5)].mergewhen)->matched = true; (yyvsp[(5) - (5)].mergewhen)->condition = (yyvsp[(3) - (5)].node); @@ -43160,8 +44244,8 @@ YYLTYPE yylloc; ;} break; - case 1638: -#line 12269 "gram.y" + case 1646: +#line 12331 "gram.y" { (yyvsp[(6) - (6)].mergewhen)->matched = false; (yyvsp[(6) - (6)].mergewhen)->condition = (yyvsp[(4) - (6)].node); @@ -43170,8 +44254,8 @@ YYLTYPE yylloc; ;} break; - case 1639: -#line 12276 "gram.y" + case 1647: +#line 12338 "gram.y" { MergeWhenClause *m = makeNode(MergeWhenClause); @@ -43183,8 +44267,8 @@ YYLTYPE yylloc; ;} break; - case 1640: -#line 12286 "gram.y" + case 1648: +#line 12348 "gram.y" { MergeWhenClause *m = makeNode(MergeWhenClause); @@ -43196,18 +44280,18 @@ YYLTYPE yylloc; ;} break; - case 1641: -#line 12298 "gram.y" + case 1649: +#line 12360 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1642: -#line 12299 "gram.y" + case 1650: +#line 12361 "gram.y" { (yyval.node) = NULL; ;} break; - case 1643: -#line 12304 "gram.y" + case 1651: +#line 12366 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_UPDATE; @@ -43219,8 +44303,8 @@ YYLTYPE yylloc; ;} break; - case 1644: -#line 12317 "gram.y" + case 1652: +#line 12379 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_DELETE; @@ -43232,8 +44316,8 @@ YYLTYPE yylloc; ;} break; - case 1645: -#line 12330 "gram.y" + case 1653: +#line 12392 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_INSERT; @@ -43244,8 +44328,8 @@ YYLTYPE yylloc; ;} break; - case 1646: -#line 12339 "gram.y" + case 1654: +#line 12401 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_INSERT; @@ -43256,8 +44340,8 @@ YYLTYPE yylloc; ;} break; - case 1647: -#line 12348 "gram.y" + case 1655: +#line 12410 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_INSERT; @@ -43268,8 +44352,8 @@ YYLTYPE yylloc; ;} break; - case 1648: -#line 12357 "gram.y" + case 1656: +#line 12419 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_INSERT; @@ -43280,8 +44364,8 @@ YYLTYPE yylloc; ;} break; - case 1649: -#line 12366 "gram.y" + case 1657: +#line 12428 "gram.y" { MergeWhenClause *n = makeNode(MergeWhenClause); n->commandType = CMD_INSERT; @@ -43292,15 +44376,15 @@ YYLTYPE yylloc; ;} break; - case 1650: -#line 12378 "gram.y" + case 1658: +#line 12440 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1651: -#line 12390 "gram.y" + case 1659: +#line 12452 "gram.y" { DeclareCursorStmt *n = makeNode(DeclareCursorStmt); @@ -43312,73 +44396,73 @@ YYLTYPE yylloc; ;} break; - case 1652: -#line 12401 "gram.y" + case 1660: +#line 12463 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1653: -#line 12404 "gram.y" + case 1661: +#line 12466 "gram.y" { (yyval.ival) = 0; ;} break; - case 1654: -#line 12405 "gram.y" + case 1662: +#line 12467 "gram.y" { (yyval.ival) = (yyvsp[(1) - (3)].ival) | CURSOR_OPT_NO_SCROLL; ;} break; - case 1655: -#line 12406 "gram.y" + case 1663: +#line 12468 "gram.y" { (yyval.ival) = (yyvsp[(1) - (2)].ival) | CURSOR_OPT_SCROLL; ;} break; - case 1656: -#line 12407 "gram.y" + case 1664: +#line 12469 "gram.y" { (yyval.ival) = (yyvsp[(1) - (2)].ival) | CURSOR_OPT_BINARY; ;} break; - case 1657: -#line 12408 "gram.y" + case 1665: +#line 12470 "gram.y" { (yyval.ival) = (yyvsp[(1) - (2)].ival) | CURSOR_OPT_ASENSITIVE; ;} break; - case 1658: -#line 12409 "gram.y" + case 1666: +#line 12471 "gram.y" { (yyval.ival) = (yyvsp[(1) - (2)].ival) | CURSOR_OPT_INSENSITIVE; ;} break; - case 1659: -#line 12412 "gram.y" + case 1667: +#line 12474 "gram.y" { (yyval.ival) = 0; ;} break; - case 1660: -#line 12413 "gram.y" + case 1668: +#line 12475 "gram.y" { (yyval.ival) = CURSOR_OPT_HOLD; ;} break; - case 1661: -#line 12414 "gram.y" + case 1669: +#line 12476 "gram.y" { (yyval.ival) = 0; ;} break; - case 1664: -#line 12467 "gram.y" + case 1672: +#line 12529 "gram.y" { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 1665: -#line 12468 "gram.y" + case 1673: +#line 12530 "gram.y" { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 1666: -#line 12483 "gram.y" + case 1674: +#line 12545 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1667: -#line 12485 "gram.y" + case 1675: +#line 12547 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].list), NIL, NULL, NULL, @@ -43387,8 +44471,8 @@ YYLTYPE yylloc; ;} break; - case 1668: -#line 12492 "gram.y" + case 1676: +#line 12554 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].list), (yyvsp[(3) - (4)].list), (yyvsp[(4) - (4)].selectlimit), @@ -43398,8 +44482,8 @@ YYLTYPE yylloc; ;} break; - case 1669: -#line 12500 "gram.y" + case 1677: +#line 12562 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].list), (yyvsp[(4) - (4)].list), (yyvsp[(3) - (4)].selectlimit), @@ -43409,8 +44493,8 @@ YYLTYPE yylloc; ;} break; - case 1670: -#line 12508 "gram.y" + case 1678: +#line 12570 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(2) - (2)].node), NULL, NIL, NULL, @@ -43420,8 +44504,8 @@ YYLTYPE yylloc; ;} break; - case 1671: -#line 12516 "gram.y" + case 1679: +#line 12578 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(2) - (3)].node), (yyvsp[(3) - (3)].list), NIL, NULL, @@ -43431,8 +44515,8 @@ YYLTYPE yylloc; ;} break; - case 1672: -#line 12524 "gram.y" + case 1680: +#line 12586 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(2) - (5)].node), (yyvsp[(3) - (5)].list), (yyvsp[(4) - (5)].list), (yyvsp[(5) - (5)].selectlimit), @@ -43442,8 +44526,8 @@ YYLTYPE yylloc; ;} break; - case 1673: -#line 12532 "gram.y" + case 1681: +#line 12594 "gram.y" { insertSelectOptions((SelectStmt *) (yyvsp[(2) - (5)].node), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list), (yyvsp[(4) - (5)].selectlimit), @@ -43453,18 +44537,18 @@ YYLTYPE yylloc; ;} break; - case 1674: -#line 12542 "gram.y" + case 1682: +#line 12604 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1675: -#line 12543 "gram.y" + case 1683: +#line 12605 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1676: -#line 12578 "gram.y" + case 1684: +#line 12640 "gram.y" { SelectStmt *n = makeNode(SelectStmt); @@ -43480,8 +44564,8 @@ YYLTYPE yylloc; ;} break; - case 1677: -#line 12594 "gram.y" + case 1685: +#line 12656 "gram.y" { SelectStmt *n = makeNode(SelectStmt); @@ -43498,13 +44582,13 @@ YYLTYPE yylloc; ;} break; - case 1678: -#line 12608 "gram.y" + case 1686: +#line 12670 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1679: -#line 12610 "gram.y" + case 1687: +#line 12672 "gram.y" { /* same as SELECT * FROM relation_expr */ ColumnRef *cr = makeNode(ColumnRef); @@ -43525,29 +44609,29 @@ YYLTYPE yylloc; ;} break; - case 1680: -#line 12629 "gram.y" + case 1688: +#line 12691 "gram.y" { (yyval.node) = makeSetOp(SETOP_UNION, (yyvsp[(3) - (4)].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); ;} break; - case 1681: -#line 12633 "gram.y" + case 1689: +#line 12695 "gram.y" { (yyval.node) = makeSetOp(SETOP_INTERSECT, (yyvsp[(3) - (4)].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); ;} break; - case 1682: -#line 12637 "gram.y" + case 1690: +#line 12699 "gram.y" { (yyval.node) = makeSetOp(SETOP_EXCEPT, (yyvsp[(3) - (4)].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); ;} break; - case 1683: -#line 12652 "gram.y" + case 1691: +#line 12714 "gram.y" { (yyval.with) = makeNode(WithClause); (yyval.with)->ctes = (yyvsp[(2) - (2)].list); @@ -43556,8 +44640,8 @@ YYLTYPE yylloc; ;} break; - case 1684: -#line 12659 "gram.y" + case 1692: +#line 12721 "gram.y" { (yyval.with) = makeNode(WithClause); (yyval.with)->ctes = (yyvsp[(2) - (2)].list); @@ -43566,8 +44650,8 @@ YYLTYPE yylloc; ;} break; - case 1685: -#line 12666 "gram.y" + case 1693: +#line 12728 "gram.y" { (yyval.with) = makeNode(WithClause); (yyval.with)->ctes = (yyvsp[(3) - (3)].list); @@ -43576,18 +44660,18 @@ YYLTYPE yylloc; ;} break; - case 1686: -#line 12675 "gram.y" + case 1694: +#line 12737 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1687: -#line 12676 "gram.y" + case 1695: +#line 12738 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1688: -#line 12680 "gram.y" + case 1696: +#line 12742 "gram.y" { CommonTableExpr *n = makeNode(CommonTableExpr); @@ -43602,23 +44686,23 @@ YYLTYPE yylloc; ;} break; - case 1689: -#line 12695 "gram.y" + case 1697: +#line 12757 "gram.y" { (yyval.ival) = CTEMaterializeAlways; ;} break; - case 1690: -#line 12696 "gram.y" + case 1698: +#line 12758 "gram.y" { (yyval.ival) = CTEMaterializeNever; ;} break; - case 1691: -#line 12697 "gram.y" + case 1699: +#line 12759 "gram.y" { (yyval.ival) = CTEMaterializeDefault; ;} break; - case 1692: -#line 12702 "gram.y" + case 1700: +#line 12764 "gram.y" { CTESearchClause *n = makeNode(CTESearchClause); @@ -43630,8 +44714,8 @@ YYLTYPE yylloc; ;} break; - case 1693: -#line 12712 "gram.y" + case 1701: +#line 12774 "gram.y" { CTESearchClause *n = makeNode(CTESearchClause); @@ -43643,15 +44727,15 @@ YYLTYPE yylloc; ;} break; - case 1694: -#line 12722 "gram.y" + case 1702: +#line 12784 "gram.y" { (yyval.node) = NULL; ;} break; - case 1695: -#line 12729 "gram.y" + case 1703: +#line 12791 "gram.y" { CTECycleClause *n = makeNode(CTECycleClause); @@ -43665,8 +44749,8 @@ YYLTYPE yylloc; ;} break; - case 1696: -#line 12741 "gram.y" + case 1704: +#line 12803 "gram.y" { CTECycleClause *n = makeNode(CTECycleClause); @@ -43680,25 +44764,25 @@ YYLTYPE yylloc; ;} break; - case 1697: -#line 12753 "gram.y" + case 1705: +#line 12815 "gram.y" { (yyval.node) = NULL; ;} break; - case 1698: -#line 12759 "gram.y" + case 1706: +#line 12821 "gram.y" { (yyval.with) = (yyvsp[(1) - (1)].with); ;} break; - case 1699: -#line 12760 "gram.y" + case 1707: +#line 12822 "gram.y" { (yyval.with) = NULL; ;} break; - case 1700: -#line 12765 "gram.y" + case 1708: +#line 12827 "gram.y" { (yyval.into) = makeNode(IntoClause); (yyval.into)->rel = (yyvsp[(2) - (2)].range); @@ -43711,45 +44795,45 @@ YYLTYPE yylloc; ;} break; - case 1701: -#line 12776 "gram.y" + case 1709: +#line 12838 "gram.y" { (yyval.into) = NULL; ;} break; - case 1702: -#line 12785 "gram.y" + case 1710: +#line 12847 "gram.y" { (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; ;} break; - case 1703: -#line 12790 "gram.y" + case 1711: +#line 12852 "gram.y" { (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; ;} break; - case 1704: -#line 12795 "gram.y" + case 1712: +#line 12857 "gram.y" { (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; ;} break; - case 1705: -#line 12800 "gram.y" + case 1713: +#line 12862 "gram.y" { (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; ;} break; - case 1706: -#line 12805 "gram.y" + case 1714: +#line 12867 "gram.y" { ereport(WARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), @@ -43759,8 +44843,8 @@ YYLTYPE yylloc; ;} break; - case 1707: -#line 12813 "gram.y" + case 1715: +#line 12875 "gram.y" { ereport(WARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), @@ -43770,92 +44854,92 @@ YYLTYPE yylloc; ;} break; - case 1708: -#line 12821 "gram.y" + case 1716: +#line 12883 "gram.y" { (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = RELPERSISTENCE_UNLOGGED; ;} break; - case 1709: -#line 12826 "gram.y" + case 1717: +#line 12888 "gram.y" { (yyval.range) = (yyvsp[(2) - (2)].range); (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; ;} break; - case 1710: -#line 12831 "gram.y" + case 1718: +#line 12893 "gram.y" { (yyval.range) = (yyvsp[(1) - (1)].range); (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; ;} break; - case 1713: -#line 12842 "gram.y" + case 1721: +#line 12904 "gram.y" { (yyval.setquantifier) = SET_QUANTIFIER_ALL; ;} break; - case 1714: -#line 12843 "gram.y" + case 1722: +#line 12905 "gram.y" { (yyval.setquantifier) = SET_QUANTIFIER_DISTINCT; ;} break; - case 1715: -#line 12844 "gram.y" + case 1723: +#line 12906 "gram.y" { (yyval.setquantifier) = SET_QUANTIFIER_DEFAULT; ;} break; - case 1716: -#line 12851 "gram.y" + case 1724: +#line 12913 "gram.y" { (yyval.list) = list_make1(NIL); ;} break; - - case 1717: -#line 12852 "gram.y" + + case 1725: +#line 12914 "gram.y" { (yyval.list) = (yyvsp[(4) - (5)].list); ;} break; - case 1720: -#line 12861 "gram.y" + case 1728: +#line 12923 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1721: -#line 12862 "gram.y" + case 1729: +#line 12924 "gram.y" { (yyval.list) = NIL; ;} break; - case 1722: -#line 12866 "gram.y" + case 1730: +#line 12928 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1723: -#line 12867 "gram.y" + case 1731: +#line 12929 "gram.y" { (yyval.list) = NIL; ;} break; - case 1724: -#line 12871 "gram.y" + case 1732: +#line 12933 "gram.y" { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 1725: -#line 12875 "gram.y" + case 1733: +#line 12937 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].sortby)); ;} break; - case 1726: -#line 12876 "gram.y" + case 1734: +#line 12938 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].sortby)); ;} break; - case 1727: -#line 12880 "gram.y" + case 1735: +#line 12942 "gram.y" { (yyval.sortby) = makeNode(SortBy); (yyval.sortby)->node = (yyvsp[(1) - (4)].node); @@ -43866,8 +44950,8 @@ YYLTYPE yylloc; ;} break; - case 1728: -#line 12889 "gram.y" + case 1736: +#line 12951 "gram.y" { (yyval.sortby) = makeNode(SortBy); (yyval.sortby)->node = (yyvsp[(1) - (3)].node); @@ -43878,31 +44962,31 @@ YYLTYPE yylloc; ;} break; - case 1729: -#line 12902 "gram.y" + case 1737: +#line 12964 "gram.y" { (yyval.selectlimit) = (yyvsp[(1) - (2)].selectlimit); ((yyval.selectlimit))->limitOffset = (yyvsp[(2) - (2)].node); ;} break; - case 1730: -#line 12907 "gram.y" + case 1738: +#line 12969 "gram.y" { (yyval.selectlimit) = (yyvsp[(2) - (2)].selectlimit); ((yyval.selectlimit))->limitOffset = (yyvsp[(1) - (2)].node); ;} break; - case 1731: -#line 12912 "gram.y" + case 1739: +#line 12974 "gram.y" { (yyval.selectlimit) = (yyvsp[(1) - (1)].selectlimit); ;} break; - case 1732: -#line 12916 "gram.y" + case 1740: +#line 12978 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43913,18 +44997,18 @@ YYLTYPE yylloc; ;} break; - case 1733: -#line 12927 "gram.y" + case 1741: +#line 12989 "gram.y" { (yyval.selectlimit) = (yyvsp[(1) - (1)].selectlimit); ;} break; - case 1734: -#line 12928 "gram.y" + case 1742: +#line 12990 "gram.y" { (yyval.selectlimit) = NULL; ;} break; - case 1735: -#line 12933 "gram.y" + case 1743: +#line 12995 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43935,8 +45019,8 @@ YYLTYPE yylloc; ;} break; - case 1736: -#line 12942 "gram.y" + case 1744: +#line 13004 "gram.y" { /* Disabled because it was too confusing, bjm 2002-02-18 */ ereport(ERROR, @@ -43947,8 +45031,8 @@ YYLTYPE yylloc; ;} break; - case 1737: -#line 12958 "gram.y" + case 1745: +#line 13020 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43959,8 +45043,8 @@ YYLTYPE yylloc; ;} break; - case 1738: -#line 12967 "gram.y" + case 1746: +#line 13029 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43971,8 +45055,8 @@ YYLTYPE yylloc; ;} break; - case 1739: -#line 12976 "gram.y" + case 1747: +#line 13038 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43983,8 +45067,8 @@ YYLTYPE yylloc; ;} break; - case 1740: -#line 12985 "gram.y" + case 1748: +#line 13047 "gram.y" { SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); @@ -43995,81 +45079,81 @@ YYLTYPE yylloc; ;} break; - case 1741: -#line 12997 "gram.y" + case 1749: +#line 13059 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1742: -#line 13000 "gram.y" + case 1750: +#line 13062 "gram.y" { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 1743: -#line 13004 "gram.y" + case 1751: +#line 13066 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1744: -#line 13006 "gram.y" + case 1752: +#line 13068 "gram.y" { /* LIMIT ALL is represented as a NULL constant */ (yyval.node) = makeNullAConst((yylsp[(1) - (1)])); ;} break; - case 1745: -#line 13013 "gram.y" + case 1753: +#line 13075 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1746: -#line 13033 "gram.y" + case 1754: +#line 13095 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1747: -#line 13035 "gram.y" + case 1755: +#line 13097 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1748: -#line 13037 "gram.y" + case 1756: +#line 13099 "gram.y" { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1749: -#line 13041 "gram.y" + case 1757: +#line 13103 "gram.y" { (yyval.node) = makeIntConst((yyvsp[(1) - (1)].ival),(yylsp[(1) - (1)])); ;} break; - case 1750: -#line 13042 "gram.y" + case 1758: +#line 13104 "gram.y" { (yyval.node) = makeFloatConst((yyvsp[(1) - (1)].str),(yylsp[(1) - (1)])); ;} break; - case 1751: -#line 13046 "gram.y" + case 1759: +#line 13108 "gram.y" { (yyval.ival) = 0; ;} break; - case 1752: -#line 13047 "gram.y" + case 1760: +#line 13109 "gram.y" { (yyval.ival) = 0; ;} break; - case 1753: -#line 13050 "gram.y" + case 1761: +#line 13112 "gram.y" { (yyval.ival) = 0; ;} break; - case 1754: -#line 13051 "gram.y" + case 1762: +#line 13113 "gram.y" { (yyval.ival) = 0; ;} break; - case 1755: -#line 13077 "gram.y" + case 1763: +#line 13139 "gram.y" { GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); @@ -44079,8 +45163,8 @@ YYLTYPE yylloc; ;} break; - case 1756: -#line 13085 "gram.y" + case 1764: +#line 13147 "gram.y" { GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); @@ -44090,111 +45174,111 @@ YYLTYPE yylloc; ;} break; - case 1757: -#line 13095 "gram.y" + case 1765: +#line 13157 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1758: -#line 13096 "gram.y" + case 1766: +#line 13158 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].node)); ;} break; - case 1759: -#line 13100 "gram.y" + case 1767: +#line 13162 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1760: -#line 13101 "gram.y" + case 1768: +#line 13163 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1761: -#line 13102 "gram.y" + case 1769: +#line 13164 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1762: -#line 13103 "gram.y" + case 1770: +#line 13165 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1763: -#line 13104 "gram.y" + case 1771: +#line 13166 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1764: -#line 13109 "gram.y" + case 1772: +#line 13171 "gram.y" { (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_EMPTY, NIL, (yylsp[(1) - (2)])); ;} break; - case 1765: -#line 13122 "gram.y" + case 1773: +#line 13184 "gram.y" { (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_ROLLUP, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); ;} break; - case 1766: -#line 13129 "gram.y" + case 1774: +#line 13191 "gram.y" { (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_CUBE, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); ;} break; - case 1767: -#line 13136 "gram.y" + case 1775: +#line 13198 "gram.y" { (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_SETS, (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); ;} break; - case 1768: -#line 13142 "gram.y" + case 1776: +#line 13204 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1769: -#line 13143 "gram.y" + case 1777: +#line 13205 "gram.y" { (yyval.node) = NULL; ;} break; - case 1770: -#line 13147 "gram.y" + case 1778: +#line 13209 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1771: -#line 13148 "gram.y" + case 1779: +#line 13210 "gram.y" { (yyval.list) = NIL; ;} break; - case 1772: -#line 13152 "gram.y" + case 1780: +#line 13214 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1773: -#line 13153 "gram.y" + case 1781: +#line 13215 "gram.y" { (yyval.list) = NIL; ;} break; - case 1774: -#line 13157 "gram.y" + case 1782: +#line 13219 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1775: -#line 13158 "gram.y" + case 1783: +#line 13220 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 1776: -#line 13163 "gram.y" + case 1784: +#line 13225 "gram.y" { LockingClause *n = makeNode(LockingClause); @@ -44205,38 +45289,38 @@ YYLTYPE yylloc; ;} break; - case 1777: -#line 13174 "gram.y" + case 1785: +#line 13236 "gram.y" { (yyval.ival) = LCS_FORUPDATE; ;} break; - case 1778: -#line 13175 "gram.y" + case 1786: +#line 13237 "gram.y" { (yyval.ival) = LCS_FORNOKEYUPDATE; ;} break; - case 1779: -#line 13176 "gram.y" + case 1787: +#line 13238 "gram.y" { (yyval.ival) = LCS_FORSHARE; ;} break; - case 1780: -#line 13177 "gram.y" + case 1788: +#line 13239 "gram.y" { (yyval.ival) = LCS_FORKEYSHARE; ;} break; - case 1781: -#line 13181 "gram.y" + case 1789: +#line 13243 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1782: -#line 13182 "gram.y" + case 1790: +#line 13244 "gram.y" { (yyval.list) = NIL; ;} break; - case 1783: -#line 13193 "gram.y" + case 1791: +#line 13255 "gram.y" { SelectStmt *n = makeNode(SelectStmt); @@ -44245,8 +45329,8 @@ YYLTYPE yylloc; ;} break; - case 1784: -#line 13200 "gram.y" + case 1792: +#line 13262 "gram.y" { SelectStmt *n = (SelectStmt *) (yyvsp[(1) - (5)].node); @@ -44255,36 +45339,36 @@ YYLTYPE yylloc; ;} break; - case 1785: -#line 13218 "gram.y" + case 1793: +#line 13280 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1786: -#line 13219 "gram.y" + case 1794: +#line 13281 "gram.y" { (yyval.list) = NIL; ;} break; - case 1787: -#line 13223 "gram.y" + case 1795: +#line 13285 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1788: -#line 13224 "gram.y" + case 1796: +#line 13286 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1789: -#line 13231 "gram.y" + case 1797: +#line 13293 "gram.y" { (yyvsp[(1) - (2)].range)->alias = (yyvsp[(2) - (2)].alias); (yyval.node) = (Node *) (yyvsp[(1) - (2)].range); ;} break; - case 1790: -#line 13236 "gram.y" + case 1798: +#line 13298 "gram.y" { RangeTableSample *n = (RangeTableSample *) (yyvsp[(3) - (3)].node); @@ -44295,8 +45379,8 @@ YYLTYPE yylloc; ;} break; - case 1791: -#line 13245 "gram.y" + case 1799: +#line 13307 "gram.y" { RangeFunction *n = (RangeFunction *) (yyvsp[(1) - (2)].node); @@ -44306,8 +45390,8 @@ YYLTYPE yylloc; ;} break; - case 1792: -#line 13253 "gram.y" + case 1800: +#line 13315 "gram.y" { RangeFunction *n = (RangeFunction *) (yyvsp[(2) - (3)].node); @@ -44318,8 +45402,8 @@ YYLTYPE yylloc; ;} break; - case 1793: -#line 13262 "gram.y" + case 1801: +#line 13324 "gram.y" { RangeTableFunc *n = (RangeTableFunc *) (yyvsp[(1) - (2)].node); @@ -44328,8 +45412,8 @@ YYLTYPE yylloc; ;} break; - case 1794: -#line 13269 "gram.y" + case 1802: +#line 13331 "gram.y" { RangeTableFunc *n = (RangeTableFunc *) (yyvsp[(2) - (3)].node); @@ -44339,98 +45423,54 @@ YYLTYPE yylloc; ;} break; - case 1795: -#line 13277 "gram.y" + case 1803: +#line 13339 "gram.y" { RangeSubselect *n = makeNode(RangeSubselect); n->lateral = false; n->subquery = (yyvsp[(1) - (2)].node); n->alias = (yyvsp[(2) - (2)].alias); - /* - * The SQL spec does not permit a subselect - * () without an alias clause, - * so we don't either. This avoids the problem - * of needing to invent a unique refname for it. - * That could be surmounted if there's sufficient - * popular demand, but for now let's just implement - * the spec and see if anyone complains. - * However, it does seem like a good idea to emit - * an error message that's better than "syntax error". - */ - if ((yyvsp[(2) - (2)].alias) == NULL) - { - if (IsA((yyvsp[(1) - (2)].node), SelectStmt) && - ((SelectStmt *) (yyvsp[(1) - (2)].node))->valuesLists) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("VALUES in FROM must have an alias"), - errhint("For example, FROM (VALUES ...) [AS] foo."), - parser_errposition((yylsp[(1) - (2)])))); - else - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("subquery in FROM must have an alias"), - errhint("For example, FROM (SELECT ...) [AS] foo."), - parser_errposition((yylsp[(1) - (2)])))); - } (yyval.node) = (Node *) n; ;} break; - case 1796: -#line 13313 "gram.y" + case 1804: +#line 13348 "gram.y" { RangeSubselect *n = makeNode(RangeSubselect); n->lateral = true; n->subquery = (yyvsp[(2) - (3)].node); n->alias = (yyvsp[(3) - (3)].alias); - /* same comment as above */ - if ((yyvsp[(3) - (3)].alias) == NULL) - { - if (IsA((yyvsp[(2) - (3)].node), SelectStmt) && - ((SelectStmt *) (yyvsp[(2) - (3)].node))->valuesLists) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("VALUES in FROM must have an alias"), - errhint("For example, FROM (VALUES ...) [AS] foo."), - parser_errposition((yylsp[(2) - (3)])))); - else - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("subquery in FROM must have an alias"), - errhint("For example, FROM (SELECT ...) [AS] foo."), - parser_errposition((yylsp[(2) - (3)])))); - } (yyval.node) = (Node *) n; ;} break; - case 1797: -#line 13339 "gram.y" + case 1805: +#line 13357 "gram.y" { (yyval.node) = (Node *) (yyvsp[(1) - (1)].jexpr); ;} break; - case 1798: -#line 13343 "gram.y" + case 1806: +#line 13361 "gram.y" { (yyvsp[(2) - (4)].jexpr)->alias = (yyvsp[(4) - (4)].alias); (yyval.node) = (Node *) (yyvsp[(2) - (4)].jexpr); ;} break; - case 1799: -#line 13369 "gram.y" + case 1807: +#line 13387 "gram.y" { (yyval.jexpr) = (yyvsp[(2) - (3)].jexpr); ;} break; - case 1800: -#line 13373 "gram.y" + case 1808: +#line 13391 "gram.y" { /* CROSS JOIN is same as unqualified inner join */ JoinExpr *n = makeNode(JoinExpr); @@ -44446,8 +45486,8 @@ YYLTYPE yylloc; ;} break; - case 1801: -#line 13387 "gram.y" + case 1809: +#line 13405 "gram.y" { JoinExpr *n = makeNode(JoinExpr); @@ -44470,8 +45510,8 @@ YYLTYPE yylloc; ;} break; - case 1802: -#line 13408 "gram.y" + case 1810: +#line 13426 "gram.y" { /* letting join_type reduce to empty doesn't work */ JoinExpr *n = makeNode(JoinExpr); @@ -44495,8 +45535,8 @@ YYLTYPE yylloc; ;} break; - case 1803: -#line 13430 "gram.y" + case 1811: +#line 13448 "gram.y" { JoinExpr *n = makeNode(JoinExpr); @@ -44511,8 +45551,8 @@ YYLTYPE yylloc; ;} break; - case 1804: -#line 13443 "gram.y" + case 1812: +#line 13461 "gram.y" { /* letting join_type reduce to empty doesn't work */ JoinExpr *n = makeNode(JoinExpr); @@ -44528,8 +45568,8 @@ YYLTYPE yylloc; ;} break; - case 1805: -#line 13460 "gram.y" + case 1813: +#line 13478 "gram.y" { (yyval.alias) = makeNode(Alias); (yyval.alias)->aliasname = (yyvsp[(2) - (5)].str); @@ -44537,16 +45577,16 @@ YYLTYPE yylloc; ;} break; - case 1806: -#line 13466 "gram.y" + case 1814: +#line 13484 "gram.y" { (yyval.alias) = makeNode(Alias); (yyval.alias)->aliasname = (yyvsp[(2) - (2)].str); ;} break; - case 1807: -#line 13471 "gram.y" + case 1815: +#line 13489 "gram.y" { (yyval.alias) = makeNode(Alias); (yyval.alias)->aliasname = (yyvsp[(1) - (4)].str); @@ -44554,26 +45594,26 @@ YYLTYPE yylloc; ;} break; - case 1808: -#line 13477 "gram.y" + case 1816: +#line 13495 "gram.y" { (yyval.alias) = makeNode(Alias); (yyval.alias)->aliasname = (yyvsp[(1) - (1)].str); ;} break; - case 1809: -#line 13483 "gram.y" + case 1817: +#line 13501 "gram.y" { (yyval.alias) = (yyvsp[(1) - (1)].alias); ;} break; - case 1810: -#line 13484 "gram.y" + case 1818: +#line 13502 "gram.y" { (yyval.alias) = NULL; ;} break; - case 1811: -#line 13495 "gram.y" + case 1819: +#line 13513 "gram.y" { (yyval.alias) = makeNode(Alias); (yyval.alias)->aliasname = (yyvsp[(2) - (2)].str); @@ -44581,27 +45621,27 @@ YYLTYPE yylloc; ;} break; - case 1812: -#line 13500 "gram.y" + case 1820: +#line 13518 "gram.y" { (yyval.alias) = NULL; ;} break; - case 1813: -#line 13509 "gram.y" + case 1821: +#line 13527 "gram.y" { (yyval.list) = list_make2((yyvsp[(1) - (1)].alias), NIL); ;} break; - case 1814: -#line 13513 "gram.y" + case 1822: +#line 13531 "gram.y" { (yyval.list) = list_make2(NULL, (yyvsp[(3) - (4)].list)); ;} break; - case 1815: -#line 13517 "gram.y" + case 1823: +#line 13535 "gram.y" { Alias *a = makeNode(Alias); @@ -44610,8 +45650,8 @@ YYLTYPE yylloc; ;} break; - case 1816: -#line 13524 "gram.y" + case 1824: +#line 13542 "gram.y" { Alias *a = makeNode(Alias); @@ -44619,50 +45659,50 @@ YYLTYPE yylloc; (yyval.list) = list_make2(a, (yyvsp[(3) - (4)].list)); ;} break; - - case 1817: -#line 13531 "gram.y" + + case 1825: +#line 13549 "gram.y" { (yyval.list) = list_make2(NULL, NIL); ;} break; - case 1818: -#line 13536 "gram.y" + case 1826: +#line 13554 "gram.y" { (yyval.jtype) = JOIN_FULL; ;} break; - case 1819: -#line 13537 "gram.y" + case 1827: +#line 13555 "gram.y" { (yyval.jtype) = JOIN_LEFT; ;} break; - case 1820: -#line 13538 "gram.y" + case 1828: +#line 13556 "gram.y" { (yyval.jtype) = JOIN_RIGHT; ;} break; - case 1821: -#line 13539 "gram.y" + case 1829: +#line 13557 "gram.y" { (yyval.jtype) = JOIN_INNER; ;} break; - case 1824: -#line 13560 "gram.y" + case 1832: +#line 13578 "gram.y" { (yyval.node) = (Node *) list_make2((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].alias)); ;} break; - case 1825: -#line 13564 "gram.y" + case 1833: +#line 13582 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1826: -#line 13572 "gram.y" + case 1834: +#line 13590 "gram.y" { /* inheritance query, implicitly */ (yyval.range) = (yyvsp[(1) - (1)].range); @@ -44671,15 +45711,15 @@ YYLTYPE yylloc; ;} break; - case 1827: -#line 13579 "gram.y" + case 1835: +#line 13597 "gram.y" { (yyval.range) = (yyvsp[(1) - (1)].range); ;} break; - case 1828: -#line 13586 "gram.y" + case 1836: +#line 13604 "gram.y" { /* inheritance query, explicitly */ (yyval.range) = (yyvsp[(1) - (2)].range); @@ -44688,8 +45728,8 @@ YYLTYPE yylloc; ;} break; - case 1829: -#line 13593 "gram.y" + case 1837: +#line 13611 "gram.y" { /* no inheritance */ (yyval.range) = (yyvsp[(2) - (2)].range); @@ -44698,8 +45738,8 @@ YYLTYPE yylloc; ;} break; - case 1830: -#line 13600 "gram.y" + case 1838: +#line 13618 "gram.y" { /* no inheritance, SQL99-style syntax */ (yyval.range) = (yyvsp[(3) - (4)].range); @@ -44708,25 +45748,25 @@ YYLTYPE yylloc; ;} break; - case 1831: -#line 13610 "gram.y" + case 1839: +#line 13628 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].range)); ;} break; - case 1832: -#line 13611 "gram.y" + case 1840: +#line 13629 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].range)); ;} break; - case 1833: -#line 13625 "gram.y" + case 1841: +#line 13643 "gram.y" { (yyval.range) = (yyvsp[(1) - (1)].range); ;} break; - case 1834: -#line 13629 "gram.y" + case 1842: +#line 13647 "gram.y" { Alias *alias = makeNode(Alias); @@ -44736,8 +45776,8 @@ YYLTYPE yylloc; ;} break; - case 1835: -#line 13637 "gram.y" + case 1843: +#line 13655 "gram.y" { Alias *alias = makeNode(Alias); @@ -44747,8 +45787,8 @@ YYLTYPE yylloc; ;} break; - case 1836: -#line 13651 "gram.y" + case 1844: +#line 13669 "gram.y" { RangeTableSample *n = makeNode(RangeTableSample); @@ -44761,18 +45801,18 @@ YYLTYPE yylloc; ;} break; - case 1837: -#line 13664 "gram.y" + case 1845: +#line 13682 "gram.y" { (yyval.node) = (Node *) (yyvsp[(3) - (4)].node); ;} break; - case 1838: -#line 13665 "gram.y" + case 1846: +#line 13683 "gram.y" { (yyval.node) = NULL; ;} break; - case 1839: -#line 13681 "gram.y" + case 1847: +#line 13699 "gram.y" { RangeFunction *n = makeNode(RangeFunction); @@ -44785,8 +45825,8 @@ YYLTYPE yylloc; ;} break; - case 1840: -#line 13692 "gram.y" + case 1848: +#line 13710 "gram.y" { RangeFunction *n = makeNode(RangeFunction); @@ -44799,58 +45839,58 @@ YYLTYPE yylloc; ;} break; - case 1841: -#line 13705 "gram.y" + case 1849: +#line 13723 "gram.y" { (yyval.list) = list_make2((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].list)); ;} break; - case 1842: -#line 13709 "gram.y" + case 1850: +#line 13727 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 1843: -#line 13710 "gram.y" + case 1851: +#line 13728 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 1844: -#line 13713 "gram.y" + case 1852: +#line 13731 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1845: -#line 13714 "gram.y" + case 1853: +#line 13732 "gram.y" { (yyval.list) = NIL; ;} break; - case 1846: -#line 13717 "gram.y" + case 1854: +#line 13735 "gram.y" { (yyval.boolean) = true; ;} break; - case 1847: -#line 13718 "gram.y" + case 1855: +#line 13736 "gram.y" { (yyval.boolean) = false; ;} break; - case 1848: -#line 13723 "gram.y" + case 1856: +#line 13741 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1849: -#line 13724 "gram.y" + case 1857: +#line 13742 "gram.y" { (yyval.node) = NULL; ;} break; - case 1850: -#line 13729 "gram.y" + case 1858: +#line 13747 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1851: -#line 13731 "gram.y" + case 1859: +#line 13749 "gram.y" { CurrentOfExpr *n = makeNode(CurrentOfExpr); @@ -44861,37 +45901,37 @@ YYLTYPE yylloc; ;} break; - case 1852: -#line 13739 "gram.y" + case 1860: +#line 13757 "gram.y" { (yyval.node) = NULL; ;} break; - case 1853: -#line 13744 "gram.y" + case 1861: +#line 13762 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1854: -#line 13745 "gram.y" + case 1862: +#line 13763 "gram.y" { (yyval.list) = NIL; ;} break; - case 1855: -#line 13750 "gram.y" + case 1863: +#line 13768 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1856: -#line 13754 "gram.y" + case 1864: +#line 13772 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1857: -#line 13760 "gram.y" + case 1865: +#line 13778 "gram.y" { ColumnDef *n = makeNode(ColumnDef); @@ -44912,8 +45952,8 @@ YYLTYPE yylloc; ;} break; - case 1858: -#line 13785 "gram.y" + case 1866: +#line 13803 "gram.y" { RangeTableFunc *n = makeNode(RangeTableFunc); @@ -44926,8 +45966,8 @@ YYLTYPE yylloc; ;} break; - case 1859: -#line 13797 "gram.y" + case 1867: +#line 13815 "gram.y" { RangeTableFunc *n = makeNode(RangeTableFunc); @@ -44940,18 +45980,18 @@ YYLTYPE yylloc; ;} break; - case 1860: -#line 13809 "gram.y" + case 1868: +#line 13827 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1861: -#line 13810 "gram.y" + case 1869: +#line 13828 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1862: -#line 13815 "gram.y" + case 1870: +#line 13833 "gram.y" { RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); @@ -44967,8 +46007,8 @@ YYLTYPE yylloc; ;} break; - case 1863: -#line 13829 "gram.y" + case 1871: +#line 13847 "gram.y" { RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); ListCell *option; @@ -45027,8 +46067,8 @@ YYLTYPE yylloc; ;} break; - case 1864: -#line 13886 "gram.y" + case 1872: +#line 13904 "gram.y" { RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); @@ -45041,48 +46081,48 @@ YYLTYPE yylloc; ;} break; - case 1865: -#line 13900 "gram.y" + case 1873: +#line 13918 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 1866: -#line 13902 "gram.y" + case 1874: +#line 13920 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 1867: -#line 13907 "gram.y" + case 1875: +#line 13925 "gram.y" { (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1868: -#line 13909 "gram.y" + case 1876: +#line 13927 "gram.y" { (yyval.defelt) = makeDefElem("default", (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1869: -#line 13911 "gram.y" + case 1877: +#line 13929 "gram.y" { (yyval.defelt) = makeDefElem("is_not_null", (Node *) makeBoolean(true), (yylsp[(1) - (2)])); ;} break; - case 1870: -#line 13913 "gram.y" + case 1878: +#line 13931 "gram.y" { (yyval.defelt) = makeDefElem("is_not_null", (Node *) makeBoolean(false), (yylsp[(1) - (1)])); ;} break; - case 1871: -#line 13918 "gram.y" + case 1879: +#line 13936 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 1872: -#line 13920 "gram.y" + case 1880: +#line 13938 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 1873: -#line 13925 "gram.y" + case 1881: +#line 13943 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(3) - (3)].str); @@ -45092,8 +46132,8 @@ YYLTYPE yylloc; ;} break; - case 1874: -#line 13933 "gram.y" + case 1882: +#line 13951 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = NULL; @@ -45103,16 +46143,16 @@ YYLTYPE yylloc; ;} break; - case 1875: -#line 13953 "gram.y" + case 1883: +#line 13971 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (2)].typnam); (yyval.typnam)->arrayBounds = (yyvsp[(2) - (2)].list); ;} break; - case 1876: -#line 13958 "gram.y" + case 1884: +#line 13976 "gram.y" { (yyval.typnam) = (yyvsp[(2) - (3)].typnam); (yyval.typnam)->arrayBounds = (yyvsp[(3) - (3)].list); @@ -45120,16 +46160,16 @@ YYLTYPE yylloc; ;} break; - case 1877: -#line 13965 "gram.y" + case 1885: +#line 13983 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (5)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[(4) - (5)].ival))); ;} break; - case 1878: -#line 13970 "gram.y" + case 1886: +#line 13988 "gram.y" { (yyval.typnam) = (yyvsp[(2) - (6)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[(5) - (6)].ival))); @@ -45137,16 +46177,16 @@ YYLTYPE yylloc; ;} break; - case 1879: -#line 13976 "gram.y" + case 1887: +#line 13994 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (2)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); ;} break; - case 1880: -#line 13981 "gram.y" + case 1888: +#line 13999 "gram.y" { (yyval.typnam) = (yyvsp[(2) - (3)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); @@ -45154,56 +46194,56 @@ YYLTYPE yylloc; ;} break; - case 1881: -#line 13990 "gram.y" + case 1889: +#line 14008 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeInteger(-1)); ;} break; - case 1882: -#line 13992 "gram.y" + case 1890: +#line 14010 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (4)].list), makeInteger((yyvsp[(3) - (4)].ival))); ;} break; - case 1883: -#line 13994 "gram.y" + case 1891: +#line 14012 "gram.y" { (yyval.list) = NIL; ;} break; - case 1884: -#line 13998 "gram.y" + case 1892: +#line 14016 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1885: -#line 13999 "gram.y" + case 1893: +#line 14017 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1886: -#line 14000 "gram.y" + case 1894: +#line 14018 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1887: -#line 14001 "gram.y" + case 1895: +#line 14019 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1888: -#line 14002 "gram.y" + case 1896: +#line 14020 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1889: -#line 14004 "gram.y" + case 1897: +#line 14022 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (2)].typnam); (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); ;} break; - case 1890: -#line 14009 "gram.y" + case 1898: +#line 14027 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (4)].typnam); (yyval.typnam)->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), @@ -45211,28 +46251,28 @@ YYLTYPE yylloc; ;} break; - case 1891: -#line 14028 "gram.y" + case 1899: +#line 14046 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1892: -#line 14029 "gram.y" + case 1900: +#line 14047 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1893: -#line 14030 "gram.y" + case 1901: +#line 14048 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1894: -#line 14031 "gram.y" + case 1902: +#line 14049 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1895: -#line 14043 "gram.y" + case 1903: +#line 14061 "gram.y" { (yyval.typnam) = makeTypeName((yyvsp[(1) - (2)].str)); (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); @@ -45240,8 +46280,8 @@ YYLTYPE yylloc; ;} break; - case 1896: -#line 14049 "gram.y" + case 1904: +#line 14067 "gram.y" { (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[(1) - (3)].str)), (yyvsp[(2) - (3)].list))); (yyval.typnam)->typmods = (yyvsp[(3) - (3)].list); @@ -45249,74 +46289,74 @@ YYLTYPE yylloc; ;} break; - case 1897: -#line 14056 "gram.y" + case 1905: +#line 14074 "gram.y" { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1898: -#line 14057 "gram.y" + case 1906: +#line 14075 "gram.y" { (yyval.list) = NIL; ;} break; - case 1899: -#line 14064 "gram.y" + case 1907: +#line 14082 "gram.y" { (yyval.typnam) = SystemTypeName("int4"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1900: -#line 14069 "gram.y" + case 1908: +#line 14087 "gram.y" { (yyval.typnam) = SystemTypeName("int4"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1901: -#line 14074 "gram.y" + case 1909: +#line 14092 "gram.y" { (yyval.typnam) = SystemTypeName("int2"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1902: -#line 14079 "gram.y" + case 1910: +#line 14097 "gram.y" { (yyval.typnam) = SystemTypeName("int8"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1903: -#line 14084 "gram.y" + case 1911: +#line 14102 "gram.y" { (yyval.typnam) = SystemTypeName("float4"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1904: -#line 14089 "gram.y" + case 1912: +#line 14107 "gram.y" { (yyval.typnam) = (yyvsp[(2) - (2)].typnam); (yyval.typnam)->location = (yylsp[(1) - (2)]); ;} break; - case 1905: -#line 14094 "gram.y" + case 1913: +#line 14112 "gram.y" { (yyval.typnam) = SystemTypeName("float8"); (yyval.typnam)->location = (yylsp[(1) - (2)]); ;} break; - case 1906: -#line 14099 "gram.y" + case 1914: +#line 14117 "gram.y" { (yyval.typnam) = SystemTypeName("numeric"); (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); @@ -45324,8 +46364,8 @@ YYLTYPE yylloc; ;} break; - case 1907: -#line 14105 "gram.y" + case 1915: +#line 14123 "gram.y" { (yyval.typnam) = SystemTypeName("numeric"); (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); @@ -45333,8 +46373,8 @@ YYLTYPE yylloc; ;} break; - case 1908: -#line 14111 "gram.y" + case 1916: +#line 14129 "gram.y" { (yyval.typnam) = SystemTypeName("numeric"); (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); @@ -45342,16 +46382,16 @@ YYLTYPE yylloc; ;} break; - case 1909: -#line 14117 "gram.y" + case 1917: +#line 14135 "gram.y" { (yyval.typnam) = SystemTypeName("bool"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1910: -#line 14124 "gram.y" + case 1918: +#line 14142 "gram.y" { /* * Check FLOAT() precision limits assuming IEEE floating @@ -45374,44 +46414,44 @@ YYLTYPE yylloc; ;} break; - case 1911: -#line 14145 "gram.y" + case 1919: +#line 14163 "gram.y" { (yyval.typnam) = SystemTypeName("float8"); ;} break; - case 1912: -#line 14155 "gram.y" + case 1920: +#line 14173 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1913: -#line 14159 "gram.y" + case 1921: +#line 14177 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1914: -#line 14167 "gram.y" + case 1922: +#line 14185 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1915: -#line 14171 "gram.y" + case 1923: +#line 14189 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); (yyval.typnam)->typmods = NIL; ;} break; - case 1916: -#line 14179 "gram.y" + case 1924: +#line 14197 "gram.y" { char *typname; @@ -45422,8 +46462,8 @@ YYLTYPE yylloc; ;} break; - case 1917: -#line 14191 "gram.y" + case 1925: +#line 14209 "gram.y" { /* bit defaults to bit(1), varbit to no limit */ if ((yyvsp[(2) - (2)].boolean)) @@ -45439,29 +46479,29 @@ YYLTYPE yylloc; ;} break; - case 1918: -#line 14212 "gram.y" + case 1926: +#line 14230 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1919: -#line 14216 "gram.y" + case 1927: +#line 14234 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1920: -#line 14222 "gram.y" + case 1928: +#line 14240 "gram.y" { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 1921: -#line 14226 "gram.y" + case 1929: +#line 14244 "gram.y" { /* Length was not specified so allow to be unrestricted. * This handles problems with fixed-length (bpchar) strings @@ -45474,8 +46514,8 @@ YYLTYPE yylloc; ;} break; - case 1922: -#line 14239 "gram.y" + case 1930: +#line 14257 "gram.y" { (yyval.typnam) = SystemTypeName((yyvsp[(1) - (4)].str)); (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[(3) - (4)].ival), (yylsp[(3) - (4)]))); @@ -45483,8 +46523,8 @@ YYLTYPE yylloc; ;} break; - case 1923: -#line 14247 "gram.y" + case 1931: +#line 14265 "gram.y" { (yyval.typnam) = SystemTypeName((yyvsp[(1) - (1)].str)); /* char defaults to char(1), varchar to no limit */ @@ -45494,48 +46534,48 @@ YYLTYPE yylloc; ;} break; - case 1924: -#line 14257 "gram.y" + case 1932: +#line 14275 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 1925: -#line 14259 "gram.y" + case 1933: +#line 14277 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 1926: -#line 14261 "gram.y" + case 1934: +#line 14279 "gram.y" { (yyval.str) = "varchar"; ;} break; - case 1927: -#line 14263 "gram.y" + case 1935: +#line 14281 "gram.y" { (yyval.str) = (yyvsp[(3) - (3)].boolean) ? "varchar": "bpchar"; ;} break; - case 1928: -#line 14265 "gram.y" + case 1936: +#line 14283 "gram.y" { (yyval.str) = (yyvsp[(3) - (3)].boolean) ? "varchar": "bpchar"; ;} break; - case 1929: -#line 14267 "gram.y" + case 1937: +#line 14285 "gram.y" { (yyval.str) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 1930: -#line 14271 "gram.y" + case 1938: +#line 14289 "gram.y" { (yyval.boolean) = true; ;} break; - case 1931: -#line 14272 "gram.y" + case 1939: +#line 14290 "gram.y" { (yyval.boolean) = false; ;} break; - case 1932: -#line 14280 "gram.y" + case 1940: +#line 14298 "gram.y" { if ((yyvsp[(5) - (5)].boolean)) (yyval.typnam) = SystemTypeName("timestamptz"); @@ -45546,8 +46586,8 @@ YYLTYPE yylloc; ;} break; - case 1933: -#line 14289 "gram.y" + case 1941: +#line 14307 "gram.y" { if ((yyvsp[(2) - (2)].boolean)) (yyval.typnam) = SystemTypeName("timestamptz"); @@ -45557,8 +46597,8 @@ YYLTYPE yylloc; ;} break; - case 1934: -#line 14297 "gram.y" + case 1942: +#line 14315 "gram.y" { if ((yyvsp[(5) - (5)].boolean)) (yyval.typnam) = SystemTypeName("timetz"); @@ -45569,8 +46609,8 @@ YYLTYPE yylloc; ;} break; - case 1935: -#line 14306 "gram.y" + case 1943: +#line 14324 "gram.y" { if ((yyvsp[(2) - (2)].boolean)) (yyval.typnam) = SystemTypeName("timetz"); @@ -45580,77 +46620,77 @@ YYLTYPE yylloc; ;} break; - case 1936: -#line 14317 "gram.y" + case 1944: +#line 14335 "gram.y" { (yyval.typnam) = SystemTypeName("interval"); (yyval.typnam)->location = (yylsp[(1) - (1)]); ;} break; - case 1937: -#line 14324 "gram.y" + case 1945: +#line 14342 "gram.y" { (yyval.boolean) = true; ;} break; - case 1938: -#line 14325 "gram.y" + case 1946: +#line 14343 "gram.y" { (yyval.boolean) = false; ;} break; - case 1939: -#line 14326 "gram.y" + case 1947: +#line 14344 "gram.y" { (yyval.boolean) = false; ;} break; - case 1940: -#line 14331 "gram.y" + case 1948: +#line 14349 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR), (yylsp[(1) - (1)]))); ;} break; - case 1941: -#line 14333 "gram.y" + case 1949: +#line 14351 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MONTH), (yylsp[(1) - (1)]))); ;} break; - case 1942: -#line 14335 "gram.y" + case 1950: +#line 14353 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY), (yylsp[(1) - (1)]))); ;} break; - case 1943: -#line 14337 "gram.y" + case 1951: +#line 14355 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR), (yylsp[(1) - (1)]))); ;} break; - case 1944: -#line 14339 "gram.y" + case 1952: +#line 14357 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MINUTE), (yylsp[(1) - (1)]))); ;} break; - case 1945: -#line 14341 "gram.y" + case 1953: +#line 14359 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1946: -#line 14343 "gram.y" + case 1954: +#line 14361 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH), (yylsp[(1) - (3)]))); ;} break; - case 1947: -#line 14348 "gram.y" + case 1955: +#line 14366 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR), (yylsp[(1) - (3)]))); ;} break; - case 1948: -#line 14353 "gram.y" + case 1956: +#line 14371 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | @@ -45658,8 +46698,8 @@ YYLTYPE yylloc; ;} break; - case 1949: -#line 14359 "gram.y" + case 1957: +#line 14377 "gram.y" { (yyval.list) = (yyvsp[(3) - (3)].list); linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(DAY) | @@ -45669,16 +46709,16 @@ YYLTYPE yylloc; ;} break; - case 1950: -#line 14367 "gram.y" + case 1958: +#line 14385 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE), (yylsp[(1) - (3)]))); ;} break; - case 1951: -#line 14372 "gram.y" + case 1959: +#line 14390 "gram.y" { (yyval.list) = (yyvsp[(3) - (3)].list); linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(HOUR) | @@ -45687,8 +46727,8 @@ YYLTYPE yylloc; ;} break; - case 1952: -#line 14379 "gram.y" + case 1960: +#line 14397 "gram.y" { (yyval.list) = (yyvsp[(3) - (3)].list); linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(MINUTE) | @@ -45696,38 +46736,38 @@ YYLTYPE yylloc; ;} break; - case 1953: -#line 14385 "gram.y" + case 1961: +#line 14403 "gram.y" { (yyval.list) = NIL; ;} break; - case 1954: -#line 14390 "gram.y" + case 1962: +#line 14408 "gram.y" { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[(1) - (1)]))); ;} break; - case 1955: -#line 14394 "gram.y" + case 1963: +#line 14412 "gram.y" { (yyval.list) = list_make2(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[(1) - (4)])), makeIntConst((yyvsp[(3) - (4)].ival), (yylsp[(3) - (4)]))); ;} break; - case 1956: -#line 14429 "gram.y" + case 1964: +#line 14447 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1957: -#line 14431 "gram.y" + case 1965: +#line 14449 "gram.y" { (yyval.node) = makeTypeCast((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].typnam), (yylsp[(2) - (3)])); ;} break; - case 1958: -#line 14433 "gram.y" + case 1966: +#line 14451 "gram.y" { CollateClause *n = makeNode(CollateClause); @@ -45738,8 +46778,8 @@ YYLTYPE yylloc; ;} break; - case 1959: -#line 14442 "gram.y" + case 1967: +#line 14460 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("timezone"), list_make2((yyvsp[(5) - (5)].node), (yyvsp[(1) - (5)].node)), @@ -45748,116 +46788,116 @@ YYLTYPE yylloc; ;} break; - case 1960: -#line 14458 "gram.y" + case 1968: +#line 14476 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1961: -#line 14460 "gram.y" + case 1969: +#line 14478 "gram.y" { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1962: -#line 14462 "gram.y" + case 1970: +#line 14480 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1963: -#line 14464 "gram.y" + case 1971: +#line 14482 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "-", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1964: -#line 14466 "gram.y" + case 1972: +#line 14484 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "*", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1965: -#line 14468 "gram.y" + case 1973: +#line 14486 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "/", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1966: -#line 14470 "gram.y" + case 1974: +#line 14488 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "%", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1967: -#line 14472 "gram.y" + case 1975: +#line 14490 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "^", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1968: -#line 14474 "gram.y" + case 1976: +#line 14492 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1969: -#line 14476 "gram.y" + case 1977: +#line 14494 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1970: -#line 14478 "gram.y" + case 1978: +#line 14496 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1971: -#line 14480 "gram.y" + case 1979: +#line 14498 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1972: -#line 14482 "gram.y" + case 1980: +#line 14500 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1973: -#line 14484 "gram.y" + case 1981: +#line 14502 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<>", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1974: -#line 14487 "gram.y" + case 1982: +#line 14505 "gram.y" { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[(2) - (3)].list), (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1975: -#line 14489 "gram.y" + case 1983: +#line 14507 "gram.y" { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[(1) - (2)].list), NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1976: -#line 14492 "gram.y" + case 1984: +#line 14510 "gram.y" { (yyval.node) = makeAndExpr((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1977: -#line 14494 "gram.y" + case 1985: +#line 14512 "gram.y" { (yyval.node) = makeOrExpr((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1978: -#line 14496 "gram.y" + case 1986: +#line 14514 "gram.y" { (yyval.node) = makeNotExpr((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1979: -#line 14498 "gram.y" + case 1987: +#line 14516 "gram.y" { (yyval.node) = makeNotExpr((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 1980: -#line 14501 "gram.y" + case 1988: +#line 14519 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "~~", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1981: -#line 14506 "gram.y" + case 1989: +#line 14524 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), list_make2((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)), @@ -45868,16 +46908,16 @@ YYLTYPE yylloc; ;} break; - case 1982: -#line 14515 "gram.y" + case 1990: +#line 14533 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "!~~", (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node), (yylsp[(2) - (4)])); ;} break; - case 1983: -#line 14520 "gram.y" + case 1991: +#line 14538 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), @@ -45888,16 +46928,16 @@ YYLTYPE yylloc; ;} break; - case 1984: -#line 14529 "gram.y" + case 1992: +#line 14547 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "~~*", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 1985: -#line 14534 "gram.y" + case 1993: +#line 14552 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), list_make2((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)), @@ -45908,16 +46948,16 @@ YYLTYPE yylloc; ;} break; - case 1986: -#line 14543 "gram.y" + case 1994: +#line 14561 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "!~~*", (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node), (yylsp[(2) - (4)])); ;} break; - case 1987: -#line 14548 "gram.y" + case 1995: +#line 14566 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), @@ -45928,8 +46968,8 @@ YYLTYPE yylloc; ;} break; - case 1988: -#line 14558 "gram.y" + case 1996: +#line 14576 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), list_make1((yyvsp[(4) - (4)].node)), @@ -45940,8 +46980,8 @@ YYLTYPE yylloc; ;} break; - case 1989: -#line 14567 "gram.y" + case 1997: +#line 14585 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), @@ -45952,8 +46992,8 @@ YYLTYPE yylloc; ;} break; - case 1990: -#line 14576 "gram.y" + case 1998: +#line 14594 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), list_make1((yyvsp[(5) - (5)].node)), @@ -45964,8 +47004,8 @@ YYLTYPE yylloc; ;} break; - case 1991: -#line 14585 "gram.y" + case 1999: +#line 14603 "gram.y" { FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), list_make2((yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)), @@ -45976,8 +47016,8 @@ YYLTYPE yylloc; ;} break; - case 1992: -#line 14604 "gram.y" + case 2000: +#line 14622 "gram.y" { NullTest *n = makeNode(NullTest); @@ -45988,8 +47028,8 @@ YYLTYPE yylloc; ;} break; - case 1993: -#line 14613 "gram.y" + case 2001: +#line 14631 "gram.y" { NullTest *n = makeNode(NullTest); @@ -46000,8 +47040,8 @@ YYLTYPE yylloc; ;} break; - case 1994: -#line 14622 "gram.y" + case 2002: +#line 14640 "gram.y" { NullTest *n = makeNode(NullTest); @@ -46012,8 +47052,8 @@ YYLTYPE yylloc; ;} break; - case 1995: -#line 14631 "gram.y" + case 2003: +#line 14649 "gram.y" { NullTest *n = makeNode(NullTest); @@ -46024,8 +47064,8 @@ YYLTYPE yylloc; ;} break; - case 1996: -#line 14640 "gram.y" + case 2004: +#line 14658 "gram.y" { if (list_length((yyvsp[(1) - (3)].list)) != 2) ereport(ERROR, @@ -46044,8 +47084,8 @@ YYLTYPE yylloc; ;} break; - case 1997: -#line 14657 "gram.y" + case 2005: +#line 14675 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46056,8 +47096,8 @@ YYLTYPE yylloc; ;} break; - case 1998: -#line 14666 "gram.y" + case 2006: +#line 14684 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46068,8 +47108,8 @@ YYLTYPE yylloc; ;} break; - case 1999: -#line 14675 "gram.y" + case 2007: +#line 14693 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46080,8 +47120,8 @@ YYLTYPE yylloc; ;} break; - case 2000: -#line 14684 "gram.y" + case 2008: +#line 14702 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46092,8 +47132,8 @@ YYLTYPE yylloc; ;} break; - case 2001: -#line 14693 "gram.y" + case 2009: +#line 14711 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46104,8 +47144,8 @@ YYLTYPE yylloc; ;} break; - case 2002: -#line 14702 "gram.y" + case 2010: +#line 14720 "gram.y" { BooleanTest *b = makeNode(BooleanTest); @@ -46116,22 +47156,22 @@ YYLTYPE yylloc; ;} break; - case 2003: -#line 14711 "gram.y" + case 2011: +#line 14729 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", (yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node), (yylsp[(2) - (5)])); ;} break; - case 2004: -#line 14715 "gram.y" + case 2012: +#line 14733 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", (yyvsp[(1) - (6)].node), (yyvsp[(6) - (6)].node), (yylsp[(2) - (6)])); ;} break; - case 2005: -#line 14719 "gram.y" + case 2013: +#line 14737 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_BETWEEN, "BETWEEN", @@ -46141,8 +47181,8 @@ YYLTYPE yylloc; ;} break; - case 2006: -#line 14727 "gram.y" + case 2014: +#line 14745 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_BETWEEN, "NOT BETWEEN", @@ -46152,8 +47192,8 @@ YYLTYPE yylloc; ;} break; - case 2007: -#line 14735 "gram.y" + case 2015: +#line 14753 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_BETWEEN_SYM, "BETWEEN SYMMETRIC", @@ -46163,8 +47203,8 @@ YYLTYPE yylloc; ;} break; - case 2008: -#line 14743 "gram.y" + case 2016: +#line 14761 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_BETWEEN_SYM, "NOT BETWEEN SYMMETRIC", @@ -46174,8 +47214,8 @@ YYLTYPE yylloc; ;} break; - case 2009: -#line 14751 "gram.y" + case 2017: +#line 14769 "gram.y" { /* in_expr returns a SubLink or a list of a_exprs */ if (IsA((yyvsp[(3) - (3)].node), SubLink)) @@ -46198,8 +47238,8 @@ YYLTYPE yylloc; ;} break; - case 2010: -#line 14772 "gram.y" + case 2018: +#line 14790 "gram.y" { /* in_expr returns a SubLink or a list of a_exprs */ if (IsA((yyvsp[(4) - (4)].node), SubLink)) @@ -46224,8 +47264,8 @@ YYLTYPE yylloc; ;} break; - case 2011: -#line 14795 "gram.y" + case 2019: +#line 14813 "gram.y" { SubLink *n = makeNode(SubLink); @@ -46239,8 +47279,8 @@ YYLTYPE yylloc; ;} break; - case 2012: -#line 14807 "gram.y" + case 2020: +#line 14825 "gram.y" { if ((yyvsp[(3) - (6)].ival) == ANY_SUBLINK) (yyval.node) = (Node *) makeA_Expr(AEXPR_OP_ANY, (yyvsp[(2) - (6)].list), (yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].node), (yylsp[(2) - (6)])); @@ -46249,8 +47289,8 @@ YYLTYPE yylloc; ;} break; - case 2013: -#line 14814 "gram.y" + case 2021: +#line 14832 "gram.y" { /* Not sure how to get rid of the parentheses * but there are lots of shift/reduce errors without them. @@ -46268,16 +47308,16 @@ YYLTYPE yylloc; ;} break; - case 2014: -#line 14830 "gram.y" + case 2022: +#line 14848 "gram.y" { (yyval.node) = makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1((yyvsp[(1) - (3)].node)), (yylsp[(2) - (3)])); ;} break; - case 2015: -#line 14835 "gram.y" + case 2023: +#line 14853 "gram.y" { (yyval.node) = makeNotExpr(makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1((yyvsp[(1) - (4)].node)), (yylsp[(2) - (4)])), @@ -46285,8 +47325,8 @@ YYLTYPE yylloc; ;} break; - case 2016: -#line 14841 "gram.y" + case 2024: +#line 14859 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make1((yyvsp[(1) - (3)].node)), @@ -46295,8 +47335,8 @@ YYLTYPE yylloc; ;} break; - case 2017: -#line 14848 "gram.y" + case 2025: +#line 14866 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make2((yyvsp[(1) - (4)].node), makeStringConst((yyvsp[(3) - (4)].str), (yylsp[(3) - (4)]))), @@ -46305,8 +47345,8 @@ YYLTYPE yylloc; ;} break; - case 2018: -#line 14855 "gram.y" + case 2026: +#line 14873 "gram.y" { (yyval.node) = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make1((yyvsp[(1) - (4)].node)), @@ -46316,8 +47356,8 @@ YYLTYPE yylloc; ;} break; - case 2019: -#line 14863 "gram.y" + case 2027: +#line 14881 "gram.y" { (yyval.node) = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make2((yyvsp[(1) - (5)].node), makeStringConst((yyvsp[(4) - (5)].str), (yylsp[(4) - (5)]))), @@ -46327,8 +47367,26 @@ YYLTYPE yylloc; ;} break; - case 2020: -#line 14871 "gram.y" + case 2028: +#line 14890 "gram.y" + { + JsonFormat *format = makeJsonFormat(JS_FORMAT_DEFAULT, JS_ENC_DEFAULT, -1); + + (yyval.node) = makeJsonIsPredicate((yyvsp[(1) - (4)].node), format, (yyvsp[(3) - (4)].ival), (yyvsp[(4) - (4)].boolean), (yylsp[(1) - (4)])); + ;} + break; + + case 2029: +#line 14909 "gram.y" + { + JsonFormat *format = makeJsonFormat(JS_FORMAT_DEFAULT, JS_ENC_DEFAULT, -1); + + (yyval.node) = makeNotExpr(makeJsonIsPredicate((yyvsp[(1) - (5)].node), format, (yyvsp[(4) - (5)].ival), (yyvsp[(5) - (5)].boolean), (yylsp[(1) - (5)])), (yylsp[(1) - (5)])); + ;} + break; + + case 2030: +#line 14927 "gram.y" { /* * The SQL spec only allows DEFAULT in "contextually typed @@ -46345,120 +47403,120 @@ YYLTYPE yylloc; ;} break; - case 2021: -#line 14897 "gram.y" + case 2031: +#line 14953 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2022: -#line 14899 "gram.y" + case 2032: +#line 14955 "gram.y" { (yyval.node) = makeTypeCast((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].typnam), (yylsp[(2) - (3)])); ;} break; - case 2023: -#line 14901 "gram.y" + case 2033: +#line 14957 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 2024: -#line 14903 "gram.y" + case 2034: +#line 14959 "gram.y" { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 2025: -#line 14905 "gram.y" + case 2035: +#line 14961 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2026: -#line 14907 "gram.y" + case 2036: +#line 14963 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "-", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2027: -#line 14909 "gram.y" + case 2037: +#line 14965 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "*", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2028: -#line 14911 "gram.y" + case 2038: +#line 14967 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "/", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2029: -#line 14913 "gram.y" + case 2039: +#line 14969 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "%", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2030: -#line 14915 "gram.y" + case 2040: +#line 14971 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "^", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2031: -#line 14917 "gram.y" + case 2041: +#line 14973 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2032: -#line 14919 "gram.y" + case 2042: +#line 14975 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2033: -#line 14921 "gram.y" + case 2043: +#line 14977 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2034: -#line 14923 "gram.y" + case 2044: +#line 14979 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2035: -#line 14925 "gram.y" + case 2045: +#line 14981 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2036: -#line 14927 "gram.y" + case 2046: +#line 14983 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<>", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2037: -#line 14929 "gram.y" + case 2047: +#line 14985 "gram.y" { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[(2) - (3)].list), (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 2038: -#line 14931 "gram.y" + case 2048: +#line 14987 "gram.y" { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[(1) - (2)].list), NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 2039: -#line 14933 "gram.y" + case 2049: +#line 14989 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", (yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node), (yylsp[(2) - (5)])); ;} break; - case 2040: -#line 14937 "gram.y" + case 2050: +#line 14993 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", (yyvsp[(1) - (6)].node), (yyvsp[(6) - (6)].node), (yylsp[(2) - (6)])); ;} break; - case 2041: -#line 14941 "gram.y" + case 2051: +#line 14997 "gram.y" { (yyval.node) = makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1((yyvsp[(1) - (3)].node)), (yylsp[(2) - (3)])); ;} break; - case 2042: -#line 14946 "gram.y" + case 2052: +#line 15002 "gram.y" { (yyval.node) = makeNotExpr(makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1((yyvsp[(1) - (4)].node)), (yylsp[(2) - (4)])), @@ -46466,18 +47524,18 @@ YYLTYPE yylloc; ;} break; - case 2043: -#line 14961 "gram.y" + case 2053: +#line 15017 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2044: -#line 14962 "gram.y" + case 2054: +#line 15018 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2045: -#line 14964 "gram.y" + case 2055: +#line 15020 "gram.y" { ParamRef *p = makeNode(ParamRef); @@ -46496,8 +47554,8 @@ YYLTYPE yylloc; ;} break; - case 2046: -#line 14981 "gram.y" + case 2056: +#line 15037 "gram.y" { if ((yyvsp[(4) - (4)].list)) { @@ -46512,18 +47570,18 @@ YYLTYPE yylloc; ;} break; - case 2047: -#line 14994 "gram.y" + case 2057: +#line 15050 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2048: -#line 14996 "gram.y" + case 2058: +#line 15052 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2049: -#line 14998 "gram.y" + case 2059: +#line 15054 "gram.y" { SubLink *n = makeNode(SubLink); @@ -46537,8 +47595,8 @@ YYLTYPE yylloc; ;} break; - case 2050: -#line 15010 "gram.y" + case 2060: +#line 15066 "gram.y" { /* * Because the select_with_parens nonterminal is designed @@ -46565,8 +47623,8 @@ YYLTYPE yylloc; ;} break; - case 2051: -#line 15035 "gram.y" + case 2061: +#line 15091 "gram.y" { SubLink *n = makeNode(SubLink); @@ -46580,8 +47638,8 @@ YYLTYPE yylloc; ;} break; - case 2052: -#line 15047 "gram.y" + case 2062: +#line 15103 "gram.y" { SubLink *n = makeNode(SubLink); @@ -46595,8 +47653,8 @@ YYLTYPE yylloc; ;} break; - case 2053: -#line 15059 "gram.y" + case 2063: +#line 15115 "gram.y" { A_ArrayExpr *n = castNode(A_ArrayExpr, (yyvsp[(2) - (2)].node)); @@ -46606,8 +47664,8 @@ YYLTYPE yylloc; ;} break; - case 2054: -#line 15067 "gram.y" + case 2064: +#line 15123 "gram.y" { RowExpr *r = makeNode(RowExpr); @@ -46620,8 +47678,8 @@ YYLTYPE yylloc; ;} break; - case 2055: -#line 15078 "gram.y" + case 2065: +#line 15134 "gram.y" { RowExpr *r = makeNode(RowExpr); @@ -46634,8 +47692,8 @@ YYLTYPE yylloc; ;} break; - case 2056: -#line 15089 "gram.y" + case 2066: +#line 15145 "gram.y" { GroupingFunc *g = makeNode(GroupingFunc); @@ -46645,8 +47703,8 @@ YYLTYPE yylloc; ;} break; - case 2057: -#line 15099 "gram.y" + case 2067: +#line 15155 "gram.y" { (yyval.node) = (Node *) makeFuncCall((yyvsp[(1) - (3)].list), NIL, COERCE_EXPLICIT_CALL, @@ -46654,8 +47712,8 @@ YYLTYPE yylloc; ;} break; - case 2058: -#line 15105 "gram.y" + case 2068: +#line 15161 "gram.y" { FuncCall *n = makeFuncCall((yyvsp[(1) - (5)].list), (yyvsp[(3) - (5)].list), COERCE_EXPLICIT_CALL, @@ -46666,8 +47724,8 @@ YYLTYPE yylloc; ;} break; - case 2059: -#line 15114 "gram.y" + case 2069: +#line 15170 "gram.y" { FuncCall *n = makeFuncCall((yyvsp[(1) - (6)].list), list_make1((yyvsp[(4) - (6)].node)), COERCE_EXPLICIT_CALL, @@ -46679,8 +47737,8 @@ YYLTYPE yylloc; ;} break; - case 2060: -#line 15124 "gram.y" + case 2070: +#line 15180 "gram.y" { FuncCall *n = makeFuncCall((yyvsp[(1) - (8)].list), lappend((yyvsp[(3) - (8)].list), (yyvsp[(6) - (8)].node)), COERCE_EXPLICIT_CALL, @@ -46692,8 +47750,8 @@ YYLTYPE yylloc; ;} break; - case 2061: -#line 15134 "gram.y" + case 2071: +#line 15190 "gram.y" { FuncCall *n = makeFuncCall((yyvsp[(1) - (6)].list), (yyvsp[(4) - (6)].list), COERCE_EXPLICIT_CALL, @@ -46708,8 +47766,8 @@ YYLTYPE yylloc; ;} break; - case 2062: -#line 15147 "gram.y" + case 2072: +#line 15203 "gram.y" { FuncCall *n = makeFuncCall((yyvsp[(1) - (6)].list), (yyvsp[(4) - (6)].list), COERCE_EXPLICIT_CALL, @@ -46721,8 +47779,8 @@ YYLTYPE yylloc; ;} break; - case 2063: -#line 15157 "gram.y" + case 2073: +#line 15213 "gram.y" { /* * We consider AGGREGATE(*) to invoke a parameterless @@ -46743,8 +47801,8 @@ YYLTYPE yylloc; ;} break; - case 2064: -#line 15188 "gram.y" + case 2074: +#line 15244 "gram.y" { FuncCall *n = (FuncCall *) (yyvsp[(1) - (4)].node); @@ -46782,23 +47840,41 @@ YYLTYPE yylloc; ;} break; - case 2065: -#line 15224 "gram.y" + case 2075: +#line 15280 "gram.y" + { + JsonAggConstructor *n = IsA((yyvsp[(1) - (3)].node), JsonObjectAgg) ? + ((JsonObjectAgg *) (yyvsp[(1) - (3)].node))->constructor : + ((JsonArrayAgg *) (yyvsp[(1) - (3)].node))->constructor; + + n->agg_filter = (yyvsp[(2) - (3)].node); + n->over = (yyvsp[(3) - (3)].windef); + (yyval.node) = (Node *) (yyvsp[(1) - (3)].node); + ;} + break; + + case 2076: +#line 15290 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2066: -#line 15234 "gram.y" + case 2077: +#line 15300 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2067: -#line 15235 "gram.y" + case 2078: +#line 15301 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2068: -#line 15243 "gram.y" + case 2079: +#line 15302 "gram.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + break; + + case 2080: +#line 15310 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("pg_collation_for"), list_make1((yyvsp[(4) - (5)].node)), @@ -46807,118 +47883,128 @@ YYLTYPE yylloc; ;} break; - case 2069: -#line 15250 "gram.y" + case 2081: +#line 15317 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_DATE, -1, (yylsp[(1) - (1)])); ;} break; - case 2070: -#line 15254 "gram.y" + case 2082: +#line 15321 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIME, -1, (yylsp[(1) - (1)])); ;} break; - case 2071: -#line 15258 "gram.y" + case 2083: +#line 15325 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIME_N, (yyvsp[(3) - (4)].ival), (yylsp[(1) - (4)])); ;} break; - case 2072: -#line 15262 "gram.y" + case 2084: +#line 15329 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIMESTAMP, -1, (yylsp[(1) - (1)])); ;} break; - case 2073: -#line 15266 "gram.y" + case 2085: +#line 15333 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIMESTAMP_N, (yyvsp[(3) - (4)].ival), (yylsp[(1) - (4)])); ;} break; - case 2074: -#line 15270 "gram.y" + case 2086: +#line 15337 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIME, -1, (yylsp[(1) - (1)])); ;} break; - case 2075: -#line 15274 "gram.y" + case 2087: +#line 15341 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIME_N, (yyvsp[(3) - (4)].ival), (yylsp[(1) - (4)])); ;} break; - case 2076: -#line 15278 "gram.y" + case 2088: +#line 15345 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIMESTAMP, -1, (yylsp[(1) - (1)])); ;} break; - case 2077: -#line 15282 "gram.y" + case 2089: +#line 15349 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIMESTAMP_N, (yyvsp[(3) - (4)].ival), (yylsp[(1) - (4)])); ;} break; - case 2078: -#line 15286 "gram.y" + case 2090: +#line 15353 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_ROLE, -1, (yylsp[(1) - (1)])); ;} break; - case 2079: -#line 15290 "gram.y" + case 2091: +#line 15357 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_USER, -1, (yylsp[(1) - (1)])); ;} break; - case 2080: -#line 15294 "gram.y" + case 2092: +#line 15361 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_SESSION_USER, -1, (yylsp[(1) - (1)])); ;} break; - case 2081: -#line 15298 "gram.y" + case 2093: +#line 15365 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("system_user"), + NIL, + COERCE_SQL_SYNTAX, + (yylsp[(1) - (1)])); + ;} + break; + + case 2094: +#line 15372 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_USER, -1, (yylsp[(1) - (1)])); ;} break; - case 2082: -#line 15302 "gram.y" + case 2095: +#line 15376 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_CATALOG, -1, (yylsp[(1) - (1)])); ;} break; - case 2083: -#line 15306 "gram.y" + case 2096: +#line 15380 "gram.y" { (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_SCHEMA, -1, (yylsp[(1) - (1)])); ;} break; - case 2084: -#line 15310 "gram.y" + case 2097: +#line 15384 "gram.y" { (yyval.node) = makeTypeCast((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].typnam), (yylsp[(1) - (6)])); ;} break; - case 2085: -#line 15312 "gram.y" + case 2098: +#line 15386 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("extract"), (yyvsp[(3) - (4)].list), @@ -46927,8 +48013,8 @@ YYLTYPE yylloc; ;} break; - case 2086: -#line 15319 "gram.y" + case 2099: +#line 15393 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("normalize"), list_make1((yyvsp[(3) - (4)].node)), @@ -46937,8 +48023,8 @@ YYLTYPE yylloc; ;} break; - case 2087: -#line 15326 "gram.y" + case 2100: +#line 15400 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("normalize"), list_make2((yyvsp[(3) - (6)].node), makeStringConst((yyvsp[(5) - (6)].str), (yylsp[(5) - (6)]))), @@ -46947,8 +48033,8 @@ YYLTYPE yylloc; ;} break; - case 2088: -#line 15333 "gram.y" + case 2101: +#line 15407 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("overlay"), (yyvsp[(3) - (4)].list), @@ -46957,8 +48043,8 @@ YYLTYPE yylloc; ;} break; - case 2089: -#line 15340 "gram.y" + case 2102: +#line 15414 "gram.y" { /* * allow functions named overlay() to be called without @@ -46971,8 +48057,8 @@ YYLTYPE yylloc; ;} break; - case 2090: -#line 15351 "gram.y" + case 2103: +#line 15425 "gram.y" { /* * position(A in B) is converted to position(B, A) @@ -46988,8 +48074,8 @@ YYLTYPE yylloc; ;} break; - case 2091: -#line 15365 "gram.y" + case 2104: +#line 15439 "gram.y" { /* substring(A from B for C) is converted to * substring(A, B, C) - thomas 2000-11-28 @@ -47001,8 +48087,8 @@ YYLTYPE yylloc; ;} break; - case 2092: -#line 15375 "gram.y" + case 2105: +#line 15449 "gram.y" { /* * allow functions named substring() to be called without @@ -47015,8 +48101,8 @@ YYLTYPE yylloc; ;} break; - case 2093: -#line 15386 "gram.y" + case 2106: +#line 15460 "gram.y" { /* TREAT(expr AS target) converts expr of a particular type to target, * which is defined to be a subtype of the original expression. @@ -47034,8 +48120,8 @@ YYLTYPE yylloc; ;} break; - case 2094: -#line 15402 "gram.y" + case 2107: +#line 15476 "gram.y" { /* various trim expressions are defined in SQL * - thomas 1997-07-19 @@ -47047,8 +48133,8 @@ YYLTYPE yylloc; ;} break; - case 2095: -#line 15412 "gram.y" + case 2108: +#line 15486 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("ltrim"), (yyvsp[(4) - (5)].list), @@ -47057,8 +48143,8 @@ YYLTYPE yylloc; ;} break; - case 2096: -#line 15419 "gram.y" + case 2109: +#line 15493 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("rtrim"), (yyvsp[(4) - (5)].list), @@ -47067,8 +48153,8 @@ YYLTYPE yylloc; ;} break; - case 2097: -#line 15426 "gram.y" + case 2110: +#line 15500 "gram.y" { (yyval.node) = (Node *) makeFuncCall(SystemFuncName("btrim"), (yyvsp[(3) - (4)].list), @@ -47077,15 +48163,15 @@ YYLTYPE yylloc; ;} break; - case 2098: -#line 15433 "gram.y" + case 2111: +#line 15507 "gram.y" { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NULLIF, "=", (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node), (yylsp[(1) - (6)])); ;} break; - case 2099: -#line 15437 "gram.y" + case 2112: +#line 15511 "gram.y" { CoalesceExpr *c = makeNode(CoalesceExpr); @@ -47095,8 +48181,8 @@ YYLTYPE yylloc; ;} break; - case 2100: -#line 15445 "gram.y" + case 2113: +#line 15519 "gram.y" { MinMaxExpr *v = makeNode(MinMaxExpr); @@ -47107,8 +48193,8 @@ YYLTYPE yylloc; ;} break; - case 2101: -#line 15454 "gram.y" + case 2114: +#line 15528 "gram.y" { MinMaxExpr *v = makeNode(MinMaxExpr); @@ -47119,155 +48205,233 @@ YYLTYPE yylloc; ;} break; - case 2102: -#line 15463 "gram.y" + case 2115: +#line 15537 "gram.y" { (yyval.node) = makeXmlExpr(IS_XMLCONCAT, NULL, NIL, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); ;} break; - case 2103: -#line 15467 "gram.y" + case 2116: +#line 15541 "gram.y" { (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[(4) - (5)].str), NIL, NIL, (yylsp[(1) - (5)])); ;} break; - case 2104: -#line 15471 "gram.y" + case 2117: +#line 15545 "gram.y" { (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[(4) - (7)].str), (yyvsp[(6) - (7)].list), NIL, (yylsp[(1) - (7)])); ;} break; - case 2105: -#line 15475 "gram.y" + case 2118: +#line 15549 "gram.y" { (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[(4) - (7)].str), NIL, (yyvsp[(6) - (7)].list), (yylsp[(1) - (7)])); ;} break; - case 2106: -#line 15479 "gram.y" + case 2119: +#line 15553 "gram.y" { (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[(4) - (9)].str), (yyvsp[(6) - (9)].list), (yyvsp[(8) - (9)].list), (yylsp[(1) - (9)])); ;} break; - case 2107: -#line 15483 "gram.y" + case 2120: +#line 15557 "gram.y" + { + /* xmlexists(A PASSING [BY REF] B [BY REF]) is + * converted to xmlexists(A, B)*/ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("xmlexists"), + list_make2((yyvsp[(3) - (5)].node), (yyvsp[(4) - (5)].node)), + COERCE_SQL_SYNTAX, + (yylsp[(1) - (5)])); + ;} + break; + + case 2121: +#line 15566 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLFOREST, NULL, (yyvsp[(3) - (4)].list), NIL, (yylsp[(1) - (4)])); + ;} + break; + + case 2122: +#line 15570 "gram.y" + { + XmlExpr *x = (XmlExpr *) + makeXmlExpr(IS_XMLPARSE, NULL, NIL, + list_make2((yyvsp[(4) - (6)].node), makeBoolAConst((yyvsp[(5) - (6)].boolean), -1)), + (yylsp[(1) - (6)])); + + x->xmloption = (yyvsp[(3) - (6)].ival); + (yyval.node) = (Node *) x; + ;} + break; + + case 2123: +#line 15580 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[(4) - (5)].str), NULL, NIL, (yylsp[(1) - (5)])); + ;} + break; + + case 2124: +#line 15584 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[(4) - (7)].str), NULL, list_make1((yyvsp[(6) - (7)].node)), (yylsp[(1) - (7)])); + ;} + break; + + case 2125: +#line 15588 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLROOT, NULL, NIL, + list_make3((yyvsp[(3) - (7)].node), (yyvsp[(5) - (7)].node), (yyvsp[(6) - (7)].node)), (yylsp[(1) - (7)])); + ;} + break; + + case 2126: +#line 15593 "gram.y" { - /* xmlexists(A PASSING [BY REF] B [BY REF]) is - * converted to xmlexists(A, B)*/ - (yyval.node) = (Node *) makeFuncCall(SystemFuncName("xmlexists"), - list_make2((yyvsp[(3) - (5)].node), (yyvsp[(4) - (5)].node)), - COERCE_SQL_SYNTAX, - (yylsp[(1) - (5)])); + XmlSerialize *n = makeNode(XmlSerialize); + + n->xmloption = (yyvsp[(3) - (8)].ival); + n->expr = (yyvsp[(4) - (8)].node); + n->typeName = (yyvsp[(6) - (8)].typnam); + n->indent = (yyvsp[(7) - (8)].boolean); + n->location = (yylsp[(1) - (8)]); + (yyval.node) = (Node *) n; ;} break; - case 2108: -#line 15492 "gram.y" + case 2127: +#line 15604 "gram.y" { - (yyval.node) = makeXmlExpr(IS_XMLFOREST, NULL, (yyvsp[(3) - (4)].list), NIL, (yylsp[(1) - (4)])); + /* Support for legacy (non-standard) json_object() */ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("json_object"), + (yyvsp[(3) - (4)].list), COERCE_EXPLICIT_CALL, (yylsp[(1) - (4)])); ;} break; - case 2109: -#line 15496 "gram.y" + case 2128: +#line 15613 "gram.y" { - XmlExpr *x = (XmlExpr *) - makeXmlExpr(IS_XMLPARSE, NULL, NIL, - list_make2((yyvsp[(4) - (6)].node), makeBoolAConst((yyvsp[(5) - (6)].boolean), -1)), - (yylsp[(1) - (6)])); + JsonObjectConstructor *n = makeNode(JsonObjectConstructor); - x->xmloption = (yyvsp[(3) - (6)].ival); - (yyval.node) = (Node *) x; + n->exprs = (yyvsp[(3) - (7)].list); + n->absent_on_null = (yyvsp[(4) - (7)].boolean); + n->unique = (yyvsp[(5) - (7)].boolean); + n->output = (JsonOutput *) (yyvsp[(6) - (7)].node); + n->location = (yylsp[(1) - (7)]); + (yyval.node) = (Node *) n; ;} break; - case 2110: -#line 15506 "gram.y" + case 2129: +#line 15624 "gram.y" { - (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[(4) - (5)].str), NULL, NIL, (yylsp[(1) - (5)])); + JsonObjectConstructor *n = makeNode(JsonObjectConstructor); + + n->exprs = NULL; + n->absent_on_null = false; + n->unique = false; + n->output = (JsonOutput *) (yyvsp[(3) - (4)].node); + n->location = (yylsp[(1) - (4)]); + (yyval.node) = (Node *) n; ;} break; - case 2111: -#line 15510 "gram.y" + case 2130: +#line 15639 "gram.y" { - (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[(4) - (7)].str), NULL, list_make1((yyvsp[(6) - (7)].node)), (yylsp[(1) - (7)])); + JsonArrayConstructor *n = makeNode(JsonArrayConstructor); + + n->exprs = (yyvsp[(3) - (6)].list); + n->absent_on_null = (yyvsp[(4) - (6)].boolean); + n->output = (JsonOutput *) (yyvsp[(5) - (6)].node); + n->location = (yylsp[(1) - (6)]); + (yyval.node) = (Node *) n; ;} break; - case 2112: -#line 15514 "gram.y" + case 2131: +#line 15654 "gram.y" { - (yyval.node) = makeXmlExpr(IS_XMLROOT, NULL, NIL, - list_make3((yyvsp[(3) - (7)].node), (yyvsp[(5) - (7)].node), (yyvsp[(6) - (7)].node)), (yylsp[(1) - (7)])); + JsonArrayQueryConstructor *n = makeNode(JsonArrayQueryConstructor); + + n->query = (yyvsp[(3) - (6)].node); + n->format = (JsonFormat *) (yyvsp[(4) - (6)].node); + n->absent_on_null = true; /* XXX */ + n->output = (JsonOutput *) (yyvsp[(5) - (6)].node); + n->location = (yylsp[(1) - (6)]); + (yyval.node) = (Node *) n; ;} break; - case 2113: -#line 15519 "gram.y" + case 2132: +#line 15667 "gram.y" { - XmlSerialize *n = makeNode(XmlSerialize); + JsonArrayConstructor *n = makeNode(JsonArrayConstructor); - n->xmloption = (yyvsp[(3) - (7)].ival); - n->expr = (yyvsp[(4) - (7)].node); - n->typeName = (yyvsp[(6) - (7)].typnam); - n->location = (yylsp[(1) - (7)]); + n->exprs = NIL; + n->absent_on_null = true; + n->output = (JsonOutput *) (yyvsp[(3) - (4)].node); + n->location = (yylsp[(1) - (4)]); (yyval.node) = (Node *) n; ;} break; - case 2114: -#line 15534 "gram.y" + case 2133: +#line 15682 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 2115: -#line 15536 "gram.y" + case 2134: +#line 15684 "gram.y" { (yyval.node) = makeNullAConst(-1); ;} break; - case 2116: -#line 15540 "gram.y" + case 2135: +#line 15688 "gram.y" { (yyval.node) = makeIntConst(XML_STANDALONE_YES, -1); ;} break; - case 2117: -#line 15542 "gram.y" + case 2136: +#line 15690 "gram.y" { (yyval.node) = makeIntConst(XML_STANDALONE_NO, -1); ;} break; - case 2118: -#line 15544 "gram.y" + case 2137: +#line 15692 "gram.y" { (yyval.node) = makeIntConst(XML_STANDALONE_NO_VALUE, -1); ;} break; - case 2119: -#line 15546 "gram.y" + case 2138: +#line 15694 "gram.y" { (yyval.node) = makeIntConst(XML_STANDALONE_OMITTED, -1); ;} break; - case 2120: -#line 15549 "gram.y" + case 2139: +#line 15697 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2121: -#line 15552 "gram.y" + case 2140: +#line 15700 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 2122: -#line 15553 "gram.y" + case 2141: +#line 15701 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 2123: -#line 15557 "gram.y" + case 2142: +#line 15705 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(3) - (3)].str); @@ -47277,8 +48441,8 @@ YYLTYPE yylloc; ;} break; - case 2124: -#line 15565 "gram.y" + case 2143: +#line 15713 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = NULL; @@ -47288,101 +48452,116 @@ YYLTYPE yylloc; ;} break; - case 2125: -#line 15574 "gram.y" + case 2144: +#line 15722 "gram.y" { (yyval.ival) = XMLOPTION_DOCUMENT; ;} break; - case 2126: -#line 15575 "gram.y" + case 2145: +#line 15723 "gram.y" { (yyval.ival) = XMLOPTION_CONTENT; ;} break; - case 2127: -#line 15578 "gram.y" + case 2146: +#line 15726 "gram.y" { (yyval.boolean) = true; ;} break; - case 2128: -#line 15579 "gram.y" + case 2147: +#line 15727 "gram.y" { (yyval.boolean) = false; ;} break; - case 2129: -#line 15580 "gram.y" + case 2148: +#line 15728 "gram.y" { (yyval.boolean) = false; ;} break; - case 2130: -#line 15586 "gram.y" + case 2149: +#line 15731 "gram.y" + { (yyval.boolean) = true; ;} + break; + + case 2150: +#line 15732 "gram.y" + { (yyval.boolean) = false; ;} + break; + + case 2151: +#line 15733 "gram.y" + { (yyval.boolean) = false; ;} + break; + + case 2152: +#line 15739 "gram.y" { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 2131: -#line 15590 "gram.y" + case 2153: +#line 15743 "gram.y" { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 2132: -#line 15594 "gram.y" + case 2154: +#line 15747 "gram.y" { (yyval.node) = (yyvsp[(3) - (3)].node); ;} break; - case 2133: -#line 15598 "gram.y" + case 2155: +#line 15751 "gram.y" { (yyval.node) = (yyvsp[(3) - (4)].node); ;} break; - case 2136: -#line 15613 "gram.y" + case 2158: +#line 15766 "gram.y" { (yyval.list) = (yyvsp[(4) - (5)].list); ;} break; - case 2137: -#line 15614 "gram.y" + case 2159: +#line 15767 "gram.y" { (yyval.list) = NIL; ;} break; - case 2138: -#line 15618 "gram.y" + case 2160: +#line 15771 "gram.y" { (yyval.node) = (yyvsp[(4) - (5)].node); ;} break; - case 2139: -#line 15619 "gram.y" + case 2161: +#line 15772 "gram.y" { (yyval.node) = NULL; ;} break; - case 2140: -#line 15627 "gram.y" + case 2162: +#line 15780 "gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 2141: -#line 15628 "gram.y" + case 2163: +#line 15781 "gram.y" { (yyval.list) = NIL; ;} break; - case 2142: -#line 15632 "gram.y" + case 2164: +#line 15785 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].windef)); ;} break; - case 2143: -#line 15634 "gram.y" + case 2165: +#line 15787 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].windef)); ;} break; - case 2144: -#line 15639 "gram.y" + case 2166: +#line 15792 "gram.y" { WindowDef *n = (yyvsp[(3) - (3)].windef); @@ -47391,13 +48570,13 @@ YYLTYPE yylloc; ;} break; - case 2145: -#line 15648 "gram.y" + case 2167: +#line 15801 "gram.y" { (yyval.windef) = (yyvsp[(2) - (2)].windef); ;} break; - case 2146: -#line 15650 "gram.y" + case 2168: +#line 15803 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47413,13 +48592,13 @@ YYLTYPE yylloc; ;} break; - case 2147: -#line 15664 "gram.y" + case 2169: +#line 15817 "gram.y" { (yyval.windef) = NULL; ;} break; - case 2148: -#line 15669 "gram.y" + case 2170: +#line 15822 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47436,28 +48615,28 @@ YYLTYPE yylloc; ;} break; - case 2149: -#line 15695 "gram.y" + case 2171: +#line 15848 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2150: -#line 15696 "gram.y" + case 2172: +#line 15849 "gram.y" { (yyval.str) = NULL; ;} break; - case 2151: -#line 15699 "gram.y" + case 2173: +#line 15852 "gram.y" { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 2152: -#line 15700 "gram.y" + case 2174: +#line 15853 "gram.y" { (yyval.list) = NIL; ;} break; - case 2153: -#line 15709 "gram.y" + case 2175: +#line 15862 "gram.y" { WindowDef *n = (yyvsp[(2) - (3)].windef); @@ -47467,8 +48646,8 @@ YYLTYPE yylloc; ;} break; - case 2154: -#line 15717 "gram.y" + case 2176: +#line 15870 "gram.y" { WindowDef *n = (yyvsp[(2) - (3)].windef); @@ -47478,8 +48657,8 @@ YYLTYPE yylloc; ;} break; - case 2155: -#line 15725 "gram.y" + case 2177: +#line 15878 "gram.y" { WindowDef *n = (yyvsp[(2) - (3)].windef); @@ -47489,8 +48668,8 @@ YYLTYPE yylloc; ;} break; - case 2156: -#line 15733 "gram.y" + case 2178: +#line 15886 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47501,8 +48680,8 @@ YYLTYPE yylloc; ;} break; - case 2157: -#line 15744 "gram.y" + case 2179: +#line 15897 "gram.y" { WindowDef *n = (yyvsp[(1) - (1)].windef); @@ -47522,8 +48701,8 @@ YYLTYPE yylloc; ;} break; - case 2158: -#line 15762 "gram.y" + case 2180: +#line 15915 "gram.y" { WindowDef *n1 = (yyvsp[(2) - (4)].windef); WindowDef *n2 = (yyvsp[(4) - (4)].windef); @@ -47563,8 +48742,8 @@ YYLTYPE yylloc; ;} break; - case 2159: -#line 15808 "gram.y" + case 2181: +#line 15961 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47575,8 +48754,8 @@ YYLTYPE yylloc; ;} break; - case 2160: -#line 15817 "gram.y" + case 2182: +#line 15970 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47587,8 +48766,8 @@ YYLTYPE yylloc; ;} break; - case 2161: -#line 15826 "gram.y" + case 2183: +#line 15979 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47599,8 +48778,8 @@ YYLTYPE yylloc; ;} break; - case 2162: -#line 15835 "gram.y" + case 2184: +#line 15988 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47611,8 +48790,8 @@ YYLTYPE yylloc; ;} break; - case 2163: -#line 15844 "gram.y" + case 2185: +#line 15997 "gram.y" { WindowDef *n = makeNode(WindowDef); @@ -47623,233 +48802,233 @@ YYLTYPE yylloc; ;} break; - case 2164: -#line 15855 "gram.y" + case 2186: +#line 16008 "gram.y" { (yyval.ival) = FRAMEOPTION_EXCLUDE_CURRENT_ROW; ;} break; - case 2165: -#line 15856 "gram.y" + case 2187: +#line 16009 "gram.y" { (yyval.ival) = FRAMEOPTION_EXCLUDE_GROUP; ;} break; - case 2166: -#line 15857 "gram.y" + case 2188: +#line 16010 "gram.y" { (yyval.ival) = FRAMEOPTION_EXCLUDE_TIES; ;} break; - case 2167: -#line 15858 "gram.y" + case 2189: +#line 16011 "gram.y" { (yyval.ival) = 0; ;} break; - case 2168: -#line 15859 "gram.y" + case 2190: +#line 16012 "gram.y" { (yyval.ival) = 0; ;} break; - case 2169: -#line 15873 "gram.y" + case 2191: +#line 16026 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2170: -#line 15874 "gram.y" + case 2192: +#line 16027 "gram.y" { (yyval.list) = NIL; ;} break; - case 2171: -#line 15875 "gram.y" + case 2193: +#line 16028 "gram.y" { (yyval.list) = lappend((yyvsp[(2) - (5)].list), (yyvsp[(4) - (5)].node)); ;} break; - case 2172: -#line 15878 "gram.y" + case 2194: +#line 16031 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2173: -#line 15879 "gram.y" + case 2195: +#line 16032 "gram.y" { (yyval.list) = NIL; ;} break; - case 2174: -#line 15882 "gram.y" + case 2196: +#line 16035 "gram.y" { (yyval.list) = lappend((yyvsp[(2) - (5)].list), (yyvsp[(4) - (5)].node)); ;} break; - case 2175: -#line 15885 "gram.y" + case 2197: +#line 16038 "gram.y" { (yyval.ival) = ANY_SUBLINK; ;} break; - case 2176: -#line 15886 "gram.y" + case 2198: +#line 16039 "gram.y" { (yyval.ival) = ANY_SUBLINK; ;} break; - case 2177: -#line 15887 "gram.y" + case 2199: +#line 16040 "gram.y" { (yyval.ival) = ALL_SUBLINK; ;} break; - case 2178: -#line 15890 "gram.y" + case 2200: +#line 16043 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2179: -#line 15891 "gram.y" + case 2201: +#line 16044 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2180: -#line 15894 "gram.y" + case 2202: +#line 16047 "gram.y" { (yyval.str) = "+"; ;} break; - case 2181: -#line 15895 "gram.y" + case 2203: +#line 16048 "gram.y" { (yyval.str) = "-"; ;} break; - case 2182: -#line 15896 "gram.y" + case 2204: +#line 16049 "gram.y" { (yyval.str) = "*"; ;} break; - case 2183: -#line 15897 "gram.y" + case 2205: +#line 16050 "gram.y" { (yyval.str) = "/"; ;} break; - case 2184: -#line 15898 "gram.y" + case 2206: +#line 16051 "gram.y" { (yyval.str) = "%"; ;} break; - case 2185: -#line 15899 "gram.y" + case 2207: +#line 16052 "gram.y" { (yyval.str) = "^"; ;} break; - case 2186: -#line 15900 "gram.y" + case 2208: +#line 16053 "gram.y" { (yyval.str) = "<"; ;} break; - case 2187: -#line 15901 "gram.y" + case 2209: +#line 16054 "gram.y" { (yyval.str) = ">"; ;} break; - case 2188: -#line 15902 "gram.y" + case 2210: +#line 16055 "gram.y" { (yyval.str) = "="; ;} break; - case 2189: -#line 15903 "gram.y" + case 2211: +#line 16056 "gram.y" { (yyval.str) = "<="; ;} break; - case 2190: -#line 15904 "gram.y" + case 2212: +#line 16057 "gram.y" { (yyval.str) = ">="; ;} break; - case 2191: -#line 15905 "gram.y" + case 2213: +#line 16058 "gram.y" { (yyval.str) = "<>"; ;} break; - case 2192: -#line 15909 "gram.y" + case 2214: +#line 16062 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 2193: -#line 15911 "gram.y" + case 2215: +#line 16064 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2194: -#line 15916 "gram.y" + case 2216: +#line 16069 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 2195: -#line 15918 "gram.y" + case 2217: +#line 16071 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2196: -#line 15923 "gram.y" + case 2218: +#line 16076 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 2197: -#line 15925 "gram.y" + case 2219: +#line 16078 "gram.y" { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 2198: -#line 15927 "gram.y" + case 2220: +#line 16080 "gram.y" { (yyval.list) = list_make1(makeString("~~")); ;} break; - case 2199: -#line 15929 "gram.y" + case 2221: +#line 16082 "gram.y" { (yyval.list) = list_make1(makeString("!~~")); ;} break; - case 2200: -#line 15931 "gram.y" + case 2222: +#line 16084 "gram.y" { (yyval.list) = list_make1(makeString("~~*")); ;} break; - case 2201: -#line 15933 "gram.y" + case 2223: +#line 16086 "gram.y" { (yyval.list) = list_make1(makeString("!~~*")); ;} break; - case 2202: -#line 15945 "gram.y" + case 2224: +#line 16098 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 2203: -#line 15949 "gram.y" + case 2225: +#line 16102 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 2204: -#line 15956 "gram.y" + case 2226: +#line 16109 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 2205: -#line 15960 "gram.y" + case 2227: +#line 16113 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 2206: -#line 15966 "gram.y" + case 2228: +#line 16119 "gram.y" { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 2207: -#line 15970 "gram.y" + case 2229: +#line 16123 "gram.y" { NamedArgExpr *na = makeNode(NamedArgExpr); @@ -47861,8 +49040,8 @@ YYLTYPE yylloc; ;} break; - case 2208: -#line 15980 "gram.y" + case 2230: +#line 16133 "gram.y" { NamedArgExpr *na = makeNode(NamedArgExpr); @@ -47874,169 +49053,169 @@ YYLTYPE yylloc; ;} break; - case 2209: -#line 15991 "gram.y" + case 2231: +#line 16144 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 2210: -#line 15992 "gram.y" + case 2232: +#line 16145 "gram.y" { (yyval.list) = NIL; ;} break; - case 2211: -#line 15995 "gram.y" + case 2233: +#line 16148 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].typnam)); ;} break; - case 2212: -#line 15996 "gram.y" + case 2234: +#line 16149 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typnam)); ;} break; - case 2213: -#line 16000 "gram.y" + case 2235: +#line 16153 "gram.y" { (yyval.node) = makeAArrayExpr((yyvsp[(2) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 2214: -#line 16004 "gram.y" + case 2236: +#line 16157 "gram.y" { (yyval.node) = makeAArrayExpr((yyvsp[(2) - (3)].list), (yylsp[(1) - (3)])); ;} break; - case 2215: -#line 16008 "gram.y" + case 2237: +#line 16161 "gram.y" { (yyval.node) = makeAArrayExpr(NIL, (yylsp[(1) - (2)])); ;} break; - case 2216: -#line 16013 "gram.y" + case 2238: +#line 16166 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 2217: -#line 16014 "gram.y" + case 2239: +#line 16167 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 2218: -#line 16020 "gram.y" + case 2240: +#line 16173 "gram.y" { (yyval.list) = list_make2(makeStringConst((yyvsp[(1) - (3)].str), (yylsp[(1) - (3)])), (yyvsp[(3) - (3)].node)); ;} break; - case 2219: -#line 16024 "gram.y" + case 2241: +#line 16177 "gram.y" { (yyval.list) = list_make2(makeParamRef((yyvsp[(1) - (3)].ival), (yylsp[(1) - (3)])), (yyvsp[(3) - (3)].node)); ;} break; - case 2220: -#line 16033 "gram.y" + case 2242: +#line 16186 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2221: -#line 16034 "gram.y" + case 2243: +#line 16187 "gram.y" { (yyval.str) = "year"; ;} break; - case 2222: -#line 16035 "gram.y" + case 2244: +#line 16188 "gram.y" { (yyval.str) = "month"; ;} break; - case 2223: -#line 16036 "gram.y" + case 2245: +#line 16189 "gram.y" { (yyval.str) = "day"; ;} break; - case 2224: -#line 16037 "gram.y" + case 2246: +#line 16190 "gram.y" { (yyval.str) = "hour"; ;} break; - case 2225: -#line 16038 "gram.y" + case 2247: +#line 16191 "gram.y" { (yyval.str) = "minute"; ;} break; - case 2226: -#line 16039 "gram.y" + case 2248: +#line 16192 "gram.y" { (yyval.str) = "second"; ;} break; - case 2227: -#line 16040 "gram.y" + case 2249: +#line 16193 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2228: -#line 16044 "gram.y" + case 2250: +#line 16197 "gram.y" { (yyval.str) = "NFC"; ;} break; - case 2229: -#line 16045 "gram.y" + case 2251: +#line 16198 "gram.y" { (yyval.str) = "NFD"; ;} break; - case 2230: -#line 16046 "gram.y" + case 2252: +#line 16199 "gram.y" { (yyval.str) = "NFKC"; ;} break; - case 2231: -#line 16047 "gram.y" + case 2253: +#line 16200 "gram.y" { (yyval.str) = "NFKD"; ;} break; - case 2232: -#line 16053 "gram.y" + case 2254: +#line 16206 "gram.y" { /* overlay(A PLACING B FROM C FOR D) is converted to overlay(A, B, C, D) */ (yyval.list) = list_make4((yyvsp[(1) - (7)].node), (yyvsp[(3) - (7)].node), (yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)); ;} break; - case 2233: -#line 16058 "gram.y" + case 2255: +#line 16211 "gram.y" { /* overlay(A PLACING B FROM C) is converted to overlay(A, B, C) */ (yyval.list) = list_make3((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); ;} break; - case 2234: -#line 16066 "gram.y" + case 2256: +#line 16219 "gram.y" { (yyval.list) = list_make2((yyvsp[(3) - (3)].node), (yyvsp[(1) - (3)].node)); ;} break; - case 2235: -#line 16088 "gram.y" + case 2257: +#line 16241 "gram.y" { (yyval.list) = list_make3((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); ;} break; - case 2236: -#line 16092 "gram.y" + case 2258: +#line 16245 "gram.y" { /* not legal per SQL, but might as well allow it */ (yyval.list) = list_make3((yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node), (yyvsp[(3) - (5)].node)); ;} break; - case 2237: -#line 16097 "gram.y" + case 2259: +#line 16250 "gram.y" { /* * Because we aren't restricting data types here, this @@ -48049,8 +49228,8 @@ YYLTYPE yylloc; ;} break; - case 2238: -#line 16108 "gram.y" + case 2260: +#line 16261 "gram.y" { /* not legal per SQL */ @@ -48069,204 +49248,405 @@ YYLTYPE yylloc; ;} break; - case 2239: -#line 16125 "gram.y" + case 2261: +#line 16278 "gram.y" { (yyval.list) = list_make3((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); ;} break; - case 2240: -#line 16130 "gram.y" + case 2262: +#line 16283 "gram.y" { (yyval.list) = lappend((yyvsp[(3) - (3)].list), (yyvsp[(1) - (3)].node)); ;} break; - case 2241: -#line 16131 "gram.y" - { (yyval.list) = (yyvsp[(2) - (2)].list); ;} + case 2263: +#line 16284 "gram.y" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} + break; + + case 2264: +#line 16285 "gram.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} + break; + + case 2265: +#line 16289 "gram.y" + { + SubLink *n = makeNode(SubLink); + + n->subselect = (yyvsp[(1) - (1)].node); + /* other fields will be filled later */ + (yyval.node) = (Node *) n; + ;} + break; + + case 2266: +#line 16296 "gram.y" + { (yyval.node) = (Node *) (yyvsp[(2) - (3)].list); ;} + break; + + case 2267: +#line 16307 "gram.y" + { + CaseExpr *c = makeNode(CaseExpr); + + c->casetype = InvalidOid; /* not analyzed yet */ + c->arg = (Expr *) (yyvsp[(2) - (5)].node); + c->args = (yyvsp[(3) - (5)].list); + c->defresult = (Expr *) (yyvsp[(4) - (5)].node); + c->location = (yylsp[(1) - (5)]); + (yyval.node) = (Node *) c; + ;} + break; + + case 2268: +#line 16321 "gram.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} + break; + + case 2269: +#line 16322 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + break; + + case 2270: +#line 16327 "gram.y" + { + CaseWhen *w = makeNode(CaseWhen); + + w->expr = (Expr *) (yyvsp[(2) - (4)].node); + w->result = (Expr *) (yyvsp[(4) - (4)].node); + w->location = (yylsp[(1) - (4)]); + (yyval.node) = (Node *) w; + ;} + break; + + case 2271: +#line 16338 "gram.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} + break; + + case 2272: +#line 16339 "gram.y" + { (yyval.node) = NULL; ;} + break; + + case 2273: +#line 16342 "gram.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + break; + + case 2274: +#line 16343 "gram.y" + { (yyval.node) = NULL; ;} + break; + + case 2275: +#line 16347 "gram.y" + { + (yyval.node) = makeColumnRef((yyvsp[(1) - (1)].str), NIL, (yylsp[(1) - (1)]), yyscanner); + ;} + break; + + case 2276: +#line 16351 "gram.y" + { + (yyval.node) = makeColumnRef((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)]), yyscanner); + ;} + break; + + case 2277: +#line 16358 "gram.y" + { + (yyval.node) = (Node *) makeString((yyvsp[(2) - (2)].str)); + ;} + break; + + case 2278: +#line 16362 "gram.y" + { + (yyval.node) = (Node *) makeNode(A_Star); + ;} + break; + + case 2279: +#line 16366 "gram.y" + { + A_Indices *ai = makeNode(A_Indices); + + ai->is_slice = false; + ai->lidx = NULL; + ai->uidx = (yyvsp[(2) - (3)].node); + (yyval.node) = (Node *) ai; + ;} + break; + + case 2280: +#line 16375 "gram.y" + { + A_Indices *ai = makeNode(A_Indices); + + ai->is_slice = true; + ai->lidx = (yyvsp[(2) - (5)].node); + ai->uidx = (yyvsp[(4) - (5)].node); + (yyval.node) = (Node *) ai; + ;} + break; + + case 2281: +#line 16386 "gram.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + break; + + case 2282: +#line 16387 "gram.y" + { (yyval.node) = NULL; ;} + break; + + case 2283: +#line 16391 "gram.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} + break; + + case 2284: +#line 16392 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + break; + + case 2285: +#line 16396 "gram.y" + { (yyval.list) = NIL; ;} + break; + + case 2286: +#line 16397 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + break; + + case 2289: +#line 16407 "gram.y" + { + /* formatted_expr will be set during parse-analysis. */ + (yyval.node) = (Node *) makeJsonValueExpr((Expr *) (yyvsp[(1) - (2)].node), NULL, + castNode(JsonFormat, (yyvsp[(2) - (2)].node))); + ;} + break; + + case 2290: +#line 16416 "gram.y" + { + (yyval.node) = (Node *) makeJsonFormat(JS_FORMAT_JSON, (yyvsp[(3) - (3)].ival), (yylsp[(1) - (3)])); + ;} + break; + + case 2291: +#line 16420 "gram.y" + { + (yyval.node) = (Node *) makeJsonFormat(JS_FORMAT_DEFAULT, JS_ENC_DEFAULT, -1); + ;} + break; + + case 2292: +#line 16426 "gram.y" + { (yyval.ival) = makeJsonEncoding((yyvsp[(2) - (2)].str)); ;} break; - case 2242: -#line 16132 "gram.y" - { (yyval.list) = (yyvsp[(1) - (1)].list); ;} + case 2293: +#line 16427 "gram.y" + { (yyval.ival) = JS_ENC_DEFAULT; ;} break; - case 2243: -#line 16136 "gram.y" + case 2294: +#line 16432 "gram.y" { - SubLink *n = makeNode(SubLink); + JsonOutput *n = makeNode(JsonOutput); - n->subselect = (yyvsp[(1) - (1)].node); - /* other fields will be filled later */ + n->typeName = (yyvsp[(2) - (3)].typnam); + n->returning = makeNode(JsonReturning); + n->returning->format = (JsonFormat *) (yyvsp[(3) - (3)].node); (yyval.node) = (Node *) n; ;} break; - case 2244: -#line 16143 "gram.y" - { (yyval.node) = (Node *) (yyvsp[(2) - (3)].list); ;} + case 2295: +#line 16440 "gram.y" + { (yyval.node) = NULL; ;} break; - case 2245: -#line 16154 "gram.y" - { - CaseExpr *c = makeNode(CaseExpr); + case 2296: +#line 16444 "gram.y" + { (yyval.ival) = JS_TYPE_ANY; ;} + break; - c->casetype = InvalidOid; /* not analyzed yet */ - c->arg = (Expr *) (yyvsp[(2) - (5)].node); - c->args = (yyvsp[(3) - (5)].list); - c->defresult = (Expr *) (yyvsp[(4) - (5)].node); - c->location = (yylsp[(1) - (5)]); - (yyval.node) = (Node *) c; - ;} + case 2297: +#line 16445 "gram.y" + { (yyval.ival) = JS_TYPE_ANY; ;} break; - case 2246: -#line 16168 "gram.y" - { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} + case 2298: +#line 16446 "gram.y" + { (yyval.ival) = JS_TYPE_ARRAY; ;} break; - case 2247: -#line 16169 "gram.y" - { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + case 2299: +#line 16447 "gram.y" + { (yyval.ival) = JS_TYPE_OBJECT; ;} break; - case 2248: -#line 16174 "gram.y" - { - CaseWhen *w = makeNode(CaseWhen); + case 2300: +#line 16448 "gram.y" + { (yyval.ival) = JS_TYPE_SCALAR; ;} + break; - w->expr = (Expr *) (yyvsp[(2) - (4)].node); - w->result = (Expr *) (yyvsp[(4) - (4)].node); - w->location = (yylsp[(1) - (4)]); - (yyval.node) = (Node *) w; - ;} + case 2301: +#line 16453 "gram.y" + { (yyval.boolean) = true; ;} break; - case 2249: -#line 16185 "gram.y" - { (yyval.node) = (yyvsp[(2) - (2)].node); ;} + case 2302: +#line 16454 "gram.y" + { (yyval.boolean) = true; ;} break; - case 2250: -#line 16186 "gram.y" - { (yyval.node) = NULL; ;} + case 2303: +#line 16455 "gram.y" + { (yyval.boolean) = false; ;} break; - case 2251: -#line 16189 "gram.y" - { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + case 2304: +#line 16456 "gram.y" + { (yyval.boolean) = false; ;} break; - case 2252: -#line 16190 "gram.y" - { (yyval.node) = NULL; ;} + case 2305: +#line 16457 "gram.y" + { (yyval.boolean) = false; ;} break; - case 2253: -#line 16194 "gram.y" - { - (yyval.node) = makeColumnRef((yyvsp[(1) - (1)].str), NIL, (yylsp[(1) - (1)]), yyscanner); - ;} + case 2306: +#line 16462 "gram.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 2254: -#line 16198 "gram.y" - { - (yyval.node) = makeColumnRef((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)]), yyscanner); - ;} + case 2307: +#line 16464 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 2255: -#line 16205 "gram.y" - { - (yyval.node) = (Node *) makeString((yyvsp[(2) - (2)].str)); - ;} + case 2308: +#line 16474 "gram.y" + { (yyval.node) = makeJsonKeyValue((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); ;} break; - case 2256: -#line 16209 "gram.y" - { - (yyval.node) = (Node *) makeNode(A_Star); - ;} + case 2309: +#line 16477 "gram.y" + { (yyval.node) = makeJsonKeyValue((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); ;} break; - case 2257: -#line 16213 "gram.y" - { - A_Indices *ai = makeNode(A_Indices); + case 2310: +#line 16482 "gram.y" + { (yyval.boolean) = false; ;} + break; - ai->is_slice = false; - ai->lidx = NULL; - ai->uidx = (yyvsp[(2) - (3)].node); - (yyval.node) = (Node *) ai; - ;} + case 2311: +#line 16483 "gram.y" + { (yyval.boolean) = true; ;} break; - case 2258: -#line 16222 "gram.y" - { - A_Indices *ai = makeNode(A_Indices); + case 2312: +#line 16484 "gram.y" + { (yyval.boolean) = false; ;} + break; - ai->is_slice = true; - ai->lidx = (yyvsp[(2) - (5)].node); - ai->uidx = (yyvsp[(4) - (5)].node); - (yyval.node) = (Node *) ai; - ;} + case 2313: +#line 16488 "gram.y" + { (yyval.boolean) = false; ;} break; - case 2259: -#line 16233 "gram.y" - { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + case 2314: +#line 16489 "gram.y" + { (yyval.boolean) = true; ;} break; - case 2260: -#line 16234 "gram.y" - { (yyval.node) = NULL; ;} + case 2315: +#line 16490 "gram.y" + { (yyval.boolean) = true; ;} break; - case 2261: -#line 16238 "gram.y" + case 2316: +#line 16494 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 2262: -#line 16239 "gram.y" - { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + case 2317: +#line 16495 "gram.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));;} break; - case 2263: -#line 16243 "gram.y" - { (yyval.list) = NIL; ;} + case 2318: +#line 16505 "gram.y" + { + JsonObjectAgg *n = makeNode(JsonObjectAgg); + + n->arg = (JsonKeyValue *) (yyvsp[(3) - (7)].node); + n->absent_on_null = (yyvsp[(4) - (7)].boolean); + n->unique = (yyvsp[(5) - (7)].boolean); + n->constructor = makeNode(JsonAggConstructor); + n->constructor->output = (JsonOutput *) (yyvsp[(6) - (7)].node); + n->constructor->agg_order = NULL; + n->constructor->location = (yylsp[(1) - (7)]); + (yyval.node) = (Node *) n; + ;} break; - case 2264: -#line 16244 "gram.y" - { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} + case 2319: +#line 16523 "gram.y" + { + JsonArrayAgg *n = makeNode(JsonArrayAgg); + + n->arg = (JsonValueExpr *) (yyvsp[(3) - (7)].node); + n->absent_on_null = (yyvsp[(5) - (7)].boolean); + n->constructor = makeNode(JsonAggConstructor); + n->constructor->agg_order = (yyvsp[(4) - (7)].list); + n->constructor->output = (JsonOutput *) (yyvsp[(6) - (7)].node); + n->constructor->location = (yylsp[(1) - (7)]); + (yyval.node) = (Node *) n; + ;} break; - case 2267: -#line 16258 "gram.y" + case 2320: +#line 16537 "gram.y" + { (yyval.list) = (yyvsp[(3) - (3)].list); ;} + break; + + case 2321: +#line 16538 "gram.y" + { (yyval.list) = NIL; ;} + break; + + case 2322: +#line 16547 "gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 2268: -#line 16259 "gram.y" + case 2323: +#line 16548 "gram.y" { (yyval.list) = NIL; ;} break; - case 2269: -#line 16263 "gram.y" + case 2324: +#line 16552 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 2270: -#line 16264 "gram.y" + case 2325: +#line 16553 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 2271: -#line 16268 "gram.y" + case 2326: +#line 16557 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(3) - (3)].str); @@ -48276,8 +49656,8 @@ YYLTYPE yylloc; ;} break; - case 2272: -#line 16276 "gram.y" + case 2327: +#line 16565 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = (yyvsp[(2) - (2)].str); @@ -48287,8 +49667,8 @@ YYLTYPE yylloc; ;} break; - case 2273: -#line 16284 "gram.y" + case 2328: +#line 16573 "gram.y" { (yyval.target) = makeNode(ResTarget); (yyval.target)->name = NULL; @@ -48298,8 +49678,8 @@ YYLTYPE yylloc; ;} break; - case 2274: -#line 16292 "gram.y" + case 2329: +#line 16581 "gram.y" { ColumnRef *n = makeNode(ColumnRef); @@ -48314,98 +49694,98 @@ YYLTYPE yylloc; ;} break; - case 2275: -#line 16314 "gram.y" + case 2330: +#line 16603 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].range)); ;} break; - case 2276: -#line 16315 "gram.y" + case 2331: +#line 16604 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].range)); ;} break; - case 2277: -#line 16327 "gram.y" + case 2332: +#line 16616 "gram.y" { (yyval.range) = makeRangeVar(NULL, (yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 2278: -#line 16331 "gram.y" + case 2333: +#line 16620 "gram.y" { (yyval.range) = makeRangeVarFromQualifiedName((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)]), yyscanner); ;} break; - case 2279: -#line 16337 "gram.y" + case 2334: +#line 16626 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 2280: -#line 16339 "gram.y" + case 2335: +#line 16628 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 2281: -#line 16343 "gram.y" + case 2336: +#line 16632 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2282: -#line 16345 "gram.y" + case 2337: +#line 16634 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2283: -#line 16347 "gram.y" + case 2338: +#line 16636 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2284: -#line 16358 "gram.y" + case 2339: +#line 16647 "gram.y" { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 2285: -#line 16360 "gram.y" + case 2340: +#line 16649 "gram.y" { (yyval.list) = check_func_name(lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)), yyscanner); ;} break; - case 2286: -#line 16371 "gram.y" + case 2341: +#line 16660 "gram.y" { (yyval.node) = makeIntConst((yyvsp[(1) - (1)].ival), (yylsp[(1) - (1)])); ;} break; - case 2287: -#line 16375 "gram.y" + case 2342: +#line 16664 "gram.y" { (yyval.node) = makeFloatConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 2288: -#line 16379 "gram.y" + case 2343: +#line 16668 "gram.y" { (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 2289: -#line 16383 "gram.y" + case 2344: +#line 16672 "gram.y" { (yyval.node) = makeBitStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 2290: -#line 16387 "gram.y" + case 2345: +#line 16676 "gram.y" { /* This is a bit constant per SQL99: * Without Feature F511, "BIT data type", @@ -48416,8 +49796,8 @@ YYLTYPE yylloc; ;} break; - case 2291: -#line 16396 "gram.y" + case 2346: +#line 16685 "gram.y" { /* generic type 'literal' syntax */ TypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (2)].list)); @@ -48427,8 +49807,8 @@ YYLTYPE yylloc; ;} break; - case 2292: -#line 16404 "gram.y" + case 2347: +#line 16693 "gram.y" { /* generic syntax with a type modifier */ TypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (6)].list)); @@ -48462,8 +49842,8 @@ YYLTYPE yylloc; ;} break; - case 2293: -#line 16436 "gram.y" + case 2348: +#line 16725 "gram.y" { /* generic type 'literal' syntax */ TypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (2)].list)); @@ -48472,8 +49852,8 @@ YYLTYPE yylloc; ;} break; - case 2294: -#line 16443 "gram.y" + case 2349: +#line 16732 "gram.y" { /* generic syntax with a type modifier */ TypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (6)].list)); @@ -48507,15 +49887,15 @@ YYLTYPE yylloc; ;} break; - case 2295: -#line 16475 "gram.y" + case 2350: +#line 16764 "gram.y" { (yyval.node) = makeStringConstCast((yyvsp[(2) - (2)].str), (yylsp[(2) - (2)]), (yyvsp[(1) - (2)].typnam)); ;} break; - case 2296: -#line 16479 "gram.y" + case 2351: +#line 16768 "gram.y" { TypeName *t = (yyvsp[(1) - (3)].typnam); @@ -48524,8 +49904,8 @@ YYLTYPE yylloc; ;} break; - case 2297: -#line 16486 "gram.y" + case 2352: +#line 16775 "gram.y" { TypeName *t = (yyvsp[(1) - (5)].typnam); @@ -48535,15 +49915,15 @@ YYLTYPE yylloc; ;} break; - case 2298: -#line 16494 "gram.y" + case 2353: +#line 16783 "gram.y" { (yyval.node) = makeParamRefCast((yyvsp[(2) - (2)].ival), (yylsp[(2) - (2)]), (yyvsp[(1) - (2)].typnam)); ;} break; - case 2299: -#line 16498 "gram.y" + case 2354: +#line 16787 "gram.y" { TypeName *t = (yyvsp[(1) - (3)].typnam); t->typmods = (yyvsp[(3) - (3)].list); @@ -48551,8 +49931,8 @@ YYLTYPE yylloc; ;} break; - case 2300: -#line 16504 "gram.y" + case 2355: +#line 16793 "gram.y" { TypeName *t = (yyvsp[(1) - (5)].typnam); t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), @@ -48561,54 +49941,54 @@ YYLTYPE yylloc; ;} break; - case 2301: -#line 16511 "gram.y" + case 2356: +#line 16800 "gram.y" { (yyval.node) = makeBoolAConst(true, (yylsp[(1) - (1)])); ;} break; - case 2302: -#line 16515 "gram.y" + case 2357: +#line 16804 "gram.y" { (yyval.node) = makeBoolAConst(false, (yylsp[(1) - (1)])); ;} break; - case 2303: -#line 16519 "gram.y" + case 2358: +#line 16808 "gram.y" { (yyval.node) = makeNullAConst((yylsp[(1) - (1)])); ;} break; - case 2304: -#line 16524 "gram.y" + case 2359: +#line 16813 "gram.y" { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 2305: -#line 16525 "gram.y" + case 2360: +#line 16814 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2306: -#line 16527 "gram.y" + case 2361: +#line 16816 "gram.y" { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 2307: -#line 16528 "gram.y" + case 2362: +#line 16817 "gram.y" { (yyval.ival) = + (yyvsp[(2) - (2)].ival); ;} break; - case 2308: -#line 16529 "gram.y" + case 2363: +#line 16818 "gram.y" { (yyval.ival) = - (yyvsp[(2) - (2)].ival); ;} break; - case 2309: -#line 16534 "gram.y" + case 2364: +#line 16823 "gram.y" { RoleSpec *spc = (RoleSpec *) (yyvsp[(1) - (1)].rolespec); @@ -48649,8 +50029,8 @@ YYLTYPE yylloc; ;} break; - case 2310: -#line 16575 "gram.y" + case 2365: +#line 16864 "gram.y" { /* * "public" and "none" are not keywords, but they must @@ -48680,39 +50060,39 @@ YYLTYPE yylloc; ;} break; - case 2311: -#line 16603 "gram.y" + case 2366: +#line 16892 "gram.y" { (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_ROLE, (yylsp[(1) - (1)])); ;} break; - case 2312: -#line 16607 "gram.y" + case 2367: +#line 16896 "gram.y" { (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_USER, (yylsp[(1) - (1)])); ;} break; - case 2313: -#line 16611 "gram.y" + case 2368: +#line 16900 "gram.y" { (yyval.rolespec) = makeRoleSpec(ROLESPEC_SESSION_USER, (yylsp[(1) - (1)])); ;} break; - case 2314: -#line 16617 "gram.y" + case 2369: +#line 16906 "gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].rolespec)); ;} break; - case 2315: -#line 16619 "gram.y" + case 2370: +#line 16908 "gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].rolespec)); ;} break; - case 2316: -#line 16636 "gram.y" + case 2371: +#line 16925 "gram.y" { SelectStmt *n = makeNode(SelectStmt); @@ -48741,8 +50121,8 @@ YYLTYPE yylloc; ;} break; - case 2317: -#line 16669 "gram.y" + case 2372: +#line 16958 "gram.y" { PLAssignStmt *n = makeNode(PLAssignStmt); @@ -48755,104 +50135,104 @@ YYLTYPE yylloc; ;} break; - case 2318: -#line 16681 "gram.y" + case 2373: +#line 16970 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2319: -#line 16682 "gram.y" + case 2374: +#line 16971 "gram.y" { (yyval.str) = psprintf("$%d", (yyvsp[(1) - (1)].ival)); ;} break; - case 2322: -#line 16703 "gram.y" + case 2377: +#line 16992 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2323: -#line 16704 "gram.y" + case 2378: +#line 16993 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2324: -#line 16705 "gram.y" + case 2379: +#line 16994 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2325: -#line 16710 "gram.y" + case 2380: +#line 16999 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2326: -#line 16711 "gram.y" + case 2381: +#line 17000 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2327: -#line 16712 "gram.y" + case 2382: +#line 17001 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2328: -#line 16717 "gram.y" + case 2383: +#line 17006 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2329: -#line 16718 "gram.y" + case 2384: +#line 17007 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2330: -#line 16719 "gram.y" + case 2385: +#line 17008 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2331: -#line 16720 "gram.y" + case 2386: +#line 17009 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2332: -#line 16726 "gram.y" + case 2387: +#line 17015 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2333: -#line 16727 "gram.y" + case 2388: +#line 17016 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2334: -#line 16728 "gram.y" + case 2389: +#line 17017 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2335: -#line 16729 "gram.y" + case 2390: +#line 17018 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2336: -#line 16730 "gram.y" + case 2391: +#line 17019 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 2337: -#line 16736 "gram.y" + case 2392: +#line 17025 "gram.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 2338: -#line 16737 "gram.y" + case 2393: +#line 17026 "gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; /* Line 1267 of yacc.c. */ -#line 48796 "gram.c" +#line 50175 "gram.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -49072,7 +50452,7 @@ YYLTYPE yylloc; } -#line 17687 "gram.y" +#line 17998 "gram.y" /* @@ -49927,6 +51307,28 @@ processCASbits(int cas_bits, int location, const char *constrType, } } +/* + * Parse a user-supplied partition strategy string into parse node + * PartitionStrategy representation, or die trying. + */ +static PartitionStrategy +parsePartitionStrategy(char *strategy) +{ + if (pg_strcasecmp(strategy, "list") == 0) + return PARTITION_STRATEGY_LIST; + else if (pg_strcasecmp(strategy, "range") == 0) + return PARTITION_STRATEGY_RANGE; + else if (pg_strcasecmp(strategy, "hash") == 0) + return PARTITION_STRATEGY_HASH; + + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("unrecognized partitioning strategy \"%s\"", + strategy))); + return PARTITION_STRATEGY_LIST; /* keep compiler quiet */ + +} + /* * Process pubobjspec_list to check for errors in any of the objects and * convert PUBLICATIONOBJ_CONTINUATION into appropriate PublicationObjSpecType. @@ -49962,7 +51364,7 @@ preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner) if (!pubobj->name && !pubobj->pubtable) ereport(ERROR, errcode(ERRCODE_SYNTAX_ERROR), - errmsg("invalid table name at or near"), + errmsg("invalid table name"), parser_errposition(pubobj->location)); if (pubobj->name) @@ -50004,7 +51406,7 @@ preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner) else ereport(ERROR, errcode(ERRCODE_SYNTAX_ERROR), - errmsg("invalid schema name at or near"), + errmsg("invalid schema name"), parser_errposition(pubobj->location)); } diff --git a/src/postgres/src_backend_parser_parser.c b/src/postgres/src_backend_parser_parser.c index 304d1d42..8748bc10 100644 --- a/src/postgres/src_backend_parser_parser.c +++ b/src/postgres/src_backend_parser_parser.c @@ -22,7 +22,7 @@ * analyze.c and related files. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -34,7 +34,7 @@ #include "postgres.h" #include "mb/pg_wchar.h" -#include "parser/gramparse.h" +#include "gramparse.h" #include "parser/parser.h" #include "parser/scansup.h" @@ -149,6 +149,9 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner) */ switch (cur_token) { + case FORMAT: + cur_token_length = 6; + break; case NOT: cur_token_length = 3; break; @@ -162,6 +165,9 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner) case USCONST: cur_token_length = strlen(yyextra->core_yy_extra.scanbuf + *llocp); break; + case WITHOUT: + cur_token_length = 7; + break; case SQL_COMMENT: case C_COMMENT: return base_yylex(lvalp, llocp, yyscanner); @@ -203,6 +209,16 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner) /* Replace cur_token if needed, based on lookahead */ switch (cur_token) { + case FORMAT: + /* Replace FORMAT by FORMAT_LA if it's followed by JSON */ + switch (next_token) + { + case JSON: + cur_token = FORMAT_LA; + break; + } + break; + case NOT: /* Replace NOT by NOT_LA if it's followed by BETWEEN, IN, etc */ switch (next_token) @@ -239,6 +255,16 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner) } break; + case WITHOUT: + /* Replace WITHOUT by WITHOUT_LA if it's followed by TIME */ + switch (next_token) + { + case TIME: + cur_token = WITHOUT_LA; + break; + } + break; + case UIDENT: case USCONST: /* Look ahead for UESCAPE */ diff --git a/src/postgres/src_backend_parser_scan.c b/src/postgres/src_backend_parser_scan.c index d7b84243..e6e7df40 100644 --- a/src/postgres/src_backend_parser_scan.c +++ b/src/postgres/src_backend_parser_scan.c @@ -67,7 +67,7 @@ * Postgres 9.2, this check is made automatically by the Makefile.) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -81,13 +81,15 @@ #include #include "common/string.h" -#include "parser/gramparse.h" +#include "gramparse.h" +#include "nodes/miscnodes.h" #include "parser/parser.h" /* only needed for GUC variables */ #include "parser/scansup.h" #include "port/pg_bitutils.h" #include "mb/pg_wchar.h" +#include "utils/builtins.h" -#line 45 "scan.c" +#line 47 "scan.c" #define YY_INT_ALIGNED short int @@ -661,16 +663,16 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 65 -#define YY_END_OF_BUFFER 66 +#define YY_NUM_RULES 76 +#define YY_END_OF_BUFFER 77 struct yy_trans_info { flex_int16_t yy_verify; flex_int16_t yy_nxt; }; -static const struct yy_trans_info yy_transition[17678] = +static const struct yy_trans_info yy_transition[21803] = { - { 0, 0 }, { 0,17422 }, { 0, 0 }, { 0,17420 }, { 1,6192 }, + { 0, 0 }, { 0,21547 }, { 0, 0 }, { 0,21545 }, { 1,6192 }, { 2,6192 }, { 3,6192 }, { 4,6192 }, { 5,6192 }, { 6,6192 }, { 7,6192 }, { 8,6192 }, { 9,6194 }, { 10,6199 }, { 11,6192 }, { 12,6194 }, { 13,6194 }, { 14,6192 }, { 15,6192 }, { 16,6192 }, @@ -681,53 +683,53 @@ static const struct yy_trans_info yy_transition[17678] = { 37,6564 }, { 38,6241 }, { 39,6214 }, { 40,6216 }, { 41,6216 }, { 42,6564 }, { 43,6564 }, { 44,6216 }, { 45,6575 }, { 46,6594 }, - { 47,6665 }, { 48,6667 }, { 49,6667 }, { 50,6667 }, { 51,6667 }, - { 52,6667 }, { 53,6667 }, { 54,6667 }, { 55,6667 }, { 56,6667 }, - { 57,6667 }, { 58,6219 }, { 59,6216 }, { 60,6732 }, { 61,6743 }, - { 62,6810 }, { 63,6241 }, { 64,6241 }, { 65,6842 }, { 66,7099 }, - { 67,6842 }, { 68,6842 }, { 69,7356 }, { 70,6842 }, { 71,6842 }, - { 72,6842 }, { 73,6842 }, { 74,6842 }, { 75,6842 }, { 76,6842 }, - { 77,6842 }, { 78,7613 }, { 79,6842 }, { 80,6842 }, { 81,6842 }, - { 82,6842 }, { 83,6842 }, { 84,6842 }, { 85,7870 }, { 86,6842 }, - { 87,6842 }, { 88,8127 }, { 89,6842 }, { 90,6842 }, { 91,6216 }, - { 92,6192 }, { 93,6216 }, { 94,6564 }, { 95,6842 }, { 96,6241 }, - - { 97,6842 }, { 98,7099 }, { 99,6842 }, { 100,6842 }, { 101,7356 }, - { 102,6842 }, { 103,6842 }, { 104,6842 }, { 105,6842 }, { 106,6842 }, - { 107,6842 }, { 108,6842 }, { 109,6842 }, { 110,7613 }, { 111,6842 }, - { 112,6842 }, { 113,6842 }, { 114,6842 }, { 115,6842 }, { 116,6842 }, - { 117,7870 }, { 118,6842 }, { 119,6842 }, { 120,8127 }, { 121,6842 }, - { 122,6842 }, { 123,6192 }, { 124,6241 }, { 125,6192 }, { 126,6241 }, - { 127,6192 }, { 128,6842 }, { 129,6842 }, { 130,6842 }, { 131,6842 }, - { 132,6842 }, { 133,6842 }, { 134,6842 }, { 135,6842 }, { 136,6842 }, - { 137,6842 }, { 138,6842 }, { 139,6842 }, { 140,6842 }, { 141,6842 }, - { 142,6842 }, { 143,6842 }, { 144,6842 }, { 145,6842 }, { 146,6842 }, - - { 147,6842 }, { 148,6842 }, { 149,6842 }, { 150,6842 }, { 151,6842 }, - { 152,6842 }, { 153,6842 }, { 154,6842 }, { 155,6842 }, { 156,6842 }, - { 157,6842 }, { 158,6842 }, { 159,6842 }, { 160,6842 }, { 161,6842 }, - { 162,6842 }, { 163,6842 }, { 164,6842 }, { 165,6842 }, { 166,6842 }, - { 167,6842 }, { 168,6842 }, { 169,6842 }, { 170,6842 }, { 171,6842 }, - { 172,6842 }, { 173,6842 }, { 174,6842 }, { 175,6842 }, { 176,6842 }, - { 177,6842 }, { 178,6842 }, { 179,6842 }, { 180,6842 }, { 181,6842 }, - { 182,6842 }, { 183,6842 }, { 184,6842 }, { 185,6842 }, { 186,6842 }, - { 187,6842 }, { 188,6842 }, { 189,6842 }, { 190,6842 }, { 191,6842 }, - { 192,6842 }, { 193,6842 }, { 194,6842 }, { 195,6842 }, { 196,6842 }, - - { 197,6842 }, { 198,6842 }, { 199,6842 }, { 200,6842 }, { 201,6842 }, - { 202,6842 }, { 203,6842 }, { 204,6842 }, { 205,6842 }, { 206,6842 }, - { 207,6842 }, { 208,6842 }, { 209,6842 }, { 210,6842 }, { 211,6842 }, - { 212,6842 }, { 213,6842 }, { 214,6842 }, { 215,6842 }, { 216,6842 }, - { 217,6842 }, { 218,6842 }, { 219,6842 }, { 220,6842 }, { 221,6842 }, - { 222,6842 }, { 223,6842 }, { 224,6842 }, { 225,6842 }, { 226,6842 }, - { 227,6842 }, { 228,6842 }, { 229,6842 }, { 230,6842 }, { 231,6842 }, - { 232,6842 }, { 233,6842 }, { 234,6842 }, { 235,6842 }, { 236,6842 }, - { 237,6842 }, { 238,6842 }, { 239,6842 }, { 240,6842 }, { 241,6842 }, - { 242,6842 }, { 243,6842 }, { 244,6842 }, { 245,6842 }, { 246,6842 }, - - { 247,6842 }, { 248,6842 }, { 249,6842 }, { 250,6842 }, { 251,6842 }, - { 252,6842 }, { 253,6842 }, { 254,6842 }, { 255,6842 }, { 256,6192 }, - { 0, 0 }, { 0,17162 }, { 1,5934 }, { 2,5934 }, { 3,5934 }, + { 47,6665 }, { 48,6697 }, { 49,6954 }, { 50,6954 }, { 51,6954 }, + { 52,6954 }, { 53,6954 }, { 54,6954 }, { 55,6954 }, { 56,6954 }, + { 57,6954 }, { 58,6219 }, { 59,6216 }, { 60,7211 }, { 61,7222 }, + { 62,7289 }, { 63,6241 }, { 64,6241 }, { 65,7321 }, { 66,7578 }, + { 67,7321 }, { 68,7321 }, { 69,7835 }, { 70,7321 }, { 71,7321 }, + { 72,7321 }, { 73,7321 }, { 74,7321 }, { 75,7321 }, { 76,7321 }, + { 77,7321 }, { 78,8092 }, { 79,7321 }, { 80,7321 }, { 81,7321 }, + { 82,7321 }, { 83,7321 }, { 84,7321 }, { 85,8349 }, { 86,7321 }, + { 87,7321 }, { 88,8606 }, { 89,7321 }, { 90,7321 }, { 91,6216 }, + { 92,6192 }, { 93,6216 }, { 94,6564 }, { 95,7321 }, { 96,6241 }, + + { 97,7321 }, { 98,7578 }, { 99,7321 }, { 100,7321 }, { 101,7835 }, + { 102,7321 }, { 103,7321 }, { 104,7321 }, { 105,7321 }, { 106,7321 }, + { 107,7321 }, { 108,7321 }, { 109,7321 }, { 110,8092 }, { 111,7321 }, + { 112,7321 }, { 113,7321 }, { 114,7321 }, { 115,7321 }, { 116,7321 }, + { 117,8349 }, { 118,7321 }, { 119,7321 }, { 120,8606 }, { 121,7321 }, + { 122,7321 }, { 123,6192 }, { 124,6241 }, { 125,6192 }, { 126,6241 }, + { 127,6192 }, { 128,7321 }, { 129,7321 }, { 130,7321 }, { 131,7321 }, + { 132,7321 }, { 133,7321 }, { 134,7321 }, { 135,7321 }, { 136,7321 }, + { 137,7321 }, { 138,7321 }, { 139,7321 }, { 140,7321 }, { 141,7321 }, + { 142,7321 }, { 143,7321 }, { 144,7321 }, { 145,7321 }, { 146,7321 }, + + { 147,7321 }, { 148,7321 }, { 149,7321 }, { 150,7321 }, { 151,7321 }, + { 152,7321 }, { 153,7321 }, { 154,7321 }, { 155,7321 }, { 156,7321 }, + { 157,7321 }, { 158,7321 }, { 159,7321 }, { 160,7321 }, { 161,7321 }, + { 162,7321 }, { 163,7321 }, { 164,7321 }, { 165,7321 }, { 166,7321 }, + { 167,7321 }, { 168,7321 }, { 169,7321 }, { 170,7321 }, { 171,7321 }, + { 172,7321 }, { 173,7321 }, { 174,7321 }, { 175,7321 }, { 176,7321 }, + { 177,7321 }, { 178,7321 }, { 179,7321 }, { 180,7321 }, { 181,7321 }, + { 182,7321 }, { 183,7321 }, { 184,7321 }, { 185,7321 }, { 186,7321 }, + { 187,7321 }, { 188,7321 }, { 189,7321 }, { 190,7321 }, { 191,7321 }, + { 192,7321 }, { 193,7321 }, { 194,7321 }, { 195,7321 }, { 196,7321 }, + + { 197,7321 }, { 198,7321 }, { 199,7321 }, { 200,7321 }, { 201,7321 }, + { 202,7321 }, { 203,7321 }, { 204,7321 }, { 205,7321 }, { 206,7321 }, + { 207,7321 }, { 208,7321 }, { 209,7321 }, { 210,7321 }, { 211,7321 }, + { 212,7321 }, { 213,7321 }, { 214,7321 }, { 215,7321 }, { 216,7321 }, + { 217,7321 }, { 218,7321 }, { 219,7321 }, { 220,7321 }, { 221,7321 }, + { 222,7321 }, { 223,7321 }, { 224,7321 }, { 225,7321 }, { 226,7321 }, + { 227,7321 }, { 228,7321 }, { 229,7321 }, { 230,7321 }, { 231,7321 }, + { 232,7321 }, { 233,7321 }, { 234,7321 }, { 235,7321 }, { 236,7321 }, + { 237,7321 }, { 238,7321 }, { 239,7321 }, { 240,7321 }, { 241,7321 }, + { 242,7321 }, { 243,7321 }, { 244,7321 }, { 245,7321 }, { 246,7321 }, + + { 247,7321 }, { 248,7321 }, { 249,7321 }, { 250,7321 }, { 251,7321 }, + { 252,7321 }, { 253,7321 }, { 254,7321 }, { 255,7321 }, { 256,6192 }, + { 0, 0 }, { 0,21287 }, { 1,5934 }, { 2,5934 }, { 3,5934 }, { 4,5934 }, { 5,5934 }, { 6,5934 }, { 7,5934 }, { 8,5934 }, { 9,5936 }, { 10,5941 }, { 11,5934 }, { 12,5936 }, { 13,5936 }, { 14,5934 }, { 15,5934 }, { 16,5934 }, { 17,5934 }, { 18,5934 }, @@ -737,628 +739,628 @@ static const struct yy_trans_info yy_transition[17678] = { 34,5938 }, { 35,5983 }, { 36,6049 }, { 37,6306 }, { 38,5983 }, { 39,5956 }, { 40,5958 }, { 41,5958 }, { 42,6306 }, { 43,6306 }, - { 44,5958 }, { 45,6317 }, { 46,6336 }, { 47,6407 }, { 48,6409 }, - { 49,6409 }, { 50,6409 }, { 51,6409 }, { 52,6409 }, { 53,6409 }, - { 54,6409 }, { 55,6409 }, { 56,6409 }, { 57,6409 }, { 58,5961 }, - { 59,5958 }, { 60,6474 }, { 61,6485 }, { 62,6552 }, { 63,5983 }, - { 64,5983 }, { 65,6584 }, { 66,6841 }, { 67,6584 }, { 68,6584 }, - { 69,7098 }, { 70,6584 }, { 71,6584 }, { 72,6584 }, { 73,6584 }, - { 74,6584 }, { 75,6584 }, { 76,6584 }, { 77,6584 }, { 78,7355 }, - { 79,6584 }, { 80,6584 }, { 81,6584 }, { 82,6584 }, { 83,6584 }, - { 84,6584 }, { 85,7612 }, { 86,6584 }, { 87,6584 }, { 88,7869 }, - - { 89,6584 }, { 90,6584 }, { 91,5958 }, { 92,5934 }, { 93,5958 }, - { 94,6306 }, { 95,6584 }, { 96,5983 }, { 97,6584 }, { 98,6841 }, - { 99,6584 }, { 100,6584 }, { 101,7098 }, { 102,6584 }, { 103,6584 }, - { 104,6584 }, { 105,6584 }, { 106,6584 }, { 107,6584 }, { 108,6584 }, - { 109,6584 }, { 110,7355 }, { 111,6584 }, { 112,6584 }, { 113,6584 }, - { 114,6584 }, { 115,6584 }, { 116,6584 }, { 117,7612 }, { 118,6584 }, - { 119,6584 }, { 120,7869 }, { 121,6584 }, { 122,6584 }, { 123,5934 }, - { 124,5983 }, { 125,5934 }, { 126,5983 }, { 127,5934 }, { 128,6584 }, - { 129,6584 }, { 130,6584 }, { 131,6584 }, { 132,6584 }, { 133,6584 }, - { 134,6584 }, { 135,6584 }, { 136,6584 }, { 137,6584 }, { 138,6584 }, - - { 139,6584 }, { 140,6584 }, { 141,6584 }, { 142,6584 }, { 143,6584 }, - { 144,6584 }, { 145,6584 }, { 146,6584 }, { 147,6584 }, { 148,6584 }, - { 149,6584 }, { 150,6584 }, { 151,6584 }, { 152,6584 }, { 153,6584 }, - { 154,6584 }, { 155,6584 }, { 156,6584 }, { 157,6584 }, { 158,6584 }, - { 159,6584 }, { 160,6584 }, { 161,6584 }, { 162,6584 }, { 163,6584 }, - { 164,6584 }, { 165,6584 }, { 166,6584 }, { 167,6584 }, { 168,6584 }, - { 169,6584 }, { 170,6584 }, { 171,6584 }, { 172,6584 }, { 173,6584 }, - { 174,6584 }, { 175,6584 }, { 176,6584 }, { 177,6584 }, { 178,6584 }, - { 179,6584 }, { 180,6584 }, { 181,6584 }, { 182,6584 }, { 183,6584 }, - { 184,6584 }, { 185,6584 }, { 186,6584 }, { 187,6584 }, { 188,6584 }, - - { 189,6584 }, { 190,6584 }, { 191,6584 }, { 192,6584 }, { 193,6584 }, - { 194,6584 }, { 195,6584 }, { 196,6584 }, { 197,6584 }, { 198,6584 }, - { 199,6584 }, { 200,6584 }, { 201,6584 }, { 202,6584 }, { 203,6584 }, - { 204,6584 }, { 205,6584 }, { 206,6584 }, { 207,6584 }, { 208,6584 }, - { 209,6584 }, { 210,6584 }, { 211,6584 }, { 212,6584 }, { 213,6584 }, - { 214,6584 }, { 215,6584 }, { 216,6584 }, { 217,6584 }, { 218,6584 }, - { 219,6584 }, { 220,6584 }, { 221,6584 }, { 222,6584 }, { 223,6584 }, - { 224,6584 }, { 225,6584 }, { 226,6584 }, { 227,6584 }, { 228,6584 }, - { 229,6584 }, { 230,6584 }, { 231,6584 }, { 232,6584 }, { 233,6584 }, - { 234,6584 }, { 235,6584 }, { 236,6584 }, { 237,6584 }, { 238,6584 }, - - { 239,6584 }, { 240,6584 }, { 241,6584 }, { 242,6584 }, { 243,6584 }, - { 244,6584 }, { 245,6584 }, { 246,6584 }, { 247,6584 }, { 248,6584 }, - { 249,6584 }, { 250,6584 }, { 251,6584 }, { 252,6584 }, { 253,6584 }, - { 254,6584 }, { 255,6584 }, { 256,5934 }, { 0, 11 }, { 0,16904 }, - { 1,7868 }, { 2,7868 }, { 3,7868 }, { 4,7868 }, { 5,7868 }, - { 6,7868 }, { 7,7868 }, { 8,7868 }, { 9,7868 }, { 10,7868 }, - { 11,7868 }, { 12,7868 }, { 13,7868 }, { 14,7868 }, { 15,7868 }, - { 16,7868 }, { 17,7868 }, { 18,7868 }, { 19,7868 }, { 20,7868 }, - { 21,7868 }, { 22,7868 }, { 23,7868 }, { 24,7868 }, { 25,7868 }, - { 26,7868 }, { 27,7868 }, { 28,7868 }, { 29,7868 }, { 30,7868 }, - - { 31,7868 }, { 32,7868 }, { 33,7868 }, { 34,7868 }, { 35,7868 }, - { 36,7868 }, { 37,7868 }, { 38,7868 }, { 39,5705 }, { 40,7868 }, - { 41,7868 }, { 42,7868 }, { 43,7868 }, { 44,7868 }, { 45,7868 }, - { 46,7868 }, { 47,7868 }, { 48,7868 }, { 49,7868 }, { 50,7868 }, - { 51,7868 }, { 52,7868 }, { 53,7868 }, { 54,7868 }, { 55,7868 }, - { 56,7868 }, { 57,7868 }, { 58,7868 }, { 59,7868 }, { 60,7868 }, - { 61,7868 }, { 62,7868 }, { 63,7868 }, { 64,7868 }, { 65,7868 }, - { 66,7868 }, { 67,7868 }, { 68,7868 }, { 69,7868 }, { 70,7868 }, - { 71,7868 }, { 72,7868 }, { 73,7868 }, { 74,7868 }, { 75,7868 }, - { 76,7868 }, { 77,7868 }, { 78,7868 }, { 79,7868 }, { 80,7868 }, - - { 81,7868 }, { 82,7868 }, { 83,7868 }, { 84,7868 }, { 85,7868 }, - { 86,7868 }, { 87,7868 }, { 88,7868 }, { 89,7868 }, { 90,7868 }, - { 91,7868 }, { 92,7868 }, { 93,7868 }, { 94,7868 }, { 95,7868 }, - { 96,7868 }, { 97,7868 }, { 98,7868 }, { 99,7868 }, { 100,7868 }, - { 101,7868 }, { 102,7868 }, { 103,7868 }, { 104,7868 }, { 105,7868 }, - { 106,7868 }, { 107,7868 }, { 108,7868 }, { 109,7868 }, { 110,7868 }, - { 111,7868 }, { 112,7868 }, { 113,7868 }, { 114,7868 }, { 115,7868 }, - { 116,7868 }, { 117,7868 }, { 118,7868 }, { 119,7868 }, { 120,7868 }, - { 121,7868 }, { 122,7868 }, { 123,7868 }, { 124,7868 }, { 125,7868 }, - { 126,7868 }, { 127,7868 }, { 128,7868 }, { 129,7868 }, { 130,7868 }, - - { 131,7868 }, { 132,7868 }, { 133,7868 }, { 134,7868 }, { 135,7868 }, - { 136,7868 }, { 137,7868 }, { 138,7868 }, { 139,7868 }, { 140,7868 }, - { 141,7868 }, { 142,7868 }, { 143,7868 }, { 144,7868 }, { 145,7868 }, - { 146,7868 }, { 147,7868 }, { 148,7868 }, { 149,7868 }, { 150,7868 }, - { 151,7868 }, { 152,7868 }, { 153,7868 }, { 154,7868 }, { 155,7868 }, - { 156,7868 }, { 157,7868 }, { 158,7868 }, { 159,7868 }, { 160,7868 }, - { 161,7868 }, { 162,7868 }, { 163,7868 }, { 164,7868 }, { 165,7868 }, - { 166,7868 }, { 167,7868 }, { 168,7868 }, { 169,7868 }, { 170,7868 }, - { 171,7868 }, { 172,7868 }, { 173,7868 }, { 174,7868 }, { 175,7868 }, - { 176,7868 }, { 177,7868 }, { 178,7868 }, { 179,7868 }, { 180,7868 }, - - { 181,7868 }, { 182,7868 }, { 183,7868 }, { 184,7868 }, { 185,7868 }, - { 186,7868 }, { 187,7868 }, { 188,7868 }, { 189,7868 }, { 190,7868 }, - { 191,7868 }, { 192,7868 }, { 193,7868 }, { 194,7868 }, { 195,7868 }, - { 196,7868 }, { 197,7868 }, { 198,7868 }, { 199,7868 }, { 200,7868 }, - { 201,7868 }, { 202,7868 }, { 203,7868 }, { 204,7868 }, { 205,7868 }, - { 206,7868 }, { 207,7868 }, { 208,7868 }, { 209,7868 }, { 210,7868 }, - { 211,7868 }, { 212,7868 }, { 213,7868 }, { 214,7868 }, { 215,7868 }, - { 216,7868 }, { 217,7868 }, { 218,7868 }, { 219,7868 }, { 220,7868 }, - { 221,7868 }, { 222,7868 }, { 223,7868 }, { 224,7868 }, { 225,7868 }, - { 226,7868 }, { 227,7868 }, { 228,7868 }, { 229,7868 }, { 230,7868 }, - - { 231,7868 }, { 232,7868 }, { 233,7868 }, { 234,7868 }, { 235,7868 }, - { 236,7868 }, { 237,7868 }, { 238,7868 }, { 239,7868 }, { 240,7868 }, - { 241,7868 }, { 242,7868 }, { 243,7868 }, { 244,7868 }, { 245,7868 }, - { 246,7868 }, { 247,7868 }, { 248,7868 }, { 249,7868 }, { 250,7868 }, - { 251,7868 }, { 252,7868 }, { 253,7868 }, { 254,7868 }, { 255,7868 }, - { 256,7868 }, { 0, 11 }, { 0,16646 }, { 1,7610 }, { 2,7610 }, - { 3,7610 }, { 4,7610 }, { 5,7610 }, { 6,7610 }, { 7,7610 }, - { 8,7610 }, { 9,7610 }, { 10,7610 }, { 11,7610 }, { 12,7610 }, - { 13,7610 }, { 14,7610 }, { 15,7610 }, { 16,7610 }, { 17,7610 }, - { 18,7610 }, { 19,7610 }, { 20,7610 }, { 21,7610 }, { 22,7610 }, - - { 23,7610 }, { 24,7610 }, { 25,7610 }, { 26,7610 }, { 27,7610 }, - { 28,7610 }, { 29,7610 }, { 30,7610 }, { 31,7610 }, { 32,7610 }, - { 33,7610 }, { 34,7610 }, { 35,7610 }, { 36,7610 }, { 37,7610 }, - { 38,7610 }, { 39,5447 }, { 40,7610 }, { 41,7610 }, { 42,7610 }, - { 43,7610 }, { 44,7610 }, { 45,7610 }, { 46,7610 }, { 47,7610 }, - { 48,7610 }, { 49,7610 }, { 50,7610 }, { 51,7610 }, { 52,7610 }, - { 53,7610 }, { 54,7610 }, { 55,7610 }, { 56,7610 }, { 57,7610 }, - { 58,7610 }, { 59,7610 }, { 60,7610 }, { 61,7610 }, { 62,7610 }, - { 63,7610 }, { 64,7610 }, { 65,7610 }, { 66,7610 }, { 67,7610 }, - { 68,7610 }, { 69,7610 }, { 70,7610 }, { 71,7610 }, { 72,7610 }, - - { 73,7610 }, { 74,7610 }, { 75,7610 }, { 76,7610 }, { 77,7610 }, - { 78,7610 }, { 79,7610 }, { 80,7610 }, { 81,7610 }, { 82,7610 }, - { 83,7610 }, { 84,7610 }, { 85,7610 }, { 86,7610 }, { 87,7610 }, - { 88,7610 }, { 89,7610 }, { 90,7610 }, { 91,7610 }, { 92,7610 }, - { 93,7610 }, { 94,7610 }, { 95,7610 }, { 96,7610 }, { 97,7610 }, - { 98,7610 }, { 99,7610 }, { 100,7610 }, { 101,7610 }, { 102,7610 }, - { 103,7610 }, { 104,7610 }, { 105,7610 }, { 106,7610 }, { 107,7610 }, - { 108,7610 }, { 109,7610 }, { 110,7610 }, { 111,7610 }, { 112,7610 }, - { 113,7610 }, { 114,7610 }, { 115,7610 }, { 116,7610 }, { 117,7610 }, - { 118,7610 }, { 119,7610 }, { 120,7610 }, { 121,7610 }, { 122,7610 }, - - { 123,7610 }, { 124,7610 }, { 125,7610 }, { 126,7610 }, { 127,7610 }, - { 128,7610 }, { 129,7610 }, { 130,7610 }, { 131,7610 }, { 132,7610 }, - { 133,7610 }, { 134,7610 }, { 135,7610 }, { 136,7610 }, { 137,7610 }, - { 138,7610 }, { 139,7610 }, { 140,7610 }, { 141,7610 }, { 142,7610 }, - { 143,7610 }, { 144,7610 }, { 145,7610 }, { 146,7610 }, { 147,7610 }, - { 148,7610 }, { 149,7610 }, { 150,7610 }, { 151,7610 }, { 152,7610 }, - { 153,7610 }, { 154,7610 }, { 155,7610 }, { 156,7610 }, { 157,7610 }, - { 158,7610 }, { 159,7610 }, { 160,7610 }, { 161,7610 }, { 162,7610 }, - { 163,7610 }, { 164,7610 }, { 165,7610 }, { 166,7610 }, { 167,7610 }, - { 168,7610 }, { 169,7610 }, { 170,7610 }, { 171,7610 }, { 172,7610 }, - - { 173,7610 }, { 174,7610 }, { 175,7610 }, { 176,7610 }, { 177,7610 }, - { 178,7610 }, { 179,7610 }, { 180,7610 }, { 181,7610 }, { 182,7610 }, - { 183,7610 }, { 184,7610 }, { 185,7610 }, { 186,7610 }, { 187,7610 }, - { 188,7610 }, { 189,7610 }, { 190,7610 }, { 191,7610 }, { 192,7610 }, - { 193,7610 }, { 194,7610 }, { 195,7610 }, { 196,7610 }, { 197,7610 }, - { 198,7610 }, { 199,7610 }, { 200,7610 }, { 201,7610 }, { 202,7610 }, - { 203,7610 }, { 204,7610 }, { 205,7610 }, { 206,7610 }, { 207,7610 }, - { 208,7610 }, { 209,7610 }, { 210,7610 }, { 211,7610 }, { 212,7610 }, - { 213,7610 }, { 214,7610 }, { 215,7610 }, { 216,7610 }, { 217,7610 }, - { 218,7610 }, { 219,7610 }, { 220,7610 }, { 221,7610 }, { 222,7610 }, - - { 223,7610 }, { 224,7610 }, { 225,7610 }, { 226,7610 }, { 227,7610 }, - { 228,7610 }, { 229,7610 }, { 230,7610 }, { 231,7610 }, { 232,7610 }, - { 233,7610 }, { 234,7610 }, { 235,7610 }, { 236,7610 }, { 237,7610 }, - { 238,7610 }, { 239,7610 }, { 240,7610 }, { 241,7610 }, { 242,7610 }, - { 243,7610 }, { 244,7610 }, { 245,7610 }, { 246,7610 }, { 247,7610 }, - { 248,7610 }, { 249,7610 }, { 250,7610 }, { 251,7610 }, { 252,7610 }, - { 253,7610 }, { 254,7610 }, { 255,7610 }, { 256,7610 }, { 0, 0 }, - { 0,16388 }, { 1,7610 }, { 2,7610 }, { 3,7610 }, { 4,7610 }, - { 5,7610 }, { 6,7610 }, { 7,7610 }, { 8,7610 }, { 9,7610 }, - { 10,7610 }, { 11,7610 }, { 12,7610 }, { 13,7610 }, { 14,7610 }, - - { 15,7610 }, { 16,7610 }, { 17,7610 }, { 18,7610 }, { 19,7610 }, - { 20,7610 }, { 21,7610 }, { 22,7610 }, { 23,7610 }, { 24,7610 }, - { 25,7610 }, { 26,7610 }, { 27,7610 }, { 28,7610 }, { 29,7610 }, - { 30,7610 }, { 31,7610 }, { 32,7610 }, { 33,7868 }, { 34,7610 }, - { 35,7868 }, { 36,7610 }, { 37,7868 }, { 38,7868 }, { 39,7610 }, - { 40,7610 }, { 41,7610 }, { 42,5192 }, { 43,7868 }, { 44,7610 }, - { 45,7868 }, { 46,7610 }, { 47,5196 }, { 48,7610 }, { 49,7610 }, - { 50,7610 }, { 51,7610 }, { 52,7610 }, { 53,7610 }, { 54,7610 }, - { 55,7610 }, { 56,7610 }, { 57,7610 }, { 58,7610 }, { 59,7610 }, - { 60,7868 }, { 61,7868 }, { 62,7868 }, { 63,7868 }, { 64,7868 }, - - { 65,7610 }, { 66,7610 }, { 67,7610 }, { 68,7610 }, { 69,7610 }, - { 70,7610 }, { 71,7610 }, { 72,7610 }, { 73,7610 }, { 74,7610 }, - { 75,7610 }, { 76,7610 }, { 77,7610 }, { 78,7610 }, { 79,7610 }, - { 80,7610 }, { 81,7610 }, { 82,7610 }, { 83,7610 }, { 84,7610 }, - { 85,7610 }, { 86,7610 }, { 87,7610 }, { 88,7610 }, { 89,7610 }, - { 90,7610 }, { 91,7610 }, { 92,7610 }, { 93,7610 }, { 94,7868 }, - { 95,7610 }, { 96,7868 }, { 97,7610 }, { 98,7610 }, { 99,7610 }, - { 100,7610 }, { 101,7610 }, { 102,7610 }, { 103,7610 }, { 104,7610 }, - { 105,7610 }, { 106,7610 }, { 107,7610 }, { 108,7610 }, { 109,7610 }, - { 110,7610 }, { 111,7610 }, { 112,7610 }, { 113,7610 }, { 114,7610 }, - - { 115,7610 }, { 116,7610 }, { 117,7610 }, { 118,7610 }, { 119,7610 }, - { 120,7610 }, { 121,7610 }, { 122,7610 }, { 123,7610 }, { 124,7868 }, - { 125,7610 }, { 126,7868 }, { 127,7610 }, { 128,7610 }, { 129,7610 }, - { 130,7610 }, { 131,7610 }, { 132,7610 }, { 133,7610 }, { 134,7610 }, - { 135,7610 }, { 136,7610 }, { 137,7610 }, { 138,7610 }, { 139,7610 }, - { 140,7610 }, { 141,7610 }, { 142,7610 }, { 143,7610 }, { 144,7610 }, - { 145,7610 }, { 146,7610 }, { 147,7610 }, { 148,7610 }, { 149,7610 }, - { 150,7610 }, { 151,7610 }, { 152,7610 }, { 153,7610 }, { 154,7610 }, - { 155,7610 }, { 156,7610 }, { 157,7610 }, { 158,7610 }, { 159,7610 }, - { 160,7610 }, { 161,7610 }, { 162,7610 }, { 163,7610 }, { 164,7610 }, - - { 165,7610 }, { 166,7610 }, { 167,7610 }, { 168,7610 }, { 169,7610 }, - { 170,7610 }, { 171,7610 }, { 172,7610 }, { 173,7610 }, { 174,7610 }, - { 175,7610 }, { 176,7610 }, { 177,7610 }, { 178,7610 }, { 179,7610 }, - { 180,7610 }, { 181,7610 }, { 182,7610 }, { 183,7610 }, { 184,7610 }, - { 185,7610 }, { 186,7610 }, { 187,7610 }, { 188,7610 }, { 189,7610 }, - { 190,7610 }, { 191,7610 }, { 192,7610 }, { 193,7610 }, { 194,7610 }, - { 195,7610 }, { 196,7610 }, { 197,7610 }, { 198,7610 }, { 199,7610 }, - { 200,7610 }, { 201,7610 }, { 202,7610 }, { 203,7610 }, { 204,7610 }, - { 205,7610 }, { 206,7610 }, { 207,7610 }, { 208,7610 }, { 209,7610 }, - { 210,7610 }, { 211,7610 }, { 212,7610 }, { 213,7610 }, { 214,7610 }, - - { 215,7610 }, { 216,7610 }, { 217,7610 }, { 218,7610 }, { 219,7610 }, - { 220,7610 }, { 221,7610 }, { 222,7610 }, { 223,7610 }, { 224,7610 }, - { 225,7610 }, { 226,7610 }, { 227,7610 }, { 228,7610 }, { 229,7610 }, - { 230,7610 }, { 231,7610 }, { 232,7610 }, { 233,7610 }, { 234,7610 }, - { 235,7610 }, { 236,7610 }, { 237,7610 }, { 238,7610 }, { 239,7610 }, - { 240,7610 }, { 241,7610 }, { 242,7610 }, { 243,7610 }, { 244,7610 }, - { 245,7610 }, { 246,7610 }, { 247,7610 }, { 248,7610 }, { 249,7610 }, - { 250,7610 }, { 251,7610 }, { 252,7610 }, { 253,7610 }, { 254,7610 }, - { 255,7610 }, { 256,7610 }, { 0, 0 }, { 0,16130 }, { 1,7352 }, - { 2,7352 }, { 3,7352 }, { 4,7352 }, { 5,7352 }, { 6,7352 }, - - { 7,7352 }, { 8,7352 }, { 9,7352 }, { 10,7352 }, { 11,7352 }, - { 12,7352 }, { 13,7352 }, { 14,7352 }, { 15,7352 }, { 16,7352 }, - { 17,7352 }, { 18,7352 }, { 19,7352 }, { 20,7352 }, { 21,7352 }, - { 22,7352 }, { 23,7352 }, { 24,7352 }, { 25,7352 }, { 26,7352 }, - { 27,7352 }, { 28,7352 }, { 29,7352 }, { 30,7352 }, { 31,7352 }, - { 32,7352 }, { 33,7610 }, { 34,7352 }, { 35,7610 }, { 36,7352 }, - { 37,7610 }, { 38,7610 }, { 39,7352 }, { 40,7352 }, { 41,7352 }, - { 42,4934 }, { 43,7610 }, { 44,7352 }, { 45,7610 }, { 46,7352 }, - { 47,4938 }, { 48,7352 }, { 49,7352 }, { 50,7352 }, { 51,7352 }, - { 52,7352 }, { 53,7352 }, { 54,7352 }, { 55,7352 }, { 56,7352 }, - - { 57,7352 }, { 58,7352 }, { 59,7352 }, { 60,7610 }, { 61,7610 }, - { 62,7610 }, { 63,7610 }, { 64,7610 }, { 65,7352 }, { 66,7352 }, - { 67,7352 }, { 68,7352 }, { 69,7352 }, { 70,7352 }, { 71,7352 }, - { 72,7352 }, { 73,7352 }, { 74,7352 }, { 75,7352 }, { 76,7352 }, - { 77,7352 }, { 78,7352 }, { 79,7352 }, { 80,7352 }, { 81,7352 }, - { 82,7352 }, { 83,7352 }, { 84,7352 }, { 85,7352 }, { 86,7352 }, - { 87,7352 }, { 88,7352 }, { 89,7352 }, { 90,7352 }, { 91,7352 }, - { 92,7352 }, { 93,7352 }, { 94,7610 }, { 95,7352 }, { 96,7610 }, - { 97,7352 }, { 98,7352 }, { 99,7352 }, { 100,7352 }, { 101,7352 }, - { 102,7352 }, { 103,7352 }, { 104,7352 }, { 105,7352 }, { 106,7352 }, - - { 107,7352 }, { 108,7352 }, { 109,7352 }, { 110,7352 }, { 111,7352 }, - { 112,7352 }, { 113,7352 }, { 114,7352 }, { 115,7352 }, { 116,7352 }, - { 117,7352 }, { 118,7352 }, { 119,7352 }, { 120,7352 }, { 121,7352 }, - { 122,7352 }, { 123,7352 }, { 124,7610 }, { 125,7352 }, { 126,7610 }, - { 127,7352 }, { 128,7352 }, { 129,7352 }, { 130,7352 }, { 131,7352 }, - { 132,7352 }, { 133,7352 }, { 134,7352 }, { 135,7352 }, { 136,7352 }, - { 137,7352 }, { 138,7352 }, { 139,7352 }, { 140,7352 }, { 141,7352 }, - { 142,7352 }, { 143,7352 }, { 144,7352 }, { 145,7352 }, { 146,7352 }, - { 147,7352 }, { 148,7352 }, { 149,7352 }, { 150,7352 }, { 151,7352 }, - { 152,7352 }, { 153,7352 }, { 154,7352 }, { 155,7352 }, { 156,7352 }, - - { 157,7352 }, { 158,7352 }, { 159,7352 }, { 160,7352 }, { 161,7352 }, - { 162,7352 }, { 163,7352 }, { 164,7352 }, { 165,7352 }, { 166,7352 }, - { 167,7352 }, { 168,7352 }, { 169,7352 }, { 170,7352 }, { 171,7352 }, - { 172,7352 }, { 173,7352 }, { 174,7352 }, { 175,7352 }, { 176,7352 }, - { 177,7352 }, { 178,7352 }, { 179,7352 }, { 180,7352 }, { 181,7352 }, - { 182,7352 }, { 183,7352 }, { 184,7352 }, { 185,7352 }, { 186,7352 }, - { 187,7352 }, { 188,7352 }, { 189,7352 }, { 190,7352 }, { 191,7352 }, - { 192,7352 }, { 193,7352 }, { 194,7352 }, { 195,7352 }, { 196,7352 }, - { 197,7352 }, { 198,7352 }, { 199,7352 }, { 200,7352 }, { 201,7352 }, - { 202,7352 }, { 203,7352 }, { 204,7352 }, { 205,7352 }, { 206,7352 }, - - { 207,7352 }, { 208,7352 }, { 209,7352 }, { 210,7352 }, { 211,7352 }, - { 212,7352 }, { 213,7352 }, { 214,7352 }, { 215,7352 }, { 216,7352 }, - { 217,7352 }, { 218,7352 }, { 219,7352 }, { 220,7352 }, { 221,7352 }, - { 222,7352 }, { 223,7352 }, { 224,7352 }, { 225,7352 }, { 226,7352 }, - { 227,7352 }, { 228,7352 }, { 229,7352 }, { 230,7352 }, { 231,7352 }, - { 232,7352 }, { 233,7352 }, { 234,7352 }, { 235,7352 }, { 236,7352 }, - { 237,7352 }, { 238,7352 }, { 239,7352 }, { 240,7352 }, { 241,7352 }, - { 242,7352 }, { 243,7352 }, { 244,7352 }, { 245,7352 }, { 246,7352 }, - { 247,7352 }, { 248,7352 }, { 249,7352 }, { 250,7352 }, { 251,7352 }, - { 252,7352 }, { 253,7352 }, { 254,7352 }, { 255,7352 }, { 256,7352 }, - - { 0, 0 }, { 0,15872 }, { 1,7610 }, { 2,7610 }, { 3,7610 }, - { 4,7610 }, { 5,7610 }, { 6,7610 }, { 7,7610 }, { 8,7610 }, - { 9,7610 }, { 10,7610 }, { 11,7610 }, { 12,7610 }, { 13,7610 }, - { 14,7610 }, { 15,7610 }, { 16,7610 }, { 17,7610 }, { 18,7610 }, - { 19,7610 }, { 20,7610 }, { 21,7610 }, { 22,7610 }, { 23,7610 }, - { 24,7610 }, { 25,7610 }, { 26,7610 }, { 27,7610 }, { 28,7610 }, - { 29,7610 }, { 30,7610 }, { 31,7610 }, { 32,7610 }, { 33,7610 }, - { 34,4685 }, { 35,7610 }, { 36,7610 }, { 37,7610 }, { 38,7610 }, - { 39,7610 }, { 40,7610 }, { 41,7610 }, { 42,7610 }, { 43,7610 }, - { 44,7610 }, { 45,7610 }, { 46,7610 }, { 47,7610 }, { 48,7610 }, - - { 49,7610 }, { 50,7610 }, { 51,7610 }, { 52,7610 }, { 53,7610 }, - { 54,7610 }, { 55,7610 }, { 56,7610 }, { 57,7610 }, { 58,7610 }, - { 59,7610 }, { 60,7610 }, { 61,7610 }, { 62,7610 }, { 63,7610 }, - { 64,7610 }, { 65,7610 }, { 66,7610 }, { 67,7610 }, { 68,7610 }, - { 69,7610 }, { 70,7610 }, { 71,7610 }, { 72,7610 }, { 73,7610 }, - { 74,7610 }, { 75,7610 }, { 76,7610 }, { 77,7610 }, { 78,7610 }, - { 79,7610 }, { 80,7610 }, { 81,7610 }, { 82,7610 }, { 83,7610 }, - { 84,7610 }, { 85,7610 }, { 86,7610 }, { 87,7610 }, { 88,7610 }, - { 89,7610 }, { 90,7610 }, { 91,7610 }, { 92,7610 }, { 93,7610 }, - { 94,7610 }, { 95,7610 }, { 96,7610 }, { 97,7610 }, { 98,7610 }, - - { 99,7610 }, { 100,7610 }, { 101,7610 }, { 102,7610 }, { 103,7610 }, - { 104,7610 }, { 105,7610 }, { 106,7610 }, { 107,7610 }, { 108,7610 }, - { 109,7610 }, { 110,7610 }, { 111,7610 }, { 112,7610 }, { 113,7610 }, - { 114,7610 }, { 115,7610 }, { 116,7610 }, { 117,7610 }, { 118,7610 }, - { 119,7610 }, { 120,7610 }, { 121,7610 }, { 122,7610 }, { 123,7610 }, - { 124,7610 }, { 125,7610 }, { 126,7610 }, { 127,7610 }, { 128,7610 }, - { 129,7610 }, { 130,7610 }, { 131,7610 }, { 132,7610 }, { 133,7610 }, - { 134,7610 }, { 135,7610 }, { 136,7610 }, { 137,7610 }, { 138,7610 }, - { 139,7610 }, { 140,7610 }, { 141,7610 }, { 142,7610 }, { 143,7610 }, - { 144,7610 }, { 145,7610 }, { 146,7610 }, { 147,7610 }, { 148,7610 }, - - { 149,7610 }, { 150,7610 }, { 151,7610 }, { 152,7610 }, { 153,7610 }, - { 154,7610 }, { 155,7610 }, { 156,7610 }, { 157,7610 }, { 158,7610 }, - { 159,7610 }, { 160,7610 }, { 161,7610 }, { 162,7610 }, { 163,7610 }, - { 164,7610 }, { 165,7610 }, { 166,7610 }, { 167,7610 }, { 168,7610 }, - { 169,7610 }, { 170,7610 }, { 171,7610 }, { 172,7610 }, { 173,7610 }, - { 174,7610 }, { 175,7610 }, { 176,7610 }, { 177,7610 }, { 178,7610 }, - { 179,7610 }, { 180,7610 }, { 181,7610 }, { 182,7610 }, { 183,7610 }, - { 184,7610 }, { 185,7610 }, { 186,7610 }, { 187,7610 }, { 188,7610 }, - { 189,7610 }, { 190,7610 }, { 191,7610 }, { 192,7610 }, { 193,7610 }, - { 194,7610 }, { 195,7610 }, { 196,7610 }, { 197,7610 }, { 198,7610 }, - - { 199,7610 }, { 200,7610 }, { 201,7610 }, { 202,7610 }, { 203,7610 }, - { 204,7610 }, { 205,7610 }, { 206,7610 }, { 207,7610 }, { 208,7610 }, - { 209,7610 }, { 210,7610 }, { 211,7610 }, { 212,7610 }, { 213,7610 }, - { 214,7610 }, { 215,7610 }, { 216,7610 }, { 217,7610 }, { 218,7610 }, - { 219,7610 }, { 220,7610 }, { 221,7610 }, { 222,7610 }, { 223,7610 }, - { 224,7610 }, { 225,7610 }, { 226,7610 }, { 227,7610 }, { 228,7610 }, - { 229,7610 }, { 230,7610 }, { 231,7610 }, { 232,7610 }, { 233,7610 }, - { 234,7610 }, { 235,7610 }, { 236,7610 }, { 237,7610 }, { 238,7610 }, - { 239,7610 }, { 240,7610 }, { 241,7610 }, { 242,7610 }, { 243,7610 }, - { 244,7610 }, { 245,7610 }, { 246,7610 }, { 247,7610 }, { 248,7610 }, - - { 249,7610 }, { 250,7610 }, { 251,7610 }, { 252,7610 }, { 253,7610 }, - { 254,7610 }, { 255,7610 }, { 256,7610 }, { 0, 0 }, { 0,15614 }, - { 1,7352 }, { 2,7352 }, { 3,7352 }, { 4,7352 }, { 5,7352 }, - { 6,7352 }, { 7,7352 }, { 8,7352 }, { 9,7352 }, { 10,7352 }, - { 11,7352 }, { 12,7352 }, { 13,7352 }, { 14,7352 }, { 15,7352 }, - { 16,7352 }, { 17,7352 }, { 18,7352 }, { 19,7352 }, { 20,7352 }, - { 21,7352 }, { 22,7352 }, { 23,7352 }, { 24,7352 }, { 25,7352 }, - { 26,7352 }, { 27,7352 }, { 28,7352 }, { 29,7352 }, { 30,7352 }, - { 31,7352 }, { 32,7352 }, { 33,7352 }, { 34,4427 }, { 35,7352 }, - { 36,7352 }, { 37,7352 }, { 38,7352 }, { 39,7352 }, { 40,7352 }, - - { 41,7352 }, { 42,7352 }, { 43,7352 }, { 44,7352 }, { 45,7352 }, - { 46,7352 }, { 47,7352 }, { 48,7352 }, { 49,7352 }, { 50,7352 }, - { 51,7352 }, { 52,7352 }, { 53,7352 }, { 54,7352 }, { 55,7352 }, - { 56,7352 }, { 57,7352 }, { 58,7352 }, { 59,7352 }, { 60,7352 }, - { 61,7352 }, { 62,7352 }, { 63,7352 }, { 64,7352 }, { 65,7352 }, - { 66,7352 }, { 67,7352 }, { 68,7352 }, { 69,7352 }, { 70,7352 }, - { 71,7352 }, { 72,7352 }, { 73,7352 }, { 74,7352 }, { 75,7352 }, - { 76,7352 }, { 77,7352 }, { 78,7352 }, { 79,7352 }, { 80,7352 }, - { 81,7352 }, { 82,7352 }, { 83,7352 }, { 84,7352 }, { 85,7352 }, - { 86,7352 }, { 87,7352 }, { 88,7352 }, { 89,7352 }, { 90,7352 }, - - { 91,7352 }, { 92,7352 }, { 93,7352 }, { 94,7352 }, { 95,7352 }, - { 96,7352 }, { 97,7352 }, { 98,7352 }, { 99,7352 }, { 100,7352 }, - { 101,7352 }, { 102,7352 }, { 103,7352 }, { 104,7352 }, { 105,7352 }, - { 106,7352 }, { 107,7352 }, { 108,7352 }, { 109,7352 }, { 110,7352 }, - { 111,7352 }, { 112,7352 }, { 113,7352 }, { 114,7352 }, { 115,7352 }, - { 116,7352 }, { 117,7352 }, { 118,7352 }, { 119,7352 }, { 120,7352 }, - { 121,7352 }, { 122,7352 }, { 123,7352 }, { 124,7352 }, { 125,7352 }, - { 126,7352 }, { 127,7352 }, { 128,7352 }, { 129,7352 }, { 130,7352 }, - { 131,7352 }, { 132,7352 }, { 133,7352 }, { 134,7352 }, { 135,7352 }, - { 136,7352 }, { 137,7352 }, { 138,7352 }, { 139,7352 }, { 140,7352 }, - - { 141,7352 }, { 142,7352 }, { 143,7352 }, { 144,7352 }, { 145,7352 }, - { 146,7352 }, { 147,7352 }, { 148,7352 }, { 149,7352 }, { 150,7352 }, - { 151,7352 }, { 152,7352 }, { 153,7352 }, { 154,7352 }, { 155,7352 }, - { 156,7352 }, { 157,7352 }, { 158,7352 }, { 159,7352 }, { 160,7352 }, - { 161,7352 }, { 162,7352 }, { 163,7352 }, { 164,7352 }, { 165,7352 }, - { 166,7352 }, { 167,7352 }, { 168,7352 }, { 169,7352 }, { 170,7352 }, - { 171,7352 }, { 172,7352 }, { 173,7352 }, { 174,7352 }, { 175,7352 }, - { 176,7352 }, { 177,7352 }, { 178,7352 }, { 179,7352 }, { 180,7352 }, - { 181,7352 }, { 182,7352 }, { 183,7352 }, { 184,7352 }, { 185,7352 }, - { 186,7352 }, { 187,7352 }, { 188,7352 }, { 189,7352 }, { 190,7352 }, - - { 191,7352 }, { 192,7352 }, { 193,7352 }, { 194,7352 }, { 195,7352 }, - { 196,7352 }, { 197,7352 }, { 198,7352 }, { 199,7352 }, { 200,7352 }, - { 201,7352 }, { 202,7352 }, { 203,7352 }, { 204,7352 }, { 205,7352 }, - { 206,7352 }, { 207,7352 }, { 208,7352 }, { 209,7352 }, { 210,7352 }, - { 211,7352 }, { 212,7352 }, { 213,7352 }, { 214,7352 }, { 215,7352 }, - { 216,7352 }, { 217,7352 }, { 218,7352 }, { 219,7352 }, { 220,7352 }, - { 221,7352 }, { 222,7352 }, { 223,7352 }, { 224,7352 }, { 225,7352 }, - { 226,7352 }, { 227,7352 }, { 228,7352 }, { 229,7352 }, { 230,7352 }, - { 231,7352 }, { 232,7352 }, { 233,7352 }, { 234,7352 }, { 235,7352 }, - { 236,7352 }, { 237,7352 }, { 238,7352 }, { 239,7352 }, { 240,7352 }, - - { 241,7352 }, { 242,7352 }, { 243,7352 }, { 244,7352 }, { 245,7352 }, - { 246,7352 }, { 247,7352 }, { 248,7352 }, { 249,7352 }, { 250,7352 }, - { 251,7352 }, { 252,7352 }, { 253,7352 }, { 254,7352 }, { 255,7352 }, - { 256,7352 }, { 0, 10 }, { 0,15356 }, { 1,7352 }, { 2,7352 }, - { 3,7352 }, { 4,7352 }, { 5,7352 }, { 6,7352 }, { 7,7352 }, - { 8,7352 }, { 9,7352 }, { 10,7352 }, { 11,7352 }, { 12,7352 }, - { 13,7352 }, { 14,7352 }, { 15,7352 }, { 16,7352 }, { 17,7352 }, - { 18,7352 }, { 19,7352 }, { 20,7352 }, { 21,7352 }, { 22,7352 }, - { 23,7352 }, { 24,7352 }, { 25,7352 }, { 26,7352 }, { 27,7352 }, - { 28,7352 }, { 29,7352 }, { 30,7352 }, { 31,7352 }, { 32,7352 }, - - { 33,7352 }, { 34,7352 }, { 35,7352 }, { 36,7352 }, { 37,7352 }, - { 38,7352 }, { 39,4157 }, { 40,7352 }, { 41,7352 }, { 42,7352 }, - { 43,7352 }, { 44,7352 }, { 45,7352 }, { 46,7352 }, { 47,7352 }, - { 48,7352 }, { 49,7352 }, { 50,7352 }, { 51,7352 }, { 52,7352 }, - { 53,7352 }, { 54,7352 }, { 55,7352 }, { 56,7352 }, { 57,7352 }, - { 58,7352 }, { 59,7352 }, { 60,7352 }, { 61,7352 }, { 62,7352 }, - { 63,7352 }, { 64,7352 }, { 65,7352 }, { 66,7352 }, { 67,7352 }, - { 68,7352 }, { 69,7352 }, { 70,7352 }, { 71,7352 }, { 72,7352 }, - { 73,7352 }, { 74,7352 }, { 75,7352 }, { 76,7352 }, { 77,7352 }, - { 78,7352 }, { 79,7352 }, { 80,7352 }, { 81,7352 }, { 82,7352 }, - - { 83,7352 }, { 84,7352 }, { 85,7352 }, { 86,7352 }, { 87,7352 }, - { 88,7352 }, { 89,7352 }, { 90,7352 }, { 91,7352 }, { 92,7352 }, - { 93,7352 }, { 94,7352 }, { 95,7352 }, { 96,7352 }, { 97,7352 }, - { 98,7352 }, { 99,7352 }, { 100,7352 }, { 101,7352 }, { 102,7352 }, - { 103,7352 }, { 104,7352 }, { 105,7352 }, { 106,7352 }, { 107,7352 }, - { 108,7352 }, { 109,7352 }, { 110,7352 }, { 111,7352 }, { 112,7352 }, - { 113,7352 }, { 114,7352 }, { 115,7352 }, { 116,7352 }, { 117,7352 }, - { 118,7352 }, { 119,7352 }, { 120,7352 }, { 121,7352 }, { 122,7352 }, - { 123,7352 }, { 124,7352 }, { 125,7352 }, { 126,7352 }, { 127,7352 }, - { 128,7352 }, { 129,7352 }, { 130,7352 }, { 131,7352 }, { 132,7352 }, - - { 133,7352 }, { 134,7352 }, { 135,7352 }, { 136,7352 }, { 137,7352 }, - { 138,7352 }, { 139,7352 }, { 140,7352 }, { 141,7352 }, { 142,7352 }, - { 143,7352 }, { 144,7352 }, { 145,7352 }, { 146,7352 }, { 147,7352 }, - { 148,7352 }, { 149,7352 }, { 150,7352 }, { 151,7352 }, { 152,7352 }, - { 153,7352 }, { 154,7352 }, { 155,7352 }, { 156,7352 }, { 157,7352 }, - { 158,7352 }, { 159,7352 }, { 160,7352 }, { 161,7352 }, { 162,7352 }, - { 163,7352 }, { 164,7352 }, { 165,7352 }, { 166,7352 }, { 167,7352 }, - { 168,7352 }, { 169,7352 }, { 170,7352 }, { 171,7352 }, { 172,7352 }, - { 173,7352 }, { 174,7352 }, { 175,7352 }, { 176,7352 }, { 177,7352 }, - { 178,7352 }, { 179,7352 }, { 180,7352 }, { 181,7352 }, { 182,7352 }, - - { 183,7352 }, { 184,7352 }, { 185,7352 }, { 186,7352 }, { 187,7352 }, - { 188,7352 }, { 189,7352 }, { 190,7352 }, { 191,7352 }, { 192,7352 }, - { 193,7352 }, { 194,7352 }, { 195,7352 }, { 196,7352 }, { 197,7352 }, - { 198,7352 }, { 199,7352 }, { 200,7352 }, { 201,7352 }, { 202,7352 }, - { 203,7352 }, { 204,7352 }, { 205,7352 }, { 206,7352 }, { 207,7352 }, - { 208,7352 }, { 209,7352 }, { 210,7352 }, { 211,7352 }, { 212,7352 }, - { 213,7352 }, { 214,7352 }, { 215,7352 }, { 216,7352 }, { 217,7352 }, - { 218,7352 }, { 219,7352 }, { 220,7352 }, { 221,7352 }, { 222,7352 }, - { 223,7352 }, { 224,7352 }, { 225,7352 }, { 226,7352 }, { 227,7352 }, - { 228,7352 }, { 229,7352 }, { 230,7352 }, { 231,7352 }, { 232,7352 }, - - { 233,7352 }, { 234,7352 }, { 235,7352 }, { 236,7352 }, { 237,7352 }, - { 238,7352 }, { 239,7352 }, { 240,7352 }, { 241,7352 }, { 242,7352 }, - { 243,7352 }, { 244,7352 }, { 245,7352 }, { 246,7352 }, { 247,7352 }, - { 248,7352 }, { 249,7352 }, { 250,7352 }, { 251,7352 }, { 252,7352 }, - { 253,7352 }, { 254,7352 }, { 255,7352 }, { 256,7352 }, { 0, 10 }, - { 0,15098 }, { 1,7094 }, { 2,7094 }, { 3,7094 }, { 4,7094 }, - { 5,7094 }, { 6,7094 }, { 7,7094 }, { 8,7094 }, { 9,7094 }, - { 10,7094 }, { 11,7094 }, { 12,7094 }, { 13,7094 }, { 14,7094 }, - { 15,7094 }, { 16,7094 }, { 17,7094 }, { 18,7094 }, { 19,7094 }, - { 20,7094 }, { 21,7094 }, { 22,7094 }, { 23,7094 }, { 24,7094 }, - - { 25,7094 }, { 26,7094 }, { 27,7094 }, { 28,7094 }, { 29,7094 }, - { 30,7094 }, { 31,7094 }, { 32,7094 }, { 33,7094 }, { 34,7094 }, - { 35,7094 }, { 36,7094 }, { 37,7094 }, { 38,7094 }, { 39,3899 }, - { 40,7094 }, { 41,7094 }, { 42,7094 }, { 43,7094 }, { 44,7094 }, - { 45,7094 }, { 46,7094 }, { 47,7094 }, { 48,7094 }, { 49,7094 }, - { 50,7094 }, { 51,7094 }, { 52,7094 }, { 53,7094 }, { 54,7094 }, - { 55,7094 }, { 56,7094 }, { 57,7094 }, { 58,7094 }, { 59,7094 }, - { 60,7094 }, { 61,7094 }, { 62,7094 }, { 63,7094 }, { 64,7094 }, - { 65,7094 }, { 66,7094 }, { 67,7094 }, { 68,7094 }, { 69,7094 }, - { 70,7094 }, { 71,7094 }, { 72,7094 }, { 73,7094 }, { 74,7094 }, - - { 75,7094 }, { 76,7094 }, { 77,7094 }, { 78,7094 }, { 79,7094 }, - { 80,7094 }, { 81,7094 }, { 82,7094 }, { 83,7094 }, { 84,7094 }, - { 85,7094 }, { 86,7094 }, { 87,7094 }, { 88,7094 }, { 89,7094 }, - { 90,7094 }, { 91,7094 }, { 92,7094 }, { 93,7094 }, { 94,7094 }, - { 95,7094 }, { 96,7094 }, { 97,7094 }, { 98,7094 }, { 99,7094 }, - { 100,7094 }, { 101,7094 }, { 102,7094 }, { 103,7094 }, { 104,7094 }, - { 105,7094 }, { 106,7094 }, { 107,7094 }, { 108,7094 }, { 109,7094 }, - { 110,7094 }, { 111,7094 }, { 112,7094 }, { 113,7094 }, { 114,7094 }, - { 115,7094 }, { 116,7094 }, { 117,7094 }, { 118,7094 }, { 119,7094 }, - { 120,7094 }, { 121,7094 }, { 122,7094 }, { 123,7094 }, { 124,7094 }, - - { 125,7094 }, { 126,7094 }, { 127,7094 }, { 128,7094 }, { 129,7094 }, - { 130,7094 }, { 131,7094 }, { 132,7094 }, { 133,7094 }, { 134,7094 }, - { 135,7094 }, { 136,7094 }, { 137,7094 }, { 138,7094 }, { 139,7094 }, - { 140,7094 }, { 141,7094 }, { 142,7094 }, { 143,7094 }, { 144,7094 }, - { 145,7094 }, { 146,7094 }, { 147,7094 }, { 148,7094 }, { 149,7094 }, - { 150,7094 }, { 151,7094 }, { 152,7094 }, { 153,7094 }, { 154,7094 }, - { 155,7094 }, { 156,7094 }, { 157,7094 }, { 158,7094 }, { 159,7094 }, - { 160,7094 }, { 161,7094 }, { 162,7094 }, { 163,7094 }, { 164,7094 }, - { 165,7094 }, { 166,7094 }, { 167,7094 }, { 168,7094 }, { 169,7094 }, - { 170,7094 }, { 171,7094 }, { 172,7094 }, { 173,7094 }, { 174,7094 }, - - { 175,7094 }, { 176,7094 }, { 177,7094 }, { 178,7094 }, { 179,7094 }, - { 180,7094 }, { 181,7094 }, { 182,7094 }, { 183,7094 }, { 184,7094 }, - { 185,7094 }, { 186,7094 }, { 187,7094 }, { 188,7094 }, { 189,7094 }, - { 190,7094 }, { 191,7094 }, { 192,7094 }, { 193,7094 }, { 194,7094 }, - { 195,7094 }, { 196,7094 }, { 197,7094 }, { 198,7094 }, { 199,7094 }, - { 200,7094 }, { 201,7094 }, { 202,7094 }, { 203,7094 }, { 204,7094 }, - { 205,7094 }, { 206,7094 }, { 207,7094 }, { 208,7094 }, { 209,7094 }, - { 210,7094 }, { 211,7094 }, { 212,7094 }, { 213,7094 }, { 214,7094 }, - { 215,7094 }, { 216,7094 }, { 217,7094 }, { 218,7094 }, { 219,7094 }, - { 220,7094 }, { 221,7094 }, { 222,7094 }, { 223,7094 }, { 224,7094 }, - - { 225,7094 }, { 226,7094 }, { 227,7094 }, { 228,7094 }, { 229,7094 }, - { 230,7094 }, { 231,7094 }, { 232,7094 }, { 233,7094 }, { 234,7094 }, - { 235,7094 }, { 236,7094 }, { 237,7094 }, { 238,7094 }, { 239,7094 }, - { 240,7094 }, { 241,7094 }, { 242,7094 }, { 243,7094 }, { 244,7094 }, - { 245,7094 }, { 246,7094 }, { 247,7094 }, { 248,7094 }, { 249,7094 }, - { 250,7094 }, { 251,7094 }, { 252,7094 }, { 253,7094 }, { 254,7094 }, - { 255,7094 }, { 256,7094 }, { 0, 0 }, { 0,14840 }, { 1,7094 }, - { 2,7094 }, { 3,7094 }, { 4,7094 }, { 5,7094 }, { 6,7094 }, - { 7,7094 }, { 8,7094 }, { 9,7094 }, { 10,7094 }, { 11,7094 }, - { 12,7094 }, { 13,7094 }, { 14,7094 }, { 15,7094 }, { 16,7094 }, - - { 17,7094 }, { 18,7094 }, { 19,7094 }, { 20,7094 }, { 21,7094 }, - { 22,7094 }, { 23,7094 }, { 24,7094 }, { 25,7094 }, { 26,7094 }, - { 27,7094 }, { 28,7094 }, { 29,7094 }, { 30,7094 }, { 31,7094 }, - { 32,7094 }, { 33,7094 }, { 34,7094 }, { 35,7094 }, { 36,7094 }, - { 37,7094 }, { 38,7094 }, { 39,3670 }, { 40,7094 }, { 41,7094 }, - { 42,7094 }, { 43,7094 }, { 44,7094 }, { 45,7094 }, { 46,7094 }, - { 47,7094 }, { 48,7094 }, { 49,7094 }, { 50,7094 }, { 51,7094 }, - { 52,7094 }, { 53,7094 }, { 54,7094 }, { 55,7094 }, { 56,7094 }, - { 57,7094 }, { 58,7094 }, { 59,7094 }, { 60,7094 }, { 61,7094 }, - { 62,7094 }, { 63,7094 }, { 64,7094 }, { 65,7094 }, { 66,7094 }, - - { 67,7094 }, { 68,7094 }, { 69,7094 }, { 70,7094 }, { 71,7094 }, - { 72,7094 }, { 73,7094 }, { 74,7094 }, { 75,7094 }, { 76,7094 }, - { 77,7094 }, { 78,7094 }, { 79,7094 }, { 80,7094 }, { 81,7094 }, - { 82,7094 }, { 83,7094 }, { 84,7094 }, { 85,7094 }, { 86,7094 }, - { 87,7094 }, { 88,7094 }, { 89,7094 }, { 90,7094 }, { 91,7094 }, - { 92,7094 }, { 93,7094 }, { 94,7094 }, { 95,7094 }, { 96,7094 }, - { 97,7094 }, { 98,7094 }, { 99,7094 }, { 100,7094 }, { 101,7094 }, - { 102,7094 }, { 103,7094 }, { 104,7094 }, { 105,7094 }, { 106,7094 }, - { 107,7094 }, { 108,7094 }, { 109,7094 }, { 110,7094 }, { 111,7094 }, - { 112,7094 }, { 113,7094 }, { 114,7094 }, { 115,7094 }, { 116,7094 }, - - { 117,7094 }, { 118,7094 }, { 119,7094 }, { 120,7094 }, { 121,7094 }, - { 122,7094 }, { 123,7094 }, { 124,7094 }, { 125,7094 }, { 126,7094 }, - { 127,7094 }, { 128,7094 }, { 129,7094 }, { 130,7094 }, { 131,7094 }, - { 132,7094 }, { 133,7094 }, { 134,7094 }, { 135,7094 }, { 136,7094 }, - { 137,7094 }, { 138,7094 }, { 139,7094 }, { 140,7094 }, { 141,7094 }, - { 142,7094 }, { 143,7094 }, { 144,7094 }, { 145,7094 }, { 146,7094 }, - { 147,7094 }, { 148,7094 }, { 149,7094 }, { 150,7094 }, { 151,7094 }, - { 152,7094 }, { 153,7094 }, { 154,7094 }, { 155,7094 }, { 156,7094 }, - { 157,7094 }, { 158,7094 }, { 159,7094 }, { 160,7094 }, { 161,7094 }, - { 162,7094 }, { 163,7094 }, { 164,7094 }, { 165,7094 }, { 166,7094 }, - - { 167,7094 }, { 168,7094 }, { 169,7094 }, { 170,7094 }, { 171,7094 }, - { 172,7094 }, { 173,7094 }, { 174,7094 }, { 175,7094 }, { 176,7094 }, - { 177,7094 }, { 178,7094 }, { 179,7094 }, { 180,7094 }, { 181,7094 }, - { 182,7094 }, { 183,7094 }, { 184,7094 }, { 185,7094 }, { 186,7094 }, - { 187,7094 }, { 188,7094 }, { 189,7094 }, { 190,7094 }, { 191,7094 }, - { 192,7094 }, { 193,7094 }, { 194,7094 }, { 195,7094 }, { 196,7094 }, - { 197,7094 }, { 198,7094 }, { 199,7094 }, { 200,7094 }, { 201,7094 }, - { 202,7094 }, { 203,7094 }, { 204,7094 }, { 205,7094 }, { 206,7094 }, - { 207,7094 }, { 208,7094 }, { 209,7094 }, { 210,7094 }, { 211,7094 }, - { 212,7094 }, { 213,7094 }, { 214,7094 }, { 215,7094 }, { 216,7094 }, - - { 217,7094 }, { 218,7094 }, { 219,7094 }, { 220,7094 }, { 221,7094 }, - { 222,7094 }, { 223,7094 }, { 224,7094 }, { 225,7094 }, { 226,7094 }, - { 227,7094 }, { 228,7094 }, { 229,7094 }, { 230,7094 }, { 231,7094 }, - { 232,7094 }, { 233,7094 }, { 234,7094 }, { 235,7094 }, { 236,7094 }, - { 237,7094 }, { 238,7094 }, { 239,7094 }, { 240,7094 }, { 241,7094 }, - { 242,7094 }, { 243,7094 }, { 244,7094 }, { 245,7094 }, { 246,7094 }, - { 247,7094 }, { 248,7094 }, { 249,7094 }, { 250,7094 }, { 251,7094 }, - { 252,7094 }, { 253,7094 }, { 254,7094 }, { 255,7094 }, { 256,7094 }, - { 0, 0 }, { 0,14582 }, { 1,6836 }, { 2,6836 }, { 3,6836 }, - { 4,6836 }, { 5,6836 }, { 6,6836 }, { 7,6836 }, { 8,6836 }, - - { 9,6836 }, { 10,6836 }, { 11,6836 }, { 12,6836 }, { 13,6836 }, - { 14,6836 }, { 15,6836 }, { 16,6836 }, { 17,6836 }, { 18,6836 }, - { 19,6836 }, { 20,6836 }, { 21,6836 }, { 22,6836 }, { 23,6836 }, - { 24,6836 }, { 25,6836 }, { 26,6836 }, { 27,6836 }, { 28,6836 }, - { 29,6836 }, { 30,6836 }, { 31,6836 }, { 32,6836 }, { 33,6836 }, - { 34,6836 }, { 35,6836 }, { 36,6836 }, { 37,6836 }, { 38,6836 }, - { 39,3412 }, { 40,6836 }, { 41,6836 }, { 42,6836 }, { 43,6836 }, - { 44,6836 }, { 45,6836 }, { 46,6836 }, { 47,6836 }, { 48,6836 }, - { 49,6836 }, { 50,6836 }, { 51,6836 }, { 52,6836 }, { 53,6836 }, - { 54,6836 }, { 55,6836 }, { 56,6836 }, { 57,6836 }, { 58,6836 }, - - { 59,6836 }, { 60,6836 }, { 61,6836 }, { 62,6836 }, { 63,6836 }, - { 64,6836 }, { 65,6836 }, { 66,6836 }, { 67,6836 }, { 68,6836 }, - { 69,6836 }, { 70,6836 }, { 71,6836 }, { 72,6836 }, { 73,6836 }, - { 74,6836 }, { 75,6836 }, { 76,6836 }, { 77,6836 }, { 78,6836 }, - { 79,6836 }, { 80,6836 }, { 81,6836 }, { 82,6836 }, { 83,6836 }, - { 84,6836 }, { 85,6836 }, { 86,6836 }, { 87,6836 }, { 88,6836 }, - { 89,6836 }, { 90,6836 }, { 91,6836 }, { 92,6836 }, { 93,6836 }, - { 94,6836 }, { 95,6836 }, { 96,6836 }, { 97,6836 }, { 98,6836 }, - { 99,6836 }, { 100,6836 }, { 101,6836 }, { 102,6836 }, { 103,6836 }, - { 104,6836 }, { 105,6836 }, { 106,6836 }, { 107,6836 }, { 108,6836 }, - - { 109,6836 }, { 110,6836 }, { 111,6836 }, { 112,6836 }, { 113,6836 }, - { 114,6836 }, { 115,6836 }, { 116,6836 }, { 117,6836 }, { 118,6836 }, - { 119,6836 }, { 120,6836 }, { 121,6836 }, { 122,6836 }, { 123,6836 }, - { 124,6836 }, { 125,6836 }, { 126,6836 }, { 127,6836 }, { 128,6836 }, - { 129,6836 }, { 130,6836 }, { 131,6836 }, { 132,6836 }, { 133,6836 }, - { 134,6836 }, { 135,6836 }, { 136,6836 }, { 137,6836 }, { 138,6836 }, - { 139,6836 }, { 140,6836 }, { 141,6836 }, { 142,6836 }, { 143,6836 }, - { 144,6836 }, { 145,6836 }, { 146,6836 }, { 147,6836 }, { 148,6836 }, - { 149,6836 }, { 150,6836 }, { 151,6836 }, { 152,6836 }, { 153,6836 }, - { 154,6836 }, { 155,6836 }, { 156,6836 }, { 157,6836 }, { 158,6836 }, - - { 159,6836 }, { 160,6836 }, { 161,6836 }, { 162,6836 }, { 163,6836 }, - { 164,6836 }, { 165,6836 }, { 166,6836 }, { 167,6836 }, { 168,6836 }, - { 169,6836 }, { 170,6836 }, { 171,6836 }, { 172,6836 }, { 173,6836 }, - { 174,6836 }, { 175,6836 }, { 176,6836 }, { 177,6836 }, { 178,6836 }, - { 179,6836 }, { 180,6836 }, { 181,6836 }, { 182,6836 }, { 183,6836 }, - { 184,6836 }, { 185,6836 }, { 186,6836 }, { 187,6836 }, { 188,6836 }, - { 189,6836 }, { 190,6836 }, { 191,6836 }, { 192,6836 }, { 193,6836 }, - { 194,6836 }, { 195,6836 }, { 196,6836 }, { 197,6836 }, { 198,6836 }, - { 199,6836 }, { 200,6836 }, { 201,6836 }, { 202,6836 }, { 203,6836 }, - { 204,6836 }, { 205,6836 }, { 206,6836 }, { 207,6836 }, { 208,6836 }, - - { 209,6836 }, { 210,6836 }, { 211,6836 }, { 212,6836 }, { 213,6836 }, - { 214,6836 }, { 215,6836 }, { 216,6836 }, { 217,6836 }, { 218,6836 }, - { 219,6836 }, { 220,6836 }, { 221,6836 }, { 222,6836 }, { 223,6836 }, - { 224,6836 }, { 225,6836 }, { 226,6836 }, { 227,6836 }, { 228,6836 }, - { 229,6836 }, { 230,6836 }, { 231,6836 }, { 232,6836 }, { 233,6836 }, - { 234,6836 }, { 235,6836 }, { 236,6836 }, { 237,6836 }, { 238,6836 }, - { 239,6836 }, { 240,6836 }, { 241,6836 }, { 242,6836 }, { 243,6836 }, - { 244,6836 }, { 245,6836 }, { 246,6836 }, { 247,6836 }, { 248,6836 }, - { 249,6836 }, { 250,6836 }, { 251,6836 }, { 252,6836 }, { 253,6836 }, - { 254,6836 }, { 255,6836 }, { 256,6836 }, { 0, 19 }, { 0,14324 }, + { 44,5958 }, { 45,6317 }, { 46,6336 }, { 47,6407 }, { 48,6439 }, + { 49,6696 }, { 50,6696 }, { 51,6696 }, { 52,6696 }, { 53,6696 }, + { 54,6696 }, { 55,6696 }, { 56,6696 }, { 57,6696 }, { 58,5961 }, + { 59,5958 }, { 60,6953 }, { 61,6964 }, { 62,7031 }, { 63,5983 }, + { 64,5983 }, { 65,7063 }, { 66,7320 }, { 67,7063 }, { 68,7063 }, + { 69,7577 }, { 70,7063 }, { 71,7063 }, { 72,7063 }, { 73,7063 }, + { 74,7063 }, { 75,7063 }, { 76,7063 }, { 77,7063 }, { 78,7834 }, + { 79,7063 }, { 80,7063 }, { 81,7063 }, { 82,7063 }, { 83,7063 }, + { 84,7063 }, { 85,8091 }, { 86,7063 }, { 87,7063 }, { 88,8348 }, + + { 89,7063 }, { 90,7063 }, { 91,5958 }, { 92,5934 }, { 93,5958 }, + { 94,6306 }, { 95,7063 }, { 96,5983 }, { 97,7063 }, { 98,7320 }, + { 99,7063 }, { 100,7063 }, { 101,7577 }, { 102,7063 }, { 103,7063 }, + { 104,7063 }, { 105,7063 }, { 106,7063 }, { 107,7063 }, { 108,7063 }, + { 109,7063 }, { 110,7834 }, { 111,7063 }, { 112,7063 }, { 113,7063 }, + { 114,7063 }, { 115,7063 }, { 116,7063 }, { 117,8091 }, { 118,7063 }, + { 119,7063 }, { 120,8348 }, { 121,7063 }, { 122,7063 }, { 123,5934 }, + { 124,5983 }, { 125,5934 }, { 126,5983 }, { 127,5934 }, { 128,7063 }, + { 129,7063 }, { 130,7063 }, { 131,7063 }, { 132,7063 }, { 133,7063 }, + { 134,7063 }, { 135,7063 }, { 136,7063 }, { 137,7063 }, { 138,7063 }, + + { 139,7063 }, { 140,7063 }, { 141,7063 }, { 142,7063 }, { 143,7063 }, + { 144,7063 }, { 145,7063 }, { 146,7063 }, { 147,7063 }, { 148,7063 }, + { 149,7063 }, { 150,7063 }, { 151,7063 }, { 152,7063 }, { 153,7063 }, + { 154,7063 }, { 155,7063 }, { 156,7063 }, { 157,7063 }, { 158,7063 }, + { 159,7063 }, { 160,7063 }, { 161,7063 }, { 162,7063 }, { 163,7063 }, + { 164,7063 }, { 165,7063 }, { 166,7063 }, { 167,7063 }, { 168,7063 }, + { 169,7063 }, { 170,7063 }, { 171,7063 }, { 172,7063 }, { 173,7063 }, + { 174,7063 }, { 175,7063 }, { 176,7063 }, { 177,7063 }, { 178,7063 }, + { 179,7063 }, { 180,7063 }, { 181,7063 }, { 182,7063 }, { 183,7063 }, + { 184,7063 }, { 185,7063 }, { 186,7063 }, { 187,7063 }, { 188,7063 }, + + { 189,7063 }, { 190,7063 }, { 191,7063 }, { 192,7063 }, { 193,7063 }, + { 194,7063 }, { 195,7063 }, { 196,7063 }, { 197,7063 }, { 198,7063 }, + { 199,7063 }, { 200,7063 }, { 201,7063 }, { 202,7063 }, { 203,7063 }, + { 204,7063 }, { 205,7063 }, { 206,7063 }, { 207,7063 }, { 208,7063 }, + { 209,7063 }, { 210,7063 }, { 211,7063 }, { 212,7063 }, { 213,7063 }, + { 214,7063 }, { 215,7063 }, { 216,7063 }, { 217,7063 }, { 218,7063 }, + { 219,7063 }, { 220,7063 }, { 221,7063 }, { 222,7063 }, { 223,7063 }, + { 224,7063 }, { 225,7063 }, { 226,7063 }, { 227,7063 }, { 228,7063 }, + { 229,7063 }, { 230,7063 }, { 231,7063 }, { 232,7063 }, { 233,7063 }, + { 234,7063 }, { 235,7063 }, { 236,7063 }, { 237,7063 }, { 238,7063 }, + + { 239,7063 }, { 240,7063 }, { 241,7063 }, { 242,7063 }, { 243,7063 }, + { 244,7063 }, { 245,7063 }, { 246,7063 }, { 247,7063 }, { 248,7063 }, + { 249,7063 }, { 250,7063 }, { 251,7063 }, { 252,7063 }, { 253,7063 }, + { 254,7063 }, { 255,7063 }, { 256,5934 }, { 0, 11 }, { 0,21029 }, + { 1,8347 }, { 2,8347 }, { 3,8347 }, { 4,8347 }, { 5,8347 }, + { 6,8347 }, { 7,8347 }, { 8,8347 }, { 9,8347 }, { 10,8347 }, + { 11,8347 }, { 12,8347 }, { 13,8347 }, { 14,8347 }, { 15,8347 }, + { 16,8347 }, { 17,8347 }, { 18,8347 }, { 19,8347 }, { 20,8347 }, + { 21,8347 }, { 22,8347 }, { 23,8347 }, { 24,8347 }, { 25,8347 }, + { 26,8347 }, { 27,8347 }, { 28,8347 }, { 29,8347 }, { 30,8347 }, + + { 31,8347 }, { 32,8347 }, { 33,8347 }, { 34,8347 }, { 35,8347 }, + { 36,8347 }, { 37,8347 }, { 38,8347 }, { 39,5705 }, { 40,8347 }, + { 41,8347 }, { 42,8347 }, { 43,8347 }, { 44,8347 }, { 45,8347 }, + { 46,8347 }, { 47,8347 }, { 48,8347 }, { 49,8347 }, { 50,8347 }, + { 51,8347 }, { 52,8347 }, { 53,8347 }, { 54,8347 }, { 55,8347 }, + { 56,8347 }, { 57,8347 }, { 58,8347 }, { 59,8347 }, { 60,8347 }, + { 61,8347 }, { 62,8347 }, { 63,8347 }, { 64,8347 }, { 65,8347 }, + { 66,8347 }, { 67,8347 }, { 68,8347 }, { 69,8347 }, { 70,8347 }, + { 71,8347 }, { 72,8347 }, { 73,8347 }, { 74,8347 }, { 75,8347 }, + { 76,8347 }, { 77,8347 }, { 78,8347 }, { 79,8347 }, { 80,8347 }, + + { 81,8347 }, { 82,8347 }, { 83,8347 }, { 84,8347 }, { 85,8347 }, + { 86,8347 }, { 87,8347 }, { 88,8347 }, { 89,8347 }, { 90,8347 }, + { 91,8347 }, { 92,8347 }, { 93,8347 }, { 94,8347 }, { 95,8347 }, + { 96,8347 }, { 97,8347 }, { 98,8347 }, { 99,8347 }, { 100,8347 }, + { 101,8347 }, { 102,8347 }, { 103,8347 }, { 104,8347 }, { 105,8347 }, + { 106,8347 }, { 107,8347 }, { 108,8347 }, { 109,8347 }, { 110,8347 }, + { 111,8347 }, { 112,8347 }, { 113,8347 }, { 114,8347 }, { 115,8347 }, + { 116,8347 }, { 117,8347 }, { 118,8347 }, { 119,8347 }, { 120,8347 }, + { 121,8347 }, { 122,8347 }, { 123,8347 }, { 124,8347 }, { 125,8347 }, + { 126,8347 }, { 127,8347 }, { 128,8347 }, { 129,8347 }, { 130,8347 }, + + { 131,8347 }, { 132,8347 }, { 133,8347 }, { 134,8347 }, { 135,8347 }, + { 136,8347 }, { 137,8347 }, { 138,8347 }, { 139,8347 }, { 140,8347 }, + { 141,8347 }, { 142,8347 }, { 143,8347 }, { 144,8347 }, { 145,8347 }, + { 146,8347 }, { 147,8347 }, { 148,8347 }, { 149,8347 }, { 150,8347 }, + { 151,8347 }, { 152,8347 }, { 153,8347 }, { 154,8347 }, { 155,8347 }, + { 156,8347 }, { 157,8347 }, { 158,8347 }, { 159,8347 }, { 160,8347 }, + { 161,8347 }, { 162,8347 }, { 163,8347 }, { 164,8347 }, { 165,8347 }, + { 166,8347 }, { 167,8347 }, { 168,8347 }, { 169,8347 }, { 170,8347 }, + { 171,8347 }, { 172,8347 }, { 173,8347 }, { 174,8347 }, { 175,8347 }, + { 176,8347 }, { 177,8347 }, { 178,8347 }, { 179,8347 }, { 180,8347 }, + + { 181,8347 }, { 182,8347 }, { 183,8347 }, { 184,8347 }, { 185,8347 }, + { 186,8347 }, { 187,8347 }, { 188,8347 }, { 189,8347 }, { 190,8347 }, + { 191,8347 }, { 192,8347 }, { 193,8347 }, { 194,8347 }, { 195,8347 }, + { 196,8347 }, { 197,8347 }, { 198,8347 }, { 199,8347 }, { 200,8347 }, + { 201,8347 }, { 202,8347 }, { 203,8347 }, { 204,8347 }, { 205,8347 }, + { 206,8347 }, { 207,8347 }, { 208,8347 }, { 209,8347 }, { 210,8347 }, + { 211,8347 }, { 212,8347 }, { 213,8347 }, { 214,8347 }, { 215,8347 }, + { 216,8347 }, { 217,8347 }, { 218,8347 }, { 219,8347 }, { 220,8347 }, + { 221,8347 }, { 222,8347 }, { 223,8347 }, { 224,8347 }, { 225,8347 }, + { 226,8347 }, { 227,8347 }, { 228,8347 }, { 229,8347 }, { 230,8347 }, + + { 231,8347 }, { 232,8347 }, { 233,8347 }, { 234,8347 }, { 235,8347 }, + { 236,8347 }, { 237,8347 }, { 238,8347 }, { 239,8347 }, { 240,8347 }, + { 241,8347 }, { 242,8347 }, { 243,8347 }, { 244,8347 }, { 245,8347 }, + { 246,8347 }, { 247,8347 }, { 248,8347 }, { 249,8347 }, { 250,8347 }, + { 251,8347 }, { 252,8347 }, { 253,8347 }, { 254,8347 }, { 255,8347 }, + { 256,8347 }, { 0, 11 }, { 0,20771 }, { 1,8089 }, { 2,8089 }, + { 3,8089 }, { 4,8089 }, { 5,8089 }, { 6,8089 }, { 7,8089 }, + { 8,8089 }, { 9,8089 }, { 10,8089 }, { 11,8089 }, { 12,8089 }, + { 13,8089 }, { 14,8089 }, { 15,8089 }, { 16,8089 }, { 17,8089 }, + { 18,8089 }, { 19,8089 }, { 20,8089 }, { 21,8089 }, { 22,8089 }, + + { 23,8089 }, { 24,8089 }, { 25,8089 }, { 26,8089 }, { 27,8089 }, + { 28,8089 }, { 29,8089 }, { 30,8089 }, { 31,8089 }, { 32,8089 }, + { 33,8089 }, { 34,8089 }, { 35,8089 }, { 36,8089 }, { 37,8089 }, + { 38,8089 }, { 39,5447 }, { 40,8089 }, { 41,8089 }, { 42,8089 }, + { 43,8089 }, { 44,8089 }, { 45,8089 }, { 46,8089 }, { 47,8089 }, + { 48,8089 }, { 49,8089 }, { 50,8089 }, { 51,8089 }, { 52,8089 }, + { 53,8089 }, { 54,8089 }, { 55,8089 }, { 56,8089 }, { 57,8089 }, + { 58,8089 }, { 59,8089 }, { 60,8089 }, { 61,8089 }, { 62,8089 }, + { 63,8089 }, { 64,8089 }, { 65,8089 }, { 66,8089 }, { 67,8089 }, + { 68,8089 }, { 69,8089 }, { 70,8089 }, { 71,8089 }, { 72,8089 }, + + { 73,8089 }, { 74,8089 }, { 75,8089 }, { 76,8089 }, { 77,8089 }, + { 78,8089 }, { 79,8089 }, { 80,8089 }, { 81,8089 }, { 82,8089 }, + { 83,8089 }, { 84,8089 }, { 85,8089 }, { 86,8089 }, { 87,8089 }, + { 88,8089 }, { 89,8089 }, { 90,8089 }, { 91,8089 }, { 92,8089 }, + { 93,8089 }, { 94,8089 }, { 95,8089 }, { 96,8089 }, { 97,8089 }, + { 98,8089 }, { 99,8089 }, { 100,8089 }, { 101,8089 }, { 102,8089 }, + { 103,8089 }, { 104,8089 }, { 105,8089 }, { 106,8089 }, { 107,8089 }, + { 108,8089 }, { 109,8089 }, { 110,8089 }, { 111,8089 }, { 112,8089 }, + { 113,8089 }, { 114,8089 }, { 115,8089 }, { 116,8089 }, { 117,8089 }, + { 118,8089 }, { 119,8089 }, { 120,8089 }, { 121,8089 }, { 122,8089 }, + + { 123,8089 }, { 124,8089 }, { 125,8089 }, { 126,8089 }, { 127,8089 }, + { 128,8089 }, { 129,8089 }, { 130,8089 }, { 131,8089 }, { 132,8089 }, + { 133,8089 }, { 134,8089 }, { 135,8089 }, { 136,8089 }, { 137,8089 }, + { 138,8089 }, { 139,8089 }, { 140,8089 }, { 141,8089 }, { 142,8089 }, + { 143,8089 }, { 144,8089 }, { 145,8089 }, { 146,8089 }, { 147,8089 }, + { 148,8089 }, { 149,8089 }, { 150,8089 }, { 151,8089 }, { 152,8089 }, + { 153,8089 }, { 154,8089 }, { 155,8089 }, { 156,8089 }, { 157,8089 }, + { 158,8089 }, { 159,8089 }, { 160,8089 }, { 161,8089 }, { 162,8089 }, + { 163,8089 }, { 164,8089 }, { 165,8089 }, { 166,8089 }, { 167,8089 }, + { 168,8089 }, { 169,8089 }, { 170,8089 }, { 171,8089 }, { 172,8089 }, + + { 173,8089 }, { 174,8089 }, { 175,8089 }, { 176,8089 }, { 177,8089 }, + { 178,8089 }, { 179,8089 }, { 180,8089 }, { 181,8089 }, { 182,8089 }, + { 183,8089 }, { 184,8089 }, { 185,8089 }, { 186,8089 }, { 187,8089 }, + { 188,8089 }, { 189,8089 }, { 190,8089 }, { 191,8089 }, { 192,8089 }, + { 193,8089 }, { 194,8089 }, { 195,8089 }, { 196,8089 }, { 197,8089 }, + { 198,8089 }, { 199,8089 }, { 200,8089 }, { 201,8089 }, { 202,8089 }, + { 203,8089 }, { 204,8089 }, { 205,8089 }, { 206,8089 }, { 207,8089 }, + { 208,8089 }, { 209,8089 }, { 210,8089 }, { 211,8089 }, { 212,8089 }, + { 213,8089 }, { 214,8089 }, { 215,8089 }, { 216,8089 }, { 217,8089 }, + { 218,8089 }, { 219,8089 }, { 220,8089 }, { 221,8089 }, { 222,8089 }, + + { 223,8089 }, { 224,8089 }, { 225,8089 }, { 226,8089 }, { 227,8089 }, + { 228,8089 }, { 229,8089 }, { 230,8089 }, { 231,8089 }, { 232,8089 }, + { 233,8089 }, { 234,8089 }, { 235,8089 }, { 236,8089 }, { 237,8089 }, + { 238,8089 }, { 239,8089 }, { 240,8089 }, { 241,8089 }, { 242,8089 }, + { 243,8089 }, { 244,8089 }, { 245,8089 }, { 246,8089 }, { 247,8089 }, + { 248,8089 }, { 249,8089 }, { 250,8089 }, { 251,8089 }, { 252,8089 }, + { 253,8089 }, { 254,8089 }, { 255,8089 }, { 256,8089 }, { 0, 0 }, + { 0,20513 }, { 1,8089 }, { 2,8089 }, { 3,8089 }, { 4,8089 }, + { 5,8089 }, { 6,8089 }, { 7,8089 }, { 8,8089 }, { 9,8089 }, + { 10,8089 }, { 11,8089 }, { 12,8089 }, { 13,8089 }, { 14,8089 }, + + { 15,8089 }, { 16,8089 }, { 17,8089 }, { 18,8089 }, { 19,8089 }, + { 20,8089 }, { 21,8089 }, { 22,8089 }, { 23,8089 }, { 24,8089 }, + { 25,8089 }, { 26,8089 }, { 27,8089 }, { 28,8089 }, { 29,8089 }, + { 30,8089 }, { 31,8089 }, { 32,8089 }, { 33,8347 }, { 34,8089 }, + { 35,8347 }, { 36,8089 }, { 37,8347 }, { 38,8347 }, { 39,8089 }, + { 40,8089 }, { 41,8089 }, { 42,5192 }, { 43,8347 }, { 44,8089 }, + { 45,8347 }, { 46,8089 }, { 47,5196 }, { 48,8089 }, { 49,8089 }, + { 50,8089 }, { 51,8089 }, { 52,8089 }, { 53,8089 }, { 54,8089 }, + { 55,8089 }, { 56,8089 }, { 57,8089 }, { 58,8089 }, { 59,8089 }, + { 60,8347 }, { 61,8347 }, { 62,8347 }, { 63,8347 }, { 64,8347 }, + + { 65,8089 }, { 66,8089 }, { 67,8089 }, { 68,8089 }, { 69,8089 }, + { 70,8089 }, { 71,8089 }, { 72,8089 }, { 73,8089 }, { 74,8089 }, + { 75,8089 }, { 76,8089 }, { 77,8089 }, { 78,8089 }, { 79,8089 }, + { 80,8089 }, { 81,8089 }, { 82,8089 }, { 83,8089 }, { 84,8089 }, + { 85,8089 }, { 86,8089 }, { 87,8089 }, { 88,8089 }, { 89,8089 }, + { 90,8089 }, { 91,8089 }, { 92,8089 }, { 93,8089 }, { 94,8347 }, + { 95,8089 }, { 96,8347 }, { 97,8089 }, { 98,8089 }, { 99,8089 }, + { 100,8089 }, { 101,8089 }, { 102,8089 }, { 103,8089 }, { 104,8089 }, + { 105,8089 }, { 106,8089 }, { 107,8089 }, { 108,8089 }, { 109,8089 }, + { 110,8089 }, { 111,8089 }, { 112,8089 }, { 113,8089 }, { 114,8089 }, + + { 115,8089 }, { 116,8089 }, { 117,8089 }, { 118,8089 }, { 119,8089 }, + { 120,8089 }, { 121,8089 }, { 122,8089 }, { 123,8089 }, { 124,8347 }, + { 125,8089 }, { 126,8347 }, { 127,8089 }, { 128,8089 }, { 129,8089 }, + { 130,8089 }, { 131,8089 }, { 132,8089 }, { 133,8089 }, { 134,8089 }, + { 135,8089 }, { 136,8089 }, { 137,8089 }, { 138,8089 }, { 139,8089 }, + { 140,8089 }, { 141,8089 }, { 142,8089 }, { 143,8089 }, { 144,8089 }, + { 145,8089 }, { 146,8089 }, { 147,8089 }, { 148,8089 }, { 149,8089 }, + { 150,8089 }, { 151,8089 }, { 152,8089 }, { 153,8089 }, { 154,8089 }, + { 155,8089 }, { 156,8089 }, { 157,8089 }, { 158,8089 }, { 159,8089 }, + { 160,8089 }, { 161,8089 }, { 162,8089 }, { 163,8089 }, { 164,8089 }, + + { 165,8089 }, { 166,8089 }, { 167,8089 }, { 168,8089 }, { 169,8089 }, + { 170,8089 }, { 171,8089 }, { 172,8089 }, { 173,8089 }, { 174,8089 }, + { 175,8089 }, { 176,8089 }, { 177,8089 }, { 178,8089 }, { 179,8089 }, + { 180,8089 }, { 181,8089 }, { 182,8089 }, { 183,8089 }, { 184,8089 }, + { 185,8089 }, { 186,8089 }, { 187,8089 }, { 188,8089 }, { 189,8089 }, + { 190,8089 }, { 191,8089 }, { 192,8089 }, { 193,8089 }, { 194,8089 }, + { 195,8089 }, { 196,8089 }, { 197,8089 }, { 198,8089 }, { 199,8089 }, + { 200,8089 }, { 201,8089 }, { 202,8089 }, { 203,8089 }, { 204,8089 }, + { 205,8089 }, { 206,8089 }, { 207,8089 }, { 208,8089 }, { 209,8089 }, + { 210,8089 }, { 211,8089 }, { 212,8089 }, { 213,8089 }, { 214,8089 }, + + { 215,8089 }, { 216,8089 }, { 217,8089 }, { 218,8089 }, { 219,8089 }, + { 220,8089 }, { 221,8089 }, { 222,8089 }, { 223,8089 }, { 224,8089 }, + { 225,8089 }, { 226,8089 }, { 227,8089 }, { 228,8089 }, { 229,8089 }, + { 230,8089 }, { 231,8089 }, { 232,8089 }, { 233,8089 }, { 234,8089 }, + { 235,8089 }, { 236,8089 }, { 237,8089 }, { 238,8089 }, { 239,8089 }, + { 240,8089 }, { 241,8089 }, { 242,8089 }, { 243,8089 }, { 244,8089 }, + { 245,8089 }, { 246,8089 }, { 247,8089 }, { 248,8089 }, { 249,8089 }, + { 250,8089 }, { 251,8089 }, { 252,8089 }, { 253,8089 }, { 254,8089 }, + { 255,8089 }, { 256,8089 }, { 0, 0 }, { 0,20255 }, { 1,7831 }, + { 2,7831 }, { 3,7831 }, { 4,7831 }, { 5,7831 }, { 6,7831 }, + + { 7,7831 }, { 8,7831 }, { 9,7831 }, { 10,7831 }, { 11,7831 }, + { 12,7831 }, { 13,7831 }, { 14,7831 }, { 15,7831 }, { 16,7831 }, + { 17,7831 }, { 18,7831 }, { 19,7831 }, { 20,7831 }, { 21,7831 }, + { 22,7831 }, { 23,7831 }, { 24,7831 }, { 25,7831 }, { 26,7831 }, + { 27,7831 }, { 28,7831 }, { 29,7831 }, { 30,7831 }, { 31,7831 }, + { 32,7831 }, { 33,8089 }, { 34,7831 }, { 35,8089 }, { 36,7831 }, + { 37,8089 }, { 38,8089 }, { 39,7831 }, { 40,7831 }, { 41,7831 }, + { 42,4934 }, { 43,8089 }, { 44,7831 }, { 45,8089 }, { 46,7831 }, + { 47,4938 }, { 48,7831 }, { 49,7831 }, { 50,7831 }, { 51,7831 }, + { 52,7831 }, { 53,7831 }, { 54,7831 }, { 55,7831 }, { 56,7831 }, + + { 57,7831 }, { 58,7831 }, { 59,7831 }, { 60,8089 }, { 61,8089 }, + { 62,8089 }, { 63,8089 }, { 64,8089 }, { 65,7831 }, { 66,7831 }, + { 67,7831 }, { 68,7831 }, { 69,7831 }, { 70,7831 }, { 71,7831 }, + { 72,7831 }, { 73,7831 }, { 74,7831 }, { 75,7831 }, { 76,7831 }, + { 77,7831 }, { 78,7831 }, { 79,7831 }, { 80,7831 }, { 81,7831 }, + { 82,7831 }, { 83,7831 }, { 84,7831 }, { 85,7831 }, { 86,7831 }, + { 87,7831 }, { 88,7831 }, { 89,7831 }, { 90,7831 }, { 91,7831 }, + { 92,7831 }, { 93,7831 }, { 94,8089 }, { 95,7831 }, { 96,8089 }, + { 97,7831 }, { 98,7831 }, { 99,7831 }, { 100,7831 }, { 101,7831 }, + { 102,7831 }, { 103,7831 }, { 104,7831 }, { 105,7831 }, { 106,7831 }, + + { 107,7831 }, { 108,7831 }, { 109,7831 }, { 110,7831 }, { 111,7831 }, + { 112,7831 }, { 113,7831 }, { 114,7831 }, { 115,7831 }, { 116,7831 }, + { 117,7831 }, { 118,7831 }, { 119,7831 }, { 120,7831 }, { 121,7831 }, + { 122,7831 }, { 123,7831 }, { 124,8089 }, { 125,7831 }, { 126,8089 }, + { 127,7831 }, { 128,7831 }, { 129,7831 }, { 130,7831 }, { 131,7831 }, + { 132,7831 }, { 133,7831 }, { 134,7831 }, { 135,7831 }, { 136,7831 }, + { 137,7831 }, { 138,7831 }, { 139,7831 }, { 140,7831 }, { 141,7831 }, + { 142,7831 }, { 143,7831 }, { 144,7831 }, { 145,7831 }, { 146,7831 }, + { 147,7831 }, { 148,7831 }, { 149,7831 }, { 150,7831 }, { 151,7831 }, + { 152,7831 }, { 153,7831 }, { 154,7831 }, { 155,7831 }, { 156,7831 }, + + { 157,7831 }, { 158,7831 }, { 159,7831 }, { 160,7831 }, { 161,7831 }, + { 162,7831 }, { 163,7831 }, { 164,7831 }, { 165,7831 }, { 166,7831 }, + { 167,7831 }, { 168,7831 }, { 169,7831 }, { 170,7831 }, { 171,7831 }, + { 172,7831 }, { 173,7831 }, { 174,7831 }, { 175,7831 }, { 176,7831 }, + { 177,7831 }, { 178,7831 }, { 179,7831 }, { 180,7831 }, { 181,7831 }, + { 182,7831 }, { 183,7831 }, { 184,7831 }, { 185,7831 }, { 186,7831 }, + { 187,7831 }, { 188,7831 }, { 189,7831 }, { 190,7831 }, { 191,7831 }, + { 192,7831 }, { 193,7831 }, { 194,7831 }, { 195,7831 }, { 196,7831 }, + { 197,7831 }, { 198,7831 }, { 199,7831 }, { 200,7831 }, { 201,7831 }, + { 202,7831 }, { 203,7831 }, { 204,7831 }, { 205,7831 }, { 206,7831 }, + + { 207,7831 }, { 208,7831 }, { 209,7831 }, { 210,7831 }, { 211,7831 }, + { 212,7831 }, { 213,7831 }, { 214,7831 }, { 215,7831 }, { 216,7831 }, + { 217,7831 }, { 218,7831 }, { 219,7831 }, { 220,7831 }, { 221,7831 }, + { 222,7831 }, { 223,7831 }, { 224,7831 }, { 225,7831 }, { 226,7831 }, + { 227,7831 }, { 228,7831 }, { 229,7831 }, { 230,7831 }, { 231,7831 }, + { 232,7831 }, { 233,7831 }, { 234,7831 }, { 235,7831 }, { 236,7831 }, + { 237,7831 }, { 238,7831 }, { 239,7831 }, { 240,7831 }, { 241,7831 }, + { 242,7831 }, { 243,7831 }, { 244,7831 }, { 245,7831 }, { 246,7831 }, + { 247,7831 }, { 248,7831 }, { 249,7831 }, { 250,7831 }, { 251,7831 }, + { 252,7831 }, { 253,7831 }, { 254,7831 }, { 255,7831 }, { 256,7831 }, + + { 0, 0 }, { 0,19997 }, { 1,8089 }, { 2,8089 }, { 3,8089 }, + { 4,8089 }, { 5,8089 }, { 6,8089 }, { 7,8089 }, { 8,8089 }, + { 9,8089 }, { 10,8089 }, { 11,8089 }, { 12,8089 }, { 13,8089 }, + { 14,8089 }, { 15,8089 }, { 16,8089 }, { 17,8089 }, { 18,8089 }, + { 19,8089 }, { 20,8089 }, { 21,8089 }, { 22,8089 }, { 23,8089 }, + { 24,8089 }, { 25,8089 }, { 26,8089 }, { 27,8089 }, { 28,8089 }, + { 29,8089 }, { 30,8089 }, { 31,8089 }, { 32,8089 }, { 33,8089 }, + { 34,4685 }, { 35,8089 }, { 36,8089 }, { 37,8089 }, { 38,8089 }, + { 39,8089 }, { 40,8089 }, { 41,8089 }, { 42,8089 }, { 43,8089 }, + { 44,8089 }, { 45,8089 }, { 46,8089 }, { 47,8089 }, { 48,8089 }, + + { 49,8089 }, { 50,8089 }, { 51,8089 }, { 52,8089 }, { 53,8089 }, + { 54,8089 }, { 55,8089 }, { 56,8089 }, { 57,8089 }, { 58,8089 }, + { 59,8089 }, { 60,8089 }, { 61,8089 }, { 62,8089 }, { 63,8089 }, + { 64,8089 }, { 65,8089 }, { 66,8089 }, { 67,8089 }, { 68,8089 }, + { 69,8089 }, { 70,8089 }, { 71,8089 }, { 72,8089 }, { 73,8089 }, + { 74,8089 }, { 75,8089 }, { 76,8089 }, { 77,8089 }, { 78,8089 }, + { 79,8089 }, { 80,8089 }, { 81,8089 }, { 82,8089 }, { 83,8089 }, + { 84,8089 }, { 85,8089 }, { 86,8089 }, { 87,8089 }, { 88,8089 }, + { 89,8089 }, { 90,8089 }, { 91,8089 }, { 92,8089 }, { 93,8089 }, + { 94,8089 }, { 95,8089 }, { 96,8089 }, { 97,8089 }, { 98,8089 }, + + { 99,8089 }, { 100,8089 }, { 101,8089 }, { 102,8089 }, { 103,8089 }, + { 104,8089 }, { 105,8089 }, { 106,8089 }, { 107,8089 }, { 108,8089 }, + { 109,8089 }, { 110,8089 }, { 111,8089 }, { 112,8089 }, { 113,8089 }, + { 114,8089 }, { 115,8089 }, { 116,8089 }, { 117,8089 }, { 118,8089 }, + { 119,8089 }, { 120,8089 }, { 121,8089 }, { 122,8089 }, { 123,8089 }, + { 124,8089 }, { 125,8089 }, { 126,8089 }, { 127,8089 }, { 128,8089 }, + { 129,8089 }, { 130,8089 }, { 131,8089 }, { 132,8089 }, { 133,8089 }, + { 134,8089 }, { 135,8089 }, { 136,8089 }, { 137,8089 }, { 138,8089 }, + { 139,8089 }, { 140,8089 }, { 141,8089 }, { 142,8089 }, { 143,8089 }, + { 144,8089 }, { 145,8089 }, { 146,8089 }, { 147,8089 }, { 148,8089 }, + + { 149,8089 }, { 150,8089 }, { 151,8089 }, { 152,8089 }, { 153,8089 }, + { 154,8089 }, { 155,8089 }, { 156,8089 }, { 157,8089 }, { 158,8089 }, + { 159,8089 }, { 160,8089 }, { 161,8089 }, { 162,8089 }, { 163,8089 }, + { 164,8089 }, { 165,8089 }, { 166,8089 }, { 167,8089 }, { 168,8089 }, + { 169,8089 }, { 170,8089 }, { 171,8089 }, { 172,8089 }, { 173,8089 }, + { 174,8089 }, { 175,8089 }, { 176,8089 }, { 177,8089 }, { 178,8089 }, + { 179,8089 }, { 180,8089 }, { 181,8089 }, { 182,8089 }, { 183,8089 }, + { 184,8089 }, { 185,8089 }, { 186,8089 }, { 187,8089 }, { 188,8089 }, + { 189,8089 }, { 190,8089 }, { 191,8089 }, { 192,8089 }, { 193,8089 }, + { 194,8089 }, { 195,8089 }, { 196,8089 }, { 197,8089 }, { 198,8089 }, + + { 199,8089 }, { 200,8089 }, { 201,8089 }, { 202,8089 }, { 203,8089 }, + { 204,8089 }, { 205,8089 }, { 206,8089 }, { 207,8089 }, { 208,8089 }, + { 209,8089 }, { 210,8089 }, { 211,8089 }, { 212,8089 }, { 213,8089 }, + { 214,8089 }, { 215,8089 }, { 216,8089 }, { 217,8089 }, { 218,8089 }, + { 219,8089 }, { 220,8089 }, { 221,8089 }, { 222,8089 }, { 223,8089 }, + { 224,8089 }, { 225,8089 }, { 226,8089 }, { 227,8089 }, { 228,8089 }, + { 229,8089 }, { 230,8089 }, { 231,8089 }, { 232,8089 }, { 233,8089 }, + { 234,8089 }, { 235,8089 }, { 236,8089 }, { 237,8089 }, { 238,8089 }, + { 239,8089 }, { 240,8089 }, { 241,8089 }, { 242,8089 }, { 243,8089 }, + { 244,8089 }, { 245,8089 }, { 246,8089 }, { 247,8089 }, { 248,8089 }, + + { 249,8089 }, { 250,8089 }, { 251,8089 }, { 252,8089 }, { 253,8089 }, + { 254,8089 }, { 255,8089 }, { 256,8089 }, { 0, 0 }, { 0,19739 }, + { 1,7831 }, { 2,7831 }, { 3,7831 }, { 4,7831 }, { 5,7831 }, + { 6,7831 }, { 7,7831 }, { 8,7831 }, { 9,7831 }, { 10,7831 }, + { 11,7831 }, { 12,7831 }, { 13,7831 }, { 14,7831 }, { 15,7831 }, + { 16,7831 }, { 17,7831 }, { 18,7831 }, { 19,7831 }, { 20,7831 }, + { 21,7831 }, { 22,7831 }, { 23,7831 }, { 24,7831 }, { 25,7831 }, + { 26,7831 }, { 27,7831 }, { 28,7831 }, { 29,7831 }, { 30,7831 }, + { 31,7831 }, { 32,7831 }, { 33,7831 }, { 34,4427 }, { 35,7831 }, + { 36,7831 }, { 37,7831 }, { 38,7831 }, { 39,7831 }, { 40,7831 }, + + { 41,7831 }, { 42,7831 }, { 43,7831 }, { 44,7831 }, { 45,7831 }, + { 46,7831 }, { 47,7831 }, { 48,7831 }, { 49,7831 }, { 50,7831 }, + { 51,7831 }, { 52,7831 }, { 53,7831 }, { 54,7831 }, { 55,7831 }, + { 56,7831 }, { 57,7831 }, { 58,7831 }, { 59,7831 }, { 60,7831 }, + { 61,7831 }, { 62,7831 }, { 63,7831 }, { 64,7831 }, { 65,7831 }, + { 66,7831 }, { 67,7831 }, { 68,7831 }, { 69,7831 }, { 70,7831 }, + { 71,7831 }, { 72,7831 }, { 73,7831 }, { 74,7831 }, { 75,7831 }, + { 76,7831 }, { 77,7831 }, { 78,7831 }, { 79,7831 }, { 80,7831 }, + { 81,7831 }, { 82,7831 }, { 83,7831 }, { 84,7831 }, { 85,7831 }, + { 86,7831 }, { 87,7831 }, { 88,7831 }, { 89,7831 }, { 90,7831 }, + + { 91,7831 }, { 92,7831 }, { 93,7831 }, { 94,7831 }, { 95,7831 }, + { 96,7831 }, { 97,7831 }, { 98,7831 }, { 99,7831 }, { 100,7831 }, + { 101,7831 }, { 102,7831 }, { 103,7831 }, { 104,7831 }, { 105,7831 }, + { 106,7831 }, { 107,7831 }, { 108,7831 }, { 109,7831 }, { 110,7831 }, + { 111,7831 }, { 112,7831 }, { 113,7831 }, { 114,7831 }, { 115,7831 }, + { 116,7831 }, { 117,7831 }, { 118,7831 }, { 119,7831 }, { 120,7831 }, + { 121,7831 }, { 122,7831 }, { 123,7831 }, { 124,7831 }, { 125,7831 }, + { 126,7831 }, { 127,7831 }, { 128,7831 }, { 129,7831 }, { 130,7831 }, + { 131,7831 }, { 132,7831 }, { 133,7831 }, { 134,7831 }, { 135,7831 }, + { 136,7831 }, { 137,7831 }, { 138,7831 }, { 139,7831 }, { 140,7831 }, + + { 141,7831 }, { 142,7831 }, { 143,7831 }, { 144,7831 }, { 145,7831 }, + { 146,7831 }, { 147,7831 }, { 148,7831 }, { 149,7831 }, { 150,7831 }, + { 151,7831 }, { 152,7831 }, { 153,7831 }, { 154,7831 }, { 155,7831 }, + { 156,7831 }, { 157,7831 }, { 158,7831 }, { 159,7831 }, { 160,7831 }, + { 161,7831 }, { 162,7831 }, { 163,7831 }, { 164,7831 }, { 165,7831 }, + { 166,7831 }, { 167,7831 }, { 168,7831 }, { 169,7831 }, { 170,7831 }, + { 171,7831 }, { 172,7831 }, { 173,7831 }, { 174,7831 }, { 175,7831 }, + { 176,7831 }, { 177,7831 }, { 178,7831 }, { 179,7831 }, { 180,7831 }, + { 181,7831 }, { 182,7831 }, { 183,7831 }, { 184,7831 }, { 185,7831 }, + { 186,7831 }, { 187,7831 }, { 188,7831 }, { 189,7831 }, { 190,7831 }, + + { 191,7831 }, { 192,7831 }, { 193,7831 }, { 194,7831 }, { 195,7831 }, + { 196,7831 }, { 197,7831 }, { 198,7831 }, { 199,7831 }, { 200,7831 }, + { 201,7831 }, { 202,7831 }, { 203,7831 }, { 204,7831 }, { 205,7831 }, + { 206,7831 }, { 207,7831 }, { 208,7831 }, { 209,7831 }, { 210,7831 }, + { 211,7831 }, { 212,7831 }, { 213,7831 }, { 214,7831 }, { 215,7831 }, + { 216,7831 }, { 217,7831 }, { 218,7831 }, { 219,7831 }, { 220,7831 }, + { 221,7831 }, { 222,7831 }, { 223,7831 }, { 224,7831 }, { 225,7831 }, + { 226,7831 }, { 227,7831 }, { 228,7831 }, { 229,7831 }, { 230,7831 }, + { 231,7831 }, { 232,7831 }, { 233,7831 }, { 234,7831 }, { 235,7831 }, + { 236,7831 }, { 237,7831 }, { 238,7831 }, { 239,7831 }, { 240,7831 }, + + { 241,7831 }, { 242,7831 }, { 243,7831 }, { 244,7831 }, { 245,7831 }, + { 246,7831 }, { 247,7831 }, { 248,7831 }, { 249,7831 }, { 250,7831 }, + { 251,7831 }, { 252,7831 }, { 253,7831 }, { 254,7831 }, { 255,7831 }, + { 256,7831 }, { 0, 10 }, { 0,19481 }, { 1,7831 }, { 2,7831 }, + { 3,7831 }, { 4,7831 }, { 5,7831 }, { 6,7831 }, { 7,7831 }, + { 8,7831 }, { 9,7831 }, { 10,7831 }, { 11,7831 }, { 12,7831 }, + { 13,7831 }, { 14,7831 }, { 15,7831 }, { 16,7831 }, { 17,7831 }, + { 18,7831 }, { 19,7831 }, { 20,7831 }, { 21,7831 }, { 22,7831 }, + { 23,7831 }, { 24,7831 }, { 25,7831 }, { 26,7831 }, { 27,7831 }, + { 28,7831 }, { 29,7831 }, { 30,7831 }, { 31,7831 }, { 32,7831 }, + + { 33,7831 }, { 34,7831 }, { 35,7831 }, { 36,7831 }, { 37,7831 }, + { 38,7831 }, { 39,4157 }, { 40,7831 }, { 41,7831 }, { 42,7831 }, + { 43,7831 }, { 44,7831 }, { 45,7831 }, { 46,7831 }, { 47,7831 }, + { 48,7831 }, { 49,7831 }, { 50,7831 }, { 51,7831 }, { 52,7831 }, + { 53,7831 }, { 54,7831 }, { 55,7831 }, { 56,7831 }, { 57,7831 }, + { 58,7831 }, { 59,7831 }, { 60,7831 }, { 61,7831 }, { 62,7831 }, + { 63,7831 }, { 64,7831 }, { 65,7831 }, { 66,7831 }, { 67,7831 }, + { 68,7831 }, { 69,7831 }, { 70,7831 }, { 71,7831 }, { 72,7831 }, + { 73,7831 }, { 74,7831 }, { 75,7831 }, { 76,7831 }, { 77,7831 }, + { 78,7831 }, { 79,7831 }, { 80,7831 }, { 81,7831 }, { 82,7831 }, + + { 83,7831 }, { 84,7831 }, { 85,7831 }, { 86,7831 }, { 87,7831 }, + { 88,7831 }, { 89,7831 }, { 90,7831 }, { 91,7831 }, { 92,7831 }, + { 93,7831 }, { 94,7831 }, { 95,7831 }, { 96,7831 }, { 97,7831 }, + { 98,7831 }, { 99,7831 }, { 100,7831 }, { 101,7831 }, { 102,7831 }, + { 103,7831 }, { 104,7831 }, { 105,7831 }, { 106,7831 }, { 107,7831 }, + { 108,7831 }, { 109,7831 }, { 110,7831 }, { 111,7831 }, { 112,7831 }, + { 113,7831 }, { 114,7831 }, { 115,7831 }, { 116,7831 }, { 117,7831 }, + { 118,7831 }, { 119,7831 }, { 120,7831 }, { 121,7831 }, { 122,7831 }, + { 123,7831 }, { 124,7831 }, { 125,7831 }, { 126,7831 }, { 127,7831 }, + { 128,7831 }, { 129,7831 }, { 130,7831 }, { 131,7831 }, { 132,7831 }, + + { 133,7831 }, { 134,7831 }, { 135,7831 }, { 136,7831 }, { 137,7831 }, + { 138,7831 }, { 139,7831 }, { 140,7831 }, { 141,7831 }, { 142,7831 }, + { 143,7831 }, { 144,7831 }, { 145,7831 }, { 146,7831 }, { 147,7831 }, + { 148,7831 }, { 149,7831 }, { 150,7831 }, { 151,7831 }, { 152,7831 }, + { 153,7831 }, { 154,7831 }, { 155,7831 }, { 156,7831 }, { 157,7831 }, + { 158,7831 }, { 159,7831 }, { 160,7831 }, { 161,7831 }, { 162,7831 }, + { 163,7831 }, { 164,7831 }, { 165,7831 }, { 166,7831 }, { 167,7831 }, + { 168,7831 }, { 169,7831 }, { 170,7831 }, { 171,7831 }, { 172,7831 }, + { 173,7831 }, { 174,7831 }, { 175,7831 }, { 176,7831 }, { 177,7831 }, + { 178,7831 }, { 179,7831 }, { 180,7831 }, { 181,7831 }, { 182,7831 }, + + { 183,7831 }, { 184,7831 }, { 185,7831 }, { 186,7831 }, { 187,7831 }, + { 188,7831 }, { 189,7831 }, { 190,7831 }, { 191,7831 }, { 192,7831 }, + { 193,7831 }, { 194,7831 }, { 195,7831 }, { 196,7831 }, { 197,7831 }, + { 198,7831 }, { 199,7831 }, { 200,7831 }, { 201,7831 }, { 202,7831 }, + { 203,7831 }, { 204,7831 }, { 205,7831 }, { 206,7831 }, { 207,7831 }, + { 208,7831 }, { 209,7831 }, { 210,7831 }, { 211,7831 }, { 212,7831 }, + { 213,7831 }, { 214,7831 }, { 215,7831 }, { 216,7831 }, { 217,7831 }, + { 218,7831 }, { 219,7831 }, { 220,7831 }, { 221,7831 }, { 222,7831 }, + { 223,7831 }, { 224,7831 }, { 225,7831 }, { 226,7831 }, { 227,7831 }, + { 228,7831 }, { 229,7831 }, { 230,7831 }, { 231,7831 }, { 232,7831 }, + + { 233,7831 }, { 234,7831 }, { 235,7831 }, { 236,7831 }, { 237,7831 }, + { 238,7831 }, { 239,7831 }, { 240,7831 }, { 241,7831 }, { 242,7831 }, + { 243,7831 }, { 244,7831 }, { 245,7831 }, { 246,7831 }, { 247,7831 }, + { 248,7831 }, { 249,7831 }, { 250,7831 }, { 251,7831 }, { 252,7831 }, + { 253,7831 }, { 254,7831 }, { 255,7831 }, { 256,7831 }, { 0, 10 }, + { 0,19223 }, { 1,7573 }, { 2,7573 }, { 3,7573 }, { 4,7573 }, + { 5,7573 }, { 6,7573 }, { 7,7573 }, { 8,7573 }, { 9,7573 }, + { 10,7573 }, { 11,7573 }, { 12,7573 }, { 13,7573 }, { 14,7573 }, + { 15,7573 }, { 16,7573 }, { 17,7573 }, { 18,7573 }, { 19,7573 }, + { 20,7573 }, { 21,7573 }, { 22,7573 }, { 23,7573 }, { 24,7573 }, + + { 25,7573 }, { 26,7573 }, { 27,7573 }, { 28,7573 }, { 29,7573 }, + { 30,7573 }, { 31,7573 }, { 32,7573 }, { 33,7573 }, { 34,7573 }, + { 35,7573 }, { 36,7573 }, { 37,7573 }, { 38,7573 }, { 39,3899 }, + { 40,7573 }, { 41,7573 }, { 42,7573 }, { 43,7573 }, { 44,7573 }, + { 45,7573 }, { 46,7573 }, { 47,7573 }, { 48,7573 }, { 49,7573 }, + { 50,7573 }, { 51,7573 }, { 52,7573 }, { 53,7573 }, { 54,7573 }, + { 55,7573 }, { 56,7573 }, { 57,7573 }, { 58,7573 }, { 59,7573 }, + { 60,7573 }, { 61,7573 }, { 62,7573 }, { 63,7573 }, { 64,7573 }, + { 65,7573 }, { 66,7573 }, { 67,7573 }, { 68,7573 }, { 69,7573 }, + { 70,7573 }, { 71,7573 }, { 72,7573 }, { 73,7573 }, { 74,7573 }, + + { 75,7573 }, { 76,7573 }, { 77,7573 }, { 78,7573 }, { 79,7573 }, + { 80,7573 }, { 81,7573 }, { 82,7573 }, { 83,7573 }, { 84,7573 }, + { 85,7573 }, { 86,7573 }, { 87,7573 }, { 88,7573 }, { 89,7573 }, + { 90,7573 }, { 91,7573 }, { 92,7573 }, { 93,7573 }, { 94,7573 }, + { 95,7573 }, { 96,7573 }, { 97,7573 }, { 98,7573 }, { 99,7573 }, + { 100,7573 }, { 101,7573 }, { 102,7573 }, { 103,7573 }, { 104,7573 }, + { 105,7573 }, { 106,7573 }, { 107,7573 }, { 108,7573 }, { 109,7573 }, + { 110,7573 }, { 111,7573 }, { 112,7573 }, { 113,7573 }, { 114,7573 }, + { 115,7573 }, { 116,7573 }, { 117,7573 }, { 118,7573 }, { 119,7573 }, + { 120,7573 }, { 121,7573 }, { 122,7573 }, { 123,7573 }, { 124,7573 }, + + { 125,7573 }, { 126,7573 }, { 127,7573 }, { 128,7573 }, { 129,7573 }, + { 130,7573 }, { 131,7573 }, { 132,7573 }, { 133,7573 }, { 134,7573 }, + { 135,7573 }, { 136,7573 }, { 137,7573 }, { 138,7573 }, { 139,7573 }, + { 140,7573 }, { 141,7573 }, { 142,7573 }, { 143,7573 }, { 144,7573 }, + { 145,7573 }, { 146,7573 }, { 147,7573 }, { 148,7573 }, { 149,7573 }, + { 150,7573 }, { 151,7573 }, { 152,7573 }, { 153,7573 }, { 154,7573 }, + { 155,7573 }, { 156,7573 }, { 157,7573 }, { 158,7573 }, { 159,7573 }, + { 160,7573 }, { 161,7573 }, { 162,7573 }, { 163,7573 }, { 164,7573 }, + { 165,7573 }, { 166,7573 }, { 167,7573 }, { 168,7573 }, { 169,7573 }, + { 170,7573 }, { 171,7573 }, { 172,7573 }, { 173,7573 }, { 174,7573 }, + + { 175,7573 }, { 176,7573 }, { 177,7573 }, { 178,7573 }, { 179,7573 }, + { 180,7573 }, { 181,7573 }, { 182,7573 }, { 183,7573 }, { 184,7573 }, + { 185,7573 }, { 186,7573 }, { 187,7573 }, { 188,7573 }, { 189,7573 }, + { 190,7573 }, { 191,7573 }, { 192,7573 }, { 193,7573 }, { 194,7573 }, + { 195,7573 }, { 196,7573 }, { 197,7573 }, { 198,7573 }, { 199,7573 }, + { 200,7573 }, { 201,7573 }, { 202,7573 }, { 203,7573 }, { 204,7573 }, + { 205,7573 }, { 206,7573 }, { 207,7573 }, { 208,7573 }, { 209,7573 }, + { 210,7573 }, { 211,7573 }, { 212,7573 }, { 213,7573 }, { 214,7573 }, + { 215,7573 }, { 216,7573 }, { 217,7573 }, { 218,7573 }, { 219,7573 }, + { 220,7573 }, { 221,7573 }, { 222,7573 }, { 223,7573 }, { 224,7573 }, + + { 225,7573 }, { 226,7573 }, { 227,7573 }, { 228,7573 }, { 229,7573 }, + { 230,7573 }, { 231,7573 }, { 232,7573 }, { 233,7573 }, { 234,7573 }, + { 235,7573 }, { 236,7573 }, { 237,7573 }, { 238,7573 }, { 239,7573 }, + { 240,7573 }, { 241,7573 }, { 242,7573 }, { 243,7573 }, { 244,7573 }, + { 245,7573 }, { 246,7573 }, { 247,7573 }, { 248,7573 }, { 249,7573 }, + { 250,7573 }, { 251,7573 }, { 252,7573 }, { 253,7573 }, { 254,7573 }, + { 255,7573 }, { 256,7573 }, { 0, 0 }, { 0,18965 }, { 1,7573 }, + { 2,7573 }, { 3,7573 }, { 4,7573 }, { 5,7573 }, { 6,7573 }, + { 7,7573 }, { 8,7573 }, { 9,7573 }, { 10,7573 }, { 11,7573 }, + { 12,7573 }, { 13,7573 }, { 14,7573 }, { 15,7573 }, { 16,7573 }, + + { 17,7573 }, { 18,7573 }, { 19,7573 }, { 20,7573 }, { 21,7573 }, + { 22,7573 }, { 23,7573 }, { 24,7573 }, { 25,7573 }, { 26,7573 }, + { 27,7573 }, { 28,7573 }, { 29,7573 }, { 30,7573 }, { 31,7573 }, + { 32,7573 }, { 33,7573 }, { 34,7573 }, { 35,7573 }, { 36,7573 }, + { 37,7573 }, { 38,7573 }, { 39,3670 }, { 40,7573 }, { 41,7573 }, + { 42,7573 }, { 43,7573 }, { 44,7573 }, { 45,7573 }, { 46,7573 }, + { 47,7573 }, { 48,7573 }, { 49,7573 }, { 50,7573 }, { 51,7573 }, + { 52,7573 }, { 53,7573 }, { 54,7573 }, { 55,7573 }, { 56,7573 }, + { 57,7573 }, { 58,7573 }, { 59,7573 }, { 60,7573 }, { 61,7573 }, + { 62,7573 }, { 63,7573 }, { 64,7573 }, { 65,7573 }, { 66,7573 }, + + { 67,7573 }, { 68,7573 }, { 69,7573 }, { 70,7573 }, { 71,7573 }, + { 72,7573 }, { 73,7573 }, { 74,7573 }, { 75,7573 }, { 76,7573 }, + { 77,7573 }, { 78,7573 }, { 79,7573 }, { 80,7573 }, { 81,7573 }, + { 82,7573 }, { 83,7573 }, { 84,7573 }, { 85,7573 }, { 86,7573 }, + { 87,7573 }, { 88,7573 }, { 89,7573 }, { 90,7573 }, { 91,7573 }, + { 92,7573 }, { 93,7573 }, { 94,7573 }, { 95,7573 }, { 96,7573 }, + { 97,7573 }, { 98,7573 }, { 99,7573 }, { 100,7573 }, { 101,7573 }, + { 102,7573 }, { 103,7573 }, { 104,7573 }, { 105,7573 }, { 106,7573 }, + { 107,7573 }, { 108,7573 }, { 109,7573 }, { 110,7573 }, { 111,7573 }, + { 112,7573 }, { 113,7573 }, { 114,7573 }, { 115,7573 }, { 116,7573 }, + + { 117,7573 }, { 118,7573 }, { 119,7573 }, { 120,7573 }, { 121,7573 }, + { 122,7573 }, { 123,7573 }, { 124,7573 }, { 125,7573 }, { 126,7573 }, + { 127,7573 }, { 128,7573 }, { 129,7573 }, { 130,7573 }, { 131,7573 }, + { 132,7573 }, { 133,7573 }, { 134,7573 }, { 135,7573 }, { 136,7573 }, + { 137,7573 }, { 138,7573 }, { 139,7573 }, { 140,7573 }, { 141,7573 }, + { 142,7573 }, { 143,7573 }, { 144,7573 }, { 145,7573 }, { 146,7573 }, + { 147,7573 }, { 148,7573 }, { 149,7573 }, { 150,7573 }, { 151,7573 }, + { 152,7573 }, { 153,7573 }, { 154,7573 }, { 155,7573 }, { 156,7573 }, + { 157,7573 }, { 158,7573 }, { 159,7573 }, { 160,7573 }, { 161,7573 }, + { 162,7573 }, { 163,7573 }, { 164,7573 }, { 165,7573 }, { 166,7573 }, + + { 167,7573 }, { 168,7573 }, { 169,7573 }, { 170,7573 }, { 171,7573 }, + { 172,7573 }, { 173,7573 }, { 174,7573 }, { 175,7573 }, { 176,7573 }, + { 177,7573 }, { 178,7573 }, { 179,7573 }, { 180,7573 }, { 181,7573 }, + { 182,7573 }, { 183,7573 }, { 184,7573 }, { 185,7573 }, { 186,7573 }, + { 187,7573 }, { 188,7573 }, { 189,7573 }, { 190,7573 }, { 191,7573 }, + { 192,7573 }, { 193,7573 }, { 194,7573 }, { 195,7573 }, { 196,7573 }, + { 197,7573 }, { 198,7573 }, { 199,7573 }, { 200,7573 }, { 201,7573 }, + { 202,7573 }, { 203,7573 }, { 204,7573 }, { 205,7573 }, { 206,7573 }, + { 207,7573 }, { 208,7573 }, { 209,7573 }, { 210,7573 }, { 211,7573 }, + { 212,7573 }, { 213,7573 }, { 214,7573 }, { 215,7573 }, { 216,7573 }, + + { 217,7573 }, { 218,7573 }, { 219,7573 }, { 220,7573 }, { 221,7573 }, + { 222,7573 }, { 223,7573 }, { 224,7573 }, { 225,7573 }, { 226,7573 }, + { 227,7573 }, { 228,7573 }, { 229,7573 }, { 230,7573 }, { 231,7573 }, + { 232,7573 }, { 233,7573 }, { 234,7573 }, { 235,7573 }, { 236,7573 }, + { 237,7573 }, { 238,7573 }, { 239,7573 }, { 240,7573 }, { 241,7573 }, + { 242,7573 }, { 243,7573 }, { 244,7573 }, { 245,7573 }, { 246,7573 }, + { 247,7573 }, { 248,7573 }, { 249,7573 }, { 250,7573 }, { 251,7573 }, + { 252,7573 }, { 253,7573 }, { 254,7573 }, { 255,7573 }, { 256,7573 }, + { 0, 0 }, { 0,18707 }, { 1,7315 }, { 2,7315 }, { 3,7315 }, + { 4,7315 }, { 5,7315 }, { 6,7315 }, { 7,7315 }, { 8,7315 }, + + { 9,7315 }, { 10,7315 }, { 11,7315 }, { 12,7315 }, { 13,7315 }, + { 14,7315 }, { 15,7315 }, { 16,7315 }, { 17,7315 }, { 18,7315 }, + { 19,7315 }, { 20,7315 }, { 21,7315 }, { 22,7315 }, { 23,7315 }, + { 24,7315 }, { 25,7315 }, { 26,7315 }, { 27,7315 }, { 28,7315 }, + { 29,7315 }, { 30,7315 }, { 31,7315 }, { 32,7315 }, { 33,7315 }, + { 34,7315 }, { 35,7315 }, { 36,7315 }, { 37,7315 }, { 38,7315 }, + { 39,3412 }, { 40,7315 }, { 41,7315 }, { 42,7315 }, { 43,7315 }, + { 44,7315 }, { 45,7315 }, { 46,7315 }, { 47,7315 }, { 48,7315 }, + { 49,7315 }, { 50,7315 }, { 51,7315 }, { 52,7315 }, { 53,7315 }, + { 54,7315 }, { 55,7315 }, { 56,7315 }, { 57,7315 }, { 58,7315 }, + + { 59,7315 }, { 60,7315 }, { 61,7315 }, { 62,7315 }, { 63,7315 }, + { 64,7315 }, { 65,7315 }, { 66,7315 }, { 67,7315 }, { 68,7315 }, + { 69,7315 }, { 70,7315 }, { 71,7315 }, { 72,7315 }, { 73,7315 }, + { 74,7315 }, { 75,7315 }, { 76,7315 }, { 77,7315 }, { 78,7315 }, + { 79,7315 }, { 80,7315 }, { 81,7315 }, { 82,7315 }, { 83,7315 }, + { 84,7315 }, { 85,7315 }, { 86,7315 }, { 87,7315 }, { 88,7315 }, + { 89,7315 }, { 90,7315 }, { 91,7315 }, { 92,7315 }, { 93,7315 }, + { 94,7315 }, { 95,7315 }, { 96,7315 }, { 97,7315 }, { 98,7315 }, + { 99,7315 }, { 100,7315 }, { 101,7315 }, { 102,7315 }, { 103,7315 }, + { 104,7315 }, { 105,7315 }, { 106,7315 }, { 107,7315 }, { 108,7315 }, + + { 109,7315 }, { 110,7315 }, { 111,7315 }, { 112,7315 }, { 113,7315 }, + { 114,7315 }, { 115,7315 }, { 116,7315 }, { 117,7315 }, { 118,7315 }, + { 119,7315 }, { 120,7315 }, { 121,7315 }, { 122,7315 }, { 123,7315 }, + { 124,7315 }, { 125,7315 }, { 126,7315 }, { 127,7315 }, { 128,7315 }, + { 129,7315 }, { 130,7315 }, { 131,7315 }, { 132,7315 }, { 133,7315 }, + { 134,7315 }, { 135,7315 }, { 136,7315 }, { 137,7315 }, { 138,7315 }, + { 139,7315 }, { 140,7315 }, { 141,7315 }, { 142,7315 }, { 143,7315 }, + { 144,7315 }, { 145,7315 }, { 146,7315 }, { 147,7315 }, { 148,7315 }, + { 149,7315 }, { 150,7315 }, { 151,7315 }, { 152,7315 }, { 153,7315 }, + { 154,7315 }, { 155,7315 }, { 156,7315 }, { 157,7315 }, { 158,7315 }, + + { 159,7315 }, { 160,7315 }, { 161,7315 }, { 162,7315 }, { 163,7315 }, + { 164,7315 }, { 165,7315 }, { 166,7315 }, { 167,7315 }, { 168,7315 }, + { 169,7315 }, { 170,7315 }, { 171,7315 }, { 172,7315 }, { 173,7315 }, + { 174,7315 }, { 175,7315 }, { 176,7315 }, { 177,7315 }, { 178,7315 }, + { 179,7315 }, { 180,7315 }, { 181,7315 }, { 182,7315 }, { 183,7315 }, + { 184,7315 }, { 185,7315 }, { 186,7315 }, { 187,7315 }, { 188,7315 }, + { 189,7315 }, { 190,7315 }, { 191,7315 }, { 192,7315 }, { 193,7315 }, + { 194,7315 }, { 195,7315 }, { 196,7315 }, { 197,7315 }, { 198,7315 }, + { 199,7315 }, { 200,7315 }, { 201,7315 }, { 202,7315 }, { 203,7315 }, + { 204,7315 }, { 205,7315 }, { 206,7315 }, { 207,7315 }, { 208,7315 }, + + { 209,7315 }, { 210,7315 }, { 211,7315 }, { 212,7315 }, { 213,7315 }, + { 214,7315 }, { 215,7315 }, { 216,7315 }, { 217,7315 }, { 218,7315 }, + { 219,7315 }, { 220,7315 }, { 221,7315 }, { 222,7315 }, { 223,7315 }, + { 224,7315 }, { 225,7315 }, { 226,7315 }, { 227,7315 }, { 228,7315 }, + { 229,7315 }, { 230,7315 }, { 231,7315 }, { 232,7315 }, { 233,7315 }, + { 234,7315 }, { 235,7315 }, { 236,7315 }, { 237,7315 }, { 238,7315 }, + { 239,7315 }, { 240,7315 }, { 241,7315 }, { 242,7315 }, { 243,7315 }, + { 244,7315 }, { 245,7315 }, { 246,7315 }, { 247,7315 }, { 248,7315 }, + { 249,7315 }, { 250,7315 }, { 251,7315 }, { 252,7315 }, { 253,7315 }, + { 254,7315 }, { 255,7315 }, { 256,7315 }, { 0, 19 }, { 0,18449 }, { 1,3156 }, { 2,3156 }, { 3,3156 }, { 4,3156 }, { 5,3156 }, - { 6,3156 }, { 7,3156 }, { 8,3156 }, { 9,6836 }, { 10,6841 }, - { 11,3156 }, { 12,6836 }, { 13,6857 }, { 14,3156 }, { 15,3156 }, + { 6,3156 }, { 7,3156 }, { 8,3156 }, { 9,7315 }, { 10,7320 }, + { 11,3156 }, { 12,7315 }, { 13,7336 }, { 14,3156 }, { 15,3156 }, { 16,3156 }, { 17,3156 }, { 18,3156 }, { 19,3156 }, { 20,3156 }, { 21,3156 }, { 22,3156 }, { 23,3156 }, { 24,3156 }, { 25,3156 }, { 26,3156 }, { 27,3156 }, { 28,3156 }, { 29,3156 }, { 30,3156 }, - { 31,3156 }, { 32,6836 }, { 33,3156 }, { 34,3156 }, { 35,3156 }, + { 31,3156 }, { 32,7315 }, { 33,3156 }, { 34,3156 }, { 35,3156 }, { 36,3156 }, { 37,3156 }, { 38,3156 }, { 39,3156 }, { 40,3156 }, { 41,3156 }, { 42,3156 }, { 43,3156 }, { 44,3156 }, { 45,3158 }, { 46,3156 }, { 47,3156 }, { 48,3156 }, { 49,3156 }, { 50,3156 }, @@ -1408,13 +1410,13 @@ static const struct yy_trans_info yy_transition[17678] = { 246,3156 }, { 247,3156 }, { 248,3156 }, { 249,3156 }, { 250,3156 }, { 251,3156 }, { 252,3156 }, { 253,3156 }, { 254,3156 }, { 255,3156 }, - { 256,3156 }, { 0, 19 }, { 0,14066 }, { 1,2898 }, { 2,2898 }, + { 256,3156 }, { 0, 19 }, { 0,18191 }, { 1,2898 }, { 2,2898 }, { 3,2898 }, { 4,2898 }, { 5,2898 }, { 6,2898 }, { 7,2898 }, - { 8,2898 }, { 9,6578 }, { 10,6583 }, { 11,2898 }, { 12,6578 }, - { 13,6599 }, { 14,2898 }, { 15,2898 }, { 16,2898 }, { 17,2898 }, + { 8,2898 }, { 9,7057 }, { 10,7062 }, { 11,2898 }, { 12,7057 }, + { 13,7078 }, { 14,2898 }, { 15,2898 }, { 16,2898 }, { 17,2898 }, { 18,2898 }, { 19,2898 }, { 20,2898 }, { 21,2898 }, { 22,2898 }, { 23,2898 }, { 24,2898 }, { 25,2898 }, { 26,2898 }, { 27,2898 }, - { 28,2898 }, { 29,2898 }, { 30,2898 }, { 31,2898 }, { 32,6578 }, + { 28,2898 }, { 29,2898 }, { 30,2898 }, { 31,2898 }, { 32,7057 }, { 33,2898 }, { 34,2898 }, { 35,2898 }, { 36,2898 }, { 37,2898 }, { 38,2898 }, { 39,2898 }, { 40,2898 }, { 41,2898 }, { 42,2898 }, @@ -1465,460 +1467,460 @@ static const struct yy_trans_info yy_transition[17678] = { 243,2898 }, { 244,2898 }, { 245,2898 }, { 246,2898 }, { 247,2898 }, { 248,2898 }, { 249,2898 }, { 250,2898 }, { 251,2898 }, { 252,2898 }, { 253,2898 }, { 254,2898 }, { 255,2898 }, { 256,2898 }, { 0, 0 }, - { 0,13808 }, { 1,6388 }, { 2,6388 }, { 3,6388 }, { 4,6388 }, - { 5,6388 }, { 6,6388 }, { 7,6388 }, { 8,6388 }, { 9,6388 }, - { 10,6646 }, { 11,6388 }, { 12,6388 }, { 13,6388 }, { 14,6388 }, - { 15,6388 }, { 16,6388 }, { 17,6388 }, { 18,6388 }, { 19,6388 }, - { 20,6388 }, { 21,6388 }, { 22,6388 }, { 23,6388 }, { 24,6388 }, - { 25,6388 }, { 26,6388 }, { 27,6388 }, { 28,6388 }, { 29,6388 }, - { 30,6388 }, { 31,6388 }, { 32,6388 }, { 33,6388 }, { 34,6388 }, - - { 35,6388 }, { 36,6388 }, { 37,6388 }, { 38,6388 }, { 39,2645 }, - { 40,6388 }, { 41,6388 }, { 42,6388 }, { 43,6388 }, { 44,6388 }, - { 45,6388 }, { 46,6388 }, { 47,6388 }, { 48,6388 }, { 49,6388 }, - { 50,6388 }, { 51,6388 }, { 52,6388 }, { 53,6388 }, { 54,6388 }, - { 55,6388 }, { 56,6388 }, { 57,6388 }, { 58,6388 }, { 59,6388 }, - { 60,6388 }, { 61,6388 }, { 62,6388 }, { 63,6388 }, { 64,6388 }, - { 65,6388 }, { 66,6388 }, { 67,6388 }, { 68,6388 }, { 69,6388 }, - { 70,6388 }, { 71,6388 }, { 72,6388 }, { 73,6388 }, { 74,6388 }, - { 75,6388 }, { 76,6388 }, { 77,6388 }, { 78,6388 }, { 79,6388 }, - { 80,6388 }, { 81,6388 }, { 82,6388 }, { 83,6388 }, { 84,6388 }, - - { 85,6388 }, { 86,6388 }, { 87,6388 }, { 88,6388 }, { 89,6388 }, - { 90,6388 }, { 91,6388 }, { 92,6904 }, { 93,6388 }, { 94,6388 }, - { 95,6388 }, { 96,6388 }, { 97,6388 }, { 98,6388 }, { 99,6388 }, - { 100,6388 }, { 101,6388 }, { 102,6388 }, { 103,6388 }, { 104,6388 }, - { 105,6388 }, { 106,6388 }, { 107,6388 }, { 108,6388 }, { 109,6388 }, - { 110,6388 }, { 111,6388 }, { 112,6388 }, { 113,6388 }, { 114,6388 }, - { 115,6388 }, { 116,6388 }, { 117,6388 }, { 118,6388 }, { 119,6388 }, - { 120,6388 }, { 121,6388 }, { 122,6388 }, { 123,6388 }, { 124,6388 }, - { 125,6388 }, { 126,6388 }, { 127,6388 }, { 128,6388 }, { 129,6388 }, - { 130,6388 }, { 131,6388 }, { 132,6388 }, { 133,6388 }, { 134,6388 }, - - { 135,6388 }, { 136,6388 }, { 137,6388 }, { 138,6388 }, { 139,6388 }, - { 140,6388 }, { 141,6388 }, { 142,6388 }, { 143,6388 }, { 144,6388 }, - { 145,6388 }, { 146,6388 }, { 147,6388 }, { 148,6388 }, { 149,6388 }, - { 150,6388 }, { 151,6388 }, { 152,6388 }, { 153,6388 }, { 154,6388 }, - { 155,6388 }, { 156,6388 }, { 157,6388 }, { 158,6388 }, { 159,6388 }, - { 160,6388 }, { 161,6388 }, { 162,6388 }, { 163,6388 }, { 164,6388 }, - { 165,6388 }, { 166,6388 }, { 167,6388 }, { 168,6388 }, { 169,6388 }, - { 170,6388 }, { 171,6388 }, { 172,6388 }, { 173,6388 }, { 174,6388 }, - { 175,6388 }, { 176,6388 }, { 177,6388 }, { 178,6388 }, { 179,6388 }, - { 180,6388 }, { 181,6388 }, { 182,6388 }, { 183,6388 }, { 184,6388 }, - - { 185,6388 }, { 186,6388 }, { 187,6388 }, { 188,6388 }, { 189,6388 }, - { 190,6388 }, { 191,6388 }, { 192,6388 }, { 193,6388 }, { 194,6388 }, - { 195,6388 }, { 196,6388 }, { 197,6388 }, { 198,6388 }, { 199,6388 }, - { 200,6388 }, { 201,6388 }, { 202,6388 }, { 203,6388 }, { 204,6388 }, - { 205,6388 }, { 206,6388 }, { 207,6388 }, { 208,6388 }, { 209,6388 }, - { 210,6388 }, { 211,6388 }, { 212,6388 }, { 213,6388 }, { 214,6388 }, - { 215,6388 }, { 216,6388 }, { 217,6388 }, { 218,6388 }, { 219,6388 }, - { 220,6388 }, { 221,6388 }, { 222,6388 }, { 223,6388 }, { 224,6388 }, - { 225,6388 }, { 226,6388 }, { 227,6388 }, { 228,6388 }, { 229,6388 }, - { 230,6388 }, { 231,6388 }, { 232,6388 }, { 233,6388 }, { 234,6388 }, - - { 235,6388 }, { 236,6388 }, { 237,6388 }, { 238,6388 }, { 239,6388 }, - { 240,6388 }, { 241,6388 }, { 242,6388 }, { 243,6388 }, { 244,6388 }, - { 245,6388 }, { 246,6388 }, { 247,6388 }, { 248,6388 }, { 249,6388 }, - { 250,6388 }, { 251,6388 }, { 252,6388 }, { 253,6388 }, { 254,6388 }, - { 255,6388 }, { 256,6388 }, { 0, 0 }, { 0,13550 }, { 1,6130 }, - { 2,6130 }, { 3,6130 }, { 4,6130 }, { 5,6130 }, { 6,6130 }, - { 7,6130 }, { 8,6130 }, { 9,6130 }, { 10,6388 }, { 11,6130 }, - { 12,6130 }, { 13,6130 }, { 14,6130 }, { 15,6130 }, { 16,6130 }, - { 17,6130 }, { 18,6130 }, { 19,6130 }, { 20,6130 }, { 21,6130 }, - { 22,6130 }, { 23,6130 }, { 24,6130 }, { 25,6130 }, { 26,6130 }, - - { 27,6130 }, { 28,6130 }, { 29,6130 }, { 30,6130 }, { 31,6130 }, - { 32,6130 }, { 33,6130 }, { 34,6130 }, { 35,6130 }, { 36,6130 }, - { 37,6130 }, { 38,6130 }, { 39,2387 }, { 40,6130 }, { 41,6130 }, - { 42,6130 }, { 43,6130 }, { 44,6130 }, { 45,6130 }, { 46,6130 }, - { 47,6130 }, { 48,6130 }, { 49,6130 }, { 50,6130 }, { 51,6130 }, - { 52,6130 }, { 53,6130 }, { 54,6130 }, { 55,6130 }, { 56,6130 }, - { 57,6130 }, { 58,6130 }, { 59,6130 }, { 60,6130 }, { 61,6130 }, - { 62,6130 }, { 63,6130 }, { 64,6130 }, { 65,6130 }, { 66,6130 }, - { 67,6130 }, { 68,6130 }, { 69,6130 }, { 70,6130 }, { 71,6130 }, - { 72,6130 }, { 73,6130 }, { 74,6130 }, { 75,6130 }, { 76,6130 }, - - { 77,6130 }, { 78,6130 }, { 79,6130 }, { 80,6130 }, { 81,6130 }, - { 82,6130 }, { 83,6130 }, { 84,6130 }, { 85,6130 }, { 86,6130 }, - { 87,6130 }, { 88,6130 }, { 89,6130 }, { 90,6130 }, { 91,6130 }, - { 92,6646 }, { 93,6130 }, { 94,6130 }, { 95,6130 }, { 96,6130 }, - { 97,6130 }, { 98,6130 }, { 99,6130 }, { 100,6130 }, { 101,6130 }, - { 102,6130 }, { 103,6130 }, { 104,6130 }, { 105,6130 }, { 106,6130 }, - { 107,6130 }, { 108,6130 }, { 109,6130 }, { 110,6130 }, { 111,6130 }, - { 112,6130 }, { 113,6130 }, { 114,6130 }, { 115,6130 }, { 116,6130 }, - { 117,6130 }, { 118,6130 }, { 119,6130 }, { 120,6130 }, { 121,6130 }, - { 122,6130 }, { 123,6130 }, { 124,6130 }, { 125,6130 }, { 126,6130 }, - - { 127,6130 }, { 128,6130 }, { 129,6130 }, { 130,6130 }, { 131,6130 }, - { 132,6130 }, { 133,6130 }, { 134,6130 }, { 135,6130 }, { 136,6130 }, - { 137,6130 }, { 138,6130 }, { 139,6130 }, { 140,6130 }, { 141,6130 }, - { 142,6130 }, { 143,6130 }, { 144,6130 }, { 145,6130 }, { 146,6130 }, - { 147,6130 }, { 148,6130 }, { 149,6130 }, { 150,6130 }, { 151,6130 }, - { 152,6130 }, { 153,6130 }, { 154,6130 }, { 155,6130 }, { 156,6130 }, - { 157,6130 }, { 158,6130 }, { 159,6130 }, { 160,6130 }, { 161,6130 }, - { 162,6130 }, { 163,6130 }, { 164,6130 }, { 165,6130 }, { 166,6130 }, - { 167,6130 }, { 168,6130 }, { 169,6130 }, { 170,6130 }, { 171,6130 }, - { 172,6130 }, { 173,6130 }, { 174,6130 }, { 175,6130 }, { 176,6130 }, - - { 177,6130 }, { 178,6130 }, { 179,6130 }, { 180,6130 }, { 181,6130 }, - { 182,6130 }, { 183,6130 }, { 184,6130 }, { 185,6130 }, { 186,6130 }, - { 187,6130 }, { 188,6130 }, { 189,6130 }, { 190,6130 }, { 191,6130 }, - { 192,6130 }, { 193,6130 }, { 194,6130 }, { 195,6130 }, { 196,6130 }, - { 197,6130 }, { 198,6130 }, { 199,6130 }, { 200,6130 }, { 201,6130 }, - { 202,6130 }, { 203,6130 }, { 204,6130 }, { 205,6130 }, { 206,6130 }, - { 207,6130 }, { 208,6130 }, { 209,6130 }, { 210,6130 }, { 211,6130 }, - { 212,6130 }, { 213,6130 }, { 214,6130 }, { 215,6130 }, { 216,6130 }, - { 217,6130 }, { 218,6130 }, { 219,6130 }, { 220,6130 }, { 221,6130 }, - { 222,6130 }, { 223,6130 }, { 224,6130 }, { 225,6130 }, { 226,6130 }, - - { 227,6130 }, { 228,6130 }, { 229,6130 }, { 230,6130 }, { 231,6130 }, - { 232,6130 }, { 233,6130 }, { 234,6130 }, { 235,6130 }, { 236,6130 }, - { 237,6130 }, { 238,6130 }, { 239,6130 }, { 240,6130 }, { 241,6130 }, - { 242,6130 }, { 243,6130 }, { 244,6130 }, { 245,6130 }, { 246,6130 }, - { 247,6130 }, { 248,6130 }, { 249,6130 }, { 250,6130 }, { 251,6130 }, - { 252,6130 }, { 253,6130 }, { 254,6130 }, { 255,6130 }, { 256,6130 }, - { 0, 0 }, { 0,13292 }, { 1,6646 }, { 2,6646 }, { 3,6646 }, - { 4,6646 }, { 5,6646 }, { 6,6646 }, { 7,6646 }, { 8,6646 }, - { 9,6646 }, { 10,6904 }, { 11,6646 }, { 12,6646 }, { 13,6646 }, - { 14,6646 }, { 15,6646 }, { 16,6646 }, { 17,6646 }, { 18,6646 }, - - { 19,6646 }, { 20,6646 }, { 21,6646 }, { 22,6646 }, { 23,6646 }, - { 24,6646 }, { 25,6646 }, { 26,6646 }, { 27,6646 }, { 28,6646 }, - { 29,6646 }, { 30,6646 }, { 31,6646 }, { 32,6646 }, { 33,6646 }, - { 34,6646 }, { 35,6646 }, { 36,7162 }, { 37,6646 }, { 38,6646 }, - { 39,6646 }, { 40,6646 }, { 41,6646 }, { 42,6646 }, { 43,6646 }, - { 44,6646 }, { 45,6646 }, { 46,6646 }, { 47,6646 }, { 48,6646 }, - { 49,6646 }, { 50,6646 }, { 51,6646 }, { 52,6646 }, { 53,6646 }, - { 54,6646 }, { 55,6646 }, { 56,6646 }, { 57,6646 }, { 58,6646 }, - { 59,6646 }, { 60,6646 }, { 61,6646 }, { 62,6646 }, { 63,6646 }, - { 64,6646 }, { 65,6646 }, { 66,6646 }, { 67,6646 }, { 68,6646 }, - - { 69,6646 }, { 70,6646 }, { 71,6646 }, { 72,6646 }, { 73,6646 }, - { 74,6646 }, { 75,6646 }, { 76,6646 }, { 77,6646 }, { 78,6646 }, - { 79,6646 }, { 80,6646 }, { 81,6646 }, { 82,6646 }, { 83,6646 }, - { 84,6646 }, { 85,6646 }, { 86,6646 }, { 87,6646 }, { 88,6646 }, - { 89,6646 }, { 90,6646 }, { 91,6646 }, { 92,6646 }, { 93,6646 }, - { 94,6646 }, { 95,6646 }, { 96,6646 }, { 97,6646 }, { 98,6646 }, - { 99,6646 }, { 100,6646 }, { 101,6646 }, { 102,6646 }, { 103,6646 }, - { 104,6646 }, { 105,6646 }, { 106,6646 }, { 107,6646 }, { 108,6646 }, - { 109,6646 }, { 110,6646 }, { 111,6646 }, { 112,6646 }, { 113,6646 }, - { 114,6646 }, { 115,6646 }, { 116,6646 }, { 117,6646 }, { 118,6646 }, - - { 119,6646 }, { 120,6646 }, { 121,6646 }, { 122,6646 }, { 123,6646 }, - { 124,6646 }, { 125,6646 }, { 126,6646 }, { 127,6646 }, { 128,6646 }, - { 129,6646 }, { 130,6646 }, { 131,6646 }, { 132,6646 }, { 133,6646 }, - { 134,6646 }, { 135,6646 }, { 136,6646 }, { 137,6646 }, { 138,6646 }, - { 139,6646 }, { 140,6646 }, { 141,6646 }, { 142,6646 }, { 143,6646 }, - { 144,6646 }, { 145,6646 }, { 146,6646 }, { 147,6646 }, { 148,6646 }, - { 149,6646 }, { 150,6646 }, { 151,6646 }, { 152,6646 }, { 153,6646 }, - { 154,6646 }, { 155,6646 }, { 156,6646 }, { 157,6646 }, { 158,6646 }, - { 159,6646 }, { 160,6646 }, { 161,6646 }, { 162,6646 }, { 163,6646 }, - { 164,6646 }, { 165,6646 }, { 166,6646 }, { 167,6646 }, { 168,6646 }, - - { 169,6646 }, { 170,6646 }, { 171,6646 }, { 172,6646 }, { 173,6646 }, - { 174,6646 }, { 175,6646 }, { 176,6646 }, { 177,6646 }, { 178,6646 }, - { 179,6646 }, { 180,6646 }, { 181,6646 }, { 182,6646 }, { 183,6646 }, - { 184,6646 }, { 185,6646 }, { 186,6646 }, { 187,6646 }, { 188,6646 }, - { 189,6646 }, { 190,6646 }, { 191,6646 }, { 192,6646 }, { 193,6646 }, - { 194,6646 }, { 195,6646 }, { 196,6646 }, { 197,6646 }, { 198,6646 }, - { 199,6646 }, { 200,6646 }, { 201,6646 }, { 202,6646 }, { 203,6646 }, - { 204,6646 }, { 205,6646 }, { 206,6646 }, { 207,6646 }, { 208,6646 }, - { 209,6646 }, { 210,6646 }, { 211,6646 }, { 212,6646 }, { 213,6646 }, - { 214,6646 }, { 215,6646 }, { 216,6646 }, { 217,6646 }, { 218,6646 }, - - { 219,6646 }, { 220,6646 }, { 221,6646 }, { 222,6646 }, { 223,6646 }, - { 224,6646 }, { 225,6646 }, { 226,6646 }, { 227,6646 }, { 228,6646 }, - { 229,6646 }, { 230,6646 }, { 231,6646 }, { 232,6646 }, { 233,6646 }, - { 234,6646 }, { 235,6646 }, { 236,6646 }, { 237,6646 }, { 238,6646 }, - { 239,6646 }, { 240,6646 }, { 241,6646 }, { 242,6646 }, { 243,6646 }, - { 244,6646 }, { 245,6646 }, { 246,6646 }, { 247,6646 }, { 248,6646 }, - { 249,6646 }, { 250,6646 }, { 251,6646 }, { 252,6646 }, { 253,6646 }, - { 254,6646 }, { 255,6646 }, { 256,6646 }, { 0, 0 }, { 0,13034 }, - { 1,6388 }, { 2,6388 }, { 3,6388 }, { 4,6388 }, { 5,6388 }, - { 6,6388 }, { 7,6388 }, { 8,6388 }, { 9,6388 }, { 10,6646 }, - - { 11,6388 }, { 12,6388 }, { 13,6388 }, { 14,6388 }, { 15,6388 }, - { 16,6388 }, { 17,6388 }, { 18,6388 }, { 19,6388 }, { 20,6388 }, - { 21,6388 }, { 22,6388 }, { 23,6388 }, { 24,6388 }, { 25,6388 }, - { 26,6388 }, { 27,6388 }, { 28,6388 }, { 29,6388 }, { 30,6388 }, - { 31,6388 }, { 32,6388 }, { 33,6388 }, { 34,6388 }, { 35,6388 }, - { 36,6904 }, { 37,6388 }, { 38,6388 }, { 39,6388 }, { 40,6388 }, - { 41,6388 }, { 42,6388 }, { 43,6388 }, { 44,6388 }, { 45,6388 }, - { 46,6388 }, { 47,6388 }, { 48,6388 }, { 49,6388 }, { 50,6388 }, - { 51,6388 }, { 52,6388 }, { 53,6388 }, { 54,6388 }, { 55,6388 }, - { 56,6388 }, { 57,6388 }, { 58,6388 }, { 59,6388 }, { 60,6388 }, - - { 61,6388 }, { 62,6388 }, { 63,6388 }, { 64,6388 }, { 65,6388 }, - { 66,6388 }, { 67,6388 }, { 68,6388 }, { 69,6388 }, { 70,6388 }, - { 71,6388 }, { 72,6388 }, { 73,6388 }, { 74,6388 }, { 75,6388 }, - { 76,6388 }, { 77,6388 }, { 78,6388 }, { 79,6388 }, { 80,6388 }, - { 81,6388 }, { 82,6388 }, { 83,6388 }, { 84,6388 }, { 85,6388 }, - { 86,6388 }, { 87,6388 }, { 88,6388 }, { 89,6388 }, { 90,6388 }, - { 91,6388 }, { 92,6388 }, { 93,6388 }, { 94,6388 }, { 95,6388 }, - { 96,6388 }, { 97,6388 }, { 98,6388 }, { 99,6388 }, { 100,6388 }, - { 101,6388 }, { 102,6388 }, { 103,6388 }, { 104,6388 }, { 105,6388 }, - { 106,6388 }, { 107,6388 }, { 108,6388 }, { 109,6388 }, { 110,6388 }, - - { 111,6388 }, { 112,6388 }, { 113,6388 }, { 114,6388 }, { 115,6388 }, - { 116,6388 }, { 117,6388 }, { 118,6388 }, { 119,6388 }, { 120,6388 }, - { 121,6388 }, { 122,6388 }, { 123,6388 }, { 124,6388 }, { 125,6388 }, - { 126,6388 }, { 127,6388 }, { 128,6388 }, { 129,6388 }, { 130,6388 }, - { 131,6388 }, { 132,6388 }, { 133,6388 }, { 134,6388 }, { 135,6388 }, - { 136,6388 }, { 137,6388 }, { 138,6388 }, { 139,6388 }, { 140,6388 }, - { 141,6388 }, { 142,6388 }, { 143,6388 }, { 144,6388 }, { 145,6388 }, - { 146,6388 }, { 147,6388 }, { 148,6388 }, { 149,6388 }, { 150,6388 }, - { 151,6388 }, { 152,6388 }, { 153,6388 }, { 154,6388 }, { 155,6388 }, - { 156,6388 }, { 157,6388 }, { 158,6388 }, { 159,6388 }, { 160,6388 }, - - { 161,6388 }, { 162,6388 }, { 163,6388 }, { 164,6388 }, { 165,6388 }, - { 166,6388 }, { 167,6388 }, { 168,6388 }, { 169,6388 }, { 170,6388 }, - { 171,6388 }, { 172,6388 }, { 173,6388 }, { 174,6388 }, { 175,6388 }, - { 176,6388 }, { 177,6388 }, { 178,6388 }, { 179,6388 }, { 180,6388 }, - { 181,6388 }, { 182,6388 }, { 183,6388 }, { 184,6388 }, { 185,6388 }, - { 186,6388 }, { 187,6388 }, { 188,6388 }, { 189,6388 }, { 190,6388 }, - { 191,6388 }, { 192,6388 }, { 193,6388 }, { 194,6388 }, { 195,6388 }, - { 196,6388 }, { 197,6388 }, { 198,6388 }, { 199,6388 }, { 200,6388 }, - { 201,6388 }, { 202,6388 }, { 203,6388 }, { 204,6388 }, { 205,6388 }, - { 206,6388 }, { 207,6388 }, { 208,6388 }, { 209,6388 }, { 210,6388 }, - - { 211,6388 }, { 212,6388 }, { 213,6388 }, { 214,6388 }, { 215,6388 }, - { 216,6388 }, { 217,6388 }, { 218,6388 }, { 219,6388 }, { 220,6388 }, - { 221,6388 }, { 222,6388 }, { 223,6388 }, { 224,6388 }, { 225,6388 }, - { 226,6388 }, { 227,6388 }, { 228,6388 }, { 229,6388 }, { 230,6388 }, - { 231,6388 }, { 232,6388 }, { 233,6388 }, { 234,6388 }, { 235,6388 }, - { 236,6388 }, { 237,6388 }, { 238,6388 }, { 239,6388 }, { 240,6388 }, - { 241,6388 }, { 242,6388 }, { 243,6388 }, { 244,6388 }, { 245,6388 }, - { 246,6388 }, { 247,6388 }, { 248,6388 }, { 249,6388 }, { 250,6388 }, - { 251,6388 }, { 252,6388 }, { 253,6388 }, { 254,6388 }, { 255,6388 }, - { 256,6388 }, { 0, 0 }, { 0,12776 }, { 1,4514 }, { 2,4514 }, - - { 3,4514 }, { 4,4514 }, { 5,4514 }, { 6,4514 }, { 7,4514 }, - { 8,4514 }, { 9,4514 }, { 10,4514 }, { 11,4514 }, { 12,4514 }, - { 13,4514 }, { 14,4514 }, { 15,4514 }, { 16,4514 }, { 17,4514 }, - { 18,4514 }, { 19,4514 }, { 20,4514 }, { 21,4514 }, { 22,4514 }, - { 23,4514 }, { 24,4514 }, { 25,4514 }, { 26,4514 }, { 27,4514 }, - { 28,4514 }, { 29,4514 }, { 30,4514 }, { 31,4514 }, { 32,4514 }, - { 33,4514 }, { 34,1615 }, { 35,4514 }, { 36,4514 }, { 37,4514 }, - { 38,4514 }, { 39,4514 }, { 40,4514 }, { 41,4514 }, { 42,4514 }, - { 43,4514 }, { 44,4514 }, { 45,4514 }, { 46,4514 }, { 47,4514 }, - { 48,4514 }, { 49,4514 }, { 50,4514 }, { 51,4514 }, { 52,4514 }, - - { 53,4514 }, { 54,4514 }, { 55,4514 }, { 56,4514 }, { 57,4514 }, - { 58,4514 }, { 59,4514 }, { 60,4514 }, { 61,4514 }, { 62,4514 }, - { 63,4514 }, { 64,4514 }, { 65,4514 }, { 66,4514 }, { 67,4514 }, - { 68,4514 }, { 69,4514 }, { 70,4514 }, { 71,4514 }, { 72,4514 }, - { 73,4514 }, { 74,4514 }, { 75,4514 }, { 76,4514 }, { 77,4514 }, - { 78,4514 }, { 79,4514 }, { 80,4514 }, { 81,4514 }, { 82,4514 }, - { 83,4514 }, { 84,4514 }, { 85,4514 }, { 86,4514 }, { 87,4514 }, - { 88,4514 }, { 89,4514 }, { 90,4514 }, { 91,4514 }, { 92,4514 }, - { 93,4514 }, { 94,4514 }, { 95,4514 }, { 96,4514 }, { 97,4514 }, - { 98,4514 }, { 99,4514 }, { 100,4514 }, { 101,4514 }, { 102,4514 }, - - { 103,4514 }, { 104,4514 }, { 105,4514 }, { 106,4514 }, { 107,4514 }, - { 108,4514 }, { 109,4514 }, { 110,4514 }, { 111,4514 }, { 112,4514 }, - { 113,4514 }, { 114,4514 }, { 115,4514 }, { 116,4514 }, { 117,4514 }, - { 118,4514 }, { 119,4514 }, { 120,4514 }, { 121,4514 }, { 122,4514 }, - { 123,4514 }, { 124,4514 }, { 125,4514 }, { 126,4514 }, { 127,4514 }, - { 128,4514 }, { 129,4514 }, { 130,4514 }, { 131,4514 }, { 132,4514 }, - { 133,4514 }, { 134,4514 }, { 135,4514 }, { 136,4514 }, { 137,4514 }, - { 138,4514 }, { 139,4514 }, { 140,4514 }, { 141,4514 }, { 142,4514 }, - { 143,4514 }, { 144,4514 }, { 145,4514 }, { 146,4514 }, { 147,4514 }, - { 148,4514 }, { 149,4514 }, { 150,4514 }, { 151,4514 }, { 152,4514 }, - - { 153,4514 }, { 154,4514 }, { 155,4514 }, { 156,4514 }, { 157,4514 }, - { 158,4514 }, { 159,4514 }, { 160,4514 }, { 161,4514 }, { 162,4514 }, - { 163,4514 }, { 164,4514 }, { 165,4514 }, { 166,4514 }, { 167,4514 }, - { 168,4514 }, { 169,4514 }, { 170,4514 }, { 171,4514 }, { 172,4514 }, - { 173,4514 }, { 174,4514 }, { 175,4514 }, { 176,4514 }, { 177,4514 }, - { 178,4514 }, { 179,4514 }, { 180,4514 }, { 181,4514 }, { 182,4514 }, - { 183,4514 }, { 184,4514 }, { 185,4514 }, { 186,4514 }, { 187,4514 }, - { 188,4514 }, { 189,4514 }, { 190,4514 }, { 191,4514 }, { 192,4514 }, - { 193,4514 }, { 194,4514 }, { 195,4514 }, { 196,4514 }, { 197,4514 }, - { 198,4514 }, { 199,4514 }, { 200,4514 }, { 201,4514 }, { 202,4514 }, - - { 203,4514 }, { 204,4514 }, { 205,4514 }, { 206,4514 }, { 207,4514 }, - { 208,4514 }, { 209,4514 }, { 210,4514 }, { 211,4514 }, { 212,4514 }, - { 213,4514 }, { 214,4514 }, { 215,4514 }, { 216,4514 }, { 217,4514 }, - { 218,4514 }, { 219,4514 }, { 220,4514 }, { 221,4514 }, { 222,4514 }, - { 223,4514 }, { 224,4514 }, { 225,4514 }, { 226,4514 }, { 227,4514 }, - { 228,4514 }, { 229,4514 }, { 230,4514 }, { 231,4514 }, { 232,4514 }, - { 233,4514 }, { 234,4514 }, { 235,4514 }, { 236,4514 }, { 237,4514 }, - { 238,4514 }, { 239,4514 }, { 240,4514 }, { 241,4514 }, { 242,4514 }, - { 243,4514 }, { 244,4514 }, { 245,4514 }, { 246,4514 }, { 247,4514 }, - { 248,4514 }, { 249,4514 }, { 250,4514 }, { 251,4514 }, { 252,4514 }, - - { 253,4514 }, { 254,4514 }, { 255,4514 }, { 256,4514 }, { 0, 0 }, - { 0,12518 }, { 1,4256 }, { 2,4256 }, { 3,4256 }, { 4,4256 }, - { 5,4256 }, { 6,4256 }, { 7,4256 }, { 8,4256 }, { 9,4256 }, - { 10,4256 }, { 11,4256 }, { 12,4256 }, { 13,4256 }, { 14,4256 }, - { 15,4256 }, { 16,4256 }, { 17,4256 }, { 18,4256 }, { 19,4256 }, - { 20,4256 }, { 21,4256 }, { 22,4256 }, { 23,4256 }, { 24,4256 }, - { 25,4256 }, { 26,4256 }, { 27,4256 }, { 28,4256 }, { 29,4256 }, - { 30,4256 }, { 31,4256 }, { 32,4256 }, { 33,4256 }, { 34,1357 }, - { 35,4256 }, { 36,4256 }, { 37,4256 }, { 38,4256 }, { 39,4256 }, - { 40,4256 }, { 41,4256 }, { 42,4256 }, { 43,4256 }, { 44,4256 }, - - { 45,4256 }, { 46,4256 }, { 47,4256 }, { 48,4256 }, { 49,4256 }, - { 50,4256 }, { 51,4256 }, { 52,4256 }, { 53,4256 }, { 54,4256 }, - { 55,4256 }, { 56,4256 }, { 57,4256 }, { 58,4256 }, { 59,4256 }, - { 60,4256 }, { 61,4256 }, { 62,4256 }, { 63,4256 }, { 64,4256 }, - { 65,4256 }, { 66,4256 }, { 67,4256 }, { 68,4256 }, { 69,4256 }, - { 70,4256 }, { 71,4256 }, { 72,4256 }, { 73,4256 }, { 74,4256 }, - { 75,4256 }, { 76,4256 }, { 77,4256 }, { 78,4256 }, { 79,4256 }, - { 80,4256 }, { 81,4256 }, { 82,4256 }, { 83,4256 }, { 84,4256 }, - { 85,4256 }, { 86,4256 }, { 87,4256 }, { 88,4256 }, { 89,4256 }, - { 90,4256 }, { 91,4256 }, { 92,4256 }, { 93,4256 }, { 94,4256 }, - - { 95,4256 }, { 96,4256 }, { 97,4256 }, { 98,4256 }, { 99,4256 }, - { 100,4256 }, { 101,4256 }, { 102,4256 }, { 103,4256 }, { 104,4256 }, - { 105,4256 }, { 106,4256 }, { 107,4256 }, { 108,4256 }, { 109,4256 }, - { 110,4256 }, { 111,4256 }, { 112,4256 }, { 113,4256 }, { 114,4256 }, - { 115,4256 }, { 116,4256 }, { 117,4256 }, { 118,4256 }, { 119,4256 }, - { 120,4256 }, { 121,4256 }, { 122,4256 }, { 123,4256 }, { 124,4256 }, - { 125,4256 }, { 126,4256 }, { 127,4256 }, { 128,4256 }, { 129,4256 }, - { 130,4256 }, { 131,4256 }, { 132,4256 }, { 133,4256 }, { 134,4256 }, - { 135,4256 }, { 136,4256 }, { 137,4256 }, { 138,4256 }, { 139,4256 }, - { 140,4256 }, { 141,4256 }, { 142,4256 }, { 143,4256 }, { 144,4256 }, - - { 145,4256 }, { 146,4256 }, { 147,4256 }, { 148,4256 }, { 149,4256 }, - { 150,4256 }, { 151,4256 }, { 152,4256 }, { 153,4256 }, { 154,4256 }, - { 155,4256 }, { 156,4256 }, { 157,4256 }, { 158,4256 }, { 159,4256 }, - { 160,4256 }, { 161,4256 }, { 162,4256 }, { 163,4256 }, { 164,4256 }, - { 165,4256 }, { 166,4256 }, { 167,4256 }, { 168,4256 }, { 169,4256 }, - { 170,4256 }, { 171,4256 }, { 172,4256 }, { 173,4256 }, { 174,4256 }, - { 175,4256 }, { 176,4256 }, { 177,4256 }, { 178,4256 }, { 179,4256 }, - { 180,4256 }, { 181,4256 }, { 182,4256 }, { 183,4256 }, { 184,4256 }, - { 185,4256 }, { 186,4256 }, { 187,4256 }, { 188,4256 }, { 189,4256 }, - { 190,4256 }, { 191,4256 }, { 192,4256 }, { 193,4256 }, { 194,4256 }, - - { 195,4256 }, { 196,4256 }, { 197,4256 }, { 198,4256 }, { 199,4256 }, - { 200,4256 }, { 201,4256 }, { 202,4256 }, { 203,4256 }, { 204,4256 }, - { 205,4256 }, { 206,4256 }, { 207,4256 }, { 208,4256 }, { 209,4256 }, - { 210,4256 }, { 211,4256 }, { 212,4256 }, { 213,4256 }, { 214,4256 }, - { 215,4256 }, { 216,4256 }, { 217,4256 }, { 218,4256 }, { 219,4256 }, - { 220,4256 }, { 221,4256 }, { 222,4256 }, { 223,4256 }, { 224,4256 }, - { 225,4256 }, { 226,4256 }, { 227,4256 }, { 228,4256 }, { 229,4256 }, - { 230,4256 }, { 231,4256 }, { 232,4256 }, { 233,4256 }, { 234,4256 }, - { 235,4256 }, { 236,4256 }, { 237,4256 }, { 238,4256 }, { 239,4256 }, - { 240,4256 }, { 241,4256 }, { 242,4256 }, { 243,4256 }, { 244,4256 }, - - { 245,4256 }, { 246,4256 }, { 247,4256 }, { 248,4256 }, { 249,4256 }, - { 250,4256 }, { 251,4256 }, { 252,4256 }, { 253,4256 }, { 254,4256 }, - { 255,4256 }, { 256,4256 }, { 0, 0 }, { 0,12260 }, { 1,4514 }, - { 2,4514 }, { 3,4514 }, { 4,4514 }, { 5,4514 }, { 6,4514 }, - { 7,4514 }, { 8,4514 }, { 9,4514 }, { 10,4514 }, { 11,4514 }, - { 12,4514 }, { 13,4514 }, { 14,4514 }, { 15,4514 }, { 16,4514 }, - { 17,4514 }, { 18,4514 }, { 19,4514 }, { 20,4514 }, { 21,4514 }, - { 22,4514 }, { 23,4514 }, { 24,4514 }, { 25,4514 }, { 26,4514 }, - { 27,4514 }, { 28,4514 }, { 29,4514 }, { 30,4514 }, { 31,4514 }, - { 32,4514 }, { 33,4514 }, { 34,4514 }, { 35,4514 }, { 36,4514 }, - - { 37,4514 }, { 38,4514 }, { 39,1090 }, { 40,4514 }, { 41,4514 }, - { 42,4514 }, { 43,4514 }, { 44,4514 }, { 45,4514 }, { 46,4514 }, - { 47,4514 }, { 48,4514 }, { 49,4514 }, { 50,4514 }, { 51,4514 }, - { 52,4514 }, { 53,4514 }, { 54,4514 }, { 55,4514 }, { 56,4514 }, - { 57,4514 }, { 58,4514 }, { 59,4514 }, { 60,4514 }, { 61,4514 }, - { 62,4514 }, { 63,4514 }, { 64,4514 }, { 65,4514 }, { 66,4514 }, - { 67,4514 }, { 68,4514 }, { 69,4514 }, { 70,4514 }, { 71,4514 }, - { 72,4514 }, { 73,4514 }, { 74,4514 }, { 75,4514 }, { 76,4514 }, - { 77,4514 }, { 78,4514 }, { 79,4514 }, { 80,4514 }, { 81,4514 }, - { 82,4514 }, { 83,4514 }, { 84,4514 }, { 85,4514 }, { 86,4514 }, - - { 87,4514 }, { 88,4514 }, { 89,4514 }, { 90,4514 }, { 91,4514 }, - { 92,4514 }, { 93,4514 }, { 94,4514 }, { 95,4514 }, { 96,4514 }, - { 97,4514 }, { 98,4514 }, { 99,4514 }, { 100,4514 }, { 101,4514 }, - { 102,4514 }, { 103,4514 }, { 104,4514 }, { 105,4514 }, { 106,4514 }, - { 107,4514 }, { 108,4514 }, { 109,4514 }, { 110,4514 }, { 111,4514 }, - { 112,4514 }, { 113,4514 }, { 114,4514 }, { 115,4514 }, { 116,4514 }, - { 117,4514 }, { 118,4514 }, { 119,4514 }, { 120,4514 }, { 121,4514 }, - { 122,4514 }, { 123,4514 }, { 124,4514 }, { 125,4514 }, { 126,4514 }, - { 127,4514 }, { 128,4514 }, { 129,4514 }, { 130,4514 }, { 131,4514 }, - { 132,4514 }, { 133,4514 }, { 134,4514 }, { 135,4514 }, { 136,4514 }, - - { 137,4514 }, { 138,4514 }, { 139,4514 }, { 140,4514 }, { 141,4514 }, - { 142,4514 }, { 143,4514 }, { 144,4514 }, { 145,4514 }, { 146,4514 }, - { 147,4514 }, { 148,4514 }, { 149,4514 }, { 150,4514 }, { 151,4514 }, - { 152,4514 }, { 153,4514 }, { 154,4514 }, { 155,4514 }, { 156,4514 }, - { 157,4514 }, { 158,4514 }, { 159,4514 }, { 160,4514 }, { 161,4514 }, - { 162,4514 }, { 163,4514 }, { 164,4514 }, { 165,4514 }, { 166,4514 }, - { 167,4514 }, { 168,4514 }, { 169,4514 }, { 170,4514 }, { 171,4514 }, - { 172,4514 }, { 173,4514 }, { 174,4514 }, { 175,4514 }, { 176,4514 }, - { 177,4514 }, { 178,4514 }, { 179,4514 }, { 180,4514 }, { 181,4514 }, - { 182,4514 }, { 183,4514 }, { 184,4514 }, { 185,4514 }, { 186,4514 }, - - { 187,4514 }, { 188,4514 }, { 189,4514 }, { 190,4514 }, { 191,4514 }, - { 192,4514 }, { 193,4514 }, { 194,4514 }, { 195,4514 }, { 196,4514 }, - { 197,4514 }, { 198,4514 }, { 199,4514 }, { 200,4514 }, { 201,4514 }, - { 202,4514 }, { 203,4514 }, { 204,4514 }, { 205,4514 }, { 206,4514 }, - { 207,4514 }, { 208,4514 }, { 209,4514 }, { 210,4514 }, { 211,4514 }, - { 212,4514 }, { 213,4514 }, { 214,4514 }, { 215,4514 }, { 216,4514 }, - { 217,4514 }, { 218,4514 }, { 219,4514 }, { 220,4514 }, { 221,4514 }, - { 222,4514 }, { 223,4514 }, { 224,4514 }, { 225,4514 }, { 226,4514 }, - { 227,4514 }, { 228,4514 }, { 229,4514 }, { 230,4514 }, { 231,4514 }, - { 232,4514 }, { 233,4514 }, { 234,4514 }, { 235,4514 }, { 236,4514 }, - - { 237,4514 }, { 238,4514 }, { 239,4514 }, { 240,4514 }, { 241,4514 }, - { 242,4514 }, { 243,4514 }, { 244,4514 }, { 245,4514 }, { 246,4514 }, - { 247,4514 }, { 248,4514 }, { 249,4514 }, { 250,4514 }, { 251,4514 }, - { 252,4514 }, { 253,4514 }, { 254,4514 }, { 255,4514 }, { 256,4514 }, - { 0, 0 }, { 0,12002 }, { 1,4256 }, { 2,4256 }, { 3,4256 }, - { 4,4256 }, { 5,4256 }, { 6,4256 }, { 7,4256 }, { 8,4256 }, - { 9,4256 }, { 10,4256 }, { 11,4256 }, { 12,4256 }, { 13,4256 }, - { 14,4256 }, { 15,4256 }, { 16,4256 }, { 17,4256 }, { 18,4256 }, - { 19,4256 }, { 20,4256 }, { 21,4256 }, { 22,4256 }, { 23,4256 }, - { 24,4256 }, { 25,4256 }, { 26,4256 }, { 27,4256 }, { 28,4256 }, - - { 29,4256 }, { 30,4256 }, { 31,4256 }, { 32,4256 }, { 33,4256 }, - { 34,4256 }, { 35,4256 }, { 36,4256 }, { 37,4256 }, { 38,4256 }, - { 39, 832 }, { 40,4256 }, { 41,4256 }, { 42,4256 }, { 43,4256 }, - { 44,4256 }, { 45,4256 }, { 46,4256 }, { 47,4256 }, { 48,4256 }, - { 49,4256 }, { 50,4256 }, { 51,4256 }, { 52,4256 }, { 53,4256 }, - { 54,4256 }, { 55,4256 }, { 56,4256 }, { 57,4256 }, { 58,4256 }, - { 59,4256 }, { 60,4256 }, { 61,4256 }, { 62,4256 }, { 63,4256 }, - { 64,4256 }, { 65,4256 }, { 66,4256 }, { 67,4256 }, { 68,4256 }, - { 69,4256 }, { 70,4256 }, { 71,4256 }, { 72,4256 }, { 73,4256 }, - { 74,4256 }, { 75,4256 }, { 76,4256 }, { 77,4256 }, { 78,4256 }, - - { 79,4256 }, { 80,4256 }, { 81,4256 }, { 82,4256 }, { 83,4256 }, - { 84,4256 }, { 85,4256 }, { 86,4256 }, { 87,4256 }, { 88,4256 }, - { 89,4256 }, { 90,4256 }, { 91,4256 }, { 92,4256 }, { 93,4256 }, - { 94,4256 }, { 95,4256 }, { 96,4256 }, { 97,4256 }, { 98,4256 }, - { 99,4256 }, { 100,4256 }, { 101,4256 }, { 102,4256 }, { 103,4256 }, - { 104,4256 }, { 105,4256 }, { 106,4256 }, { 107,4256 }, { 108,4256 }, - { 109,4256 }, { 110,4256 }, { 111,4256 }, { 112,4256 }, { 113,4256 }, - { 114,4256 }, { 115,4256 }, { 116,4256 }, { 117,4256 }, { 118,4256 }, - { 119,4256 }, { 120,4256 }, { 121,4256 }, { 122,4256 }, { 123,4256 }, - { 124,4256 }, { 125,4256 }, { 126,4256 }, { 127,4256 }, { 128,4256 }, - - { 129,4256 }, { 130,4256 }, { 131,4256 }, { 132,4256 }, { 133,4256 }, - { 134,4256 }, { 135,4256 }, { 136,4256 }, { 137,4256 }, { 138,4256 }, - { 139,4256 }, { 140,4256 }, { 141,4256 }, { 142,4256 }, { 143,4256 }, - { 144,4256 }, { 145,4256 }, { 146,4256 }, { 147,4256 }, { 148,4256 }, - { 149,4256 }, { 150,4256 }, { 151,4256 }, { 152,4256 }, { 153,4256 }, - { 154,4256 }, { 155,4256 }, { 156,4256 }, { 157,4256 }, { 158,4256 }, - { 159,4256 }, { 160,4256 }, { 161,4256 }, { 162,4256 }, { 163,4256 }, - { 164,4256 }, { 165,4256 }, { 166,4256 }, { 167,4256 }, { 168,4256 }, - { 169,4256 }, { 170,4256 }, { 171,4256 }, { 172,4256 }, { 173,4256 }, - { 174,4256 }, { 175,4256 }, { 176,4256 }, { 177,4256 }, { 178,4256 }, - - { 179,4256 }, { 180,4256 }, { 181,4256 }, { 182,4256 }, { 183,4256 }, - { 184,4256 }, { 185,4256 }, { 186,4256 }, { 187,4256 }, { 188,4256 }, - { 189,4256 }, { 190,4256 }, { 191,4256 }, { 192,4256 }, { 193,4256 }, - { 194,4256 }, { 195,4256 }, { 196,4256 }, { 197,4256 }, { 198,4256 }, - { 199,4256 }, { 200,4256 }, { 201,4256 }, { 202,4256 }, { 203,4256 }, - { 204,4256 }, { 205,4256 }, { 206,4256 }, { 207,4256 }, { 208,4256 }, - { 209,4256 }, { 210,4256 }, { 211,4256 }, { 212,4256 }, { 213,4256 }, - { 214,4256 }, { 215,4256 }, { 216,4256 }, { 217,4256 }, { 218,4256 }, - { 219,4256 }, { 220,4256 }, { 221,4256 }, { 222,4256 }, { 223,4256 }, - { 224,4256 }, { 225,4256 }, { 226,4256 }, { 227,4256 }, { 228,4256 }, - - { 229,4256 }, { 230,4256 }, { 231,4256 }, { 232,4256 }, { 233,4256 }, - { 234,4256 }, { 235,4256 }, { 236,4256 }, { 237,4256 }, { 238,4256 }, - { 239,4256 }, { 240,4256 }, { 241,4256 }, { 242,4256 }, { 243,4256 }, - { 244,4256 }, { 245,4256 }, { 246,4256 }, { 247,4256 }, { 248,4256 }, - { 249,4256 }, { 250,4256 }, { 251,4256 }, { 252,4256 }, { 253,4256 }, - { 254,4256 }, { 255,4256 }, { 256,4256 }, { 0, 0 }, { 0,11744 }, + { 0,17933 }, { 1,6867 }, { 2,6867 }, { 3,6867 }, { 4,6867 }, + { 5,6867 }, { 6,6867 }, { 7,6867 }, { 8,6867 }, { 9,6867 }, + { 10,7125 }, { 11,6867 }, { 12,6867 }, { 13,6867 }, { 14,6867 }, + { 15,6867 }, { 16,6867 }, { 17,6867 }, { 18,6867 }, { 19,6867 }, + { 20,6867 }, { 21,6867 }, { 22,6867 }, { 23,6867 }, { 24,6867 }, + { 25,6867 }, { 26,6867 }, { 27,6867 }, { 28,6867 }, { 29,6867 }, + { 30,6867 }, { 31,6867 }, { 32,6867 }, { 33,6867 }, { 34,6867 }, + + { 35,6867 }, { 36,6867 }, { 37,6867 }, { 38,6867 }, { 39,2645 }, + { 40,6867 }, { 41,6867 }, { 42,6867 }, { 43,6867 }, { 44,6867 }, + { 45,6867 }, { 46,6867 }, { 47,6867 }, { 48,6867 }, { 49,6867 }, + { 50,6867 }, { 51,6867 }, { 52,6867 }, { 53,6867 }, { 54,6867 }, + { 55,6867 }, { 56,6867 }, { 57,6867 }, { 58,6867 }, { 59,6867 }, + { 60,6867 }, { 61,6867 }, { 62,6867 }, { 63,6867 }, { 64,6867 }, + { 65,6867 }, { 66,6867 }, { 67,6867 }, { 68,6867 }, { 69,6867 }, + { 70,6867 }, { 71,6867 }, { 72,6867 }, { 73,6867 }, { 74,6867 }, + { 75,6867 }, { 76,6867 }, { 77,6867 }, { 78,6867 }, { 79,6867 }, + { 80,6867 }, { 81,6867 }, { 82,6867 }, { 83,6867 }, { 84,6867 }, + + { 85,6867 }, { 86,6867 }, { 87,6867 }, { 88,6867 }, { 89,6867 }, + { 90,6867 }, { 91,6867 }, { 92,7383 }, { 93,6867 }, { 94,6867 }, + { 95,6867 }, { 96,6867 }, { 97,6867 }, { 98,6867 }, { 99,6867 }, + { 100,6867 }, { 101,6867 }, { 102,6867 }, { 103,6867 }, { 104,6867 }, + { 105,6867 }, { 106,6867 }, { 107,6867 }, { 108,6867 }, { 109,6867 }, + { 110,6867 }, { 111,6867 }, { 112,6867 }, { 113,6867 }, { 114,6867 }, + { 115,6867 }, { 116,6867 }, { 117,6867 }, { 118,6867 }, { 119,6867 }, + { 120,6867 }, { 121,6867 }, { 122,6867 }, { 123,6867 }, { 124,6867 }, + { 125,6867 }, { 126,6867 }, { 127,6867 }, { 128,6867 }, { 129,6867 }, + { 130,6867 }, { 131,6867 }, { 132,6867 }, { 133,6867 }, { 134,6867 }, + + { 135,6867 }, { 136,6867 }, { 137,6867 }, { 138,6867 }, { 139,6867 }, + { 140,6867 }, { 141,6867 }, { 142,6867 }, { 143,6867 }, { 144,6867 }, + { 145,6867 }, { 146,6867 }, { 147,6867 }, { 148,6867 }, { 149,6867 }, + { 150,6867 }, { 151,6867 }, { 152,6867 }, { 153,6867 }, { 154,6867 }, + { 155,6867 }, { 156,6867 }, { 157,6867 }, { 158,6867 }, { 159,6867 }, + { 160,6867 }, { 161,6867 }, { 162,6867 }, { 163,6867 }, { 164,6867 }, + { 165,6867 }, { 166,6867 }, { 167,6867 }, { 168,6867 }, { 169,6867 }, + { 170,6867 }, { 171,6867 }, { 172,6867 }, { 173,6867 }, { 174,6867 }, + { 175,6867 }, { 176,6867 }, { 177,6867 }, { 178,6867 }, { 179,6867 }, + { 180,6867 }, { 181,6867 }, { 182,6867 }, { 183,6867 }, { 184,6867 }, + + { 185,6867 }, { 186,6867 }, { 187,6867 }, { 188,6867 }, { 189,6867 }, + { 190,6867 }, { 191,6867 }, { 192,6867 }, { 193,6867 }, { 194,6867 }, + { 195,6867 }, { 196,6867 }, { 197,6867 }, { 198,6867 }, { 199,6867 }, + { 200,6867 }, { 201,6867 }, { 202,6867 }, { 203,6867 }, { 204,6867 }, + { 205,6867 }, { 206,6867 }, { 207,6867 }, { 208,6867 }, { 209,6867 }, + { 210,6867 }, { 211,6867 }, { 212,6867 }, { 213,6867 }, { 214,6867 }, + { 215,6867 }, { 216,6867 }, { 217,6867 }, { 218,6867 }, { 219,6867 }, + { 220,6867 }, { 221,6867 }, { 222,6867 }, { 223,6867 }, { 224,6867 }, + { 225,6867 }, { 226,6867 }, { 227,6867 }, { 228,6867 }, { 229,6867 }, + { 230,6867 }, { 231,6867 }, { 232,6867 }, { 233,6867 }, { 234,6867 }, + + { 235,6867 }, { 236,6867 }, { 237,6867 }, { 238,6867 }, { 239,6867 }, + { 240,6867 }, { 241,6867 }, { 242,6867 }, { 243,6867 }, { 244,6867 }, + { 245,6867 }, { 246,6867 }, { 247,6867 }, { 248,6867 }, { 249,6867 }, + { 250,6867 }, { 251,6867 }, { 252,6867 }, { 253,6867 }, { 254,6867 }, + { 255,6867 }, { 256,6867 }, { 0, 0 }, { 0,17675 }, { 1,6609 }, + { 2,6609 }, { 3,6609 }, { 4,6609 }, { 5,6609 }, { 6,6609 }, + { 7,6609 }, { 8,6609 }, { 9,6609 }, { 10,6867 }, { 11,6609 }, + { 12,6609 }, { 13,6609 }, { 14,6609 }, { 15,6609 }, { 16,6609 }, + { 17,6609 }, { 18,6609 }, { 19,6609 }, { 20,6609 }, { 21,6609 }, + { 22,6609 }, { 23,6609 }, { 24,6609 }, { 25,6609 }, { 26,6609 }, + + { 27,6609 }, { 28,6609 }, { 29,6609 }, { 30,6609 }, { 31,6609 }, + { 32,6609 }, { 33,6609 }, { 34,6609 }, { 35,6609 }, { 36,6609 }, + { 37,6609 }, { 38,6609 }, { 39,2387 }, { 40,6609 }, { 41,6609 }, + { 42,6609 }, { 43,6609 }, { 44,6609 }, { 45,6609 }, { 46,6609 }, + { 47,6609 }, { 48,6609 }, { 49,6609 }, { 50,6609 }, { 51,6609 }, + { 52,6609 }, { 53,6609 }, { 54,6609 }, { 55,6609 }, { 56,6609 }, + { 57,6609 }, { 58,6609 }, { 59,6609 }, { 60,6609 }, { 61,6609 }, + { 62,6609 }, { 63,6609 }, { 64,6609 }, { 65,6609 }, { 66,6609 }, + { 67,6609 }, { 68,6609 }, { 69,6609 }, { 70,6609 }, { 71,6609 }, + { 72,6609 }, { 73,6609 }, { 74,6609 }, { 75,6609 }, { 76,6609 }, + + { 77,6609 }, { 78,6609 }, { 79,6609 }, { 80,6609 }, { 81,6609 }, + { 82,6609 }, { 83,6609 }, { 84,6609 }, { 85,6609 }, { 86,6609 }, + { 87,6609 }, { 88,6609 }, { 89,6609 }, { 90,6609 }, { 91,6609 }, + { 92,7125 }, { 93,6609 }, { 94,6609 }, { 95,6609 }, { 96,6609 }, + { 97,6609 }, { 98,6609 }, { 99,6609 }, { 100,6609 }, { 101,6609 }, + { 102,6609 }, { 103,6609 }, { 104,6609 }, { 105,6609 }, { 106,6609 }, + { 107,6609 }, { 108,6609 }, { 109,6609 }, { 110,6609 }, { 111,6609 }, + { 112,6609 }, { 113,6609 }, { 114,6609 }, { 115,6609 }, { 116,6609 }, + { 117,6609 }, { 118,6609 }, { 119,6609 }, { 120,6609 }, { 121,6609 }, + { 122,6609 }, { 123,6609 }, { 124,6609 }, { 125,6609 }, { 126,6609 }, + + { 127,6609 }, { 128,6609 }, { 129,6609 }, { 130,6609 }, { 131,6609 }, + { 132,6609 }, { 133,6609 }, { 134,6609 }, { 135,6609 }, { 136,6609 }, + { 137,6609 }, { 138,6609 }, { 139,6609 }, { 140,6609 }, { 141,6609 }, + { 142,6609 }, { 143,6609 }, { 144,6609 }, { 145,6609 }, { 146,6609 }, + { 147,6609 }, { 148,6609 }, { 149,6609 }, { 150,6609 }, { 151,6609 }, + { 152,6609 }, { 153,6609 }, { 154,6609 }, { 155,6609 }, { 156,6609 }, + { 157,6609 }, { 158,6609 }, { 159,6609 }, { 160,6609 }, { 161,6609 }, + { 162,6609 }, { 163,6609 }, { 164,6609 }, { 165,6609 }, { 166,6609 }, + { 167,6609 }, { 168,6609 }, { 169,6609 }, { 170,6609 }, { 171,6609 }, + { 172,6609 }, { 173,6609 }, { 174,6609 }, { 175,6609 }, { 176,6609 }, + + { 177,6609 }, { 178,6609 }, { 179,6609 }, { 180,6609 }, { 181,6609 }, + { 182,6609 }, { 183,6609 }, { 184,6609 }, { 185,6609 }, { 186,6609 }, + { 187,6609 }, { 188,6609 }, { 189,6609 }, { 190,6609 }, { 191,6609 }, + { 192,6609 }, { 193,6609 }, { 194,6609 }, { 195,6609 }, { 196,6609 }, + { 197,6609 }, { 198,6609 }, { 199,6609 }, { 200,6609 }, { 201,6609 }, + { 202,6609 }, { 203,6609 }, { 204,6609 }, { 205,6609 }, { 206,6609 }, + { 207,6609 }, { 208,6609 }, { 209,6609 }, { 210,6609 }, { 211,6609 }, + { 212,6609 }, { 213,6609 }, { 214,6609 }, { 215,6609 }, { 216,6609 }, + { 217,6609 }, { 218,6609 }, { 219,6609 }, { 220,6609 }, { 221,6609 }, + { 222,6609 }, { 223,6609 }, { 224,6609 }, { 225,6609 }, { 226,6609 }, + + { 227,6609 }, { 228,6609 }, { 229,6609 }, { 230,6609 }, { 231,6609 }, + { 232,6609 }, { 233,6609 }, { 234,6609 }, { 235,6609 }, { 236,6609 }, + { 237,6609 }, { 238,6609 }, { 239,6609 }, { 240,6609 }, { 241,6609 }, + { 242,6609 }, { 243,6609 }, { 244,6609 }, { 245,6609 }, { 246,6609 }, + { 247,6609 }, { 248,6609 }, { 249,6609 }, { 250,6609 }, { 251,6609 }, + { 252,6609 }, { 253,6609 }, { 254,6609 }, { 255,6609 }, { 256,6609 }, + { 0, 0 }, { 0,17417 }, { 1,7125 }, { 2,7125 }, { 3,7125 }, + { 4,7125 }, { 5,7125 }, { 6,7125 }, { 7,7125 }, { 8,7125 }, + { 9,7125 }, { 10,7383 }, { 11,7125 }, { 12,7125 }, { 13,7125 }, + { 14,7125 }, { 15,7125 }, { 16,7125 }, { 17,7125 }, { 18,7125 }, + + { 19,7125 }, { 20,7125 }, { 21,7125 }, { 22,7125 }, { 23,7125 }, + { 24,7125 }, { 25,7125 }, { 26,7125 }, { 27,7125 }, { 28,7125 }, + { 29,7125 }, { 30,7125 }, { 31,7125 }, { 32,7125 }, { 33,7125 }, + { 34,7125 }, { 35,7125 }, { 36,7641 }, { 37,7125 }, { 38,7125 }, + { 39,7125 }, { 40,7125 }, { 41,7125 }, { 42,7125 }, { 43,7125 }, + { 44,7125 }, { 45,7125 }, { 46,7125 }, { 47,7125 }, { 48,7125 }, + { 49,7125 }, { 50,7125 }, { 51,7125 }, { 52,7125 }, { 53,7125 }, + { 54,7125 }, { 55,7125 }, { 56,7125 }, { 57,7125 }, { 58,7125 }, + { 59,7125 }, { 60,7125 }, { 61,7125 }, { 62,7125 }, { 63,7125 }, + { 64,7125 }, { 65,7125 }, { 66,7125 }, { 67,7125 }, { 68,7125 }, + + { 69,7125 }, { 70,7125 }, { 71,7125 }, { 72,7125 }, { 73,7125 }, + { 74,7125 }, { 75,7125 }, { 76,7125 }, { 77,7125 }, { 78,7125 }, + { 79,7125 }, { 80,7125 }, { 81,7125 }, { 82,7125 }, { 83,7125 }, + { 84,7125 }, { 85,7125 }, { 86,7125 }, { 87,7125 }, { 88,7125 }, + { 89,7125 }, { 90,7125 }, { 91,7125 }, { 92,7125 }, { 93,7125 }, + { 94,7125 }, { 95,7125 }, { 96,7125 }, { 97,7125 }, { 98,7125 }, + { 99,7125 }, { 100,7125 }, { 101,7125 }, { 102,7125 }, { 103,7125 }, + { 104,7125 }, { 105,7125 }, { 106,7125 }, { 107,7125 }, { 108,7125 }, + { 109,7125 }, { 110,7125 }, { 111,7125 }, { 112,7125 }, { 113,7125 }, + { 114,7125 }, { 115,7125 }, { 116,7125 }, { 117,7125 }, { 118,7125 }, + + { 119,7125 }, { 120,7125 }, { 121,7125 }, { 122,7125 }, { 123,7125 }, + { 124,7125 }, { 125,7125 }, { 126,7125 }, { 127,7125 }, { 128,7125 }, + { 129,7125 }, { 130,7125 }, { 131,7125 }, { 132,7125 }, { 133,7125 }, + { 134,7125 }, { 135,7125 }, { 136,7125 }, { 137,7125 }, { 138,7125 }, + { 139,7125 }, { 140,7125 }, { 141,7125 }, { 142,7125 }, { 143,7125 }, + { 144,7125 }, { 145,7125 }, { 146,7125 }, { 147,7125 }, { 148,7125 }, + { 149,7125 }, { 150,7125 }, { 151,7125 }, { 152,7125 }, { 153,7125 }, + { 154,7125 }, { 155,7125 }, { 156,7125 }, { 157,7125 }, { 158,7125 }, + { 159,7125 }, { 160,7125 }, { 161,7125 }, { 162,7125 }, { 163,7125 }, + { 164,7125 }, { 165,7125 }, { 166,7125 }, { 167,7125 }, { 168,7125 }, + + { 169,7125 }, { 170,7125 }, { 171,7125 }, { 172,7125 }, { 173,7125 }, + { 174,7125 }, { 175,7125 }, { 176,7125 }, { 177,7125 }, { 178,7125 }, + { 179,7125 }, { 180,7125 }, { 181,7125 }, { 182,7125 }, { 183,7125 }, + { 184,7125 }, { 185,7125 }, { 186,7125 }, { 187,7125 }, { 188,7125 }, + { 189,7125 }, { 190,7125 }, { 191,7125 }, { 192,7125 }, { 193,7125 }, + { 194,7125 }, { 195,7125 }, { 196,7125 }, { 197,7125 }, { 198,7125 }, + { 199,7125 }, { 200,7125 }, { 201,7125 }, { 202,7125 }, { 203,7125 }, + { 204,7125 }, { 205,7125 }, { 206,7125 }, { 207,7125 }, { 208,7125 }, + { 209,7125 }, { 210,7125 }, { 211,7125 }, { 212,7125 }, { 213,7125 }, + { 214,7125 }, { 215,7125 }, { 216,7125 }, { 217,7125 }, { 218,7125 }, + + { 219,7125 }, { 220,7125 }, { 221,7125 }, { 222,7125 }, { 223,7125 }, + { 224,7125 }, { 225,7125 }, { 226,7125 }, { 227,7125 }, { 228,7125 }, + { 229,7125 }, { 230,7125 }, { 231,7125 }, { 232,7125 }, { 233,7125 }, + { 234,7125 }, { 235,7125 }, { 236,7125 }, { 237,7125 }, { 238,7125 }, + { 239,7125 }, { 240,7125 }, { 241,7125 }, { 242,7125 }, { 243,7125 }, + { 244,7125 }, { 245,7125 }, { 246,7125 }, { 247,7125 }, { 248,7125 }, + { 249,7125 }, { 250,7125 }, { 251,7125 }, { 252,7125 }, { 253,7125 }, + { 254,7125 }, { 255,7125 }, { 256,7125 }, { 0, 0 }, { 0,17159 }, + { 1,6867 }, { 2,6867 }, { 3,6867 }, { 4,6867 }, { 5,6867 }, + { 6,6867 }, { 7,6867 }, { 8,6867 }, { 9,6867 }, { 10,7125 }, + + { 11,6867 }, { 12,6867 }, { 13,6867 }, { 14,6867 }, { 15,6867 }, + { 16,6867 }, { 17,6867 }, { 18,6867 }, { 19,6867 }, { 20,6867 }, + { 21,6867 }, { 22,6867 }, { 23,6867 }, { 24,6867 }, { 25,6867 }, + { 26,6867 }, { 27,6867 }, { 28,6867 }, { 29,6867 }, { 30,6867 }, + { 31,6867 }, { 32,6867 }, { 33,6867 }, { 34,6867 }, { 35,6867 }, + { 36,7383 }, { 37,6867 }, { 38,6867 }, { 39,6867 }, { 40,6867 }, + { 41,6867 }, { 42,6867 }, { 43,6867 }, { 44,6867 }, { 45,6867 }, + { 46,6867 }, { 47,6867 }, { 48,6867 }, { 49,6867 }, { 50,6867 }, + { 51,6867 }, { 52,6867 }, { 53,6867 }, { 54,6867 }, { 55,6867 }, + { 56,6867 }, { 57,6867 }, { 58,6867 }, { 59,6867 }, { 60,6867 }, + + { 61,6867 }, { 62,6867 }, { 63,6867 }, { 64,6867 }, { 65,6867 }, + { 66,6867 }, { 67,6867 }, { 68,6867 }, { 69,6867 }, { 70,6867 }, + { 71,6867 }, { 72,6867 }, { 73,6867 }, { 74,6867 }, { 75,6867 }, + { 76,6867 }, { 77,6867 }, { 78,6867 }, { 79,6867 }, { 80,6867 }, + { 81,6867 }, { 82,6867 }, { 83,6867 }, { 84,6867 }, { 85,6867 }, + { 86,6867 }, { 87,6867 }, { 88,6867 }, { 89,6867 }, { 90,6867 }, + { 91,6867 }, { 92,6867 }, { 93,6867 }, { 94,6867 }, { 95,6867 }, + { 96,6867 }, { 97,6867 }, { 98,6867 }, { 99,6867 }, { 100,6867 }, + { 101,6867 }, { 102,6867 }, { 103,6867 }, { 104,6867 }, { 105,6867 }, + { 106,6867 }, { 107,6867 }, { 108,6867 }, { 109,6867 }, { 110,6867 }, + + { 111,6867 }, { 112,6867 }, { 113,6867 }, { 114,6867 }, { 115,6867 }, + { 116,6867 }, { 117,6867 }, { 118,6867 }, { 119,6867 }, { 120,6867 }, + { 121,6867 }, { 122,6867 }, { 123,6867 }, { 124,6867 }, { 125,6867 }, + { 126,6867 }, { 127,6867 }, { 128,6867 }, { 129,6867 }, { 130,6867 }, + { 131,6867 }, { 132,6867 }, { 133,6867 }, { 134,6867 }, { 135,6867 }, + { 136,6867 }, { 137,6867 }, { 138,6867 }, { 139,6867 }, { 140,6867 }, + { 141,6867 }, { 142,6867 }, { 143,6867 }, { 144,6867 }, { 145,6867 }, + { 146,6867 }, { 147,6867 }, { 148,6867 }, { 149,6867 }, { 150,6867 }, + { 151,6867 }, { 152,6867 }, { 153,6867 }, { 154,6867 }, { 155,6867 }, + { 156,6867 }, { 157,6867 }, { 158,6867 }, { 159,6867 }, { 160,6867 }, + + { 161,6867 }, { 162,6867 }, { 163,6867 }, { 164,6867 }, { 165,6867 }, + { 166,6867 }, { 167,6867 }, { 168,6867 }, { 169,6867 }, { 170,6867 }, + { 171,6867 }, { 172,6867 }, { 173,6867 }, { 174,6867 }, { 175,6867 }, + { 176,6867 }, { 177,6867 }, { 178,6867 }, { 179,6867 }, { 180,6867 }, + { 181,6867 }, { 182,6867 }, { 183,6867 }, { 184,6867 }, { 185,6867 }, + { 186,6867 }, { 187,6867 }, { 188,6867 }, { 189,6867 }, { 190,6867 }, + { 191,6867 }, { 192,6867 }, { 193,6867 }, { 194,6867 }, { 195,6867 }, + { 196,6867 }, { 197,6867 }, { 198,6867 }, { 199,6867 }, { 200,6867 }, + { 201,6867 }, { 202,6867 }, { 203,6867 }, { 204,6867 }, { 205,6867 }, + { 206,6867 }, { 207,6867 }, { 208,6867 }, { 209,6867 }, { 210,6867 }, + + { 211,6867 }, { 212,6867 }, { 213,6867 }, { 214,6867 }, { 215,6867 }, + { 216,6867 }, { 217,6867 }, { 218,6867 }, { 219,6867 }, { 220,6867 }, + { 221,6867 }, { 222,6867 }, { 223,6867 }, { 224,6867 }, { 225,6867 }, + { 226,6867 }, { 227,6867 }, { 228,6867 }, { 229,6867 }, { 230,6867 }, + { 231,6867 }, { 232,6867 }, { 233,6867 }, { 234,6867 }, { 235,6867 }, + { 236,6867 }, { 237,6867 }, { 238,6867 }, { 239,6867 }, { 240,6867 }, + { 241,6867 }, { 242,6867 }, { 243,6867 }, { 244,6867 }, { 245,6867 }, + { 246,6867 }, { 247,6867 }, { 248,6867 }, { 249,6867 }, { 250,6867 }, + { 251,6867 }, { 252,6867 }, { 253,6867 }, { 254,6867 }, { 255,6867 }, + { 256,6867 }, { 0, 0 }, { 0,16901 }, { 1,4993 }, { 2,4993 }, + + { 3,4993 }, { 4,4993 }, { 5,4993 }, { 6,4993 }, { 7,4993 }, + { 8,4993 }, { 9,4993 }, { 10,4993 }, { 11,4993 }, { 12,4993 }, + { 13,4993 }, { 14,4993 }, { 15,4993 }, { 16,4993 }, { 17,4993 }, + { 18,4993 }, { 19,4993 }, { 20,4993 }, { 21,4993 }, { 22,4993 }, + { 23,4993 }, { 24,4993 }, { 25,4993 }, { 26,4993 }, { 27,4993 }, + { 28,4993 }, { 29,4993 }, { 30,4993 }, { 31,4993 }, { 32,4993 }, + { 33,4993 }, { 34,1615 }, { 35,4993 }, { 36,4993 }, { 37,4993 }, + { 38,4993 }, { 39,4993 }, { 40,4993 }, { 41,4993 }, { 42,4993 }, + { 43,4993 }, { 44,4993 }, { 45,4993 }, { 46,4993 }, { 47,4993 }, + { 48,4993 }, { 49,4993 }, { 50,4993 }, { 51,4993 }, { 52,4993 }, + + { 53,4993 }, { 54,4993 }, { 55,4993 }, { 56,4993 }, { 57,4993 }, + { 58,4993 }, { 59,4993 }, { 60,4993 }, { 61,4993 }, { 62,4993 }, + { 63,4993 }, { 64,4993 }, { 65,4993 }, { 66,4993 }, { 67,4993 }, + { 68,4993 }, { 69,4993 }, { 70,4993 }, { 71,4993 }, { 72,4993 }, + { 73,4993 }, { 74,4993 }, { 75,4993 }, { 76,4993 }, { 77,4993 }, + { 78,4993 }, { 79,4993 }, { 80,4993 }, { 81,4993 }, { 82,4993 }, + { 83,4993 }, { 84,4993 }, { 85,4993 }, { 86,4993 }, { 87,4993 }, + { 88,4993 }, { 89,4993 }, { 90,4993 }, { 91,4993 }, { 92,4993 }, + { 93,4993 }, { 94,4993 }, { 95,4993 }, { 96,4993 }, { 97,4993 }, + { 98,4993 }, { 99,4993 }, { 100,4993 }, { 101,4993 }, { 102,4993 }, + + { 103,4993 }, { 104,4993 }, { 105,4993 }, { 106,4993 }, { 107,4993 }, + { 108,4993 }, { 109,4993 }, { 110,4993 }, { 111,4993 }, { 112,4993 }, + { 113,4993 }, { 114,4993 }, { 115,4993 }, { 116,4993 }, { 117,4993 }, + { 118,4993 }, { 119,4993 }, { 120,4993 }, { 121,4993 }, { 122,4993 }, + { 123,4993 }, { 124,4993 }, { 125,4993 }, { 126,4993 }, { 127,4993 }, + { 128,4993 }, { 129,4993 }, { 130,4993 }, { 131,4993 }, { 132,4993 }, + { 133,4993 }, { 134,4993 }, { 135,4993 }, { 136,4993 }, { 137,4993 }, + { 138,4993 }, { 139,4993 }, { 140,4993 }, { 141,4993 }, { 142,4993 }, + { 143,4993 }, { 144,4993 }, { 145,4993 }, { 146,4993 }, { 147,4993 }, + { 148,4993 }, { 149,4993 }, { 150,4993 }, { 151,4993 }, { 152,4993 }, + + { 153,4993 }, { 154,4993 }, { 155,4993 }, { 156,4993 }, { 157,4993 }, + { 158,4993 }, { 159,4993 }, { 160,4993 }, { 161,4993 }, { 162,4993 }, + { 163,4993 }, { 164,4993 }, { 165,4993 }, { 166,4993 }, { 167,4993 }, + { 168,4993 }, { 169,4993 }, { 170,4993 }, { 171,4993 }, { 172,4993 }, + { 173,4993 }, { 174,4993 }, { 175,4993 }, { 176,4993 }, { 177,4993 }, + { 178,4993 }, { 179,4993 }, { 180,4993 }, { 181,4993 }, { 182,4993 }, + { 183,4993 }, { 184,4993 }, { 185,4993 }, { 186,4993 }, { 187,4993 }, + { 188,4993 }, { 189,4993 }, { 190,4993 }, { 191,4993 }, { 192,4993 }, + { 193,4993 }, { 194,4993 }, { 195,4993 }, { 196,4993 }, { 197,4993 }, + { 198,4993 }, { 199,4993 }, { 200,4993 }, { 201,4993 }, { 202,4993 }, + + { 203,4993 }, { 204,4993 }, { 205,4993 }, { 206,4993 }, { 207,4993 }, + { 208,4993 }, { 209,4993 }, { 210,4993 }, { 211,4993 }, { 212,4993 }, + { 213,4993 }, { 214,4993 }, { 215,4993 }, { 216,4993 }, { 217,4993 }, + { 218,4993 }, { 219,4993 }, { 220,4993 }, { 221,4993 }, { 222,4993 }, + { 223,4993 }, { 224,4993 }, { 225,4993 }, { 226,4993 }, { 227,4993 }, + { 228,4993 }, { 229,4993 }, { 230,4993 }, { 231,4993 }, { 232,4993 }, + { 233,4993 }, { 234,4993 }, { 235,4993 }, { 236,4993 }, { 237,4993 }, + { 238,4993 }, { 239,4993 }, { 240,4993 }, { 241,4993 }, { 242,4993 }, + { 243,4993 }, { 244,4993 }, { 245,4993 }, { 246,4993 }, { 247,4993 }, + { 248,4993 }, { 249,4993 }, { 250,4993 }, { 251,4993 }, { 252,4993 }, + + { 253,4993 }, { 254,4993 }, { 255,4993 }, { 256,4993 }, { 0, 0 }, + { 0,16643 }, { 1,4735 }, { 2,4735 }, { 3,4735 }, { 4,4735 }, + { 5,4735 }, { 6,4735 }, { 7,4735 }, { 8,4735 }, { 9,4735 }, + { 10,4735 }, { 11,4735 }, { 12,4735 }, { 13,4735 }, { 14,4735 }, + { 15,4735 }, { 16,4735 }, { 17,4735 }, { 18,4735 }, { 19,4735 }, + { 20,4735 }, { 21,4735 }, { 22,4735 }, { 23,4735 }, { 24,4735 }, + { 25,4735 }, { 26,4735 }, { 27,4735 }, { 28,4735 }, { 29,4735 }, + { 30,4735 }, { 31,4735 }, { 32,4735 }, { 33,4735 }, { 34,1357 }, + { 35,4735 }, { 36,4735 }, { 37,4735 }, { 38,4735 }, { 39,4735 }, + { 40,4735 }, { 41,4735 }, { 42,4735 }, { 43,4735 }, { 44,4735 }, + + { 45,4735 }, { 46,4735 }, { 47,4735 }, { 48,4735 }, { 49,4735 }, + { 50,4735 }, { 51,4735 }, { 52,4735 }, { 53,4735 }, { 54,4735 }, + { 55,4735 }, { 56,4735 }, { 57,4735 }, { 58,4735 }, { 59,4735 }, + { 60,4735 }, { 61,4735 }, { 62,4735 }, { 63,4735 }, { 64,4735 }, + { 65,4735 }, { 66,4735 }, { 67,4735 }, { 68,4735 }, { 69,4735 }, + { 70,4735 }, { 71,4735 }, { 72,4735 }, { 73,4735 }, { 74,4735 }, + { 75,4735 }, { 76,4735 }, { 77,4735 }, { 78,4735 }, { 79,4735 }, + { 80,4735 }, { 81,4735 }, { 82,4735 }, { 83,4735 }, { 84,4735 }, + { 85,4735 }, { 86,4735 }, { 87,4735 }, { 88,4735 }, { 89,4735 }, + { 90,4735 }, { 91,4735 }, { 92,4735 }, { 93,4735 }, { 94,4735 }, + + { 95,4735 }, { 96,4735 }, { 97,4735 }, { 98,4735 }, { 99,4735 }, + { 100,4735 }, { 101,4735 }, { 102,4735 }, { 103,4735 }, { 104,4735 }, + { 105,4735 }, { 106,4735 }, { 107,4735 }, { 108,4735 }, { 109,4735 }, + { 110,4735 }, { 111,4735 }, { 112,4735 }, { 113,4735 }, { 114,4735 }, + { 115,4735 }, { 116,4735 }, { 117,4735 }, { 118,4735 }, { 119,4735 }, + { 120,4735 }, { 121,4735 }, { 122,4735 }, { 123,4735 }, { 124,4735 }, + { 125,4735 }, { 126,4735 }, { 127,4735 }, { 128,4735 }, { 129,4735 }, + { 130,4735 }, { 131,4735 }, { 132,4735 }, { 133,4735 }, { 134,4735 }, + { 135,4735 }, { 136,4735 }, { 137,4735 }, { 138,4735 }, { 139,4735 }, + { 140,4735 }, { 141,4735 }, { 142,4735 }, { 143,4735 }, { 144,4735 }, + + { 145,4735 }, { 146,4735 }, { 147,4735 }, { 148,4735 }, { 149,4735 }, + { 150,4735 }, { 151,4735 }, { 152,4735 }, { 153,4735 }, { 154,4735 }, + { 155,4735 }, { 156,4735 }, { 157,4735 }, { 158,4735 }, { 159,4735 }, + { 160,4735 }, { 161,4735 }, { 162,4735 }, { 163,4735 }, { 164,4735 }, + { 165,4735 }, { 166,4735 }, { 167,4735 }, { 168,4735 }, { 169,4735 }, + { 170,4735 }, { 171,4735 }, { 172,4735 }, { 173,4735 }, { 174,4735 }, + { 175,4735 }, { 176,4735 }, { 177,4735 }, { 178,4735 }, { 179,4735 }, + { 180,4735 }, { 181,4735 }, { 182,4735 }, { 183,4735 }, { 184,4735 }, + { 185,4735 }, { 186,4735 }, { 187,4735 }, { 188,4735 }, { 189,4735 }, + { 190,4735 }, { 191,4735 }, { 192,4735 }, { 193,4735 }, { 194,4735 }, + + { 195,4735 }, { 196,4735 }, { 197,4735 }, { 198,4735 }, { 199,4735 }, + { 200,4735 }, { 201,4735 }, { 202,4735 }, { 203,4735 }, { 204,4735 }, + { 205,4735 }, { 206,4735 }, { 207,4735 }, { 208,4735 }, { 209,4735 }, + { 210,4735 }, { 211,4735 }, { 212,4735 }, { 213,4735 }, { 214,4735 }, + { 215,4735 }, { 216,4735 }, { 217,4735 }, { 218,4735 }, { 219,4735 }, + { 220,4735 }, { 221,4735 }, { 222,4735 }, { 223,4735 }, { 224,4735 }, + { 225,4735 }, { 226,4735 }, { 227,4735 }, { 228,4735 }, { 229,4735 }, + { 230,4735 }, { 231,4735 }, { 232,4735 }, { 233,4735 }, { 234,4735 }, + { 235,4735 }, { 236,4735 }, { 237,4735 }, { 238,4735 }, { 239,4735 }, + { 240,4735 }, { 241,4735 }, { 242,4735 }, { 243,4735 }, { 244,4735 }, + + { 245,4735 }, { 246,4735 }, { 247,4735 }, { 248,4735 }, { 249,4735 }, + { 250,4735 }, { 251,4735 }, { 252,4735 }, { 253,4735 }, { 254,4735 }, + { 255,4735 }, { 256,4735 }, { 0, 0 }, { 0,16385 }, { 1,4993 }, + { 2,4993 }, { 3,4993 }, { 4,4993 }, { 5,4993 }, { 6,4993 }, + { 7,4993 }, { 8,4993 }, { 9,4993 }, { 10,4993 }, { 11,4993 }, + { 12,4993 }, { 13,4993 }, { 14,4993 }, { 15,4993 }, { 16,4993 }, + { 17,4993 }, { 18,4993 }, { 19,4993 }, { 20,4993 }, { 21,4993 }, + { 22,4993 }, { 23,4993 }, { 24,4993 }, { 25,4993 }, { 26,4993 }, + { 27,4993 }, { 28,4993 }, { 29,4993 }, { 30,4993 }, { 31,4993 }, + { 32,4993 }, { 33,4993 }, { 34,4993 }, { 35,4993 }, { 36,4993 }, + + { 37,4993 }, { 38,4993 }, { 39,1090 }, { 40,4993 }, { 41,4993 }, + { 42,4993 }, { 43,4993 }, { 44,4993 }, { 45,4993 }, { 46,4993 }, + { 47,4993 }, { 48,4993 }, { 49,4993 }, { 50,4993 }, { 51,4993 }, + { 52,4993 }, { 53,4993 }, { 54,4993 }, { 55,4993 }, { 56,4993 }, + { 57,4993 }, { 58,4993 }, { 59,4993 }, { 60,4993 }, { 61,4993 }, + { 62,4993 }, { 63,4993 }, { 64,4993 }, { 65,4993 }, { 66,4993 }, + { 67,4993 }, { 68,4993 }, { 69,4993 }, { 70,4993 }, { 71,4993 }, + { 72,4993 }, { 73,4993 }, { 74,4993 }, { 75,4993 }, { 76,4993 }, + { 77,4993 }, { 78,4993 }, { 79,4993 }, { 80,4993 }, { 81,4993 }, + { 82,4993 }, { 83,4993 }, { 84,4993 }, { 85,4993 }, { 86,4993 }, + + { 87,4993 }, { 88,4993 }, { 89,4993 }, { 90,4993 }, { 91,4993 }, + { 92,4993 }, { 93,4993 }, { 94,4993 }, { 95,4993 }, { 96,4993 }, + { 97,4993 }, { 98,4993 }, { 99,4993 }, { 100,4993 }, { 101,4993 }, + { 102,4993 }, { 103,4993 }, { 104,4993 }, { 105,4993 }, { 106,4993 }, + { 107,4993 }, { 108,4993 }, { 109,4993 }, { 110,4993 }, { 111,4993 }, + { 112,4993 }, { 113,4993 }, { 114,4993 }, { 115,4993 }, { 116,4993 }, + { 117,4993 }, { 118,4993 }, { 119,4993 }, { 120,4993 }, { 121,4993 }, + { 122,4993 }, { 123,4993 }, { 124,4993 }, { 125,4993 }, { 126,4993 }, + { 127,4993 }, { 128,4993 }, { 129,4993 }, { 130,4993 }, { 131,4993 }, + { 132,4993 }, { 133,4993 }, { 134,4993 }, { 135,4993 }, { 136,4993 }, + + { 137,4993 }, { 138,4993 }, { 139,4993 }, { 140,4993 }, { 141,4993 }, + { 142,4993 }, { 143,4993 }, { 144,4993 }, { 145,4993 }, { 146,4993 }, + { 147,4993 }, { 148,4993 }, { 149,4993 }, { 150,4993 }, { 151,4993 }, + { 152,4993 }, { 153,4993 }, { 154,4993 }, { 155,4993 }, { 156,4993 }, + { 157,4993 }, { 158,4993 }, { 159,4993 }, { 160,4993 }, { 161,4993 }, + { 162,4993 }, { 163,4993 }, { 164,4993 }, { 165,4993 }, { 166,4993 }, + { 167,4993 }, { 168,4993 }, { 169,4993 }, { 170,4993 }, { 171,4993 }, + { 172,4993 }, { 173,4993 }, { 174,4993 }, { 175,4993 }, { 176,4993 }, + { 177,4993 }, { 178,4993 }, { 179,4993 }, { 180,4993 }, { 181,4993 }, + { 182,4993 }, { 183,4993 }, { 184,4993 }, { 185,4993 }, { 186,4993 }, + + { 187,4993 }, { 188,4993 }, { 189,4993 }, { 190,4993 }, { 191,4993 }, + { 192,4993 }, { 193,4993 }, { 194,4993 }, { 195,4993 }, { 196,4993 }, + { 197,4993 }, { 198,4993 }, { 199,4993 }, { 200,4993 }, { 201,4993 }, + { 202,4993 }, { 203,4993 }, { 204,4993 }, { 205,4993 }, { 206,4993 }, + { 207,4993 }, { 208,4993 }, { 209,4993 }, { 210,4993 }, { 211,4993 }, + { 212,4993 }, { 213,4993 }, { 214,4993 }, { 215,4993 }, { 216,4993 }, + { 217,4993 }, { 218,4993 }, { 219,4993 }, { 220,4993 }, { 221,4993 }, + { 222,4993 }, { 223,4993 }, { 224,4993 }, { 225,4993 }, { 226,4993 }, + { 227,4993 }, { 228,4993 }, { 229,4993 }, { 230,4993 }, { 231,4993 }, + { 232,4993 }, { 233,4993 }, { 234,4993 }, { 235,4993 }, { 236,4993 }, + + { 237,4993 }, { 238,4993 }, { 239,4993 }, { 240,4993 }, { 241,4993 }, + { 242,4993 }, { 243,4993 }, { 244,4993 }, { 245,4993 }, { 246,4993 }, + { 247,4993 }, { 248,4993 }, { 249,4993 }, { 250,4993 }, { 251,4993 }, + { 252,4993 }, { 253,4993 }, { 254,4993 }, { 255,4993 }, { 256,4993 }, + { 0, 0 }, { 0,16127 }, { 1,4735 }, { 2,4735 }, { 3,4735 }, + { 4,4735 }, { 5,4735 }, { 6,4735 }, { 7,4735 }, { 8,4735 }, + { 9,4735 }, { 10,4735 }, { 11,4735 }, { 12,4735 }, { 13,4735 }, + { 14,4735 }, { 15,4735 }, { 16,4735 }, { 17,4735 }, { 18,4735 }, + { 19,4735 }, { 20,4735 }, { 21,4735 }, { 22,4735 }, { 23,4735 }, + { 24,4735 }, { 25,4735 }, { 26,4735 }, { 27,4735 }, { 28,4735 }, + + { 29,4735 }, { 30,4735 }, { 31,4735 }, { 32,4735 }, { 33,4735 }, + { 34,4735 }, { 35,4735 }, { 36,4735 }, { 37,4735 }, { 38,4735 }, + { 39, 832 }, { 40,4735 }, { 41,4735 }, { 42,4735 }, { 43,4735 }, + { 44,4735 }, { 45,4735 }, { 46,4735 }, { 47,4735 }, { 48,4735 }, + { 49,4735 }, { 50,4735 }, { 51,4735 }, { 52,4735 }, { 53,4735 }, + { 54,4735 }, { 55,4735 }, { 56,4735 }, { 57,4735 }, { 58,4735 }, + { 59,4735 }, { 60,4735 }, { 61,4735 }, { 62,4735 }, { 63,4735 }, + { 64,4735 }, { 65,4735 }, { 66,4735 }, { 67,4735 }, { 68,4735 }, + { 69,4735 }, { 70,4735 }, { 71,4735 }, { 72,4735 }, { 73,4735 }, + { 74,4735 }, { 75,4735 }, { 76,4735 }, { 77,4735 }, { 78,4735 }, + + { 79,4735 }, { 80,4735 }, { 81,4735 }, { 82,4735 }, { 83,4735 }, + { 84,4735 }, { 85,4735 }, { 86,4735 }, { 87,4735 }, { 88,4735 }, + { 89,4735 }, { 90,4735 }, { 91,4735 }, { 92,4735 }, { 93,4735 }, + { 94,4735 }, { 95,4735 }, { 96,4735 }, { 97,4735 }, { 98,4735 }, + { 99,4735 }, { 100,4735 }, { 101,4735 }, { 102,4735 }, { 103,4735 }, + { 104,4735 }, { 105,4735 }, { 106,4735 }, { 107,4735 }, { 108,4735 }, + { 109,4735 }, { 110,4735 }, { 111,4735 }, { 112,4735 }, { 113,4735 }, + { 114,4735 }, { 115,4735 }, { 116,4735 }, { 117,4735 }, { 118,4735 }, + { 119,4735 }, { 120,4735 }, { 121,4735 }, { 122,4735 }, { 123,4735 }, + { 124,4735 }, { 125,4735 }, { 126,4735 }, { 127,4735 }, { 128,4735 }, + + { 129,4735 }, { 130,4735 }, { 131,4735 }, { 132,4735 }, { 133,4735 }, + { 134,4735 }, { 135,4735 }, { 136,4735 }, { 137,4735 }, { 138,4735 }, + { 139,4735 }, { 140,4735 }, { 141,4735 }, { 142,4735 }, { 143,4735 }, + { 144,4735 }, { 145,4735 }, { 146,4735 }, { 147,4735 }, { 148,4735 }, + { 149,4735 }, { 150,4735 }, { 151,4735 }, { 152,4735 }, { 153,4735 }, + { 154,4735 }, { 155,4735 }, { 156,4735 }, { 157,4735 }, { 158,4735 }, + { 159,4735 }, { 160,4735 }, { 161,4735 }, { 162,4735 }, { 163,4735 }, + { 164,4735 }, { 165,4735 }, { 166,4735 }, { 167,4735 }, { 168,4735 }, + { 169,4735 }, { 170,4735 }, { 171,4735 }, { 172,4735 }, { 173,4735 }, + { 174,4735 }, { 175,4735 }, { 176,4735 }, { 177,4735 }, { 178,4735 }, + + { 179,4735 }, { 180,4735 }, { 181,4735 }, { 182,4735 }, { 183,4735 }, + { 184,4735 }, { 185,4735 }, { 186,4735 }, { 187,4735 }, { 188,4735 }, + { 189,4735 }, { 190,4735 }, { 191,4735 }, { 192,4735 }, { 193,4735 }, + { 194,4735 }, { 195,4735 }, { 196,4735 }, { 197,4735 }, { 198,4735 }, + { 199,4735 }, { 200,4735 }, { 201,4735 }, { 202,4735 }, { 203,4735 }, + { 204,4735 }, { 205,4735 }, { 206,4735 }, { 207,4735 }, { 208,4735 }, + { 209,4735 }, { 210,4735 }, { 211,4735 }, { 212,4735 }, { 213,4735 }, + { 214,4735 }, { 215,4735 }, { 216,4735 }, { 217,4735 }, { 218,4735 }, + { 219,4735 }, { 220,4735 }, { 221,4735 }, { 222,4735 }, { 223,4735 }, + { 224,4735 }, { 225,4735 }, { 226,4735 }, { 227,4735 }, { 228,4735 }, + + { 229,4735 }, { 230,4735 }, { 231,4735 }, { 232,4735 }, { 233,4735 }, + { 234,4735 }, { 235,4735 }, { 236,4735 }, { 237,4735 }, { 238,4735 }, + { 239,4735 }, { 240,4735 }, { 241,4735 }, { 242,4735 }, { 243,4735 }, + { 244,4735 }, { 245,4735 }, { 246,4735 }, { 247,4735 }, { 248,4735 }, + { 249,4735 }, { 250,4735 }, { 251,4735 }, { 252,4735 }, { 253,4735 }, + { 254,4735 }, { 255,4735 }, { 256,4735 }, { 0, 0 }, { 0,15869 }, { 1, 593 }, { 2, 593 }, { 3, 593 }, { 4, 593 }, { 5, 593 }, { 6, 593 }, { 7, 593 }, { 8, 593 }, { 9, 593 }, { 10, 597 }, { 11, 593 }, { 12, 593 }, { 13, 593 }, { 14, 593 }, { 15, 593 }, @@ -1975,7 +1977,7 @@ static const struct yy_trans_info yy_transition[17678] = { 241, 593 }, { 242, 593 }, { 243, 593 }, { 244, 593 }, { 245, 593 }, { 246, 593 }, { 247, 593 }, { 248, 593 }, { 249, 593 }, { 250, 593 }, { 251, 593 }, { 252, 593 }, { 253, 593 }, { 254, 593 }, { 255, 593 }, - { 256, 593 }, { 0, 0 }, { 0,11486 }, { 1, 335 }, { 2, 335 }, + { 256, 593 }, { 0, 0 }, { 0,15611 }, { 1, 335 }, { 2, 335 }, { 3, 335 }, { 4, 335 }, { 5, 335 }, { 6, 335 }, { 7, 335 }, { 8, 335 }, { 9, 335 }, { 10, 339 }, { 11, 335 }, { 12, 335 }, @@ -2031,1716 +2033,2055 @@ static const struct yy_trans_info yy_transition[17678] = { 238, 335 }, { 239, 335 }, { 240, 335 }, { 241, 335 }, { 242, 335 }, { 243, 335 }, { 244, 335 }, { 245, 335 }, { 246, 335 }, { 247, 335 }, { 248, 335 }, { 249, 335 }, { 250, 335 }, { 251, 335 }, { 252, 335 }, - { 253, 335 }, { 254, 335 }, { 255, 335 }, { 256, 335 }, { 0, 64 }, - { 0,11228 }, { 0, 1 }, { 0,11226 }, { 0, 39 }, { 0,11224 }, - - { 0, 0 }, { 0, 1 }, { 0,11221 }, { 0, 55 }, { 0,11219 }, - { 0, 0 }, { 9,5098 }, { 10,5098 }, { 0, 0 }, { 12,5098 }, - { 13,5098 }, { 9,5093 }, { 10,5093 }, { 0, 0 }, { 12,5093 }, - { 13,5093 }, { 0, 14 }, { 0,11206 }, { 0, 54 }, { 0,11204 }, - { 0, 0 }, { 0, 54 }, { 0,11201 }, { 0, 17 }, { 0,11199 }, - { 0, 0 }, { 0, 7 }, { 0,11196 }, { 0, 0 }, { 32,5098 }, - { 0, 7 }, { 0,11192 }, { 0, 0 }, { 0, 0 }, { 32,5093 }, - { 0, 41 }, { 0,11187 }, { 33,5346 }, { 0, 0 }, { 35,5346 }, - { 0, 0 }, { 37,5346 }, { 38,5346 }, { 0, 55 }, { 0,11179 }, - { 0, 0 }, { 42,5346 }, { 43,5346 }, { 0, 0 }, { 45,5346 }, - - { 0, 0 }, { 47,5346 }, { 0, 17 }, { 0,11170 }, { 0, 20 }, - { 0,11168 }, { 0, 19 }, { 0,11166 }, { 0, 0 }, { 0, 17 }, - { 0,11163 }, { 0, 42 }, { 0,11161 }, { 0, 0 }, { 60,5346 }, - { 61,5357 }, { 62,5346 }, { 63,5346 }, { 64,5346 }, { 42, 348 }, - { 34, 346 }, { 0, 26 }, { 0,11151 }, { 42,7050 }, { 47, 353 }, - { 0, 27 }, { 0,11147 }, { 33,5306 }, { 0, 0 }, { 35,5306 }, - { 58, 100 }, { 37,5306 }, { 38,5306 }, { 61, 102 }, { 0, 0 }, - { 0, 0 }, { 42,5306 }, { 43,5306 }, { 0, 0 }, { 45,5306 }, - { 0, 0 }, { 47,5306 }, { 39, 331 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 34, 320 }, { 0, 0 }, { 94,5346 }, { 39, 324 }, - - { 96,5346 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,5306 }, - { 61,5306 }, { 62,5306 }, { 63,5306 }, { 64,5306 }, { 0, 64 }, - { 0,11113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 26 }, { 0,11107 }, { 0, 33 }, { 0,11105 }, { 0, 47 }, - { 0,11103 }, { 0, 46 }, { 0,11101 }, { 0, 48 }, { 0,11099 }, - { 0, 9 }, { 0,11097 }, { 0, 0 }, { 124,5346 }, { 0, 0 }, - { 126,5346 }, { 0, 15 }, { 0,11091 }, { 0, 13 }, { 0,11089 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,5306 }, { 0, 0 }, - { 96,5306 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 253, 335 }, { 254, 335 }, { 255, 335 }, { 256, 335 }, { 0, 75 }, + { 0,15353 }, { 0, 1 }, { 0,15351 }, { 0, 39 }, { 0,15349 }, + + { 0, 0 }, { 0, 1 }, { 0,15346 }, { 0, 55 }, { 0,15344 }, + { 0, 0 }, { 9,5577 }, { 10,5577 }, { 0, 0 }, { 12,5577 }, + { 13,5577 }, { 9,5572 }, { 10,5572 }, { 0, 0 }, { 12,5572 }, + { 13,5572 }, { 0, 14 }, { 0,15331 }, { 0, 54 }, { 0,15329 }, + { 0, 0 }, { 0, 54 }, { 0,15326 }, { 0, 17 }, { 0,15324 }, + { 0, 0 }, { 0, 7 }, { 0,15321 }, { 0, 0 }, { 32,5577 }, + { 0, 7 }, { 0,15317 }, { 0, 0 }, { 0, 0 }, { 32,5572 }, + { 0, 41 }, { 0,15312 }, { 33,5825 }, { 0, 0 }, { 35,5825 }, + { 0, 0 }, { 37,5825 }, { 38,5825 }, { 0, 55 }, { 0,15304 }, + { 0, 0 }, { 42,5825 }, { 43,5825 }, { 0, 0 }, { 45,5825 }, + + { 0, 0 }, { 47,5825 }, { 0, 17 }, { 0,15295 }, { 0, 20 }, + { 0,15293 }, { 0, 19 }, { 0,15291 }, { 0, 0 }, { 0, 17 }, + { 0,15288 }, { 0, 42 }, { 0,15286 }, { 0, 0 }, { 60,5825 }, + { 61,5836 }, { 62,5825 }, { 63,5825 }, { 64,5825 }, { 42, 363 }, + { 34, 358 }, { 0, 26 }, { 0,15276 }, { 42,8264 }, { 47, 365 }, + { 0, 27 }, { 0,15272 }, { 33,5785 }, { 0, 0 }, { 35,5785 }, + { 58, 349 }, { 37,5785 }, { 38,5785 }, { 61, 351 }, { 0, 0 }, + { 0, 0 }, { 42,5785 }, { 43,5785 }, { 0, 0 }, { 45,5785 }, + { 0, 0 }, { 47,5785 }, { 39, 346 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 34, 332 }, { 0, 0 }, { 94,5825 }, { 39, 339 }, + + { 96,5825 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,5785 }, + { 61,5785 }, { 62,5785 }, { 63,5785 }, { 64,5785 }, { 0, 75 }, + { 0,15238 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 26 }, { 0,15232 }, { 0, 33 }, { 0,15230 }, { 0, 47 }, + { 0,15228 }, { 0, 68 }, { 0,15226 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124,5825 }, { 0, 0 }, + { 126,5825 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,5785 }, { 0, 0 }, + { 96,5785 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36, 8 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5268 }, { 49,5268 }, - { 50,5268 }, { 51,5268 }, { 52,5268 }, { 53,5268 }, { 54,5268 }, - { 55,5268 }, { 56,5268 }, { 57,5268 }, { 124,5306 }, { 0, 0 }, - { 126,5306 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,5331 }, { 66,5331 }, { 67,5331 }, { 68,5331 }, { 69,5331 }, - { 70,5331 }, { 71,5331 }, { 72,5331 }, { 73,5331 }, { 74,5331 }, - { 75,5331 }, { 76,5331 }, { 77,5331 }, { 78,5331 }, { 79,5331 }, - { 80,5331 }, { 81,5331 }, { 82,5331 }, { 83,5331 }, { 84,5331 }, - { 85,5331 }, { 86,5331 }, { 87,5331 }, { 88,5331 }, { 89,5331 }, - - { 90,5331 }, { 85,8881 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 95,5331 }, { 0, 0 }, { 97,5331 }, { 98,5331 }, { 99,5331 }, - { 100,5331 }, { 101,5331 }, { 102,5331 }, { 103,5331 }, { 104,5331 }, - { 105,5331 }, { 106,5331 }, { 107,5331 }, { 108,5331 }, { 109,5331 }, - { 110,5331 }, { 111,5331 }, { 112,5331 }, { 113,5331 }, { 114,5331 }, - { 115,5331 }, { 116,5331 }, { 117,5331 }, { 118,5331 }, { 119,5331 }, - { 120,5331 }, { 121,5331 }, { 122,5331 }, { 117,8904 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,5331 }, { 129,5331 }, - { 130,5331 }, { 131,5331 }, { 132,5331 }, { 133,5331 }, { 134,5331 }, - { 135,5331 }, { 136,5331 }, { 137,5331 }, { 138,5331 }, { 139,5331 }, - - { 140,5331 }, { 141,5331 }, { 142,5331 }, { 143,5331 }, { 144,5331 }, - { 145,5331 }, { 146,5331 }, { 147,5331 }, { 148,5331 }, { 149,5331 }, - { 150,5331 }, { 151,5331 }, { 152,5331 }, { 153,5331 }, { 154,5331 }, - { 155,5331 }, { 156,5331 }, { 157,5331 }, { 158,5331 }, { 159,5331 }, - { 160,5331 }, { 161,5331 }, { 162,5331 }, { 163,5331 }, { 164,5331 }, - { 165,5331 }, { 166,5331 }, { 167,5331 }, { 168,5331 }, { 169,5331 }, - { 170,5331 }, { 171,5331 }, { 172,5331 }, { 173,5331 }, { 174,5331 }, - { 175,5331 }, { 176,5331 }, { 177,5331 }, { 178,5331 }, { 179,5331 }, - { 180,5331 }, { 181,5331 }, { 182,5331 }, { 183,5331 }, { 184,5331 }, - { 185,5331 }, { 186,5331 }, { 187,5331 }, { 188,5331 }, { 189,5331 }, - - { 190,5331 }, { 191,5331 }, { 192,5331 }, { 193,5331 }, { 194,5331 }, - { 195,5331 }, { 196,5331 }, { 197,5331 }, { 198,5331 }, { 199,5331 }, - { 200,5331 }, { 201,5331 }, { 202,5331 }, { 203,5331 }, { 204,5331 }, - { 205,5331 }, { 206,5331 }, { 207,5331 }, { 208,5331 }, { 209,5331 }, - { 210,5331 }, { 211,5331 }, { 212,5331 }, { 213,5331 }, { 214,5331 }, - { 215,5331 }, { 216,5331 }, { 217,5331 }, { 218,5331 }, { 219,5331 }, - { 220,5331 }, { 221,5331 }, { 222,5331 }, { 223,5331 }, { 224,5331 }, - { 225,5331 }, { 226,5331 }, { 227,5331 }, { 228,5331 }, { 229,5331 }, - { 230,5331 }, { 231,5331 }, { 232,5331 }, { 233,5331 }, { 234,5331 }, - { 235,5331 }, { 236,5331 }, { 237,5331 }, { 238,5331 }, { 239,5331 }, - - { 240,5331 }, { 241,5331 }, { 242,5331 }, { 243,5331 }, { 244,5331 }, - { 245,5331 }, { 246,5331 }, { 247,5331 }, { 248,5331 }, { 249,5331 }, - { 250,5331 }, { 251,5331 }, { 252,5331 }, { 253,5331 }, { 254,5331 }, - { 255,5331 }, { 0, 54 }, { 0,10856 }, { 0, 45 }, { 0,10854 }, - { 0, 12 }, { 0,10852 }, { 0, 0 }, { 0, 0 }, { 0, 8 }, - { 0,10848 }, { 0, 0 }, { 0, 54 }, { 0,10845 }, { 0, 5 }, - { 0,10843 }, { 0, 43 }, { 0,10841 }, { 0, 21 }, { 0,10839 }, - { 0, 19 }, { 0,10837 }, { 0, 18 }, { 0,10835 }, { 0, 29 }, - { 0,10833 }, { 0, 35 }, { 0,10831 }, { 0, 59 }, { 0,10829 }, - { 0, 0 }, { 0, 54 }, { 0,10826 }, { 0, 40 }, { 0,10824 }, - - { 33,4983 }, { 0, 0 }, { 35,4983 }, { 34, 30 }, { 37,4983 }, - { 38,4983 }, { 0, 16 }, { 0,10816 }, { 39, 38 }, { 42,4983 }, - { 43,4983 }, { 33,4972 }, { 45,4983 }, { 35,4972 }, { 47,4983 }, - { 37,4972 }, { 38,4972 }, { 42, 0 }, { 0, 30 }, { 0,10804 }, - { 42,4972 }, { 43,4972 }, { 47, 5 }, { 45,5320 }, { 0, 0 }, - { 47,4972 }, { 0, 0 }, { 60,4983 }, { 61,4983 }, { 62,4983 }, - { 63,4983 }, { 64,4983 }, { 0, 31 }, { 0,10790 }, { 0, 24 }, - { 0,10788 }, { 0, 25 }, { 0,10786 }, { 60,4972 }, { 61,4972 }, - { 62,4972 }, { 63,4972 }, { 64,4972 }, { 46,-277 }, { 0, 0 }, - { 48,5559 }, { 49,5559 }, { 50,5559 }, { 51,5559 }, { 52,5559 }, - - { 53,5559 }, { 54,5559 }, { 55,5559 }, { 56,5559 }, { 57,5559 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 94,4983 }, { 0, 0 }, { 96,4983 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 54 }, { 0,10755 }, { 0, 57 }, - { 0,10753 }, { 0, 0 }, { 94,4972 }, { 0, 0 }, { 96,4972 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 124,4983 }, { 0, 0 }, { 126,4983 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 33,4882 }, { 124,4972 }, { 35,4882 }, { 126,4972 }, - { 37,4882 }, { 38,4882 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 42,5513 }, { 43,4882 }, { 0, 0 }, { 45,4882 }, { 0, 0 }, - { 47,4882 }, { 46,5513 }, { 0, 0 }, { 48,5577 }, { 49,5577 }, - { 50,5577 }, { 51,5577 }, { 52,5577 }, { 53,5577 }, { 54,5577 }, - { 55,5577 }, { 56,5577 }, { 57,5577 }, { 60,4882 }, { 61,4882 }, - { 62,4882 }, { 63,4882 }, { 64,4882 }, { 0, 0 }, { 0, 54 }, - { 0,10688 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 69,5599 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 54 }, { 0,10677 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 94,4882 }, { 0, 0 }, { 96,4882 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,4815 }, { 0, 0 }, - { 35,4815 }, { 101,5599 }, { 37,4815 }, { 38,4815 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 42,4815 }, { 43,4815 }, { 33,4804 }, - { 45,4815 }, { 35,4804 }, { 47,4815 }, { 37,4804 }, { 38,4804 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,4804 }, { 43,4804 }, - { 0, 0 }, { 45,4804 }, { 124,4882 }, { 47,4804 }, { 126,4882 }, - { 60,4815 }, { 61,5574 }, { 62,5615 }, { 63,4815 }, { 64,4815 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 60,4804 }, { 61,4804 }, { 62,5671 }, { 63,4804 }, - { 64,4804 }, { 0, 0 }, { 0, 54 }, { 0,10610 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,4815 }, - { 0, 0 }, { 96,4815 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 94,4804 }, { 0, 0 }, { 96,4804 }, { 0, 0 }, { 0, 63 }, - { 0,10578 }, { 33,4737 }, { 0, 0 }, { 35,4737 }, { 0, 0 }, - - { 37,4737 }, { 38,4737 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 42,4737 }, { 43,4737 }, { 0, 0 }, { 45,4737 }, { 124,4815 }, - { 47,4737 }, { 126,4815 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 124,4804 }, { 0, 0 }, { 126,4804 }, { 60,4737 }, { 61,5615 }, - { 62,4737 }, { 63,4737 }, { 64,4737 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 36,5663 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5663 }, { 49,5663 }, - { 50,5663 }, { 51,5663 }, { 52,5663 }, { 53,5663 }, { 54,5663 }, - - { 55,5663 }, { 56,5663 }, { 57,5663 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 94,4737 }, { 0, 0 }, { 96,4737 }, - { 65,5663 }, { 66,5663 }, { 67,5663 }, { 68,5663 }, { 69,5663 }, - { 70,5663 }, { 71,5663 }, { 72,5663 }, { 73,5663 }, { 74,5663 }, - { 75,5663 }, { 76,5663 }, { 77,5663 }, { 78,5663 }, { 79,5663 }, - { 80,5663 }, { 81,5663 }, { 82,5663 }, { 83,5663 }, { 84,5663 }, - { 85,5663 }, { 86,5663 }, { 87,5663 }, { 88,5663 }, { 89,5663 }, - { 90,5663 }, { 0, 0 }, { 124,4737 }, { 0, 0 }, { 126,4737 }, - { 95,5663 }, { 0, 0 }, { 97,5663 }, { 98,5663 }, { 99,5663 }, - { 100,5663 }, { 101,5663 }, { 102,5663 }, { 103,5663 }, { 104,5663 }, - - { 105,5663 }, { 106,5663 }, { 107,5663 }, { 108,5663 }, { 109,5663 }, - { 110,5663 }, { 111,5663 }, { 112,5663 }, { 113,5663 }, { 114,5663 }, - { 115,5663 }, { 116,5663 }, { 117,5663 }, { 118,5663 }, { 119,5663 }, - { 120,5663 }, { 121,5663 }, { 122,5663 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,5663 }, { 129,5663 }, - { 130,5663 }, { 131,5663 }, { 132,5663 }, { 133,5663 }, { 134,5663 }, - { 135,5663 }, { 136,5663 }, { 137,5663 }, { 138,5663 }, { 139,5663 }, - { 140,5663 }, { 141,5663 }, { 142,5663 }, { 143,5663 }, { 144,5663 }, - { 145,5663 }, { 146,5663 }, { 147,5663 }, { 148,5663 }, { 149,5663 }, - { 150,5663 }, { 151,5663 }, { 152,5663 }, { 153,5663 }, { 154,5663 }, - - { 155,5663 }, { 156,5663 }, { 157,5663 }, { 158,5663 }, { 159,5663 }, - { 160,5663 }, { 161,5663 }, { 162,5663 }, { 163,5663 }, { 164,5663 }, - { 165,5663 }, { 166,5663 }, { 167,5663 }, { 168,5663 }, { 169,5663 }, - { 170,5663 }, { 171,5663 }, { 172,5663 }, { 173,5663 }, { 174,5663 }, - { 175,5663 }, { 176,5663 }, { 177,5663 }, { 178,5663 }, { 179,5663 }, - { 180,5663 }, { 181,5663 }, { 182,5663 }, { 183,5663 }, { 184,5663 }, - { 185,5663 }, { 186,5663 }, { 187,5663 }, { 188,5663 }, { 189,5663 }, - { 190,5663 }, { 191,5663 }, { 192,5663 }, { 193,5663 }, { 194,5663 }, - { 195,5663 }, { 196,5663 }, { 197,5663 }, { 198,5663 }, { 199,5663 }, - { 200,5663 }, { 201,5663 }, { 202,5663 }, { 203,5663 }, { 204,5663 }, - - { 205,5663 }, { 206,5663 }, { 207,5663 }, { 208,5663 }, { 209,5663 }, - { 210,5663 }, { 211,5663 }, { 212,5663 }, { 213,5663 }, { 214,5663 }, - { 215,5663 }, { 216,5663 }, { 217,5663 }, { 218,5663 }, { 219,5663 }, - { 220,5663 }, { 221,5663 }, { 222,5663 }, { 223,5663 }, { 224,5663 }, - { 225,5663 }, { 226,5663 }, { 227,5663 }, { 228,5663 }, { 229,5663 }, - { 230,5663 }, { 231,5663 }, { 232,5663 }, { 233,5663 }, { 234,5663 }, - { 235,5663 }, { 236,5663 }, { 237,5663 }, { 238,5663 }, { 239,5663 }, - { 240,5663 }, { 241,5663 }, { 242,5663 }, { 243,5663 }, { 244,5663 }, - { 245,5663 }, { 246,5663 }, { 247,5663 }, { 248,5663 }, { 249,5663 }, - { 250,5663 }, { 251,5663 }, { 252,5663 }, { 253,5663 }, { 254,5663 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5747 }, { 49,5747 }, + { 50,5747 }, { 51,5747 }, { 52,5747 }, { 53,5747 }, { 54,5747 }, + { 55,5747 }, { 56,5747 }, { 57,5747 }, { 124,5785 }, { 0, 0 }, + { 126,5785 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,5810 }, { 66,5810 }, { 67,5810 }, { 68,5810 }, { 69,5810 }, + { 70,5810 }, { 71,5810 }, { 72,5810 }, { 73,5810 }, { 74,5810 }, + { 75,5810 }, { 76,5810 }, { 77,5810 }, { 78,5810 }, { 79,5810 }, + { 80,5810 }, { 81,5810 }, { 82,5810 }, { 83,5810 }, { 84,5810 }, + { 85,5810 }, { 86,5810 }, { 87,5810 }, { 88,5810 }, { 89,5810 }, + + { 90,5810 }, { 85,10095 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,5810 }, { 0, 0 }, { 97,5810 }, { 98,5810 }, { 99,5810 }, + { 100,5810 }, { 101,5810 }, { 102,5810 }, { 103,5810 }, { 104,5810 }, + { 105,5810 }, { 106,5810 }, { 107,5810 }, { 108,5810 }, { 109,5810 }, + { 110,5810 }, { 111,5810 }, { 112,5810 }, { 113,5810 }, { 114,5810 }, + { 115,5810 }, { 116,5810 }, { 117,5810 }, { 118,5810 }, { 119,5810 }, + { 120,5810 }, { 121,5810 }, { 122,5810 }, { 117,10118 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,5810 }, { 129,5810 }, + { 130,5810 }, { 131,5810 }, { 132,5810 }, { 133,5810 }, { 134,5810 }, + { 135,5810 }, { 136,5810 }, { 137,5810 }, { 138,5810 }, { 139,5810 }, + + { 140,5810 }, { 141,5810 }, { 142,5810 }, { 143,5810 }, { 144,5810 }, + { 145,5810 }, { 146,5810 }, { 147,5810 }, { 148,5810 }, { 149,5810 }, + { 150,5810 }, { 151,5810 }, { 152,5810 }, { 153,5810 }, { 154,5810 }, + { 155,5810 }, { 156,5810 }, { 157,5810 }, { 158,5810 }, { 159,5810 }, + { 160,5810 }, { 161,5810 }, { 162,5810 }, { 163,5810 }, { 164,5810 }, + { 165,5810 }, { 166,5810 }, { 167,5810 }, { 168,5810 }, { 169,5810 }, + { 170,5810 }, { 171,5810 }, { 172,5810 }, { 173,5810 }, { 174,5810 }, + { 175,5810 }, { 176,5810 }, { 177,5810 }, { 178,5810 }, { 179,5810 }, + { 180,5810 }, { 181,5810 }, { 182,5810 }, { 183,5810 }, { 184,5810 }, + { 185,5810 }, { 186,5810 }, { 187,5810 }, { 188,5810 }, { 189,5810 }, + + { 190,5810 }, { 191,5810 }, { 192,5810 }, { 193,5810 }, { 194,5810 }, + { 195,5810 }, { 196,5810 }, { 197,5810 }, { 198,5810 }, { 199,5810 }, + { 200,5810 }, { 201,5810 }, { 202,5810 }, { 203,5810 }, { 204,5810 }, + { 205,5810 }, { 206,5810 }, { 207,5810 }, { 208,5810 }, { 209,5810 }, + { 210,5810 }, { 211,5810 }, { 212,5810 }, { 213,5810 }, { 214,5810 }, + { 215,5810 }, { 216,5810 }, { 217,5810 }, { 218,5810 }, { 219,5810 }, + { 220,5810 }, { 221,5810 }, { 222,5810 }, { 223,5810 }, { 224,5810 }, + { 225,5810 }, { 226,5810 }, { 227,5810 }, { 228,5810 }, { 229,5810 }, + { 230,5810 }, { 231,5810 }, { 232,5810 }, { 233,5810 }, { 234,5810 }, + { 235,5810 }, { 236,5810 }, { 237,5810 }, { 238,5810 }, { 239,5810 }, + + { 240,5810 }, { 241,5810 }, { 242,5810 }, { 243,5810 }, { 244,5810 }, + { 245,5810 }, { 246,5810 }, { 247,5810 }, { 248,5810 }, { 249,5810 }, + { 250,5810 }, { 251,5810 }, { 252,5810 }, { 253,5810 }, { 254,5810 }, + { 255,5810 }, { 0, 54 }, { 0,14981 }, { 0, 63 }, { 0,14979 }, + { 0, 46 }, { 0,14977 }, { 0, 48 }, { 0,14975 }, { 0, 9 }, + { 0,14973 }, { 0, 0 }, { 0, 54 }, { 0,14970 }, { 0, 15 }, + { 0,14968 }, { 0, 13 }, { 0,14966 }, { 0, 0 }, { 0, 45 }, + { 0,14963 }, { 0, 12 }, { 0,14961 }, { 0, 0 }, { 0, 8 }, + { 0,14958 }, { 0, 5 }, { 0,14956 }, { 0, 43 }, { 0,14954 }, + { 0, 0 }, { 0, 54 }, { 0,14951 }, { 0, 21 }, { 0,14949 }, + + { 33,5462 }, { 0, 0 }, { 35,5462 }, { 0, 0 }, { 37,5462 }, + { 38,5462 }, { 0, 19 }, { 0,14941 }, { 0, 0 }, { 42,5462 }, + { 43,5462 }, { 33,5451 }, { 45,5462 }, { 35,5451 }, { 47,5462 }, + { 37,5451 }, { 38,5451 }, { 48,11312 }, { 49,11312 }, { 34, 91 }, + { 42,5451 }, { 43,5451 }, { 0, 0 }, { 45,5799 }, { 39, 93 }, + { 47,5451 }, { 0, 0 }, { 60,5462 }, { 61,5462 }, { 62,5462 }, + { 63,5462 }, { 64,5462 }, { 42, 0 }, { 0, 18 }, { 0,14914 }, + { 0, 29 }, { 0,14912 }, { 47, 2 }, { 60,5451 }, { 61,5451 }, + { 62,5451 }, { 63,5451 }, { 64,5451 }, { 46,-277 }, { 0, 0 }, + { 48,6038 }, { 49,6038 }, { 50,6038 }, { 51,6038 }, { 52,6038 }, + + { 53,6038 }, { 54,6038 }, { 55,6038 }, { 56,6038 }, { 57,6038 }, + { 0, 35 }, { 0,14892 }, { 0, 72 }, { 0,14890 }, { 0, 65 }, + { 0,14888 }, { 94,5462 }, { 0, 0 }, { 96,5462 }, { 95, 101 }, + { 0, 0 }, { 0, 0 }, { 0, 54 }, { 0,14880 }, { 0, 63 }, + { 0,14878 }, { 0, 0 }, { 94,5451 }, { 0, 0 }, { 96,5451 }, + { 0, 40 }, { 0,14872 }, { 0, 16 }, { 0,14870 }, { 0, 71 }, + { 0,14868 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 71 }, + { 0,14863 }, { 0, 73 }, { 0,14861 }, { 0, 70 }, { 0,14859 }, + { 0, 0 }, { 124,5462 }, { 0, 0 }, { 126,5462 }, { 0, 69 }, + { 0,14853 }, { 0, 30 }, { 0,14851 }, { 0, 0 }, { 0, 57 }, + + { 0,14848 }, { 33,5361 }, { 124,5451 }, { 35,5361 }, { 126,5451 }, + { 37,5361 }, { 38,5361 }, { 0, 31 }, { 0,14840 }, { 0, 0 }, + { 42,6224 }, { 43,5361 }, { 0, 0 }, { 45,5361 }, { 0, 0 }, + { 47,5361 }, { 0, 24 }, { 0,14831 }, { 48,11211 }, { 49,11211 }, + { 0, 25 }, { 0,14827 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,5361 }, { 61,5361 }, + { 62,5361 }, { 63,5361 }, { 64,5361 }, { 48,11196 }, { 49,11196 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 46,6224 }, { 0, 0 }, { 48,6481 }, { 49,6481 }, + + { 50,6481 }, { 51,6481 }, { 52,6481 }, { 53,6481 }, { 54,6481 }, + { 55,6481 }, { 56,6481 }, { 57,6481 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 94,5361 }, { 0, 0 }, { 96,5361 }, + { 65,-378 }, { 66,-131 }, { 67,-378 }, { 68,-378 }, { 69,6738 }, + { 70,-378 }, { 71,-378 }, { 72,-378 }, { 73,-378 }, { 74,-378 }, + { 75,-378 }, { 76,-378 }, { 77,-378 }, { 78,-378 }, { 79,6748 }, + { 80,-378 }, { 81,-378 }, { 82,-378 }, { 83,-378 }, { 84,-378 }, + { 85,-378 }, { 86,-378 }, { 87,-378 }, { 88,6756 }, { 89,-378 }, + { 90,-378 }, { 0, 0 }, { 124,5361 }, { 0, 0 }, { 126,5361 }, + { 95,6779 }, { 0, 0 }, { 97,-378 }, { 98,-131 }, { 99,-378 }, + + { 100,-378 }, { 101,6738 }, { 102,-378 }, { 103,-378 }, { 104,-378 }, + { 105,-378 }, { 106,-378 }, { 107,-378 }, { 108,-378 }, { 109,-378 }, + { 110,-378 }, { 111,6748 }, { 112,-378 }, { 113,-378 }, { 114,-378 }, + { 115,-378 }, { 116,-378 }, { 117,-378 }, { 118,-378 }, { 119,-378 }, + { 120,6756 }, { 121,-378 }, { 122,-378 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-378 }, { 129,-378 }, + { 130,-378 }, { 131,-378 }, { 132,-378 }, { 133,-378 }, { 134,-378 }, + { 135,-378 }, { 136,-378 }, { 137,-378 }, { 138,-378 }, { 139,-378 }, + { 140,-378 }, { 141,-378 }, { 142,-378 }, { 143,-378 }, { 144,-378 }, + { 145,-378 }, { 146,-378 }, { 147,-378 }, { 148,-378 }, { 149,-378 }, + + { 150,-378 }, { 151,-378 }, { 152,-378 }, { 153,-378 }, { 154,-378 }, + { 155,-378 }, { 156,-378 }, { 157,-378 }, { 158,-378 }, { 159,-378 }, + { 160,-378 }, { 161,-378 }, { 162,-378 }, { 163,-378 }, { 164,-378 }, + { 165,-378 }, { 166,-378 }, { 167,-378 }, { 168,-378 }, { 169,-378 }, + { 170,-378 }, { 171,-378 }, { 172,-378 }, { 173,-378 }, { 174,-378 }, + { 175,-378 }, { 176,-378 }, { 177,-378 }, { 178,-378 }, { 179,-378 }, + { 180,-378 }, { 181,-378 }, { 182,-378 }, { 183,-378 }, { 184,-378 }, + { 185,-378 }, { 186,-378 }, { 187,-378 }, { 188,-378 }, { 189,-378 }, + { 190,-378 }, { 191,-378 }, { 192,-378 }, { 193,-378 }, { 194,-378 }, + { 195,-378 }, { 196,-378 }, { 197,-378 }, { 198,-378 }, { 199,-378 }, + + { 200,-378 }, { 201,-378 }, { 202,-378 }, { 203,-378 }, { 204,-378 }, + { 205,-378 }, { 206,-378 }, { 207,-378 }, { 208,-378 }, { 209,-378 }, + { 210,-378 }, { 211,-378 }, { 212,-378 }, { 213,-378 }, { 214,-378 }, + { 215,-378 }, { 216,-378 }, { 217,-378 }, { 218,-378 }, { 219,-378 }, + { 220,-378 }, { 221,-378 }, { 222,-378 }, { 223,-378 }, { 224,-378 }, + { 225,-378 }, { 226,-378 }, { 227,-378 }, { 228,-378 }, { 229,-378 }, + { 230,-378 }, { 231,-378 }, { 232,-378 }, { 233,-378 }, { 234,-378 }, + { 235,-378 }, { 236,-378 }, { 237,-378 }, { 238,-378 }, { 239,-378 }, + { 240,-378 }, { 241,-378 }, { 242,-378 }, { 243,-378 }, { 244,-378 }, + { 245,-378 }, { 246,-378 }, { 247,-378 }, { 248,-378 }, { 249,-378 }, + + { 250,-378 }, { 251,-378 }, { 252,-378 }, { 253,-378 }, { 254,-378 }, + { 255,-378 }, { 0, 57 }, { 0,14591 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 46,5967 }, { 0, 0 }, + { 48,6224 }, { 49,6224 }, { 50,6224 }, { 51,6224 }, { 52,6224 }, + { 53,6224 }, { 54,6224 }, { 55,6224 }, { 56,6224 }, { 57,6224 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-635 }, { 66,-635 }, { 67,-635 }, + { 68,-635 }, { 69,6481 }, { 70,-635 }, { 71,-635 }, { 72,-635 }, + { 73,-635 }, { 74,-635 }, { 75,-635 }, { 76,-635 }, { 77,-635 }, + { 78,-635 }, { 79,-635 }, { 80,-635 }, { 81,-635 }, { 82,-635 }, + { 83,-635 }, { 84,-635 }, { 85,-635 }, { 86,-635 }, { 87,-635 }, + { 88,-635 }, { 89,-635 }, { 90,-635 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,6522 }, { 0, 0 }, { 97,-635 }, + { 98,-635 }, { 99,-635 }, { 100,-635 }, { 101,6481 }, { 102,-635 }, + { 103,-635 }, { 104,-635 }, { 105,-635 }, { 106,-635 }, { 107,-635 }, + { 108,-635 }, { 109,-635 }, { 110,-635 }, { 111,-635 }, { 112,-635 }, + { 113,-635 }, { 114,-635 }, { 115,-635 }, { 116,-635 }, { 117,-635 }, + { 118,-635 }, { 119,-635 }, { 120,-635 }, { 121,-635 }, { 122,-635 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 128,-635 }, { 129,-635 }, { 130,-635 }, { 131,-635 }, { 132,-635 }, + { 133,-635 }, { 134,-635 }, { 135,-635 }, { 136,-635 }, { 137,-635 }, + { 138,-635 }, { 139,-635 }, { 140,-635 }, { 141,-635 }, { 142,-635 }, + + { 143,-635 }, { 144,-635 }, { 145,-635 }, { 146,-635 }, { 147,-635 }, + { 148,-635 }, { 149,-635 }, { 150,-635 }, { 151,-635 }, { 152,-635 }, + { 153,-635 }, { 154,-635 }, { 155,-635 }, { 156,-635 }, { 157,-635 }, + { 158,-635 }, { 159,-635 }, { 160,-635 }, { 161,-635 }, { 162,-635 }, + { 163,-635 }, { 164,-635 }, { 165,-635 }, { 166,-635 }, { 167,-635 }, + { 168,-635 }, { 169,-635 }, { 170,-635 }, { 171,-635 }, { 172,-635 }, + { 173,-635 }, { 174,-635 }, { 175,-635 }, { 176,-635 }, { 177,-635 }, + { 178,-635 }, { 179,-635 }, { 180,-635 }, { 181,-635 }, { 182,-635 }, + { 183,-635 }, { 184,-635 }, { 185,-635 }, { 186,-635 }, { 187,-635 }, + { 188,-635 }, { 189,-635 }, { 190,-635 }, { 191,-635 }, { 192,-635 }, + + { 193,-635 }, { 194,-635 }, { 195,-635 }, { 196,-635 }, { 197,-635 }, + { 198,-635 }, { 199,-635 }, { 200,-635 }, { 201,-635 }, { 202,-635 }, + { 203,-635 }, { 204,-635 }, { 205,-635 }, { 206,-635 }, { 207,-635 }, + { 208,-635 }, { 209,-635 }, { 210,-635 }, { 211,-635 }, { 212,-635 }, + { 213,-635 }, { 214,-635 }, { 215,-635 }, { 216,-635 }, { 217,-635 }, + { 218,-635 }, { 219,-635 }, { 220,-635 }, { 221,-635 }, { 222,-635 }, + { 223,-635 }, { 224,-635 }, { 225,-635 }, { 226,-635 }, { 227,-635 }, + { 228,-635 }, { 229,-635 }, { 230,-635 }, { 231,-635 }, { 232,-635 }, + { 233,-635 }, { 234,-635 }, { 235,-635 }, { 236,-635 }, { 237,-635 }, + { 238,-635 }, { 239,-635 }, { 240,-635 }, { 241,-635 }, { 242,-635 }, + + { 243,-635 }, { 244,-635 }, { 245,-635 }, { 246,-635 }, { 247,-635 }, + { 248,-635 }, { 249,-635 }, { 250,-635 }, { 251,-635 }, { 252,-635 }, + { 253,-635 }, { 254,-635 }, { 255,-635 }, { 0, 54 }, { 0,14334 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 54 }, + { 0,14323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 33,4815 }, { 0, 0 }, { 35,4815 }, + + { 0, 0 }, { 37,4815 }, { 38,4815 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 42,4815 }, { 43,4815 }, { 33,4804 }, { 45,4815 }, + { 35,4804 }, { 47,4815 }, { 37,4804 }, { 38,4804 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 42,4804 }, { 43,4804 }, { 0, 0 }, + { 45,4804 }, { 0, 0 }, { 47,4804 }, { 0, 0 }, { 60,4815 }, + { 61,6324 }, { 62,6335 }, { 63,4815 }, { 64,4815 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 60,4804 }, { 61,4804 }, { 62,6391 }, { 63,4804 }, { 64,4804 }, + { 0, 0 }, { 0, 54 }, { 0,14256 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,4815 }, { 0, 0 }, + { 96,4815 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,4804 }, + { 0, 0 }, { 96,4804 }, { 0, 0 }, { 0, 74 }, { 0,14224 }, + { 33,4737 }, { 0, 0 }, { 35,4737 }, { 0, 0 }, { 37,4737 }, + { 38,4737 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,4737 }, + { 43,4737 }, { 0, 0 }, { 45,4737 }, { 124,4815 }, { 47,4737 }, + { 126,4815 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124,4804 }, + + { 0, 0 }, { 126,4804 }, { 60,4737 }, { 61,6364 }, { 62,4737 }, + { 63,4737 }, { 64,4737 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 36,6398 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,6398 }, { 49,6398 }, { 50,6398 }, + { 51,6398 }, { 52,6398 }, { 53,6398 }, { 54,6398 }, { 55,6398 }, + { 56,6398 }, { 57,6398 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 94,4737 }, { 0, 0 }, { 96,4737 }, { 65,6398 }, + { 66,6398 }, { 67,6398 }, { 68,6398 }, { 69,6398 }, { 70,6398 }, + { 71,6398 }, { 72,6398 }, { 73,6398 }, { 74,6398 }, { 75,6398 }, + + { 76,6398 }, { 77,6398 }, { 78,6398 }, { 79,6398 }, { 80,6398 }, + { 81,6398 }, { 82,6398 }, { 83,6398 }, { 84,6398 }, { 85,6398 }, + { 86,6398 }, { 87,6398 }, { 88,6398 }, { 89,6398 }, { 90,6398 }, + { 0, 0 }, { 124,4737 }, { 0, 0 }, { 126,4737 }, { 95,6398 }, + { 0, 0 }, { 97,6398 }, { 98,6398 }, { 99,6398 }, { 100,6398 }, + { 101,6398 }, { 102,6398 }, { 103,6398 }, { 104,6398 }, { 105,6398 }, + { 106,6398 }, { 107,6398 }, { 108,6398 }, { 109,6398 }, { 110,6398 }, + { 111,6398 }, { 112,6398 }, { 113,6398 }, { 114,6398 }, { 115,6398 }, + { 116,6398 }, { 117,6398 }, { 118,6398 }, { 119,6398 }, { 120,6398 }, + { 121,6398 }, { 122,6398 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 128,6398 }, { 129,6398 }, { 130,6398 }, + { 131,6398 }, { 132,6398 }, { 133,6398 }, { 134,6398 }, { 135,6398 }, + { 136,6398 }, { 137,6398 }, { 138,6398 }, { 139,6398 }, { 140,6398 }, + { 141,6398 }, { 142,6398 }, { 143,6398 }, { 144,6398 }, { 145,6398 }, + { 146,6398 }, { 147,6398 }, { 148,6398 }, { 149,6398 }, { 150,6398 }, + { 151,6398 }, { 152,6398 }, { 153,6398 }, { 154,6398 }, { 155,6398 }, + { 156,6398 }, { 157,6398 }, { 158,6398 }, { 159,6398 }, { 160,6398 }, + { 161,6398 }, { 162,6398 }, { 163,6398 }, { 164,6398 }, { 165,6398 }, + { 166,6398 }, { 167,6398 }, { 168,6398 }, { 169,6398 }, { 170,6398 }, + { 171,6398 }, { 172,6398 }, { 173,6398 }, { 174,6398 }, { 175,6398 }, + + { 176,6398 }, { 177,6398 }, { 178,6398 }, { 179,6398 }, { 180,6398 }, + { 181,6398 }, { 182,6398 }, { 183,6398 }, { 184,6398 }, { 185,6398 }, + { 186,6398 }, { 187,6398 }, { 188,6398 }, { 189,6398 }, { 190,6398 }, + { 191,6398 }, { 192,6398 }, { 193,6398 }, { 194,6398 }, { 195,6398 }, + { 196,6398 }, { 197,6398 }, { 198,6398 }, { 199,6398 }, { 200,6398 }, + { 201,6398 }, { 202,6398 }, { 203,6398 }, { 204,6398 }, { 205,6398 }, + { 206,6398 }, { 207,6398 }, { 208,6398 }, { 209,6398 }, { 210,6398 }, + { 211,6398 }, { 212,6398 }, { 213,6398 }, { 214,6398 }, { 215,6398 }, + { 216,6398 }, { 217,6398 }, { 218,6398 }, { 219,6398 }, { 220,6398 }, + { 221,6398 }, { 222,6398 }, { 223,6398 }, { 224,6398 }, { 225,6398 }, + + { 226,6398 }, { 227,6398 }, { 228,6398 }, { 229,6398 }, { 230,6398 }, + { 231,6398 }, { 232,6398 }, { 233,6398 }, { 234,6398 }, { 235,6398 }, + { 236,6398 }, { 237,6398 }, { 238,6398 }, { 239,6398 }, { 240,6398 }, + { 241,6398 }, { 242,6398 }, { 243,6398 }, { 244,6398 }, { 245,6398 }, + { 246,6398 }, { 247,6398 }, { 248,6398 }, { 249,6398 }, { 250,6398 }, + { 251,6398 }, { 252,6398 }, { 253,6398 }, { 254,6398 }, { 255,6398 }, + { 0, 74 }, { 0,13967 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 36,6141 }, { 0, 0 }, { 0, 0 }, + { 39,-1006 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,6141 }, + { 49,6141 }, { 50,6141 }, { 51,6141 }, { 52,6141 }, { 53,6141 }, + { 54,6141 }, { 55,6141 }, { 56,6141 }, { 57,6141 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,6141 }, { 66,6141 }, { 67,6141 }, { 68,6141 }, + + { 69,6141 }, { 70,6141 }, { 71,6141 }, { 72,6141 }, { 73,6141 }, + { 74,6141 }, { 75,6141 }, { 76,6141 }, { 77,6141 }, { 78,6141 }, + { 79,6141 }, { 80,6141 }, { 81,6141 }, { 82,6141 }, { 83,6141 }, + { 84,6141 }, { 85,6141 }, { 86,6141 }, { 87,6141 }, { 88,6141 }, + { 89,6141 }, { 90,6141 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,6141 }, { 0, 0 }, { 97,6141 }, { 98,6141 }, + { 99,6141 }, { 100,6141 }, { 101,6141 }, { 102,6141 }, { 103,6141 }, + { 104,6141 }, { 105,6141 }, { 106,6141 }, { 107,6141 }, { 108,6141 }, + { 109,6141 }, { 110,6141 }, { 111,6141 }, { 112,6141 }, { 113,6141 }, + { 114,6141 }, { 115,6141 }, { 116,6141 }, { 117,6141 }, { 118,6141 }, + + { 119,6141 }, { 120,6141 }, { 121,6141 }, { 122,6141 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,6141 }, + { 129,6141 }, { 130,6141 }, { 131,6141 }, { 132,6141 }, { 133,6141 }, + { 134,6141 }, { 135,6141 }, { 136,6141 }, { 137,6141 }, { 138,6141 }, + { 139,6141 }, { 140,6141 }, { 141,6141 }, { 142,6141 }, { 143,6141 }, + { 144,6141 }, { 145,6141 }, { 146,6141 }, { 147,6141 }, { 148,6141 }, + { 149,6141 }, { 150,6141 }, { 151,6141 }, { 152,6141 }, { 153,6141 }, + { 154,6141 }, { 155,6141 }, { 156,6141 }, { 157,6141 }, { 158,6141 }, + { 159,6141 }, { 160,6141 }, { 161,6141 }, { 162,6141 }, { 163,6141 }, + { 164,6141 }, { 165,6141 }, { 166,6141 }, { 167,6141 }, { 168,6141 }, + + { 169,6141 }, { 170,6141 }, { 171,6141 }, { 172,6141 }, { 173,6141 }, + { 174,6141 }, { 175,6141 }, { 176,6141 }, { 177,6141 }, { 178,6141 }, + { 179,6141 }, { 180,6141 }, { 181,6141 }, { 182,6141 }, { 183,6141 }, + { 184,6141 }, { 185,6141 }, { 186,6141 }, { 187,6141 }, { 188,6141 }, + { 189,6141 }, { 190,6141 }, { 191,6141 }, { 192,6141 }, { 193,6141 }, + { 194,6141 }, { 195,6141 }, { 196,6141 }, { 197,6141 }, { 198,6141 }, + { 199,6141 }, { 200,6141 }, { 201,6141 }, { 202,6141 }, { 203,6141 }, + { 204,6141 }, { 205,6141 }, { 206,6141 }, { 207,6141 }, { 208,6141 }, + { 209,6141 }, { 210,6141 }, { 211,6141 }, { 212,6141 }, { 213,6141 }, + { 214,6141 }, { 215,6141 }, { 216,6141 }, { 217,6141 }, { 218,6141 }, + + { 219,6141 }, { 220,6141 }, { 221,6141 }, { 222,6141 }, { 223,6141 }, + { 224,6141 }, { 225,6141 }, { 226,6141 }, { 227,6141 }, { 228,6141 }, + { 229,6141 }, { 230,6141 }, { 231,6141 }, { 232,6141 }, { 233,6141 }, + { 234,6141 }, { 235,6141 }, { 236,6141 }, { 237,6141 }, { 238,6141 }, + { 239,6141 }, { 240,6141 }, { 241,6141 }, { 242,6141 }, { 243,6141 }, + { 244,6141 }, { 245,6141 }, { 246,6141 }, { 247,6141 }, { 248,6141 }, + { 249,6141 }, { 250,6141 }, { 251,6141 }, { 252,6141 }, { 253,6141 }, + { 254,6141 }, { 255,6141 }, { 0, 74 }, { 0,13710 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,5884 }, + { 0, 0 }, { 0, 0 }, { 39,-1258 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,5884 }, { 49,5884 }, { 50,5884 }, { 51,5884 }, + { 52,5884 }, { 53,5884 }, { 54,5884 }, { 55,5884 }, { 56,5884 }, + { 57,5884 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5884 }, { 66,5884 }, + { 67,5884 }, { 68,5884 }, { 69,5884 }, { 70,5884 }, { 71,5884 }, + { 72,5884 }, { 73,5884 }, { 74,5884 }, { 75,5884 }, { 76,5884 }, + { 77,5884 }, { 78,5884 }, { 79,5884 }, { 80,5884 }, { 81,5884 }, + { 82,5884 }, { 83,5884 }, { 84,5884 }, { 85,5884 }, { 86,5884 }, + { 87,5884 }, { 88,5884 }, { 89,5884 }, { 90,5884 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5884 }, { 0, 0 }, + { 97,5884 }, { 98,5884 }, { 99,5884 }, { 100,5884 }, { 101,5884 }, + { 102,5884 }, { 103,5884 }, { 104,5884 }, { 105,5884 }, { 106,5884 }, + { 107,5884 }, { 108,5884 }, { 109,5884 }, { 110,5884 }, { 111,5884 }, + + { 112,5884 }, { 113,5884 }, { 114,5884 }, { 115,5884 }, { 116,5884 }, + { 117,5884 }, { 118,5884 }, { 119,5884 }, { 120,5884 }, { 121,5884 }, + { 122,5884 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 128,5884 }, { 129,5884 }, { 130,5884 }, { 131,5884 }, + { 132,5884 }, { 133,5884 }, { 134,5884 }, { 135,5884 }, { 136,5884 }, + { 137,5884 }, { 138,5884 }, { 139,5884 }, { 140,5884 }, { 141,5884 }, + { 142,5884 }, { 143,5884 }, { 144,5884 }, { 145,5884 }, { 146,5884 }, + { 147,5884 }, { 148,5884 }, { 149,5884 }, { 150,5884 }, { 151,5884 }, + { 152,5884 }, { 153,5884 }, { 154,5884 }, { 155,5884 }, { 156,5884 }, + { 157,5884 }, { 158,5884 }, { 159,5884 }, { 160,5884 }, { 161,5884 }, + + { 162,5884 }, { 163,5884 }, { 164,5884 }, { 165,5884 }, { 166,5884 }, + { 167,5884 }, { 168,5884 }, { 169,5884 }, { 170,5884 }, { 171,5884 }, + { 172,5884 }, { 173,5884 }, { 174,5884 }, { 175,5884 }, { 176,5884 }, + { 177,5884 }, { 178,5884 }, { 179,5884 }, { 180,5884 }, { 181,5884 }, + { 182,5884 }, { 183,5884 }, { 184,5884 }, { 185,5884 }, { 186,5884 }, + { 187,5884 }, { 188,5884 }, { 189,5884 }, { 190,5884 }, { 191,5884 }, + { 192,5884 }, { 193,5884 }, { 194,5884 }, { 195,5884 }, { 196,5884 }, + { 197,5884 }, { 198,5884 }, { 199,5884 }, { 200,5884 }, { 201,5884 }, + { 202,5884 }, { 203,5884 }, { 204,5884 }, { 205,5884 }, { 206,5884 }, + { 207,5884 }, { 208,5884 }, { 209,5884 }, { 210,5884 }, { 211,5884 }, + + { 212,5884 }, { 213,5884 }, { 214,5884 }, { 215,5884 }, { 216,5884 }, + { 217,5884 }, { 218,5884 }, { 219,5884 }, { 220,5884 }, { 221,5884 }, + { 222,5884 }, { 223,5884 }, { 224,5884 }, { 225,5884 }, { 226,5884 }, + { 227,5884 }, { 228,5884 }, { 229,5884 }, { 230,5884 }, { 231,5884 }, + { 232,5884 }, { 233,5884 }, { 234,5884 }, { 235,5884 }, { 236,5884 }, + { 237,5884 }, { 238,5884 }, { 239,5884 }, { 240,5884 }, { 241,5884 }, + { 242,5884 }, { 243,5884 }, { 244,5884 }, { 245,5884 }, { 246,5884 }, + { 247,5884 }, { 248,5884 }, { 249,5884 }, { 250,5884 }, { 251,5884 }, + { 252,5884 }, { 253,5884 }, { 254,5884 }, { 255,5884 }, { 0, 74 }, + { 0,13453 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 36,5627 }, { 0, 0 }, { 0, 0 }, { 39,-1513 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5627 }, { 49,5627 }, + { 50,5627 }, { 51,5627 }, { 52,5627 }, { 53,5627 }, { 54,5627 }, + + { 55,5627 }, { 56,5627 }, { 57,5627 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,5627 }, { 66,5627 }, { 67,5627 }, { 68,5627 }, { 69,5627 }, + { 70,5627 }, { 71,5627 }, { 72,5627 }, { 73,5627 }, { 74,5627 }, + { 75,5627 }, { 76,5627 }, { 77,5627 }, { 78,5627 }, { 79,5627 }, + { 80,5627 }, { 81,5627 }, { 82,5627 }, { 83,5627 }, { 84,5627 }, + { 85,5627 }, { 86,5627 }, { 87,5627 }, { 88,5627 }, { 89,5627 }, + { 90,5627 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,5627 }, { 0, 0 }, { 97,5627 }, { 98,5627 }, { 99,5627 }, + { 100,5627 }, { 101,5627 }, { 102,5627 }, { 103,5627 }, { 104,5627 }, - { 255,5663 }, { 0, 63 }, { 0,10321 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,5406 }, { 0, 0 }, - { 0, 0 }, { 39,-776 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 48,5406 }, { 49,5406 }, { 50,5406 }, { 51,5406 }, { 52,5406 }, - { 53,5406 }, { 54,5406 }, { 55,5406 }, { 56,5406 }, { 57,5406 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65,5406 }, { 66,5406 }, { 67,5406 }, - { 68,5406 }, { 69,5406 }, { 70,5406 }, { 71,5406 }, { 72,5406 }, - { 73,5406 }, { 74,5406 }, { 75,5406 }, { 76,5406 }, { 77,5406 }, - { 78,5406 }, { 79,5406 }, { 80,5406 }, { 81,5406 }, { 82,5406 }, - { 83,5406 }, { 84,5406 }, { 85,5406 }, { 86,5406 }, { 87,5406 }, - { 88,5406 }, { 89,5406 }, { 90,5406 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 95,5406 }, { 0, 0 }, { 97,5406 }, + { 105,5627 }, { 106,5627 }, { 107,5627 }, { 108,5627 }, { 109,5627 }, + { 110,5627 }, { 111,5627 }, { 112,5627 }, { 113,5627 }, { 114,5627 }, + { 115,5627 }, { 116,5627 }, { 117,5627 }, { 118,5627 }, { 119,5627 }, + { 120,5627 }, { 121,5627 }, { 122,5627 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,5627 }, { 129,5627 }, + { 130,5627 }, { 131,5627 }, { 132,5627 }, { 133,5627 }, { 134,5627 }, + { 135,5627 }, { 136,5627 }, { 137,5627 }, { 138,5627 }, { 139,5627 }, + { 140,5627 }, { 141,5627 }, { 142,5627 }, { 143,5627 }, { 144,5627 }, + { 145,5627 }, { 146,5627 }, { 147,5627 }, { 148,5627 }, { 149,5627 }, + { 150,5627 }, { 151,5627 }, { 152,5627 }, { 153,5627 }, { 154,5627 }, - { 98,5406 }, { 99,5406 }, { 100,5406 }, { 101,5406 }, { 102,5406 }, - { 103,5406 }, { 104,5406 }, { 105,5406 }, { 106,5406 }, { 107,5406 }, - { 108,5406 }, { 109,5406 }, { 110,5406 }, { 111,5406 }, { 112,5406 }, - { 113,5406 }, { 114,5406 }, { 115,5406 }, { 116,5406 }, { 117,5406 }, - { 118,5406 }, { 119,5406 }, { 120,5406 }, { 121,5406 }, { 122,5406 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 128,5406 }, { 129,5406 }, { 130,5406 }, { 131,5406 }, { 132,5406 }, - { 133,5406 }, { 134,5406 }, { 135,5406 }, { 136,5406 }, { 137,5406 }, - { 138,5406 }, { 139,5406 }, { 140,5406 }, { 141,5406 }, { 142,5406 }, - { 143,5406 }, { 144,5406 }, { 145,5406 }, { 146,5406 }, { 147,5406 }, - - { 148,5406 }, { 149,5406 }, { 150,5406 }, { 151,5406 }, { 152,5406 }, - { 153,5406 }, { 154,5406 }, { 155,5406 }, { 156,5406 }, { 157,5406 }, - { 158,5406 }, { 159,5406 }, { 160,5406 }, { 161,5406 }, { 162,5406 }, - { 163,5406 }, { 164,5406 }, { 165,5406 }, { 166,5406 }, { 167,5406 }, - { 168,5406 }, { 169,5406 }, { 170,5406 }, { 171,5406 }, { 172,5406 }, - { 173,5406 }, { 174,5406 }, { 175,5406 }, { 176,5406 }, { 177,5406 }, - { 178,5406 }, { 179,5406 }, { 180,5406 }, { 181,5406 }, { 182,5406 }, - { 183,5406 }, { 184,5406 }, { 185,5406 }, { 186,5406 }, { 187,5406 }, - { 188,5406 }, { 189,5406 }, { 190,5406 }, { 191,5406 }, { 192,5406 }, - { 193,5406 }, { 194,5406 }, { 195,5406 }, { 196,5406 }, { 197,5406 }, - - { 198,5406 }, { 199,5406 }, { 200,5406 }, { 201,5406 }, { 202,5406 }, - { 203,5406 }, { 204,5406 }, { 205,5406 }, { 206,5406 }, { 207,5406 }, - { 208,5406 }, { 209,5406 }, { 210,5406 }, { 211,5406 }, { 212,5406 }, - { 213,5406 }, { 214,5406 }, { 215,5406 }, { 216,5406 }, { 217,5406 }, - { 218,5406 }, { 219,5406 }, { 220,5406 }, { 221,5406 }, { 222,5406 }, - { 223,5406 }, { 224,5406 }, { 225,5406 }, { 226,5406 }, { 227,5406 }, - { 228,5406 }, { 229,5406 }, { 230,5406 }, { 231,5406 }, { 232,5406 }, - { 233,5406 }, { 234,5406 }, { 235,5406 }, { 236,5406 }, { 237,5406 }, - { 238,5406 }, { 239,5406 }, { 240,5406 }, { 241,5406 }, { 242,5406 }, - { 243,5406 }, { 244,5406 }, { 245,5406 }, { 246,5406 }, { 247,5406 }, - - { 248,5406 }, { 249,5406 }, { 250,5406 }, { 251,5406 }, { 252,5406 }, - { 253,5406 }, { 254,5406 }, { 255,5406 }, { 0, 63 }, { 0,10064 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 36,5149 }, { 0, 0 }, { 0, 0 }, { 39,-1027 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 48,5149 }, { 49,5149 }, { 50,5149 }, - { 51,5149 }, { 52,5149 }, { 53,5149 }, { 54,5149 }, { 55,5149 }, - { 56,5149 }, { 57,5149 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5149 }, - { 66,5149 }, { 67,5149 }, { 68,5149 }, { 69,5149 }, { 70,5149 }, - { 71,5149 }, { 72,5149 }, { 73,5149 }, { 74,5149 }, { 75,5149 }, - { 76,5149 }, { 77,5149 }, { 78,5149 }, { 79,5149 }, { 80,5149 }, - { 81,5149 }, { 82,5149 }, { 83,5149 }, { 84,5149 }, { 85,5149 }, - { 86,5149 }, { 87,5149 }, { 88,5149 }, { 89,5149 }, { 90,5149 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5149 }, - { 0, 0 }, { 97,5149 }, { 98,5149 }, { 99,5149 }, { 100,5149 }, - { 101,5149 }, { 102,5149 }, { 103,5149 }, { 104,5149 }, { 105,5149 }, - { 106,5149 }, { 107,5149 }, { 108,5149 }, { 109,5149 }, { 110,5149 }, - { 111,5149 }, { 112,5149 }, { 113,5149 }, { 114,5149 }, { 115,5149 }, - { 116,5149 }, { 117,5149 }, { 118,5149 }, { 119,5149 }, { 120,5149 }, - { 121,5149 }, { 122,5149 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 128,5149 }, { 129,5149 }, { 130,5149 }, - { 131,5149 }, { 132,5149 }, { 133,5149 }, { 134,5149 }, { 135,5149 }, - { 136,5149 }, { 137,5149 }, { 138,5149 }, { 139,5149 }, { 140,5149 }, + { 155,5627 }, { 156,5627 }, { 157,5627 }, { 158,5627 }, { 159,5627 }, + { 160,5627 }, { 161,5627 }, { 162,5627 }, { 163,5627 }, { 164,5627 }, + { 165,5627 }, { 166,5627 }, { 167,5627 }, { 168,5627 }, { 169,5627 }, + { 170,5627 }, { 171,5627 }, { 172,5627 }, { 173,5627 }, { 174,5627 }, + { 175,5627 }, { 176,5627 }, { 177,5627 }, { 178,5627 }, { 179,5627 }, + { 180,5627 }, { 181,5627 }, { 182,5627 }, { 183,5627 }, { 184,5627 }, + { 185,5627 }, { 186,5627 }, { 187,5627 }, { 188,5627 }, { 189,5627 }, + { 190,5627 }, { 191,5627 }, { 192,5627 }, { 193,5627 }, { 194,5627 }, + { 195,5627 }, { 196,5627 }, { 197,5627 }, { 198,5627 }, { 199,5627 }, + { 200,5627 }, { 201,5627 }, { 202,5627 }, { 203,5627 }, { 204,5627 }, - { 141,5149 }, { 142,5149 }, { 143,5149 }, { 144,5149 }, { 145,5149 }, - { 146,5149 }, { 147,5149 }, { 148,5149 }, { 149,5149 }, { 150,5149 }, - { 151,5149 }, { 152,5149 }, { 153,5149 }, { 154,5149 }, { 155,5149 }, - { 156,5149 }, { 157,5149 }, { 158,5149 }, { 159,5149 }, { 160,5149 }, - { 161,5149 }, { 162,5149 }, { 163,5149 }, { 164,5149 }, { 165,5149 }, - { 166,5149 }, { 167,5149 }, { 168,5149 }, { 169,5149 }, { 170,5149 }, - { 171,5149 }, { 172,5149 }, { 173,5149 }, { 174,5149 }, { 175,5149 }, - { 176,5149 }, { 177,5149 }, { 178,5149 }, { 179,5149 }, { 180,5149 }, - { 181,5149 }, { 182,5149 }, { 183,5149 }, { 184,5149 }, { 185,5149 }, - { 186,5149 }, { 187,5149 }, { 188,5149 }, { 189,5149 }, { 190,5149 }, - - { 191,5149 }, { 192,5149 }, { 193,5149 }, { 194,5149 }, { 195,5149 }, - { 196,5149 }, { 197,5149 }, { 198,5149 }, { 199,5149 }, { 200,5149 }, - { 201,5149 }, { 202,5149 }, { 203,5149 }, { 204,5149 }, { 205,5149 }, - { 206,5149 }, { 207,5149 }, { 208,5149 }, { 209,5149 }, { 210,5149 }, - { 211,5149 }, { 212,5149 }, { 213,5149 }, { 214,5149 }, { 215,5149 }, - { 216,5149 }, { 217,5149 }, { 218,5149 }, { 219,5149 }, { 220,5149 }, - { 221,5149 }, { 222,5149 }, { 223,5149 }, { 224,5149 }, { 225,5149 }, - { 226,5149 }, { 227,5149 }, { 228,5149 }, { 229,5149 }, { 230,5149 }, - { 231,5149 }, { 232,5149 }, { 233,5149 }, { 234,5149 }, { 235,5149 }, - { 236,5149 }, { 237,5149 }, { 238,5149 }, { 239,5149 }, { 240,5149 }, - - { 241,5149 }, { 242,5149 }, { 243,5149 }, { 244,5149 }, { 245,5149 }, - { 246,5149 }, { 247,5149 }, { 248,5149 }, { 249,5149 }, { 250,5149 }, - { 251,5149 }, { 252,5149 }, { 253,5149 }, { 254,5149 }, { 255,5149 }, - { 0, 63 }, { 0,9807 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 36,4892 }, { 0, 0 }, { 0, 0 }, - { 39,-1282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,4892 }, - { 49,4892 }, { 50,4892 }, { 51,4892 }, { 52,4892 }, { 53,4892 }, - { 54,4892 }, { 55,4892 }, { 56,4892 }, { 57,4892 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 65,4892 }, { 66,4892 }, { 67,4892 }, { 68,4892 }, - { 69,4892 }, { 70,4892 }, { 71,4892 }, { 72,4892 }, { 73,4892 }, - { 74,4892 }, { 75,4892 }, { 76,4892 }, { 77,4892 }, { 78,4892 }, - { 79,4892 }, { 80,4892 }, { 81,4892 }, { 82,4892 }, { 83,4892 }, - - { 84,4892 }, { 85,4892 }, { 86,4892 }, { 87,4892 }, { 88,4892 }, - { 89,4892 }, { 90,4892 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 95,4892 }, { 0, 0 }, { 97,4892 }, { 98,4892 }, - { 99,4892 }, { 100,4892 }, { 101,4892 }, { 102,4892 }, { 103,4892 }, - { 104,4892 }, { 105,4892 }, { 106,4892 }, { 107,4892 }, { 108,4892 }, - { 109,4892 }, { 110,4892 }, { 111,4892 }, { 112,4892 }, { 113,4892 }, - { 114,4892 }, { 115,4892 }, { 116,4892 }, { 117,4892 }, { 118,4892 }, - { 119,4892 }, { 120,4892 }, { 121,4892 }, { 122,4892 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,4892 }, - { 129,4892 }, { 130,4892 }, { 131,4892 }, { 132,4892 }, { 133,4892 }, - - { 134,4892 }, { 135,4892 }, { 136,4892 }, { 137,4892 }, { 138,4892 }, - { 139,4892 }, { 140,4892 }, { 141,4892 }, { 142,4892 }, { 143,4892 }, - { 144,4892 }, { 145,4892 }, { 146,4892 }, { 147,4892 }, { 148,4892 }, - { 149,4892 }, { 150,4892 }, { 151,4892 }, { 152,4892 }, { 153,4892 }, - { 154,4892 }, { 155,4892 }, { 156,4892 }, { 157,4892 }, { 158,4892 }, - { 159,4892 }, { 160,4892 }, { 161,4892 }, { 162,4892 }, { 163,4892 }, - { 164,4892 }, { 165,4892 }, { 166,4892 }, { 167,4892 }, { 168,4892 }, - { 169,4892 }, { 170,4892 }, { 171,4892 }, { 172,4892 }, { 173,4892 }, - { 174,4892 }, { 175,4892 }, { 176,4892 }, { 177,4892 }, { 178,4892 }, - { 179,4892 }, { 180,4892 }, { 181,4892 }, { 182,4892 }, { 183,4892 }, - - { 184,4892 }, { 185,4892 }, { 186,4892 }, { 187,4892 }, { 188,4892 }, - { 189,4892 }, { 190,4892 }, { 191,4892 }, { 192,4892 }, { 193,4892 }, - { 194,4892 }, { 195,4892 }, { 196,4892 }, { 197,4892 }, { 198,4892 }, - { 199,4892 }, { 200,4892 }, { 201,4892 }, { 202,4892 }, { 203,4892 }, - { 204,4892 }, { 205,4892 }, { 206,4892 }, { 207,4892 }, { 208,4892 }, - { 209,4892 }, { 210,4892 }, { 211,4892 }, { 212,4892 }, { 213,4892 }, - { 214,4892 }, { 215,4892 }, { 216,4892 }, { 217,4892 }, { 218,4892 }, - { 219,4892 }, { 220,4892 }, { 221,4892 }, { 222,4892 }, { 223,4892 }, - { 224,4892 }, { 225,4892 }, { 226,4892 }, { 227,4892 }, { 228,4892 }, - { 229,4892 }, { 230,4892 }, { 231,4892 }, { 232,4892 }, { 233,4892 }, - - { 234,4892 }, { 235,4892 }, { 236,4892 }, { 237,4892 }, { 238,4892 }, - { 239,4892 }, { 240,4892 }, { 241,4892 }, { 242,4892 }, { 243,4892 }, - { 244,4892 }, { 245,4892 }, { 246,4892 }, { 247,4892 }, { 248,4892 }, - { 249,4892 }, { 250,4892 }, { 251,4892 }, { 252,4892 }, { 253,4892 }, - { 254,4892 }, { 255,4892 }, { 0, 63 }, { 0,9550 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,4635 }, - { 0, 0 }, { 38,-1304 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 48,4635 }, { 49,4635 }, { 50,4635 }, { 51,4635 }, - { 52,4635 }, { 53,4635 }, { 54,4635 }, { 55,4635 }, { 56,4635 }, - { 57,4635 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,4635 }, { 66,4635 }, - { 67,4635 }, { 68,4635 }, { 69,4635 }, { 70,4635 }, { 71,4635 }, - { 72,4635 }, { 73,4635 }, { 74,4635 }, { 75,4635 }, { 76,4635 }, - - { 77,4635 }, { 78,4635 }, { 79,4635 }, { 80,4635 }, { 81,4635 }, - { 82,4635 }, { 83,4635 }, { 84,4635 }, { 85,4635 }, { 86,4635 }, - { 87,4635 }, { 88,4635 }, { 89,4635 }, { 90,4635 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,4635 }, { 0, 0 }, - { 97,4635 }, { 98,4635 }, { 99,4635 }, { 100,4635 }, { 101,4635 }, - { 102,4635 }, { 103,4635 }, { 104,4635 }, { 105,4635 }, { 106,4635 }, - { 107,4635 }, { 108,4635 }, { 109,4635 }, { 110,4635 }, { 111,4635 }, - { 112,4635 }, { 113,4635 }, { 114,4635 }, { 115,4635 }, { 116,4635 }, - { 117,4635 }, { 118,4635 }, { 119,4635 }, { 120,4635 }, { 121,4635 }, - { 122,4635 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 128,4635 }, { 129,4635 }, { 130,4635 }, { 131,4635 }, - { 132,4635 }, { 133,4635 }, { 134,4635 }, { 135,4635 }, { 136,4635 }, - { 137,4635 }, { 138,4635 }, { 139,4635 }, { 140,4635 }, { 141,4635 }, - { 142,4635 }, { 143,4635 }, { 144,4635 }, { 145,4635 }, { 146,4635 }, - { 147,4635 }, { 148,4635 }, { 149,4635 }, { 150,4635 }, { 151,4635 }, - { 152,4635 }, { 153,4635 }, { 154,4635 }, { 155,4635 }, { 156,4635 }, - { 157,4635 }, { 158,4635 }, { 159,4635 }, { 160,4635 }, { 161,4635 }, - { 162,4635 }, { 163,4635 }, { 164,4635 }, { 165,4635 }, { 166,4635 }, - { 167,4635 }, { 168,4635 }, { 169,4635 }, { 170,4635 }, { 171,4635 }, - { 172,4635 }, { 173,4635 }, { 174,4635 }, { 175,4635 }, { 176,4635 }, - - { 177,4635 }, { 178,4635 }, { 179,4635 }, { 180,4635 }, { 181,4635 }, - { 182,4635 }, { 183,4635 }, { 184,4635 }, { 185,4635 }, { 186,4635 }, - { 187,4635 }, { 188,4635 }, { 189,4635 }, { 190,4635 }, { 191,4635 }, - { 192,4635 }, { 193,4635 }, { 194,4635 }, { 195,4635 }, { 196,4635 }, - { 197,4635 }, { 198,4635 }, { 199,4635 }, { 200,4635 }, { 201,4635 }, - { 202,4635 }, { 203,4635 }, { 204,4635 }, { 205,4635 }, { 206,4635 }, - { 207,4635 }, { 208,4635 }, { 209,4635 }, { 210,4635 }, { 211,4635 }, - { 212,4635 }, { 213,4635 }, { 214,4635 }, { 215,4635 }, { 216,4635 }, - { 217,4635 }, { 218,4635 }, { 219,4635 }, { 220,4635 }, { 221,4635 }, - { 222,4635 }, { 223,4635 }, { 224,4635 }, { 225,4635 }, { 226,4635 }, - - { 227,4635 }, { 228,4635 }, { 229,4635 }, { 230,4635 }, { 231,4635 }, - { 232,4635 }, { 233,4635 }, { 234,4635 }, { 235,4635 }, { 236,4635 }, - { 237,4635 }, { 238,4635 }, { 239,4635 }, { 240,4635 }, { 241,4635 }, - { 242,4635 }, { 243,4635 }, { 244,4635 }, { 245,4635 }, { 246,4635 }, - { 247,4635 }, { 248,4635 }, { 249,4635 }, { 250,4635 }, { 251,4635 }, - { 252,4635 }, { 253,4635 }, { 254,4635 }, { 255,4635 }, { 0, 63 }, - { 0,9293 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 36,4378 }, { 0, 0 }, { 0, 0 }, { 39,-1559 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,4378 }, { 49,4378 }, - { 50,4378 }, { 51,4378 }, { 52,4378 }, { 53,4378 }, { 54,4378 }, - { 55,4378 }, { 56,4378 }, { 57,4378 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,4378 }, { 66,4378 }, { 67,4378 }, { 68,4378 }, { 69,4378 }, - - { 70,4378 }, { 71,4378 }, { 72,4378 }, { 73,4378 }, { 74,4378 }, - { 75,4378 }, { 76,4378 }, { 77,4378 }, { 78,4378 }, { 79,4378 }, - { 80,4378 }, { 81,4378 }, { 82,4378 }, { 83,4378 }, { 84,4378 }, - { 85,4378 }, { 86,4378 }, { 87,4378 }, { 88,4378 }, { 89,4378 }, - { 90,4378 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 95,4378 }, { 0, 0 }, { 97,4378 }, { 98,4378 }, { 99,4378 }, - { 100,4378 }, { 101,4378 }, { 102,4378 }, { 103,4378 }, { 104,4378 }, - { 105,4378 }, { 106,4378 }, { 107,4378 }, { 108,4378 }, { 109,4378 }, - { 110,4378 }, { 111,4378 }, { 112,4378 }, { 113,4378 }, { 114,4378 }, - { 115,4378 }, { 116,4378 }, { 117,4378 }, { 118,4378 }, { 119,4378 }, - - { 120,4378 }, { 121,4378 }, { 122,4378 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,4378 }, { 129,4378 }, - { 130,4378 }, { 131,4378 }, { 132,4378 }, { 133,4378 }, { 134,4378 }, - { 135,4378 }, { 136,4378 }, { 137,4378 }, { 138,4378 }, { 139,4378 }, - { 140,4378 }, { 141,4378 }, { 142,4378 }, { 143,4378 }, { 144,4378 }, - { 145,4378 }, { 146,4378 }, { 147,4378 }, { 148,4378 }, { 149,4378 }, - { 150,4378 }, { 151,4378 }, { 152,4378 }, { 153,4378 }, { 154,4378 }, - { 155,4378 }, { 156,4378 }, { 157,4378 }, { 158,4378 }, { 159,4378 }, - { 160,4378 }, { 161,4378 }, { 162,4378 }, { 163,4378 }, { 164,4378 }, - { 165,4378 }, { 166,4378 }, { 167,4378 }, { 168,4378 }, { 169,4378 }, - - { 170,4378 }, { 171,4378 }, { 172,4378 }, { 173,4378 }, { 174,4378 }, - { 175,4378 }, { 176,4378 }, { 177,4378 }, { 178,4378 }, { 179,4378 }, - { 180,4378 }, { 181,4378 }, { 182,4378 }, { 183,4378 }, { 184,4378 }, - { 185,4378 }, { 186,4378 }, { 187,4378 }, { 188,4378 }, { 189,4378 }, - { 190,4378 }, { 191,4378 }, { 192,4378 }, { 193,4378 }, { 194,4378 }, - { 195,4378 }, { 196,4378 }, { 197,4378 }, { 198,4378 }, { 199,4378 }, - { 200,4378 }, { 201,4378 }, { 202,4378 }, { 203,4378 }, { 204,4378 }, - { 205,4378 }, { 206,4378 }, { 207,4378 }, { 208,4378 }, { 209,4378 }, - { 210,4378 }, { 211,4378 }, { 212,4378 }, { 213,4378 }, { 214,4378 }, - { 215,4378 }, { 216,4378 }, { 217,4378 }, { 218,4378 }, { 219,4378 }, - - { 220,4378 }, { 221,4378 }, { 222,4378 }, { 223,4378 }, { 224,4378 }, - { 225,4378 }, { 226,4378 }, { 227,4378 }, { 228,4378 }, { 229,4378 }, - { 230,4378 }, { 231,4378 }, { 232,4378 }, { 233,4378 }, { 234,4378 }, - { 235,4378 }, { 236,4378 }, { 237,4378 }, { 238,4378 }, { 239,4378 }, - { 240,4378 }, { 241,4378 }, { 242,4378 }, { 243,4378 }, { 244,4378 }, - { 245,4378 }, { 246,4378 }, { 247,4378 }, { 248,4378 }, { 249,4378 }, - { 250,4378 }, { 251,4378 }, { 252,4378 }, { 253,4378 }, { 254,4378 }, - { 255,4378 }, { 0, 11 }, { 0,9036 }, { 1,4378 }, { 2,4378 }, - { 3,4378 }, { 4,4378 }, { 5,4378 }, { 6,4378 }, { 7,4378 }, - { 8,4378 }, { 9,4378 }, { 10,4378 }, { 11,4378 }, { 12,4378 }, - - { 13,4378 }, { 14,4378 }, { 15,4378 }, { 16,4378 }, { 17,4378 }, - { 18,4378 }, { 19,4378 }, { 20,4378 }, { 21,4378 }, { 22,4378 }, - { 23,4378 }, { 24,4378 }, { 25,4378 }, { 26,4378 }, { 27,4378 }, - { 28,4378 }, { 29,4378 }, { 30,4378 }, { 31,4378 }, { 32,4378 }, - { 33,4378 }, { 34,4378 }, { 35,4378 }, { 36,4378 }, { 37,4378 }, - { 38,4378 }, { 0, 0 }, { 40,4378 }, { 41,4378 }, { 42,4378 }, - { 43,4378 }, { 44,4378 }, { 45,4378 }, { 46,4378 }, { 47,4378 }, - { 48,4378 }, { 49,4378 }, { 50,4378 }, { 51,4378 }, { 52,4378 }, - { 53,4378 }, { 54,4378 }, { 55,4378 }, { 56,4378 }, { 57,4378 }, - { 58,4378 }, { 59,4378 }, { 60,4378 }, { 61,4378 }, { 62,4378 }, - - { 63,4378 }, { 64,4378 }, { 65,4378 }, { 66,4378 }, { 67,4378 }, - { 68,4378 }, { 69,4378 }, { 70,4378 }, { 71,4378 }, { 72,4378 }, - { 73,4378 }, { 74,4378 }, { 75,4378 }, { 76,4378 }, { 77,4378 }, - { 78,4378 }, { 79,4378 }, { 80,4378 }, { 81,4378 }, { 82,4378 }, - { 83,4378 }, { 84,4378 }, { 85,4378 }, { 86,4378 }, { 87,4378 }, - { 88,4378 }, { 89,4378 }, { 90,4378 }, { 91,4378 }, { 92,4378 }, - { 93,4378 }, { 94,4378 }, { 95,4378 }, { 96,4378 }, { 97,4378 }, - { 98,4378 }, { 99,4378 }, { 100,4378 }, { 101,4378 }, { 102,4378 }, - { 103,4378 }, { 104,4378 }, { 105,4378 }, { 106,4378 }, { 107,4378 }, - { 108,4378 }, { 109,4378 }, { 110,4378 }, { 111,4378 }, { 112,4378 }, - - { 113,4378 }, { 114,4378 }, { 115,4378 }, { 116,4378 }, { 117,4378 }, - { 118,4378 }, { 119,4378 }, { 120,4378 }, { 121,4378 }, { 122,4378 }, - { 123,4378 }, { 124,4378 }, { 125,4378 }, { 126,4378 }, { 127,4378 }, - { 128,4378 }, { 129,4378 }, { 130,4378 }, { 131,4378 }, { 132,4378 }, - { 133,4378 }, { 134,4378 }, { 135,4378 }, { 136,4378 }, { 137,4378 }, - { 138,4378 }, { 139,4378 }, { 140,4378 }, { 141,4378 }, { 142,4378 }, - { 143,4378 }, { 144,4378 }, { 145,4378 }, { 146,4378 }, { 147,4378 }, - { 148,4378 }, { 149,4378 }, { 150,4378 }, { 151,4378 }, { 152,4378 }, - { 153,4378 }, { 154,4378 }, { 155,4378 }, { 156,4378 }, { 157,4378 }, - { 158,4378 }, { 159,4378 }, { 160,4378 }, { 161,4378 }, { 162,4378 }, - - { 163,4378 }, { 164,4378 }, { 165,4378 }, { 166,4378 }, { 167,4378 }, - { 168,4378 }, { 169,4378 }, { 170,4378 }, { 171,4378 }, { 172,4378 }, - { 173,4378 }, { 174,4378 }, { 175,4378 }, { 176,4378 }, { 177,4378 }, - { 178,4378 }, { 179,4378 }, { 180,4378 }, { 181,4378 }, { 182,4378 }, - { 183,4378 }, { 184,4378 }, { 185,4378 }, { 186,4378 }, { 187,4378 }, - { 188,4378 }, { 189,4378 }, { 190,4378 }, { 191,4378 }, { 192,4378 }, - { 193,4378 }, { 194,4378 }, { 195,4378 }, { 196,4378 }, { 197,4378 }, - { 198,4378 }, { 199,4378 }, { 200,4378 }, { 201,4378 }, { 202,4378 }, - { 203,4378 }, { 204,4378 }, { 205,4378 }, { 206,4378 }, { 207,4378 }, - { 208,4378 }, { 209,4378 }, { 210,4378 }, { 211,4378 }, { 212,4378 }, - - { 213,4378 }, { 214,4378 }, { 215,4378 }, { 216,4378 }, { 217,4378 }, - { 218,4378 }, { 219,4378 }, { 220,4378 }, { 221,4378 }, { 222,4378 }, - { 223,4378 }, { 224,4378 }, { 225,4378 }, { 226,4378 }, { 227,4378 }, - { 228,4378 }, { 229,4378 }, { 230,4378 }, { 231,4378 }, { 232,4378 }, - { 233,4378 }, { 234,4378 }, { 235,4378 }, { 236,4378 }, { 237,4378 }, - { 238,4378 }, { 239,4378 }, { 240,4378 }, { 241,4378 }, { 242,4378 }, - { 243,4378 }, { 244,4378 }, { 245,4378 }, { 246,4378 }, { 247,4378 }, - { 248,4378 }, { 249,4378 }, { 250,4378 }, { 251,4378 }, { 252,4378 }, - { 253,4378 }, { 254,4378 }, { 255,4378 }, { 256,4378 }, { 0, 6 }, - { 0,8778 }, { 1,4378 }, { 2,4378 }, { 3,4378 }, { 4,4378 }, - - { 5,4378 }, { 6,4378 }, { 7,4378 }, { 8,4378 }, { 9,4378 }, - { 10,4378 }, { 11,4378 }, { 12,4378 }, { 13,4378 }, { 14,4378 }, - { 15,4378 }, { 16,4378 }, { 17,4378 }, { 18,4378 }, { 19,4378 }, - { 20,4378 }, { 21,4378 }, { 22,4378 }, { 23,4378 }, { 24,4378 }, - { 25,4378 }, { 26,4378 }, { 27,4378 }, { 28,4378 }, { 29,4378 }, - { 30,4378 }, { 31,4378 }, { 32,4378 }, { 33,4378 }, { 34,4378 }, - { 35,4378 }, { 36,4378 }, { 37,4378 }, { 38,4378 }, { 39,4378 }, - { 40,4378 }, { 41,4378 }, { 0, 0 }, { 43,4378 }, { 44,4378 }, - { 45,4378 }, { 46,4378 }, { 0, 0 }, { 48,4378 }, { 49,4378 }, - { 50,4378 }, { 51,4378 }, { 52,4378 }, { 53,4378 }, { 54,4378 }, - - { 55,4378 }, { 56,4378 }, { 57,4378 }, { 58,4378 }, { 59,4378 }, - { 60,4378 }, { 61,4378 }, { 62,4378 }, { 63,4378 }, { 64,4378 }, - { 65,4378 }, { 66,4378 }, { 67,4378 }, { 68,4378 }, { 69,4378 }, - { 70,4378 }, { 71,4378 }, { 72,4378 }, { 73,4378 }, { 74,4378 }, - { 75,4378 }, { 76,4378 }, { 77,4378 }, { 78,4378 }, { 79,4378 }, - { 80,4378 }, { 81,4378 }, { 82,4378 }, { 83,4378 }, { 84,4378 }, - { 85,4378 }, { 86,4378 }, { 87,4378 }, { 88,4378 }, { 89,4378 }, - { 90,4378 }, { 91,4378 }, { 92,4378 }, { 93,4378 }, { 94,4378 }, - { 95,4378 }, { 96,4378 }, { 97,4378 }, { 98,4378 }, { 99,4378 }, - { 100,4378 }, { 101,4378 }, { 102,4378 }, { 103,4378 }, { 104,4378 }, - - { 105,4378 }, { 106,4378 }, { 107,4378 }, { 108,4378 }, { 109,4378 }, - { 110,4378 }, { 111,4378 }, { 112,4378 }, { 113,4378 }, { 114,4378 }, - { 115,4378 }, { 116,4378 }, { 117,4378 }, { 118,4378 }, { 119,4378 }, - { 120,4378 }, { 121,4378 }, { 122,4378 }, { 123,4378 }, { 124,4378 }, - { 125,4378 }, { 126,4378 }, { 127,4378 }, { 128,4378 }, { 129,4378 }, - { 130,4378 }, { 131,4378 }, { 132,4378 }, { 133,4378 }, { 134,4378 }, - { 135,4378 }, { 136,4378 }, { 137,4378 }, { 138,4378 }, { 139,4378 }, - { 140,4378 }, { 141,4378 }, { 142,4378 }, { 143,4378 }, { 144,4378 }, - { 145,4378 }, { 146,4378 }, { 147,4378 }, { 148,4378 }, { 149,4378 }, - { 150,4378 }, { 151,4378 }, { 152,4378 }, { 153,4378 }, { 154,4378 }, - - { 155,4378 }, { 156,4378 }, { 157,4378 }, { 158,4378 }, { 159,4378 }, - { 160,4378 }, { 161,4378 }, { 162,4378 }, { 163,4378 }, { 164,4378 }, - { 165,4378 }, { 166,4378 }, { 167,4378 }, { 168,4378 }, { 169,4378 }, - { 170,4378 }, { 171,4378 }, { 172,4378 }, { 173,4378 }, { 174,4378 }, - { 175,4378 }, { 176,4378 }, { 177,4378 }, { 178,4378 }, { 179,4378 }, - { 180,4378 }, { 181,4378 }, { 182,4378 }, { 183,4378 }, { 184,4378 }, - { 185,4378 }, { 186,4378 }, { 187,4378 }, { 188,4378 }, { 189,4378 }, - { 190,4378 }, { 191,4378 }, { 192,4378 }, { 193,4378 }, { 194,4378 }, - { 195,4378 }, { 196,4378 }, { 197,4378 }, { 198,4378 }, { 199,4378 }, - { 200,4378 }, { 201,4378 }, { 202,4378 }, { 203,4378 }, { 204,4378 }, - - { 205,4378 }, { 206,4378 }, { 207,4378 }, { 208,4378 }, { 209,4378 }, - { 210,4378 }, { 211,4378 }, { 212,4378 }, { 213,4378 }, { 214,4378 }, - { 215,4378 }, { 216,4378 }, { 217,4378 }, { 218,4378 }, { 219,4378 }, - { 220,4378 }, { 221,4378 }, { 222,4378 }, { 223,4378 }, { 224,4378 }, - { 225,4378 }, { 226,4378 }, { 227,4378 }, { 228,4378 }, { 229,4378 }, - { 230,4378 }, { 231,4378 }, { 232,4378 }, { 233,4378 }, { 234,4378 }, - { 235,4378 }, { 236,4378 }, { 237,4378 }, { 238,4378 }, { 239,4378 }, - { 240,4378 }, { 241,4378 }, { 242,4378 }, { 243,4378 }, { 244,4378 }, - { 245,4378 }, { 246,4378 }, { 247,4378 }, { 248,4378 }, { 249,4378 }, - { 250,4378 }, { 251,4378 }, { 252,4378 }, { 253,4378 }, { 254,4378 }, - - { 255,4378 }, { 256,4378 }, { 0, 6 }, { 0,8520 }, { 1,4120 }, - { 2,4120 }, { 3,4120 }, { 4,4120 }, { 5,4120 }, { 6,4120 }, - { 7,4120 }, { 8,4120 }, { 9,4120 }, { 10,4120 }, { 11,4120 }, - { 12,4120 }, { 13,4120 }, { 14,4120 }, { 15,4120 }, { 16,4120 }, - { 17,4120 }, { 18,4120 }, { 19,4120 }, { 20,4120 }, { 21,4120 }, - { 22,4120 }, { 23,4120 }, { 24,4120 }, { 25,4120 }, { 26,4120 }, - { 27,4120 }, { 28,4120 }, { 29,4120 }, { 30,4120 }, { 31,4120 }, - { 32,4120 }, { 33,4120 }, { 34,4120 }, { 35,4120 }, { 36,4120 }, - { 37,4120 }, { 38,4120 }, { 39,4120 }, { 40,4120 }, { 41,4120 }, - { 0, 0 }, { 43,4120 }, { 44,4120 }, { 45,4120 }, { 46,4120 }, - - { 0, 0 }, { 48,4120 }, { 49,4120 }, { 50,4120 }, { 51,4120 }, - { 52,4120 }, { 53,4120 }, { 54,4120 }, { 55,4120 }, { 56,4120 }, - { 57,4120 }, { 58,4120 }, { 59,4120 }, { 60,4120 }, { 61,4120 }, - { 62,4120 }, { 63,4120 }, { 64,4120 }, { 65,4120 }, { 66,4120 }, - { 67,4120 }, { 68,4120 }, { 69,4120 }, { 70,4120 }, { 71,4120 }, - { 72,4120 }, { 73,4120 }, { 74,4120 }, { 75,4120 }, { 76,4120 }, - { 77,4120 }, { 78,4120 }, { 79,4120 }, { 80,4120 }, { 81,4120 }, - { 82,4120 }, { 83,4120 }, { 84,4120 }, { 85,4120 }, { 86,4120 }, - { 87,4120 }, { 88,4120 }, { 89,4120 }, { 90,4120 }, { 91,4120 }, - { 92,4120 }, { 93,4120 }, { 94,4120 }, { 95,4120 }, { 96,4120 }, - - { 97,4120 }, { 98,4120 }, { 99,4120 }, { 100,4120 }, { 101,4120 }, - { 102,4120 }, { 103,4120 }, { 104,4120 }, { 105,4120 }, { 106,4120 }, - { 107,4120 }, { 108,4120 }, { 109,4120 }, { 110,4120 }, { 111,4120 }, - { 112,4120 }, { 113,4120 }, { 114,4120 }, { 115,4120 }, { 116,4120 }, - { 117,4120 }, { 118,4120 }, { 119,4120 }, { 120,4120 }, { 121,4120 }, - { 122,4120 }, { 123,4120 }, { 124,4120 }, { 125,4120 }, { 126,4120 }, - { 127,4120 }, { 128,4120 }, { 129,4120 }, { 130,4120 }, { 131,4120 }, - { 132,4120 }, { 133,4120 }, { 134,4120 }, { 135,4120 }, { 136,4120 }, - { 137,4120 }, { 138,4120 }, { 139,4120 }, { 140,4120 }, { 141,4120 }, - { 142,4120 }, { 143,4120 }, { 144,4120 }, { 145,4120 }, { 146,4120 }, - - { 147,4120 }, { 148,4120 }, { 149,4120 }, { 150,4120 }, { 151,4120 }, - { 152,4120 }, { 153,4120 }, { 154,4120 }, { 155,4120 }, { 156,4120 }, - { 157,4120 }, { 158,4120 }, { 159,4120 }, { 160,4120 }, { 161,4120 }, - { 162,4120 }, { 163,4120 }, { 164,4120 }, { 165,4120 }, { 166,4120 }, - { 167,4120 }, { 168,4120 }, { 169,4120 }, { 170,4120 }, { 171,4120 }, - { 172,4120 }, { 173,4120 }, { 174,4120 }, { 175,4120 }, { 176,4120 }, - { 177,4120 }, { 178,4120 }, { 179,4120 }, { 180,4120 }, { 181,4120 }, - { 182,4120 }, { 183,4120 }, { 184,4120 }, { 185,4120 }, { 186,4120 }, - { 187,4120 }, { 188,4120 }, { 189,4120 }, { 190,4120 }, { 191,4120 }, - { 192,4120 }, { 193,4120 }, { 194,4120 }, { 195,4120 }, { 196,4120 }, - - { 197,4120 }, { 198,4120 }, { 199,4120 }, { 200,4120 }, { 201,4120 }, - { 202,4120 }, { 203,4120 }, { 204,4120 }, { 205,4120 }, { 206,4120 }, - { 207,4120 }, { 208,4120 }, { 209,4120 }, { 210,4120 }, { 211,4120 }, - { 212,4120 }, { 213,4120 }, { 214,4120 }, { 215,4120 }, { 216,4120 }, - { 217,4120 }, { 218,4120 }, { 219,4120 }, { 220,4120 }, { 221,4120 }, - { 222,4120 }, { 223,4120 }, { 224,4120 }, { 225,4120 }, { 226,4120 }, - { 227,4120 }, { 228,4120 }, { 229,4120 }, { 230,4120 }, { 231,4120 }, - { 232,4120 }, { 233,4120 }, { 234,4120 }, { 235,4120 }, { 236,4120 }, - { 237,4120 }, { 238,4120 }, { 239,4120 }, { 240,4120 }, { 241,4120 }, - { 242,4120 }, { 243,4120 }, { 244,4120 }, { 245,4120 }, { 246,4120 }, - - { 247,4120 }, { 248,4120 }, { 249,4120 }, { 250,4120 }, { 251,4120 }, - { 252,4120 }, { 253,4120 }, { 254,4120 }, { 255,4120 }, { 256,4120 }, - { 0, 44 }, { 0,8262 }, { 1,4248 }, { 2,4248 }, { 3,4248 }, - { 4,4248 }, { 5,4248 }, { 6,4248 }, { 7,4248 }, { 8,4248 }, - { 9,4248 }, { 10,4248 }, { 11,4248 }, { 12,4248 }, { 13,4248 }, - { 14,4248 }, { 15,4248 }, { 16,4248 }, { 17,4248 }, { 18,4248 }, - { 19,4248 }, { 20,4248 }, { 21,4248 }, { 22,4248 }, { 23,4248 }, - { 24,4248 }, { 25,4248 }, { 26,4248 }, { 27,4248 }, { 28,4248 }, - { 29,4248 }, { 30,4248 }, { 31,4248 }, { 32,4248 }, { 33,4248 }, - { 0, 0 }, { 35,4248 }, { 36,4248 }, { 37,4248 }, { 38,4248 }, - - { 39,4248 }, { 40,4248 }, { 41,4248 }, { 42,4248 }, { 43,4248 }, - { 44,4248 }, { 45,4248 }, { 46,4248 }, { 47,4248 }, { 48,4248 }, - { 49,4248 }, { 50,4248 }, { 51,4248 }, { 52,4248 }, { 53,4248 }, - { 54,4248 }, { 55,4248 }, { 56,4248 }, { 57,4248 }, { 58,4248 }, - { 59,4248 }, { 60,4248 }, { 61,4248 }, { 62,4248 }, { 63,4248 }, - { 64,4248 }, { 65,4248 }, { 66,4248 }, { 67,4248 }, { 68,4248 }, - { 69,4248 }, { 70,4248 }, { 71,4248 }, { 72,4248 }, { 73,4248 }, - { 74,4248 }, { 75,4248 }, { 76,4248 }, { 77,4248 }, { 78,4248 }, - { 79,4248 }, { 80,4248 }, { 81,4248 }, { 82,4248 }, { 83,4248 }, - { 84,4248 }, { 85,4248 }, { 86,4248 }, { 87,4248 }, { 88,4248 }, - - { 89,4248 }, { 90,4248 }, { 91,4248 }, { 92,4248 }, { 93,4248 }, - { 94,4248 }, { 95,4248 }, { 96,4248 }, { 97,4248 }, { 98,4248 }, - { 99,4248 }, { 100,4248 }, { 101,4248 }, { 102,4248 }, { 103,4248 }, - { 104,4248 }, { 105,4248 }, { 106,4248 }, { 107,4248 }, { 108,4248 }, - { 109,4248 }, { 110,4248 }, { 111,4248 }, { 112,4248 }, { 113,4248 }, - { 114,4248 }, { 115,4248 }, { 116,4248 }, { 117,4248 }, { 118,4248 }, - { 119,4248 }, { 120,4248 }, { 121,4248 }, { 122,4248 }, { 123,4248 }, - { 124,4248 }, { 125,4248 }, { 126,4248 }, { 127,4248 }, { 128,4248 }, - { 129,4248 }, { 130,4248 }, { 131,4248 }, { 132,4248 }, { 133,4248 }, - { 134,4248 }, { 135,4248 }, { 136,4248 }, { 137,4248 }, { 138,4248 }, - - { 139,4248 }, { 140,4248 }, { 141,4248 }, { 142,4248 }, { 143,4248 }, - { 144,4248 }, { 145,4248 }, { 146,4248 }, { 147,4248 }, { 148,4248 }, - { 149,4248 }, { 150,4248 }, { 151,4248 }, { 152,4248 }, { 153,4248 }, - { 154,4248 }, { 155,4248 }, { 156,4248 }, { 157,4248 }, { 158,4248 }, - { 159,4248 }, { 160,4248 }, { 161,4248 }, { 162,4248 }, { 163,4248 }, - { 164,4248 }, { 165,4248 }, { 166,4248 }, { 167,4248 }, { 168,4248 }, - { 169,4248 }, { 170,4248 }, { 171,4248 }, { 172,4248 }, { 173,4248 }, - { 174,4248 }, { 175,4248 }, { 176,4248 }, { 177,4248 }, { 178,4248 }, - { 179,4248 }, { 180,4248 }, { 181,4248 }, { 182,4248 }, { 183,4248 }, - { 184,4248 }, { 185,4248 }, { 186,4248 }, { 187,4248 }, { 188,4248 }, - - { 189,4248 }, { 190,4248 }, { 191,4248 }, { 192,4248 }, { 193,4248 }, - { 194,4248 }, { 195,4248 }, { 196,4248 }, { 197,4248 }, { 198,4248 }, - { 199,4248 }, { 200,4248 }, { 201,4248 }, { 202,4248 }, { 203,4248 }, - { 204,4248 }, { 205,4248 }, { 206,4248 }, { 207,4248 }, { 208,4248 }, - { 209,4248 }, { 210,4248 }, { 211,4248 }, { 212,4248 }, { 213,4248 }, - { 214,4248 }, { 215,4248 }, { 216,4248 }, { 217,4248 }, { 218,4248 }, - { 219,4248 }, { 220,4248 }, { 221,4248 }, { 222,4248 }, { 223,4248 }, - { 224,4248 }, { 225,4248 }, { 226,4248 }, { 227,4248 }, { 228,4248 }, - { 229,4248 }, { 230,4248 }, { 231,4248 }, { 232,4248 }, { 233,4248 }, - { 234,4248 }, { 235,4248 }, { 236,4248 }, { 237,4248 }, { 238,4248 }, - - { 239,4248 }, { 240,4248 }, { 241,4248 }, { 242,4248 }, { 243,4248 }, - { 244,4248 }, { 245,4248 }, { 246,4248 }, { 247,4248 }, { 248,4248 }, - { 249,4248 }, { 250,4248 }, { 251,4248 }, { 252,4248 }, { 253,4248 }, - { 254,4248 }, { 255,4248 }, { 256,4248 }, { 0, 10 }, { 0,8004 }, - { 1,4248 }, { 2,4248 }, { 3,4248 }, { 4,4248 }, { 5,4248 }, - { 6,4248 }, { 7,4248 }, { 8,4248 }, { 9,4248 }, { 10,4248 }, - { 11,4248 }, { 12,4248 }, { 13,4248 }, { 14,4248 }, { 15,4248 }, - { 16,4248 }, { 17,4248 }, { 18,4248 }, { 19,4248 }, { 20,4248 }, - { 21,4248 }, { 22,4248 }, { 23,4248 }, { 24,4248 }, { 25,4248 }, - { 26,4248 }, { 27,4248 }, { 28,4248 }, { 29,4248 }, { 30,4248 }, - - { 31,4248 }, { 32,4248 }, { 33,4248 }, { 34,4248 }, { 35,4248 }, - { 36,4248 }, { 37,4248 }, { 38,4248 }, { 0, 0 }, { 40,4248 }, - { 41,4248 }, { 42,4248 }, { 43,4248 }, { 44,4248 }, { 45,4248 }, - { 46,4248 }, { 47,4248 }, { 48,4248 }, { 49,4248 }, { 50,4248 }, - { 51,4248 }, { 52,4248 }, { 53,4248 }, { 54,4248 }, { 55,4248 }, - { 56,4248 }, { 57,4248 }, { 58,4248 }, { 59,4248 }, { 60,4248 }, - { 61,4248 }, { 62,4248 }, { 63,4248 }, { 64,4248 }, { 65,4248 }, - { 66,4248 }, { 67,4248 }, { 68,4248 }, { 69,4248 }, { 70,4248 }, - { 71,4248 }, { 72,4248 }, { 73,4248 }, { 74,4248 }, { 75,4248 }, - { 76,4248 }, { 77,4248 }, { 78,4248 }, { 79,4248 }, { 80,4248 }, - - { 81,4248 }, { 82,4248 }, { 83,4248 }, { 84,4248 }, { 85,4248 }, - { 86,4248 }, { 87,4248 }, { 88,4248 }, { 89,4248 }, { 90,4248 }, - { 91,4248 }, { 92,4248 }, { 93,4248 }, { 94,4248 }, { 95,4248 }, - { 96,4248 }, { 97,4248 }, { 98,4248 }, { 99,4248 }, { 100,4248 }, - { 101,4248 }, { 102,4248 }, { 103,4248 }, { 104,4248 }, { 105,4248 }, - { 106,4248 }, { 107,4248 }, { 108,4248 }, { 109,4248 }, { 110,4248 }, - { 111,4248 }, { 112,4248 }, { 113,4248 }, { 114,4248 }, { 115,4248 }, - { 116,4248 }, { 117,4248 }, { 118,4248 }, { 119,4248 }, { 120,4248 }, - { 121,4248 }, { 122,4248 }, { 123,4248 }, { 124,4248 }, { 125,4248 }, - { 126,4248 }, { 127,4248 }, { 128,4248 }, { 129,4248 }, { 130,4248 }, - - { 131,4248 }, { 132,4248 }, { 133,4248 }, { 134,4248 }, { 135,4248 }, - { 136,4248 }, { 137,4248 }, { 138,4248 }, { 139,4248 }, { 140,4248 }, - { 141,4248 }, { 142,4248 }, { 143,4248 }, { 144,4248 }, { 145,4248 }, - { 146,4248 }, { 147,4248 }, { 148,4248 }, { 149,4248 }, { 150,4248 }, - { 151,4248 }, { 152,4248 }, { 153,4248 }, { 154,4248 }, { 155,4248 }, - { 156,4248 }, { 157,4248 }, { 158,4248 }, { 159,4248 }, { 160,4248 }, - { 161,4248 }, { 162,4248 }, { 163,4248 }, { 164,4248 }, { 165,4248 }, - { 166,4248 }, { 167,4248 }, { 168,4248 }, { 169,4248 }, { 170,4248 }, - { 171,4248 }, { 172,4248 }, { 173,4248 }, { 174,4248 }, { 175,4248 }, - { 176,4248 }, { 177,4248 }, { 178,4248 }, { 179,4248 }, { 180,4248 }, - - { 181,4248 }, { 182,4248 }, { 183,4248 }, { 184,4248 }, { 185,4248 }, - { 186,4248 }, { 187,4248 }, { 188,4248 }, { 189,4248 }, { 190,4248 }, - { 191,4248 }, { 192,4248 }, { 193,4248 }, { 194,4248 }, { 195,4248 }, - { 196,4248 }, { 197,4248 }, { 198,4248 }, { 199,4248 }, { 200,4248 }, - { 201,4248 }, { 202,4248 }, { 203,4248 }, { 204,4248 }, { 205,4248 }, - { 206,4248 }, { 207,4248 }, { 208,4248 }, { 209,4248 }, { 210,4248 }, - { 211,4248 }, { 212,4248 }, { 213,4248 }, { 214,4248 }, { 215,4248 }, - { 216,4248 }, { 217,4248 }, { 218,4248 }, { 219,4248 }, { 220,4248 }, - { 221,4248 }, { 222,4248 }, { 223,4248 }, { 224,4248 }, { 225,4248 }, - { 226,4248 }, { 227,4248 }, { 228,4248 }, { 229,4248 }, { 230,4248 }, - - { 231,4248 }, { 232,4248 }, { 233,4248 }, { 234,4248 }, { 235,4248 }, - { 236,4248 }, { 237,4248 }, { 238,4248 }, { 239,4248 }, { 240,4248 }, - { 241,4248 }, { 242,4248 }, { 243,4248 }, { 244,4248 }, { 245,4248 }, - { 246,4248 }, { 247,4248 }, { 248,4248 }, { 249,4248 }, { 250,4248 }, - { 251,4248 }, { 252,4248 }, { 253,4248 }, { 254,4248 }, { 255,4248 }, - { 256,4248 }, { 0, 22 }, { 0,7746 }, { 1,4248 }, { 2,4248 }, - { 3,4248 }, { 4,4248 }, { 5,4248 }, { 6,4248 }, { 7,4248 }, - { 8,4248 }, { 9,4248 }, { 10,4248 }, { 11,4248 }, { 12,4248 }, - { 13,4248 }, { 14,4248 }, { 15,4248 }, { 16,4248 }, { 17,4248 }, - { 18,4248 }, { 19,4248 }, { 20,4248 }, { 21,4248 }, { 22,4248 }, - - { 23,4248 }, { 24,4248 }, { 25,4248 }, { 26,4248 }, { 27,4248 }, - { 28,4248 }, { 29,4248 }, { 30,4248 }, { 31,4248 }, { 32,4248 }, - { 33,4248 }, { 34,4248 }, { 35,4248 }, { 36,4248 }, { 37,4248 }, - { 38,4248 }, { 0, 0 }, { 40,4248 }, { 41,4248 }, { 42,4248 }, - { 43,4248 }, { 44,4248 }, { 45,4248 }, { 46,4248 }, { 47,4248 }, - { 48,4248 }, { 49,4248 }, { 50,4248 }, { 51,4248 }, { 52,4248 }, - { 53,4248 }, { 54,4248 }, { 55,4248 }, { 56,4248 }, { 57,4248 }, - { 58,4248 }, { 59,4248 }, { 60,4248 }, { 61,4248 }, { 62,4248 }, - { 63,4248 }, { 64,4248 }, { 65,4248 }, { 66,4248 }, { 67,4248 }, - { 68,4248 }, { 69,4248 }, { 70,4248 }, { 71,4248 }, { 72,4248 }, - - { 73,4248 }, { 74,4248 }, { 75,4248 }, { 76,4248 }, { 77,4248 }, - { 78,4248 }, { 79,4248 }, { 80,4248 }, { 81,4248 }, { 82,4248 }, - { 83,4248 }, { 84,4248 }, { 85,4248 }, { 86,4248 }, { 87,4248 }, - { 88,4248 }, { 89,4248 }, { 90,4248 }, { 91,4248 }, { 92,4248 }, - { 93,4248 }, { 94,4248 }, { 95,4248 }, { 96,4248 }, { 97,4248 }, - { 98,4248 }, { 99,4248 }, { 100,4248 }, { 101,4248 }, { 102,4248 }, - { 103,4248 }, { 104,4248 }, { 105,4248 }, { 106,4248 }, { 107,4248 }, - { 108,4248 }, { 109,4248 }, { 110,4248 }, { 111,4248 }, { 112,4248 }, - { 113,4248 }, { 114,4248 }, { 115,4248 }, { 116,4248 }, { 117,4248 }, - { 118,4248 }, { 119,4248 }, { 120,4248 }, { 121,4248 }, { 122,4248 }, - - { 123,4248 }, { 124,4248 }, { 125,4248 }, { 126,4248 }, { 127,4248 }, - { 128,4248 }, { 129,4248 }, { 130,4248 }, { 131,4248 }, { 132,4248 }, - { 133,4248 }, { 134,4248 }, { 135,4248 }, { 136,4248 }, { 137,4248 }, - { 138,4248 }, { 139,4248 }, { 140,4248 }, { 141,4248 }, { 142,4248 }, - { 143,4248 }, { 144,4248 }, { 145,4248 }, { 146,4248 }, { 147,4248 }, - { 148,4248 }, { 149,4248 }, { 150,4248 }, { 151,4248 }, { 152,4248 }, - { 153,4248 }, { 154,4248 }, { 155,4248 }, { 156,4248 }, { 157,4248 }, - { 158,4248 }, { 159,4248 }, { 160,4248 }, { 161,4248 }, { 162,4248 }, - { 163,4248 }, { 164,4248 }, { 165,4248 }, { 166,4248 }, { 167,4248 }, - { 168,4248 }, { 169,4248 }, { 170,4248 }, { 171,4248 }, { 172,4248 }, - - { 173,4248 }, { 174,4248 }, { 175,4248 }, { 176,4248 }, { 177,4248 }, - { 178,4248 }, { 179,4248 }, { 180,4248 }, { 181,4248 }, { 182,4248 }, - { 183,4248 }, { 184,4248 }, { 185,4248 }, { 186,4248 }, { 187,4248 }, - { 188,4248 }, { 189,4248 }, { 190,4248 }, { 191,4248 }, { 192,4248 }, - { 193,4248 }, { 194,4248 }, { 195,4248 }, { 196,4248 }, { 197,4248 }, - { 198,4248 }, { 199,4248 }, { 200,4248 }, { 201,4248 }, { 202,4248 }, - { 203,4248 }, { 204,4248 }, { 205,4248 }, { 206,4248 }, { 207,4248 }, - { 208,4248 }, { 209,4248 }, { 210,4248 }, { 211,4248 }, { 212,4248 }, - { 213,4248 }, { 214,4248 }, { 215,4248 }, { 216,4248 }, { 217,4248 }, - { 218,4248 }, { 219,4248 }, { 220,4248 }, { 221,4248 }, { 222,4248 }, - - { 223,4248 }, { 224,4248 }, { 225,4248 }, { 226,4248 }, { 227,4248 }, - { 228,4248 }, { 229,4248 }, { 230,4248 }, { 231,4248 }, { 232,4248 }, - { 233,4248 }, { 234,4248 }, { 235,4248 }, { 236,4248 }, { 237,4248 }, - { 238,4248 }, { 239,4248 }, { 240,4248 }, { 241,4248 }, { 242,4248 }, - { 243,4248 }, { 244,4248 }, { 245,4248 }, { 246,4248 }, { 247,4248 }, - { 248,4248 }, { 249,4248 }, { 250,4248 }, { 251,4248 }, { 252,4248 }, - { 253,4248 }, { 254,4248 }, { 255,4248 }, { 256,4248 }, { 0, 19 }, - { 0,7488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 19 }, - { 0,7483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,4248 }, - { 10,4253 }, { 0, 0 }, { 12,4248 }, { 13,4253 }, { 9,4264 }, - - { 10,4264 }, { 0, 0 }, { 12,4264 }, { 13,4264 }, { 0, 0 }, - { 0, 19 }, { 0,7467 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 9,4248 }, { 10,4248 }, { 32,4248 }, { 12,4248 }, { 13,4248 }, - { 0, 0 }, { 0, 0 }, { 32,4264 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,-3352 }, - { 45,-3349 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 45,-3354 }, { 0, 0 }, { 0, 0 }, { 32,4248 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 39,-3368 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 45,-3370 }, { 0, 23 }, { 0,7420 }, { 1,4248 }, - { 2,4248 }, { 3,4248 }, { 4,4248 }, { 5,4248 }, { 6,4248 }, - { 7,4248 }, { 8,4248 }, { 9,4248 }, { 10,4248 }, { 11,4248 }, - { 12,4248 }, { 13,4248 }, { 14,4248 }, { 15,4248 }, { 16,4248 }, - { 17,4248 }, { 18,4248 }, { 19,4248 }, { 20,4248 }, { 21,4248 }, - { 22,4248 }, { 23,4248 }, { 24,4248 }, { 25,4248 }, { 26,4248 }, - { 27,4248 }, { 28,4248 }, { 29,4248 }, { 30,4248 }, { 31,4248 }, - { 32,4248 }, { 33,4248 }, { 34,4248 }, { 35,4248 }, { 36,4248 }, - { 37,4248 }, { 38,4248 }, { 0, 0 }, { 40,4248 }, { 41,4248 }, - { 42,4248 }, { 43,4248 }, { 44,4248 }, { 45,4248 }, { 46,4248 }, - - { 47,4248 }, { 48,4248 }, { 49,4248 }, { 50,4248 }, { 51,4248 }, - { 52,4248 }, { 53,4248 }, { 54,4248 }, { 55,4248 }, { 56,4248 }, - { 57,4248 }, { 58,4248 }, { 59,4248 }, { 60,4248 }, { 61,4248 }, - { 62,4248 }, { 63,4248 }, { 64,4248 }, { 65,4248 }, { 66,4248 }, - { 67,4248 }, { 68,4248 }, { 69,4248 }, { 70,4248 }, { 71,4248 }, - { 72,4248 }, { 73,4248 }, { 74,4248 }, { 75,4248 }, { 76,4248 }, - { 77,4248 }, { 78,4248 }, { 79,4248 }, { 80,4248 }, { 81,4248 }, - { 82,4248 }, { 83,4248 }, { 84,4248 }, { 85,4248 }, { 86,4248 }, - { 87,4248 }, { 88,4248 }, { 89,4248 }, { 90,4248 }, { 91,4248 }, - { 0, 0 }, { 93,4248 }, { 94,4248 }, { 95,4248 }, { 96,4248 }, - - { 97,4248 }, { 98,4248 }, { 99,4248 }, { 100,4248 }, { 101,4248 }, - { 102,4248 }, { 103,4248 }, { 104,4248 }, { 105,4248 }, { 106,4248 }, - { 107,4248 }, { 108,4248 }, { 109,4248 }, { 110,4248 }, { 111,4248 }, - { 112,4248 }, { 113,4248 }, { 114,4248 }, { 115,4248 }, { 116,4248 }, - { 117,4248 }, { 118,4248 }, { 119,4248 }, { 120,4248 }, { 121,4248 }, - { 122,4248 }, { 123,4248 }, { 124,4248 }, { 125,4248 }, { 126,4248 }, - { 127,4248 }, { 128,4248 }, { 129,4248 }, { 130,4248 }, { 131,4248 }, - { 132,4248 }, { 133,4248 }, { 134,4248 }, { 135,4248 }, { 136,4248 }, - { 137,4248 }, { 138,4248 }, { 139,4248 }, { 140,4248 }, { 141,4248 }, - { 142,4248 }, { 143,4248 }, { 144,4248 }, { 145,4248 }, { 146,4248 }, - - { 147,4248 }, { 148,4248 }, { 149,4248 }, { 150,4248 }, { 151,4248 }, - { 152,4248 }, { 153,4248 }, { 154,4248 }, { 155,4248 }, { 156,4248 }, - { 157,4248 }, { 158,4248 }, { 159,4248 }, { 160,4248 }, { 161,4248 }, - { 162,4248 }, { 163,4248 }, { 164,4248 }, { 165,4248 }, { 166,4248 }, - { 167,4248 }, { 168,4248 }, { 169,4248 }, { 170,4248 }, { 171,4248 }, - { 172,4248 }, { 173,4248 }, { 174,4248 }, { 175,4248 }, { 176,4248 }, - { 177,4248 }, { 178,4248 }, { 179,4248 }, { 180,4248 }, { 181,4248 }, - { 182,4248 }, { 183,4248 }, { 184,4248 }, { 185,4248 }, { 186,4248 }, - { 187,4248 }, { 188,4248 }, { 189,4248 }, { 190,4248 }, { 191,4248 }, - { 192,4248 }, { 193,4248 }, { 194,4248 }, { 195,4248 }, { 196,4248 }, - - { 197,4248 }, { 198,4248 }, { 199,4248 }, { 200,4248 }, { 201,4248 }, - { 202,4248 }, { 203,4248 }, { 204,4248 }, { 205,4248 }, { 206,4248 }, - { 207,4248 }, { 208,4248 }, { 209,4248 }, { 210,4248 }, { 211,4248 }, - { 212,4248 }, { 213,4248 }, { 214,4248 }, { 215,4248 }, { 216,4248 }, - { 217,4248 }, { 218,4248 }, { 219,4248 }, { 220,4248 }, { 221,4248 }, - { 222,4248 }, { 223,4248 }, { 224,4248 }, { 225,4248 }, { 226,4248 }, - { 227,4248 }, { 228,4248 }, { 229,4248 }, { 230,4248 }, { 231,4248 }, - { 232,4248 }, { 233,4248 }, { 234,4248 }, { 235,4248 }, { 236,4248 }, - { 237,4248 }, { 238,4248 }, { 239,4248 }, { 240,4248 }, { 241,4248 }, - { 242,4248 }, { 243,4248 }, { 244,4248 }, { 245,4248 }, { 246,4248 }, - - { 247,4248 }, { 248,4248 }, { 249,4248 }, { 250,4248 }, { 251,4248 }, - { 252,4248 }, { 253,4248 }, { 254,4248 }, { 255,4248 }, { 256,4248 }, - { 0, 23 }, { 0,7162 }, { 1,3990 }, { 2,3990 }, { 3,3990 }, - { 4,3990 }, { 5,3990 }, { 6,3990 }, { 7,3990 }, { 8,3990 }, - { 9,3990 }, { 10,3990 }, { 11,3990 }, { 12,3990 }, { 13,3990 }, - { 14,3990 }, { 15,3990 }, { 16,3990 }, { 17,3990 }, { 18,3990 }, - { 19,3990 }, { 20,3990 }, { 21,3990 }, { 22,3990 }, { 23,3990 }, - { 24,3990 }, { 25,3990 }, { 26,3990 }, { 27,3990 }, { 28,3990 }, - { 29,3990 }, { 30,3990 }, { 31,3990 }, { 32,3990 }, { 33,3990 }, - { 34,3990 }, { 35,3990 }, { 36,3990 }, { 37,3990 }, { 38,3990 }, - - { 0, 0 }, { 40,3990 }, { 41,3990 }, { 42,3990 }, { 43,3990 }, - { 44,3990 }, { 45,3990 }, { 46,3990 }, { 47,3990 }, { 48,3990 }, - { 49,3990 }, { 50,3990 }, { 51,3990 }, { 52,3990 }, { 53,3990 }, - { 54,3990 }, { 55,3990 }, { 56,3990 }, { 57,3990 }, { 58,3990 }, - { 59,3990 }, { 60,3990 }, { 61,3990 }, { 62,3990 }, { 63,3990 }, - { 64,3990 }, { 65,3990 }, { 66,3990 }, { 67,3990 }, { 68,3990 }, - { 69,3990 }, { 70,3990 }, { 71,3990 }, { 72,3990 }, { 73,3990 }, - { 74,3990 }, { 75,3990 }, { 76,3990 }, { 77,3990 }, { 78,3990 }, - { 79,3990 }, { 80,3990 }, { 81,3990 }, { 82,3990 }, { 83,3990 }, - { 84,3990 }, { 85,3990 }, { 86,3990 }, { 87,3990 }, { 88,3990 }, - - { 89,3990 }, { 90,3990 }, { 91,3990 }, { 0, 0 }, { 93,3990 }, - { 94,3990 }, { 95,3990 }, { 96,3990 }, { 97,3990 }, { 98,3990 }, - { 99,3990 }, { 100,3990 }, { 101,3990 }, { 102,3990 }, { 103,3990 }, - { 104,3990 }, { 105,3990 }, { 106,3990 }, { 107,3990 }, { 108,3990 }, - { 109,3990 }, { 110,3990 }, { 111,3990 }, { 112,3990 }, { 113,3990 }, - { 114,3990 }, { 115,3990 }, { 116,3990 }, { 117,3990 }, { 118,3990 }, - { 119,3990 }, { 120,3990 }, { 121,3990 }, { 122,3990 }, { 123,3990 }, - { 124,3990 }, { 125,3990 }, { 126,3990 }, { 127,3990 }, { 128,3990 }, - { 129,3990 }, { 130,3990 }, { 131,3990 }, { 132,3990 }, { 133,3990 }, - { 134,3990 }, { 135,3990 }, { 136,3990 }, { 137,3990 }, { 138,3990 }, - - { 139,3990 }, { 140,3990 }, { 141,3990 }, { 142,3990 }, { 143,3990 }, - { 144,3990 }, { 145,3990 }, { 146,3990 }, { 147,3990 }, { 148,3990 }, - { 149,3990 }, { 150,3990 }, { 151,3990 }, { 152,3990 }, { 153,3990 }, - { 154,3990 }, { 155,3990 }, { 156,3990 }, { 157,3990 }, { 158,3990 }, - { 159,3990 }, { 160,3990 }, { 161,3990 }, { 162,3990 }, { 163,3990 }, - { 164,3990 }, { 165,3990 }, { 166,3990 }, { 167,3990 }, { 168,3990 }, - { 169,3990 }, { 170,3990 }, { 171,3990 }, { 172,3990 }, { 173,3990 }, - { 174,3990 }, { 175,3990 }, { 176,3990 }, { 177,3990 }, { 178,3990 }, - { 179,3990 }, { 180,3990 }, { 181,3990 }, { 182,3990 }, { 183,3990 }, - { 184,3990 }, { 185,3990 }, { 186,3990 }, { 187,3990 }, { 188,3990 }, - - { 189,3990 }, { 190,3990 }, { 191,3990 }, { 192,3990 }, { 193,3990 }, - { 194,3990 }, { 195,3990 }, { 196,3990 }, { 197,3990 }, { 198,3990 }, - { 199,3990 }, { 200,3990 }, { 201,3990 }, { 202,3990 }, { 203,3990 }, - { 204,3990 }, { 205,3990 }, { 206,3990 }, { 207,3990 }, { 208,3990 }, - { 209,3990 }, { 210,3990 }, { 211,3990 }, { 212,3990 }, { 213,3990 }, - { 214,3990 }, { 215,3990 }, { 216,3990 }, { 217,3990 }, { 218,3990 }, - { 219,3990 }, { 220,3990 }, { 221,3990 }, { 222,3990 }, { 223,3990 }, - { 224,3990 }, { 225,3990 }, { 226,3990 }, { 227,3990 }, { 228,3990 }, - { 229,3990 }, { 230,3990 }, { 231,3990 }, { 232,3990 }, { 233,3990 }, - { 234,3990 }, { 235,3990 }, { 236,3990 }, { 237,3990 }, { 238,3990 }, - - { 239,3990 }, { 240,3990 }, { 241,3990 }, { 242,3990 }, { 243,3990 }, - { 244,3990 }, { 245,3990 }, { 246,3990 }, { 247,3990 }, { 248,3990 }, - { 249,3990 }, { 250,3990 }, { 251,3990 }, { 252,3990 }, { 253,3990 }, - { 254,3990 }, { 255,3990 }, { 256,3990 }, { 0, 32 }, { 0,6904 }, - { 1,-3929 }, { 2,-3929 }, { 3,-3929 }, { 4,-3929 }, { 5,-3929 }, - { 6,-3929 }, { 7,-3929 }, { 8,-3929 }, { 9,-3929 }, { 10,-3929 }, - { 11,-3929 }, { 12,-3929 }, { 13,-3929 }, { 14,-3929 }, { 15,-3929 }, - { 16,-3929 }, { 17,-3929 }, { 18,-3929 }, { 19,-3929 }, { 20,-3929 }, - { 21,-3929 }, { 22,-3929 }, { 23,-3929 }, { 24,-3929 }, { 25,-3929 }, - { 26,-3929 }, { 27,-3929 }, { 28,-3929 }, { 29,-3929 }, { 30,-3929 }, - - { 31,-3929 }, { 32,-3929 }, { 33,-3929 }, { 34,-3929 }, { 35,-3929 }, - { 36,-3929 }, { 37,-3929 }, { 38,-3929 }, { 39,-3929 }, { 40,-3929 }, - { 41,-3929 }, { 42,-3929 }, { 43,-3929 }, { 44,-3929 }, { 45,-3929 }, - { 46,-3929 }, { 47,-3929 }, { 48,3990 }, { 49,3990 }, { 50,3990 }, - { 51,3990 }, { 52,3990 }, { 53,3990 }, { 54,3990 }, { 55,3990 }, - { 56,-3929 }, { 57,-3929 }, { 58,-3929 }, { 59,-3929 }, { 60,-3929 }, - { 61,-3929 }, { 62,-3929 }, { 63,-3929 }, { 64,-3929 }, { 65,-3929 }, - { 66,-3929 }, { 67,-3929 }, { 68,-3929 }, { 69,-3929 }, { 70,-3929 }, - { 71,-3929 }, { 72,-3929 }, { 73,-3929 }, { 74,-3929 }, { 75,-3929 }, - { 76,-3929 }, { 77,-3929 }, { 78,-3929 }, { 79,-3929 }, { 80,-3929 }, - - { 81,-3929 }, { 82,-3929 }, { 83,-3929 }, { 84,-3929 }, { 85,3998 }, - { 86,-3929 }, { 87,-3929 }, { 88,-3929 }, { 89,-3929 }, { 90,-3929 }, - { 91,-3929 }, { 92,-3929 }, { 93,-3929 }, { 94,-3929 }, { 95,-3929 }, - { 96,-3929 }, { 97,-3929 }, { 98,-3929 }, { 99,-3929 }, { 100,-3929 }, - { 101,-3929 }, { 102,-3929 }, { 103,-3929 }, { 104,-3929 }, { 105,-3929 }, - { 106,-3929 }, { 107,-3929 }, { 108,-3929 }, { 109,-3929 }, { 110,-3929 }, - { 111,-3929 }, { 112,-3929 }, { 113,-3929 }, { 114,-3929 }, { 115,-3929 }, - { 116,-3929 }, { 117,4021 }, { 118,-3929 }, { 119,-3929 }, { 120,4059 }, - { 121,-3929 }, { 122,-3929 }, { 123,-3929 }, { 124,-3929 }, { 125,-3929 }, - { 126,-3929 }, { 127,-3929 }, { 128,-3929 }, { 129,-3929 }, { 130,-3929 }, - - { 131,-3929 }, { 132,-3929 }, { 133,-3929 }, { 134,-3929 }, { 135,-3929 }, - { 136,-3929 }, { 137,-3929 }, { 138,-3929 }, { 139,-3929 }, { 140,-3929 }, - { 141,-3929 }, { 142,-3929 }, { 143,-3929 }, { 144,-3929 }, { 145,-3929 }, - { 146,-3929 }, { 147,-3929 }, { 148,-3929 }, { 149,-3929 }, { 150,-3929 }, - { 151,-3929 }, { 152,-3929 }, { 153,-3929 }, { 154,-3929 }, { 155,-3929 }, - { 156,-3929 }, { 157,-3929 }, { 158,-3929 }, { 159,-3929 }, { 160,-3929 }, - { 161,-3929 }, { 162,-3929 }, { 163,-3929 }, { 164,-3929 }, { 165,-3929 }, - { 166,-3929 }, { 167,-3929 }, { 168,-3929 }, { 169,-3929 }, { 170,-3929 }, - { 171,-3929 }, { 172,-3929 }, { 173,-3929 }, { 174,-3929 }, { 175,-3929 }, - { 176,-3929 }, { 177,-3929 }, { 178,-3929 }, { 179,-3929 }, { 180,-3929 }, - - { 181,-3929 }, { 182,-3929 }, { 183,-3929 }, { 184,-3929 }, { 185,-3929 }, - { 186,-3929 }, { 187,-3929 }, { 188,-3929 }, { 189,-3929 }, { 190,-3929 }, - { 191,-3929 }, { 192,-3929 }, { 193,-3929 }, { 194,-3929 }, { 195,-3929 }, - { 196,-3929 }, { 197,-3929 }, { 198,-3929 }, { 199,-3929 }, { 200,-3929 }, - { 201,-3929 }, { 202,-3929 }, { 203,-3929 }, { 204,-3929 }, { 205,-3929 }, - { 206,-3929 }, { 207,-3929 }, { 208,-3929 }, { 209,-3929 }, { 210,-3929 }, - { 211,-3929 }, { 212,-3929 }, { 213,-3929 }, { 214,-3929 }, { 215,-3929 }, - { 216,-3929 }, { 217,-3929 }, { 218,-3929 }, { 219,-3929 }, { 220,-3929 }, - { 221,-3929 }, { 222,-3929 }, { 223,-3929 }, { 224,-3929 }, { 225,-3929 }, - { 226,-3929 }, { 227,-3929 }, { 228,-3929 }, { 229,-3929 }, { 230,-3929 }, - - { 231,-3929 }, { 232,-3929 }, { 233,-3929 }, { 234,-3929 }, { 235,-3929 }, - { 236,-3929 }, { 237,-3929 }, { 238,-3929 }, { 239,-3929 }, { 240,-3929 }, - { 241,-3929 }, { 242,-3929 }, { 243,-3929 }, { 244,-3929 }, { 245,-3929 }, - { 246,-3929 }, { 247,-3929 }, { 248,-3929 }, { 249,-3929 }, { 250,-3929 }, - { 251,-3929 }, { 252,-3929 }, { 253,-3929 }, { 254,-3929 }, { 255,-3929 }, - { 256,-3929 }, { 0, 36 }, { 0,6646 }, { 1,3905 }, { 2,3905 }, - { 3,3905 }, { 4,3905 }, { 5,3905 }, { 6,3905 }, { 7,3905 }, - { 8,3905 }, { 9,3905 }, { 10,3905 }, { 11,3905 }, { 12,3905 }, - { 13,3905 }, { 14,3905 }, { 15,3905 }, { 16,3905 }, { 17,3905 }, - { 18,3905 }, { 19,3905 }, { 20,3905 }, { 21,3905 }, { 22,3905 }, - - { 23,3905 }, { 24,3905 }, { 25,3905 }, { 26,3905 }, { 27,3905 }, - { 28,3905 }, { 29,3905 }, { 30,3905 }, { 31,3905 }, { 32,3905 }, - { 33,3905 }, { 34,3905 }, { 35,3905 }, { 0, 0 }, { 37,3905 }, - { 38,3905 }, { 39,3905 }, { 40,3905 }, { 41,3905 }, { 42,3905 }, - { 43,3905 }, { 44,3905 }, { 45,3905 }, { 46,3905 }, { 47,3905 }, - { 48,3905 }, { 49,3905 }, { 50,3905 }, { 51,3905 }, { 52,3905 }, - { 53,3905 }, { 54,3905 }, { 55,3905 }, { 56,3905 }, { 57,3905 }, - { 58,3905 }, { 59,3905 }, { 60,3905 }, { 61,3905 }, { 62,3905 }, - { 63,3905 }, { 64,3905 }, { 65,3905 }, { 66,3905 }, { 67,3905 }, - { 68,3905 }, { 69,3905 }, { 70,3905 }, { 71,3905 }, { 72,3905 }, - - { 73,3905 }, { 74,3905 }, { 75,3905 }, { 76,3905 }, { 77,3905 }, - { 78,3905 }, { 79,3905 }, { 80,3905 }, { 81,3905 }, { 82,3905 }, - { 83,3905 }, { 84,3905 }, { 85,3905 }, { 86,3905 }, { 87,3905 }, - { 88,3905 }, { 89,3905 }, { 90,3905 }, { 91,3905 }, { 92,3905 }, - { 93,3905 }, { 94,3905 }, { 95,3905 }, { 96,3905 }, { 97,3905 }, - { 98,3905 }, { 99,3905 }, { 100,3905 }, { 101,3905 }, { 102,3905 }, - { 103,3905 }, { 104,3905 }, { 105,3905 }, { 106,3905 }, { 107,3905 }, - { 108,3905 }, { 109,3905 }, { 110,3905 }, { 111,3905 }, { 112,3905 }, - { 113,3905 }, { 114,3905 }, { 115,3905 }, { 116,3905 }, { 117,3905 }, - { 118,3905 }, { 119,3905 }, { 120,3905 }, { 121,3905 }, { 122,3905 }, - - { 123,3905 }, { 124,3905 }, { 125,3905 }, { 126,3905 }, { 127,3905 }, - { 128,3905 }, { 129,3905 }, { 130,3905 }, { 131,3905 }, { 132,3905 }, - { 133,3905 }, { 134,3905 }, { 135,3905 }, { 136,3905 }, { 137,3905 }, - { 138,3905 }, { 139,3905 }, { 140,3905 }, { 141,3905 }, { 142,3905 }, - { 143,3905 }, { 144,3905 }, { 145,3905 }, { 146,3905 }, { 147,3905 }, - { 148,3905 }, { 149,3905 }, { 150,3905 }, { 151,3905 }, { 152,3905 }, - { 153,3905 }, { 154,3905 }, { 155,3905 }, { 156,3905 }, { 157,3905 }, - { 158,3905 }, { 159,3905 }, { 160,3905 }, { 161,3905 }, { 162,3905 }, - { 163,3905 }, { 164,3905 }, { 165,3905 }, { 166,3905 }, { 167,3905 }, - { 168,3905 }, { 169,3905 }, { 170,3905 }, { 171,3905 }, { 172,3905 }, - - { 173,3905 }, { 174,3905 }, { 175,3905 }, { 176,3905 }, { 177,3905 }, - { 178,3905 }, { 179,3905 }, { 180,3905 }, { 181,3905 }, { 182,3905 }, - { 183,3905 }, { 184,3905 }, { 185,3905 }, { 186,3905 }, { 187,3905 }, - { 188,3905 }, { 189,3905 }, { 190,3905 }, { 191,3905 }, { 192,3905 }, - { 193,3905 }, { 194,3905 }, { 195,3905 }, { 196,3905 }, { 197,3905 }, - { 198,3905 }, { 199,3905 }, { 200,3905 }, { 201,3905 }, { 202,3905 }, - { 203,3905 }, { 204,3905 }, { 205,3905 }, { 206,3905 }, { 207,3905 }, - { 208,3905 }, { 209,3905 }, { 210,3905 }, { 211,3905 }, { 212,3905 }, - { 213,3905 }, { 214,3905 }, { 215,3905 }, { 216,3905 }, { 217,3905 }, - { 218,3905 }, { 219,3905 }, { 220,3905 }, { 221,3905 }, { 222,3905 }, - - { 223,3905 }, { 224,3905 }, { 225,3905 }, { 226,3905 }, { 227,3905 }, - { 228,3905 }, { 229,3905 }, { 230,3905 }, { 231,3905 }, { 232,3905 }, - { 233,3905 }, { 234,3905 }, { 235,3905 }, { 236,3905 }, { 237,3905 }, - { 238,3905 }, { 239,3905 }, { 240,3905 }, { 241,3905 }, { 242,3905 }, - { 243,3905 }, { 244,3905 }, { 245,3905 }, { 246,3905 }, { 247,3905 }, - { 248,3905 }, { 249,3905 }, { 250,3905 }, { 251,3905 }, { 252,3905 }, - { 253,3905 }, { 254,3905 }, { 255,3905 }, { 256,3905 }, { 0, 36 }, - { 0,6388 }, { 1,3647 }, { 2,3647 }, { 3,3647 }, { 4,3647 }, - { 5,3647 }, { 6,3647 }, { 7,3647 }, { 8,3647 }, { 9,3647 }, - { 10,3647 }, { 11,3647 }, { 12,3647 }, { 13,3647 }, { 14,3647 }, - - { 15,3647 }, { 16,3647 }, { 17,3647 }, { 18,3647 }, { 19,3647 }, - { 20,3647 }, { 21,3647 }, { 22,3647 }, { 23,3647 }, { 24,3647 }, - { 25,3647 }, { 26,3647 }, { 27,3647 }, { 28,3647 }, { 29,3647 }, - { 30,3647 }, { 31,3647 }, { 32,3647 }, { 33,3647 }, { 34,3647 }, - { 35,3647 }, { 0, 0 }, { 37,3647 }, { 38,3647 }, { 39,3647 }, - { 40,3647 }, { 41,3647 }, { 42,3647 }, { 43,3647 }, { 44,3647 }, - { 45,3647 }, { 46,3647 }, { 47,3647 }, { 48,3647 }, { 49,3647 }, - { 50,3647 }, { 51,3647 }, { 52,3647 }, { 53,3647 }, { 54,3647 }, - { 55,3647 }, { 56,3647 }, { 57,3647 }, { 58,3647 }, { 59,3647 }, - { 60,3647 }, { 61,3647 }, { 62,3647 }, { 63,3647 }, { 64,3647 }, - - { 65,3647 }, { 66,3647 }, { 67,3647 }, { 68,3647 }, { 69,3647 }, - { 70,3647 }, { 71,3647 }, { 72,3647 }, { 73,3647 }, { 74,3647 }, - { 75,3647 }, { 76,3647 }, { 77,3647 }, { 78,3647 }, { 79,3647 }, - { 80,3647 }, { 81,3647 }, { 82,3647 }, { 83,3647 }, { 84,3647 }, - { 85,3647 }, { 86,3647 }, { 87,3647 }, { 88,3647 }, { 89,3647 }, - { 90,3647 }, { 91,3647 }, { 92,3647 }, { 93,3647 }, { 94,3647 }, - { 95,3647 }, { 96,3647 }, { 97,3647 }, { 98,3647 }, { 99,3647 }, - { 100,3647 }, { 101,3647 }, { 102,3647 }, { 103,3647 }, { 104,3647 }, - { 105,3647 }, { 106,3647 }, { 107,3647 }, { 108,3647 }, { 109,3647 }, - { 110,3647 }, { 111,3647 }, { 112,3647 }, { 113,3647 }, { 114,3647 }, - - { 115,3647 }, { 116,3647 }, { 117,3647 }, { 118,3647 }, { 119,3647 }, - { 120,3647 }, { 121,3647 }, { 122,3647 }, { 123,3647 }, { 124,3647 }, - { 125,3647 }, { 126,3647 }, { 127,3647 }, { 128,3647 }, { 129,3647 }, - { 130,3647 }, { 131,3647 }, { 132,3647 }, { 133,3647 }, { 134,3647 }, - { 135,3647 }, { 136,3647 }, { 137,3647 }, { 138,3647 }, { 139,3647 }, - { 140,3647 }, { 141,3647 }, { 142,3647 }, { 143,3647 }, { 144,3647 }, - { 145,3647 }, { 146,3647 }, { 147,3647 }, { 148,3647 }, { 149,3647 }, - { 150,3647 }, { 151,3647 }, { 152,3647 }, { 153,3647 }, { 154,3647 }, - { 155,3647 }, { 156,3647 }, { 157,3647 }, { 158,3647 }, { 159,3647 }, - { 160,3647 }, { 161,3647 }, { 162,3647 }, { 163,3647 }, { 164,3647 }, - - { 165,3647 }, { 166,3647 }, { 167,3647 }, { 168,3647 }, { 169,3647 }, - { 170,3647 }, { 171,3647 }, { 172,3647 }, { 173,3647 }, { 174,3647 }, - { 175,3647 }, { 176,3647 }, { 177,3647 }, { 178,3647 }, { 179,3647 }, - { 180,3647 }, { 181,3647 }, { 182,3647 }, { 183,3647 }, { 184,3647 }, - { 185,3647 }, { 186,3647 }, { 187,3647 }, { 188,3647 }, { 189,3647 }, - { 190,3647 }, { 191,3647 }, { 192,3647 }, { 193,3647 }, { 194,3647 }, - { 195,3647 }, { 196,3647 }, { 197,3647 }, { 198,3647 }, { 199,3647 }, - { 200,3647 }, { 201,3647 }, { 202,3647 }, { 203,3647 }, { 204,3647 }, - { 205,3647 }, { 206,3647 }, { 207,3647 }, { 208,3647 }, { 209,3647 }, - { 210,3647 }, { 211,3647 }, { 212,3647 }, { 213,3647 }, { 214,3647 }, - - { 215,3647 }, { 216,3647 }, { 217,3647 }, { 218,3647 }, { 219,3647 }, - { 220,3647 }, { 221,3647 }, { 222,3647 }, { 223,3647 }, { 224,3647 }, - { 225,3647 }, { 226,3647 }, { 227,3647 }, { 228,3647 }, { 229,3647 }, - { 230,3647 }, { 231,3647 }, { 232,3647 }, { 233,3647 }, { 234,3647 }, - { 235,3647 }, { 236,3647 }, { 237,3647 }, { 238,3647 }, { 239,3647 }, - { 240,3647 }, { 241,3647 }, { 242,3647 }, { 243,3647 }, { 244,3647 }, - { 245,3647 }, { 246,3647 }, { 247,3647 }, { 248,3647 }, { 249,3647 }, - { 250,3647 }, { 251,3647 }, { 252,3647 }, { 253,3647 }, { 254,3647 }, - { 255,3647 }, { 256,3647 }, { 0, 38 }, { 0,6130 }, { 0, 1 }, - { 0,6128 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, - { 10, 0 }, { 0, 0 }, { 12, 0 }, { 13, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 32, 0 }, { 0, 0 }, { 36,-4701 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,3647 }, { 66,3647 }, - { 67,3647 }, { 68,3647 }, { 69,3647 }, { 70,3647 }, { 71,3647 }, - { 72,3647 }, { 73,3647 }, { 74,3647 }, { 75,3647 }, { 76,3647 }, - { 77,3647 }, { 78,3647 }, { 79,3647 }, { 80,3647 }, { 81,3647 }, - { 82,3647 }, { 83,3647 }, { 84,3647 }, { 85,3647 }, { 86,3647 }, - { 87,3647 }, { 88,3647 }, { 89,3647 }, { 90,3647 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,3647 }, { 0, 0 }, - { 97,3647 }, { 98,3647 }, { 99,3647 }, { 100,3647 }, { 101,3647 }, - { 102,3647 }, { 103,3647 }, { 104,3647 }, { 105,3647 }, { 106,3647 }, - - { 107,3647 }, { 108,3647 }, { 109,3647 }, { 110,3647 }, { 111,3647 }, - { 112,3647 }, { 113,3647 }, { 114,3647 }, { 115,3647 }, { 116,3647 }, - { 117,3647 }, { 118,3647 }, { 119,3647 }, { 120,3647 }, { 121,3647 }, - { 122,3647 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 128,3647 }, { 129,3647 }, { 130,3647 }, { 131,3647 }, - { 132,3647 }, { 133,3647 }, { 134,3647 }, { 135,3647 }, { 136,3647 }, - { 137,3647 }, { 138,3647 }, { 139,3647 }, { 140,3647 }, { 141,3647 }, - { 142,3647 }, { 143,3647 }, { 144,3647 }, { 145,3647 }, { 146,3647 }, - { 147,3647 }, { 148,3647 }, { 149,3647 }, { 150,3647 }, { 151,3647 }, - { 152,3647 }, { 153,3647 }, { 154,3647 }, { 155,3647 }, { 156,3647 }, - - { 157,3647 }, { 158,3647 }, { 159,3647 }, { 160,3647 }, { 161,3647 }, - { 162,3647 }, { 163,3647 }, { 164,3647 }, { 165,3647 }, { 166,3647 }, - { 167,3647 }, { 168,3647 }, { 169,3647 }, { 170,3647 }, { 171,3647 }, - { 172,3647 }, { 173,3647 }, { 174,3647 }, { 175,3647 }, { 176,3647 }, - { 177,3647 }, { 178,3647 }, { 179,3647 }, { 180,3647 }, { 181,3647 }, - { 182,3647 }, { 183,3647 }, { 184,3647 }, { 185,3647 }, { 186,3647 }, - { 187,3647 }, { 188,3647 }, { 189,3647 }, { 190,3647 }, { 191,3647 }, - { 192,3647 }, { 193,3647 }, { 194,3647 }, { 195,3647 }, { 196,3647 }, - { 197,3647 }, { 198,3647 }, { 199,3647 }, { 200,3647 }, { 201,3647 }, - { 202,3647 }, { 203,3647 }, { 204,3647 }, { 205,3647 }, { 206,3647 }, - - { 207,3647 }, { 208,3647 }, { 209,3647 }, { 210,3647 }, { 211,3647 }, - { 212,3647 }, { 213,3647 }, { 214,3647 }, { 215,3647 }, { 216,3647 }, - { 217,3647 }, { 218,3647 }, { 219,3647 }, { 220,3647 }, { 221,3647 }, - { 222,3647 }, { 223,3647 }, { 224,3647 }, { 225,3647 }, { 226,3647 }, - { 227,3647 }, { 228,3647 }, { 229,3647 }, { 230,3647 }, { 231,3647 }, - { 232,3647 }, { 233,3647 }, { 234,3647 }, { 235,3647 }, { 236,3647 }, - { 237,3647 }, { 238,3647 }, { 239,3647 }, { 240,3647 }, { 241,3647 }, - { 242,3647 }, { 243,3647 }, { 244,3647 }, { 245,3647 }, { 246,3647 }, - { 247,3647 }, { 248,3647 }, { 249,3647 }, { 250,3647 }, { 251,3647 }, - { 252,3647 }, { 253,3647 }, { 254,3647 }, { 255,3647 }, { 0, 55 }, - - { 0,5873 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 53 }, { 0,5862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 56 }, { 0,5845 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33, 0 }, { 0, 0 }, - { 35, 0 }, { 0, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 42, 0 }, { 43, 0 }, { 33, -11 }, - { 45, 0 }, { 35, -11 }, { 47, 0 }, { 37, -11 }, { 38, -11 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42, -11 }, { 43, -11 }, - { 0, 0 }, { 45, -11 }, { 0, 0 }, { 47, -11 }, { 0, 0 }, - { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 60, -11 }, { 61, -11 }, { 62, -11 }, { 63, -11 }, - { 64, -11 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, - { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 34 }, { 0,5782 }, { 0, 0 }, { 0, 0 }, { 94, 0 }, - { 0, 0 }, { 96, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 94, -11 }, { 0, 0 }, { 96, -11 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124, 0 }, - { 0, 0 }, { 126, 0 }, { 36,-5323 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 124, -11 }, { 0, 0 }, { 126, -11 }, { 0, 0 }, { 48,3638 }, - { 49,3638 }, { 50,3638 }, { 51,3638 }, { 52,3638 }, { 53,3638 }, - { 54,3638 }, { 55,3638 }, { 56,3638 }, { 57,3638 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 65,3638 }, { 66,3638 }, { 67,3638 }, { 68,3638 }, - { 69,3638 }, { 70,3638 }, { 71,3638 }, { 72,3638 }, { 73,3638 }, - { 74,3638 }, { 75,3638 }, { 76,3638 }, { 77,3638 }, { 78,3638 }, - { 79,3638 }, { 80,3638 }, { 81,3638 }, { 82,3638 }, { 83,3638 }, - { 84,3638 }, { 85,3638 }, { 86,3638 }, { 87,3638 }, { 88,3638 }, - { 89,3638 }, { 90,3638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 95,3638 }, { 0, 0 }, { 97,3638 }, { 98,3638 }, - { 99,3638 }, { 100,3638 }, { 101,3638 }, { 102,3638 }, { 103,3638 }, - { 104,3638 }, { 105,3638 }, { 106,3638 }, { 107,3638 }, { 108,3638 }, - - { 109,3638 }, { 110,3638 }, { 111,3638 }, { 112,3638 }, { 113,3638 }, - { 114,3638 }, { 115,3638 }, { 116,3638 }, { 117,3638 }, { 118,3638 }, - { 119,3638 }, { 120,3638 }, { 121,3638 }, { 122,3638 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,3638 }, - { 129,3638 }, { 130,3638 }, { 131,3638 }, { 132,3638 }, { 133,3638 }, - { 134,3638 }, { 135,3638 }, { 136,3638 }, { 137,3638 }, { 138,3638 }, - { 139,3638 }, { 140,3638 }, { 141,3638 }, { 142,3638 }, { 143,3638 }, - { 144,3638 }, { 145,3638 }, { 146,3638 }, { 147,3638 }, { 148,3638 }, - { 149,3638 }, { 150,3638 }, { 151,3638 }, { 152,3638 }, { 153,3638 }, - { 154,3638 }, { 155,3638 }, { 156,3638 }, { 157,3638 }, { 158,3638 }, - - { 159,3638 }, { 160,3638 }, { 161,3638 }, { 162,3638 }, { 163,3638 }, - { 164,3638 }, { 165,3638 }, { 166,3638 }, { 167,3638 }, { 168,3638 }, - { 169,3638 }, { 170,3638 }, { 171,3638 }, { 172,3638 }, { 173,3638 }, - { 174,3638 }, { 175,3638 }, { 176,3638 }, { 177,3638 }, { 178,3638 }, - { 179,3638 }, { 180,3638 }, { 181,3638 }, { 182,3638 }, { 183,3638 }, - { 184,3638 }, { 185,3638 }, { 186,3638 }, { 187,3638 }, { 188,3638 }, - { 189,3638 }, { 190,3638 }, { 191,3638 }, { 192,3638 }, { 193,3638 }, - { 194,3638 }, { 195,3638 }, { 196,3638 }, { 197,3638 }, { 198,3638 }, - { 199,3638 }, { 200,3638 }, { 201,3638 }, { 202,3638 }, { 203,3638 }, - { 204,3638 }, { 205,3638 }, { 206,3638 }, { 207,3638 }, { 208,3638 }, - - { 209,3638 }, { 210,3638 }, { 211,3638 }, { 212,3638 }, { 213,3638 }, - { 214,3638 }, { 215,3638 }, { 216,3638 }, { 217,3638 }, { 218,3638 }, - { 219,3638 }, { 220,3638 }, { 221,3638 }, { 222,3638 }, { 223,3638 }, - { 224,3638 }, { 225,3638 }, { 226,3638 }, { 227,3638 }, { 228,3638 }, - { 229,3638 }, { 230,3638 }, { 231,3638 }, { 232,3638 }, { 233,3638 }, - { 234,3638 }, { 235,3638 }, { 236,3638 }, { 237,3638 }, { 238,3638 }, - { 239,3638 }, { 240,3638 }, { 241,3638 }, { 242,3638 }, { 243,3638 }, - { 244,3638 }, { 245,3638 }, { 246,3638 }, { 247,3638 }, { 248,3638 }, - { 249,3638 }, { 250,3638 }, { 251,3638 }, { 252,3638 }, { 253,3638 }, - { 254,3638 }, { 255,3638 }, { 0, 2 }, { 0,5525 }, { 1,3638 }, - - { 2,3638 }, { 3,3638 }, { 4,3638 }, { 5,3638 }, { 6,3638 }, - { 7,3638 }, { 8,3638 }, { 9,3638 }, { 0, 0 }, { 11,3638 }, - { 12,3638 }, { 0, 0 }, { 14,3638 }, { 15,3638 }, { 16,3638 }, - { 17,3638 }, { 18,3638 }, { 19,3638 }, { 20,3638 }, { 21,3638 }, - { 22,3638 }, { 23,3638 }, { 24,3638 }, { 25,3638 }, { 26,3638 }, - { 27,3638 }, { 28,3638 }, { 29,3638 }, { 30,3638 }, { 31,3638 }, - { 32,3638 }, { 33,3896 }, { 34,3638 }, { 35,3896 }, { 36,3638 }, - { 37,3896 }, { 38,3896 }, { 39,3638 }, { 40,3638 }, { 41,3638 }, - { 42,3896 }, { 43,3896 }, { 44,3638 }, { 45,3896 }, { 46,3638 }, - { 47,3896 }, { 48,3638 }, { 49,3638 }, { 50,3638 }, { 51,3638 }, - - { 52,3638 }, { 53,3638 }, { 54,3638 }, { 55,3638 }, { 56,3638 }, - { 57,3638 }, { 58,3638 }, { 59,3638 }, { 60,3896 }, { 61,3896 }, - { 62,3896 }, { 63,3896 }, { 64,3896 }, { 65,3638 }, { 66,3638 }, - { 67,3638 }, { 68,3638 }, { 69,3638 }, { 70,3638 }, { 71,3638 }, - { 72,3638 }, { 73,3638 }, { 74,3638 }, { 75,3638 }, { 76,3638 }, - { 77,3638 }, { 78,3638 }, { 79,3638 }, { 80,3638 }, { 81,3638 }, - { 82,3638 }, { 83,3638 }, { 84,3638 }, { 85,3638 }, { 86,3638 }, - { 87,3638 }, { 88,3638 }, { 89,3638 }, { 90,3638 }, { 91,3638 }, - { 92,3638 }, { 93,3638 }, { 94,3896 }, { 95,3638 }, { 96,3896 }, - { 97,3638 }, { 98,3638 }, { 99,3638 }, { 100,3638 }, { 101,3638 }, - - { 102,3638 }, { 103,3638 }, { 104,3638 }, { 105,3638 }, { 106,3638 }, - { 107,3638 }, { 108,3638 }, { 109,3638 }, { 110,3638 }, { 111,3638 }, - { 112,3638 }, { 113,3638 }, { 114,3638 }, { 115,3638 }, { 116,3638 }, - { 117,3638 }, { 118,3638 }, { 119,3638 }, { 120,3638 }, { 121,3638 }, - { 122,3638 }, { 123,3638 }, { 124,3896 }, { 125,3638 }, { 126,3896 }, - { 127,3638 }, { 128,3638 }, { 129,3638 }, { 130,3638 }, { 131,3638 }, - { 132,3638 }, { 133,3638 }, { 134,3638 }, { 135,3638 }, { 136,3638 }, - { 137,3638 }, { 138,3638 }, { 139,3638 }, { 140,3638 }, { 141,3638 }, - { 142,3638 }, { 143,3638 }, { 144,3638 }, { 145,3638 }, { 146,3638 }, - { 147,3638 }, { 148,3638 }, { 149,3638 }, { 150,3638 }, { 151,3638 }, - - { 152,3638 }, { 153,3638 }, { 154,3638 }, { 155,3638 }, { 156,3638 }, - { 157,3638 }, { 158,3638 }, { 159,3638 }, { 160,3638 }, { 161,3638 }, - { 162,3638 }, { 163,3638 }, { 164,3638 }, { 165,3638 }, { 166,3638 }, - { 167,3638 }, { 168,3638 }, { 169,3638 }, { 170,3638 }, { 171,3638 }, - { 172,3638 }, { 173,3638 }, { 174,3638 }, { 175,3638 }, { 176,3638 }, - { 177,3638 }, { 178,3638 }, { 179,3638 }, { 180,3638 }, { 181,3638 }, - { 182,3638 }, { 183,3638 }, { 184,3638 }, { 185,3638 }, { 186,3638 }, - { 187,3638 }, { 188,3638 }, { 189,3638 }, { 190,3638 }, { 191,3638 }, - { 192,3638 }, { 193,3638 }, { 194,3638 }, { 195,3638 }, { 196,3638 }, - { 197,3638 }, { 198,3638 }, { 199,3638 }, { 200,3638 }, { 201,3638 }, - - { 202,3638 }, { 203,3638 }, { 204,3638 }, { 205,3638 }, { 206,3638 }, - { 207,3638 }, { 208,3638 }, { 209,3638 }, { 210,3638 }, { 211,3638 }, - { 212,3638 }, { 213,3638 }, { 214,3638 }, { 215,3638 }, { 216,3638 }, - { 217,3638 }, { 218,3638 }, { 219,3638 }, { 220,3638 }, { 221,3638 }, - { 222,3638 }, { 223,3638 }, { 224,3638 }, { 225,3638 }, { 226,3638 }, - { 227,3638 }, { 228,3638 }, { 229,3638 }, { 230,3638 }, { 231,3638 }, - { 232,3638 }, { 233,3638 }, { 234,3638 }, { 235,3638 }, { 236,3638 }, - { 237,3638 }, { 238,3638 }, { 239,3638 }, { 240,3638 }, { 241,3638 }, - { 242,3638 }, { 243,3638 }, { 244,3638 }, { 245,3638 }, { 246,3638 }, - { 247,3638 }, { 248,3638 }, { 249,3638 }, { 250,3638 }, { 251,3638 }, - - { 252,3638 }, { 253,3638 }, { 254,3638 }, { 255,3638 }, { 256,3638 }, - { 0, 58 }, { 0,5267 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 3 }, { 0,5242 }, { 0, 58 }, { 0,5240 }, { 0, 0 }, + { 205,5627 }, { 206,5627 }, { 207,5627 }, { 208,5627 }, { 209,5627 }, + { 210,5627 }, { 211,5627 }, { 212,5627 }, { 213,5627 }, { 214,5627 }, + { 215,5627 }, { 216,5627 }, { 217,5627 }, { 218,5627 }, { 219,5627 }, + { 220,5627 }, { 221,5627 }, { 222,5627 }, { 223,5627 }, { 224,5627 }, + { 225,5627 }, { 226,5627 }, { 227,5627 }, { 228,5627 }, { 229,5627 }, + { 230,5627 }, { 231,5627 }, { 232,5627 }, { 233,5627 }, { 234,5627 }, + { 235,5627 }, { 236,5627 }, { 237,5627 }, { 238,5627 }, { 239,5627 }, + { 240,5627 }, { 241,5627 }, { 242,5627 }, { 243,5627 }, { 244,5627 }, + { 245,5627 }, { 246,5627 }, { 247,5627 }, { 248,5627 }, { 249,5627 }, + { 250,5627 }, { 251,5627 }, { 252,5627 }, { 253,5627 }, { 254,5627 }, + + { 255,5627 }, { 0, 74 }, { 0,13196 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,5370 }, { 0, 0 }, + { 38,-1767 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,5370 }, { 49,5370 }, { 50,5370 }, { 51,5370 }, { 52,5370 }, + { 53,5370 }, { 54,5370 }, { 55,5370 }, { 56,5370 }, { 57,5370 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,5370 }, { 66,5370 }, { 67,5370 }, + { 68,5370 }, { 69,5370 }, { 70,5370 }, { 71,5370 }, { 72,5370 }, + { 73,5370 }, { 74,5370 }, { 75,5370 }, { 76,5370 }, { 77,5370 }, + { 78,5370 }, { 79,5370 }, { 80,5370 }, { 81,5370 }, { 82,5370 }, + { 83,5370 }, { 84,5370 }, { 85,5370 }, { 86,5370 }, { 87,5370 }, + { 88,5370 }, { 89,5370 }, { 90,5370 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,5370 }, { 0, 0 }, { 97,5370 }, + + { 98,5370 }, { 99,5370 }, { 100,5370 }, { 101,5370 }, { 102,5370 }, + { 103,5370 }, { 104,5370 }, { 105,5370 }, { 106,5370 }, { 107,5370 }, + { 108,5370 }, { 109,5370 }, { 110,5370 }, { 111,5370 }, { 112,5370 }, + { 113,5370 }, { 114,5370 }, { 115,5370 }, { 116,5370 }, { 117,5370 }, + { 118,5370 }, { 119,5370 }, { 120,5370 }, { 121,5370 }, { 122,5370 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 128,5370 }, { 129,5370 }, { 130,5370 }, { 131,5370 }, { 132,5370 }, + { 133,5370 }, { 134,5370 }, { 135,5370 }, { 136,5370 }, { 137,5370 }, + { 138,5370 }, { 139,5370 }, { 140,5370 }, { 141,5370 }, { 142,5370 }, + { 143,5370 }, { 144,5370 }, { 145,5370 }, { 146,5370 }, { 147,5370 }, + + { 148,5370 }, { 149,5370 }, { 150,5370 }, { 151,5370 }, { 152,5370 }, + { 153,5370 }, { 154,5370 }, { 155,5370 }, { 156,5370 }, { 157,5370 }, + { 158,5370 }, { 159,5370 }, { 160,5370 }, { 161,5370 }, { 162,5370 }, + { 163,5370 }, { 164,5370 }, { 165,5370 }, { 166,5370 }, { 167,5370 }, + { 168,5370 }, { 169,5370 }, { 170,5370 }, { 171,5370 }, { 172,5370 }, + { 173,5370 }, { 174,5370 }, { 175,5370 }, { 176,5370 }, { 177,5370 }, + { 178,5370 }, { 179,5370 }, { 180,5370 }, { 181,5370 }, { 182,5370 }, + { 183,5370 }, { 184,5370 }, { 185,5370 }, { 186,5370 }, { 187,5370 }, + { 188,5370 }, { 189,5370 }, { 190,5370 }, { 191,5370 }, { 192,5370 }, + { 193,5370 }, { 194,5370 }, { 195,5370 }, { 196,5370 }, { 197,5370 }, + + { 198,5370 }, { 199,5370 }, { 200,5370 }, { 201,5370 }, { 202,5370 }, + { 203,5370 }, { 204,5370 }, { 205,5370 }, { 206,5370 }, { 207,5370 }, + { 208,5370 }, { 209,5370 }, { 210,5370 }, { 211,5370 }, { 212,5370 }, + { 213,5370 }, { 214,5370 }, { 215,5370 }, { 216,5370 }, { 217,5370 }, + { 218,5370 }, { 219,5370 }, { 220,5370 }, { 221,5370 }, { 222,5370 }, + { 223,5370 }, { 224,5370 }, { 225,5370 }, { 226,5370 }, { 227,5370 }, + { 228,5370 }, { 229,5370 }, { 230,5370 }, { 231,5370 }, { 232,5370 }, + { 233,5370 }, { 234,5370 }, { 235,5370 }, { 236,5370 }, { 237,5370 }, + { 238,5370 }, { 239,5370 }, { 240,5370 }, { 241,5370 }, { 242,5370 }, + { 243,5370 }, { 244,5370 }, { 245,5370 }, { 246,5370 }, { 247,5370 }, + + { 248,5370 }, { 249,5370 }, { 250,5370 }, { 251,5370 }, { 252,5370 }, + { 253,5370 }, { 254,5370 }, { 255,5370 }, { 0, 74 }, { 0,12939 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 36,5113 }, { 0, 0 }, { 0, 0 }, { 39,-2022 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,5113 }, { 49,5113 }, { 50,5113 }, + { 51,5113 }, { 52,5113 }, { 53,5113 }, { 54,5113 }, { 55,5113 }, + { 56,5113 }, { 57,5113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5113 }, + { 66,5113 }, { 67,5113 }, { 68,5113 }, { 69,5113 }, { 70,5113 }, + { 71,5113 }, { 72,5113 }, { 73,5113 }, { 74,5113 }, { 75,5113 }, + { 76,5113 }, { 77,5113 }, { 78,5113 }, { 79,5113 }, { 80,5113 }, + { 81,5113 }, { 82,5113 }, { 83,5113 }, { 84,5113 }, { 85,5113 }, + { 86,5113 }, { 87,5113 }, { 88,5113 }, { 89,5113 }, { 90,5113 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5113 }, + { 0, 0 }, { 97,5113 }, { 98,5113 }, { 99,5113 }, { 100,5113 }, + { 101,5113 }, { 102,5113 }, { 103,5113 }, { 104,5113 }, { 105,5113 }, + { 106,5113 }, { 107,5113 }, { 108,5113 }, { 109,5113 }, { 110,5113 }, + { 111,5113 }, { 112,5113 }, { 113,5113 }, { 114,5113 }, { 115,5113 }, + { 116,5113 }, { 117,5113 }, { 118,5113 }, { 119,5113 }, { 120,5113 }, + { 121,5113 }, { 122,5113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 128,5113 }, { 129,5113 }, { 130,5113 }, + { 131,5113 }, { 132,5113 }, { 133,5113 }, { 134,5113 }, { 135,5113 }, + { 136,5113 }, { 137,5113 }, { 138,5113 }, { 139,5113 }, { 140,5113 }, + + { 141,5113 }, { 142,5113 }, { 143,5113 }, { 144,5113 }, { 145,5113 }, + { 146,5113 }, { 147,5113 }, { 148,5113 }, { 149,5113 }, { 150,5113 }, + { 151,5113 }, { 152,5113 }, { 153,5113 }, { 154,5113 }, { 155,5113 }, + { 156,5113 }, { 157,5113 }, { 158,5113 }, { 159,5113 }, { 160,5113 }, + { 161,5113 }, { 162,5113 }, { 163,5113 }, { 164,5113 }, { 165,5113 }, + { 166,5113 }, { 167,5113 }, { 168,5113 }, { 169,5113 }, { 170,5113 }, + { 171,5113 }, { 172,5113 }, { 173,5113 }, { 174,5113 }, { 175,5113 }, + { 176,5113 }, { 177,5113 }, { 178,5113 }, { 179,5113 }, { 180,5113 }, + { 181,5113 }, { 182,5113 }, { 183,5113 }, { 184,5113 }, { 185,5113 }, + { 186,5113 }, { 187,5113 }, { 188,5113 }, { 189,5113 }, { 190,5113 }, + + { 191,5113 }, { 192,5113 }, { 193,5113 }, { 194,5113 }, { 195,5113 }, + { 196,5113 }, { 197,5113 }, { 198,5113 }, { 199,5113 }, { 200,5113 }, + { 201,5113 }, { 202,5113 }, { 203,5113 }, { 204,5113 }, { 205,5113 }, + { 206,5113 }, { 207,5113 }, { 208,5113 }, { 209,5113 }, { 210,5113 }, + { 211,5113 }, { 212,5113 }, { 213,5113 }, { 214,5113 }, { 215,5113 }, + { 216,5113 }, { 217,5113 }, { 218,5113 }, { 219,5113 }, { 220,5113 }, + { 221,5113 }, { 222,5113 }, { 223,5113 }, { 224,5113 }, { 225,5113 }, + { 226,5113 }, { 227,5113 }, { 228,5113 }, { 229,5113 }, { 230,5113 }, + { 231,5113 }, { 232,5113 }, { 233,5113 }, { 234,5113 }, { 235,5113 }, + { 236,5113 }, { 237,5113 }, { 238,5113 }, { 239,5113 }, { 240,5113 }, + + { 241,5113 }, { 242,5113 }, { 243,5113 }, { 244,5113 }, { 245,5113 }, + { 246,5113 }, { 247,5113 }, { 248,5113 }, { 249,5113 }, { 250,5113 }, + { 251,5113 }, { 252,5113 }, { 253,5113 }, { 254,5113 }, { 255,5113 }, + { 0, 11 }, { 0,12682 }, { 1,5113 }, { 2,5113 }, { 3,5113 }, + { 4,5113 }, { 5,5113 }, { 6,5113 }, { 7,5113 }, { 8,5113 }, + { 9,5113 }, { 10,5113 }, { 11,5113 }, { 12,5113 }, { 13,5113 }, + { 14,5113 }, { 15,5113 }, { 16,5113 }, { 17,5113 }, { 18,5113 }, + { 19,5113 }, { 20,5113 }, { 21,5113 }, { 22,5113 }, { 23,5113 }, + { 24,5113 }, { 25,5113 }, { 26,5113 }, { 27,5113 }, { 28,5113 }, + { 29,5113 }, { 30,5113 }, { 31,5113 }, { 32,5113 }, { 33,5113 }, + + { 34,5113 }, { 35,5113 }, { 36,5113 }, { 37,5113 }, { 38,5113 }, + { 0, 0 }, { 40,5113 }, { 41,5113 }, { 42,5113 }, { 43,5113 }, + { 44,5113 }, { 45,5113 }, { 46,5113 }, { 47,5113 }, { 48,5113 }, + { 49,5113 }, { 50,5113 }, { 51,5113 }, { 52,5113 }, { 53,5113 }, + { 54,5113 }, { 55,5113 }, { 56,5113 }, { 57,5113 }, { 58,5113 }, + { 59,5113 }, { 60,5113 }, { 61,5113 }, { 62,5113 }, { 63,5113 }, + { 64,5113 }, { 65,5113 }, { 66,5113 }, { 67,5113 }, { 68,5113 }, + { 69,5113 }, { 70,5113 }, { 71,5113 }, { 72,5113 }, { 73,5113 }, + { 74,5113 }, { 75,5113 }, { 76,5113 }, { 77,5113 }, { 78,5113 }, + { 79,5113 }, { 80,5113 }, { 81,5113 }, { 82,5113 }, { 83,5113 }, + + { 84,5113 }, { 85,5113 }, { 86,5113 }, { 87,5113 }, { 88,5113 }, + { 89,5113 }, { 90,5113 }, { 91,5113 }, { 92,5113 }, { 93,5113 }, + { 94,5113 }, { 95,5113 }, { 96,5113 }, { 97,5113 }, { 98,5113 }, + { 99,5113 }, { 100,5113 }, { 101,5113 }, { 102,5113 }, { 103,5113 }, + { 104,5113 }, { 105,5113 }, { 106,5113 }, { 107,5113 }, { 108,5113 }, + { 109,5113 }, { 110,5113 }, { 111,5113 }, { 112,5113 }, { 113,5113 }, + { 114,5113 }, { 115,5113 }, { 116,5113 }, { 117,5113 }, { 118,5113 }, + { 119,5113 }, { 120,5113 }, { 121,5113 }, { 122,5113 }, { 123,5113 }, + { 124,5113 }, { 125,5113 }, { 126,5113 }, { 127,5113 }, { 128,5113 }, + { 129,5113 }, { 130,5113 }, { 131,5113 }, { 132,5113 }, { 133,5113 }, + + { 134,5113 }, { 135,5113 }, { 136,5113 }, { 137,5113 }, { 138,5113 }, + { 139,5113 }, { 140,5113 }, { 141,5113 }, { 142,5113 }, { 143,5113 }, + { 144,5113 }, { 145,5113 }, { 146,5113 }, { 147,5113 }, { 148,5113 }, + { 149,5113 }, { 150,5113 }, { 151,5113 }, { 152,5113 }, { 153,5113 }, + { 154,5113 }, { 155,5113 }, { 156,5113 }, { 157,5113 }, { 158,5113 }, + { 159,5113 }, { 160,5113 }, { 161,5113 }, { 162,5113 }, { 163,5113 }, + { 164,5113 }, { 165,5113 }, { 166,5113 }, { 167,5113 }, { 168,5113 }, + { 169,5113 }, { 170,5113 }, { 171,5113 }, { 172,5113 }, { 173,5113 }, + { 174,5113 }, { 175,5113 }, { 176,5113 }, { 177,5113 }, { 178,5113 }, + { 179,5113 }, { 180,5113 }, { 181,5113 }, { 182,5113 }, { 183,5113 }, + + { 184,5113 }, { 185,5113 }, { 186,5113 }, { 187,5113 }, { 188,5113 }, + { 189,5113 }, { 190,5113 }, { 191,5113 }, { 192,5113 }, { 193,5113 }, + { 194,5113 }, { 195,5113 }, { 196,5113 }, { 197,5113 }, { 198,5113 }, + { 199,5113 }, { 200,5113 }, { 201,5113 }, { 202,5113 }, { 203,5113 }, + { 204,5113 }, { 205,5113 }, { 206,5113 }, { 207,5113 }, { 208,5113 }, + { 209,5113 }, { 210,5113 }, { 211,5113 }, { 212,5113 }, { 213,5113 }, + { 214,5113 }, { 215,5113 }, { 216,5113 }, { 217,5113 }, { 218,5113 }, + { 219,5113 }, { 220,5113 }, { 221,5113 }, { 222,5113 }, { 223,5113 }, + { 224,5113 }, { 225,5113 }, { 226,5113 }, { 227,5113 }, { 228,5113 }, + { 229,5113 }, { 230,5113 }, { 231,5113 }, { 232,5113 }, { 233,5113 }, + + { 234,5113 }, { 235,5113 }, { 236,5113 }, { 237,5113 }, { 238,5113 }, + { 239,5113 }, { 240,5113 }, { 241,5113 }, { 242,5113 }, { 243,5113 }, + { 244,5113 }, { 245,5113 }, { 246,5113 }, { 247,5113 }, { 248,5113 }, + { 249,5113 }, { 250,5113 }, { 251,5113 }, { 252,5113 }, { 253,5113 }, + { 254,5113 }, { 255,5113 }, { 256,5113 }, { 0, 6 }, { 0,12424 }, + { 1,5113 }, { 2,5113 }, { 3,5113 }, { 4,5113 }, { 5,5113 }, + { 6,5113 }, { 7,5113 }, { 8,5113 }, { 9,5113 }, { 10,5113 }, + { 11,5113 }, { 12,5113 }, { 13,5113 }, { 14,5113 }, { 15,5113 }, + { 16,5113 }, { 17,5113 }, { 18,5113 }, { 19,5113 }, { 20,5113 }, + { 21,5113 }, { 22,5113 }, { 23,5113 }, { 24,5113 }, { 25,5113 }, + + { 26,5113 }, { 27,5113 }, { 28,5113 }, { 29,5113 }, { 30,5113 }, + { 31,5113 }, { 32,5113 }, { 33,5113 }, { 34,5113 }, { 35,5113 }, + { 36,5113 }, { 37,5113 }, { 38,5113 }, { 39,5113 }, { 40,5113 }, + { 41,5113 }, { 0, 0 }, { 43,5113 }, { 44,5113 }, { 45,5113 }, + { 46,5113 }, { 0, 0 }, { 48,5113 }, { 49,5113 }, { 50,5113 }, + { 51,5113 }, { 52,5113 }, { 53,5113 }, { 54,5113 }, { 55,5113 }, + { 56,5113 }, { 57,5113 }, { 58,5113 }, { 59,5113 }, { 60,5113 }, + { 61,5113 }, { 62,5113 }, { 63,5113 }, { 64,5113 }, { 65,5113 }, + { 66,5113 }, { 67,5113 }, { 68,5113 }, { 69,5113 }, { 70,5113 }, + { 71,5113 }, { 72,5113 }, { 73,5113 }, { 74,5113 }, { 75,5113 }, + + { 76,5113 }, { 77,5113 }, { 78,5113 }, { 79,5113 }, { 80,5113 }, + { 81,5113 }, { 82,5113 }, { 83,5113 }, { 84,5113 }, { 85,5113 }, + { 86,5113 }, { 87,5113 }, { 88,5113 }, { 89,5113 }, { 90,5113 }, + { 91,5113 }, { 92,5113 }, { 93,5113 }, { 94,5113 }, { 95,5113 }, + { 96,5113 }, { 97,5113 }, { 98,5113 }, { 99,5113 }, { 100,5113 }, + { 101,5113 }, { 102,5113 }, { 103,5113 }, { 104,5113 }, { 105,5113 }, + { 106,5113 }, { 107,5113 }, { 108,5113 }, { 109,5113 }, { 110,5113 }, + { 111,5113 }, { 112,5113 }, { 113,5113 }, { 114,5113 }, { 115,5113 }, + { 116,5113 }, { 117,5113 }, { 118,5113 }, { 119,5113 }, { 120,5113 }, + { 121,5113 }, { 122,5113 }, { 123,5113 }, { 124,5113 }, { 125,5113 }, + + { 126,5113 }, { 127,5113 }, { 128,5113 }, { 129,5113 }, { 130,5113 }, + { 131,5113 }, { 132,5113 }, { 133,5113 }, { 134,5113 }, { 135,5113 }, + { 136,5113 }, { 137,5113 }, { 138,5113 }, { 139,5113 }, { 140,5113 }, + { 141,5113 }, { 142,5113 }, { 143,5113 }, { 144,5113 }, { 145,5113 }, + { 146,5113 }, { 147,5113 }, { 148,5113 }, { 149,5113 }, { 150,5113 }, + { 151,5113 }, { 152,5113 }, { 153,5113 }, { 154,5113 }, { 155,5113 }, + { 156,5113 }, { 157,5113 }, { 158,5113 }, { 159,5113 }, { 160,5113 }, + { 161,5113 }, { 162,5113 }, { 163,5113 }, { 164,5113 }, { 165,5113 }, + { 166,5113 }, { 167,5113 }, { 168,5113 }, { 169,5113 }, { 170,5113 }, + { 171,5113 }, { 172,5113 }, { 173,5113 }, { 174,5113 }, { 175,5113 }, + + { 176,5113 }, { 177,5113 }, { 178,5113 }, { 179,5113 }, { 180,5113 }, + { 181,5113 }, { 182,5113 }, { 183,5113 }, { 184,5113 }, { 185,5113 }, + { 186,5113 }, { 187,5113 }, { 188,5113 }, { 189,5113 }, { 190,5113 }, + { 191,5113 }, { 192,5113 }, { 193,5113 }, { 194,5113 }, { 195,5113 }, + { 196,5113 }, { 197,5113 }, { 198,5113 }, { 199,5113 }, { 200,5113 }, + { 201,5113 }, { 202,5113 }, { 203,5113 }, { 204,5113 }, { 205,5113 }, + { 206,5113 }, { 207,5113 }, { 208,5113 }, { 209,5113 }, { 210,5113 }, + { 211,5113 }, { 212,5113 }, { 213,5113 }, { 214,5113 }, { 215,5113 }, + { 216,5113 }, { 217,5113 }, { 218,5113 }, { 219,5113 }, { 220,5113 }, + { 221,5113 }, { 222,5113 }, { 223,5113 }, { 224,5113 }, { 225,5113 }, + + { 226,5113 }, { 227,5113 }, { 228,5113 }, { 229,5113 }, { 230,5113 }, + { 231,5113 }, { 232,5113 }, { 233,5113 }, { 234,5113 }, { 235,5113 }, + { 236,5113 }, { 237,5113 }, { 238,5113 }, { 239,5113 }, { 240,5113 }, + { 241,5113 }, { 242,5113 }, { 243,5113 }, { 244,5113 }, { 245,5113 }, + { 246,5113 }, { 247,5113 }, { 248,5113 }, { 249,5113 }, { 250,5113 }, + { 251,5113 }, { 252,5113 }, { 253,5113 }, { 254,5113 }, { 255,5113 }, + { 256,5113 }, { 0, 6 }, { 0,12166 }, { 1,4855 }, { 2,4855 }, + { 3,4855 }, { 4,4855 }, { 5,4855 }, { 6,4855 }, { 7,4855 }, + { 8,4855 }, { 9,4855 }, { 10,4855 }, { 11,4855 }, { 12,4855 }, + { 13,4855 }, { 14,4855 }, { 15,4855 }, { 16,4855 }, { 17,4855 }, + + { 18,4855 }, { 19,4855 }, { 20,4855 }, { 21,4855 }, { 22,4855 }, + { 23,4855 }, { 24,4855 }, { 25,4855 }, { 26,4855 }, { 27,4855 }, + { 28,4855 }, { 29,4855 }, { 30,4855 }, { 31,4855 }, { 32,4855 }, + { 33,4855 }, { 34,4855 }, { 35,4855 }, { 36,4855 }, { 37,4855 }, + { 38,4855 }, { 39,4855 }, { 40,4855 }, { 41,4855 }, { 0, 0 }, + { 43,4855 }, { 44,4855 }, { 45,4855 }, { 46,4855 }, { 0, 0 }, + { 48,4855 }, { 49,4855 }, { 50,4855 }, { 51,4855 }, { 52,4855 }, + { 53,4855 }, { 54,4855 }, { 55,4855 }, { 56,4855 }, { 57,4855 }, + { 58,4855 }, { 59,4855 }, { 60,4855 }, { 61,4855 }, { 62,4855 }, + { 63,4855 }, { 64,4855 }, { 65,4855 }, { 66,4855 }, { 67,4855 }, + + { 68,4855 }, { 69,4855 }, { 70,4855 }, { 71,4855 }, { 72,4855 }, + { 73,4855 }, { 74,4855 }, { 75,4855 }, { 76,4855 }, { 77,4855 }, + { 78,4855 }, { 79,4855 }, { 80,4855 }, { 81,4855 }, { 82,4855 }, + { 83,4855 }, { 84,4855 }, { 85,4855 }, { 86,4855 }, { 87,4855 }, + { 88,4855 }, { 89,4855 }, { 90,4855 }, { 91,4855 }, { 92,4855 }, + { 93,4855 }, { 94,4855 }, { 95,4855 }, { 96,4855 }, { 97,4855 }, + { 98,4855 }, { 99,4855 }, { 100,4855 }, { 101,4855 }, { 102,4855 }, + { 103,4855 }, { 104,4855 }, { 105,4855 }, { 106,4855 }, { 107,4855 }, + { 108,4855 }, { 109,4855 }, { 110,4855 }, { 111,4855 }, { 112,4855 }, + { 113,4855 }, { 114,4855 }, { 115,4855 }, { 116,4855 }, { 117,4855 }, + + { 118,4855 }, { 119,4855 }, { 120,4855 }, { 121,4855 }, { 122,4855 }, + { 123,4855 }, { 124,4855 }, { 125,4855 }, { 126,4855 }, { 127,4855 }, + { 128,4855 }, { 129,4855 }, { 130,4855 }, { 131,4855 }, { 132,4855 }, + { 133,4855 }, { 134,4855 }, { 135,4855 }, { 136,4855 }, { 137,4855 }, + { 138,4855 }, { 139,4855 }, { 140,4855 }, { 141,4855 }, { 142,4855 }, + { 143,4855 }, { 144,4855 }, { 145,4855 }, { 146,4855 }, { 147,4855 }, + { 148,4855 }, { 149,4855 }, { 150,4855 }, { 151,4855 }, { 152,4855 }, + { 153,4855 }, { 154,4855 }, { 155,4855 }, { 156,4855 }, { 157,4855 }, + { 158,4855 }, { 159,4855 }, { 160,4855 }, { 161,4855 }, { 162,4855 }, + { 163,4855 }, { 164,4855 }, { 165,4855 }, { 166,4855 }, { 167,4855 }, + + { 168,4855 }, { 169,4855 }, { 170,4855 }, { 171,4855 }, { 172,4855 }, + { 173,4855 }, { 174,4855 }, { 175,4855 }, { 176,4855 }, { 177,4855 }, + { 178,4855 }, { 179,4855 }, { 180,4855 }, { 181,4855 }, { 182,4855 }, + { 183,4855 }, { 184,4855 }, { 185,4855 }, { 186,4855 }, { 187,4855 }, + { 188,4855 }, { 189,4855 }, { 190,4855 }, { 191,4855 }, { 192,4855 }, + { 193,4855 }, { 194,4855 }, { 195,4855 }, { 196,4855 }, { 197,4855 }, + { 198,4855 }, { 199,4855 }, { 200,4855 }, { 201,4855 }, { 202,4855 }, + { 203,4855 }, { 204,4855 }, { 205,4855 }, { 206,4855 }, { 207,4855 }, + { 208,4855 }, { 209,4855 }, { 210,4855 }, { 211,4855 }, { 212,4855 }, + { 213,4855 }, { 214,4855 }, { 215,4855 }, { 216,4855 }, { 217,4855 }, + + { 218,4855 }, { 219,4855 }, { 220,4855 }, { 221,4855 }, { 222,4855 }, + { 223,4855 }, { 224,4855 }, { 225,4855 }, { 226,4855 }, { 227,4855 }, + { 228,4855 }, { 229,4855 }, { 230,4855 }, { 231,4855 }, { 232,4855 }, + { 233,4855 }, { 234,4855 }, { 235,4855 }, { 236,4855 }, { 237,4855 }, + { 238,4855 }, { 239,4855 }, { 240,4855 }, { 241,4855 }, { 242,4855 }, + { 243,4855 }, { 244,4855 }, { 245,4855 }, { 246,4855 }, { 247,4855 }, + { 248,4855 }, { 249,4855 }, { 250,4855 }, { 251,4855 }, { 252,4855 }, + { 253,4855 }, { 254,4855 }, { 255,4855 }, { 256,4855 }, { 0, 44 }, + { 0,11908 }, { 1,4983 }, { 2,4983 }, { 3,4983 }, { 4,4983 }, + { 5,4983 }, { 6,4983 }, { 7,4983 }, { 8,4983 }, { 9,4983 }, + + { 10,4983 }, { 11,4983 }, { 12,4983 }, { 13,4983 }, { 14,4983 }, + { 15,4983 }, { 16,4983 }, { 17,4983 }, { 18,4983 }, { 19,4983 }, + { 20,4983 }, { 21,4983 }, { 22,4983 }, { 23,4983 }, { 24,4983 }, + { 25,4983 }, { 26,4983 }, { 27,4983 }, { 28,4983 }, { 29,4983 }, + { 30,4983 }, { 31,4983 }, { 32,4983 }, { 33,4983 }, { 0, 0 }, + { 35,4983 }, { 36,4983 }, { 37,4983 }, { 38,4983 }, { 39,4983 }, + { 40,4983 }, { 41,4983 }, { 42,4983 }, { 43,4983 }, { 44,4983 }, + { 45,4983 }, { 46,4983 }, { 47,4983 }, { 48,4983 }, { 49,4983 }, + { 50,4983 }, { 51,4983 }, { 52,4983 }, { 53,4983 }, { 54,4983 }, + { 55,4983 }, { 56,4983 }, { 57,4983 }, { 58,4983 }, { 59,4983 }, + + { 60,4983 }, { 61,4983 }, { 62,4983 }, { 63,4983 }, { 64,4983 }, + { 65,4983 }, { 66,4983 }, { 67,4983 }, { 68,4983 }, { 69,4983 }, + { 70,4983 }, { 71,4983 }, { 72,4983 }, { 73,4983 }, { 74,4983 }, + { 75,4983 }, { 76,4983 }, { 77,4983 }, { 78,4983 }, { 79,4983 }, + { 80,4983 }, { 81,4983 }, { 82,4983 }, { 83,4983 }, { 84,4983 }, + { 85,4983 }, { 86,4983 }, { 87,4983 }, { 88,4983 }, { 89,4983 }, + { 90,4983 }, { 91,4983 }, { 92,4983 }, { 93,4983 }, { 94,4983 }, + { 95,4983 }, { 96,4983 }, { 97,4983 }, { 98,4983 }, { 99,4983 }, + { 100,4983 }, { 101,4983 }, { 102,4983 }, { 103,4983 }, { 104,4983 }, + { 105,4983 }, { 106,4983 }, { 107,4983 }, { 108,4983 }, { 109,4983 }, + + { 110,4983 }, { 111,4983 }, { 112,4983 }, { 113,4983 }, { 114,4983 }, + { 115,4983 }, { 116,4983 }, { 117,4983 }, { 118,4983 }, { 119,4983 }, + { 120,4983 }, { 121,4983 }, { 122,4983 }, { 123,4983 }, { 124,4983 }, + { 125,4983 }, { 126,4983 }, { 127,4983 }, { 128,4983 }, { 129,4983 }, + { 130,4983 }, { 131,4983 }, { 132,4983 }, { 133,4983 }, { 134,4983 }, + { 135,4983 }, { 136,4983 }, { 137,4983 }, { 138,4983 }, { 139,4983 }, + { 140,4983 }, { 141,4983 }, { 142,4983 }, { 143,4983 }, { 144,4983 }, + { 145,4983 }, { 146,4983 }, { 147,4983 }, { 148,4983 }, { 149,4983 }, + { 150,4983 }, { 151,4983 }, { 152,4983 }, { 153,4983 }, { 154,4983 }, + { 155,4983 }, { 156,4983 }, { 157,4983 }, { 158,4983 }, { 159,4983 }, + + { 160,4983 }, { 161,4983 }, { 162,4983 }, { 163,4983 }, { 164,4983 }, + { 165,4983 }, { 166,4983 }, { 167,4983 }, { 168,4983 }, { 169,4983 }, + { 170,4983 }, { 171,4983 }, { 172,4983 }, { 173,4983 }, { 174,4983 }, + { 175,4983 }, { 176,4983 }, { 177,4983 }, { 178,4983 }, { 179,4983 }, + { 180,4983 }, { 181,4983 }, { 182,4983 }, { 183,4983 }, { 184,4983 }, + { 185,4983 }, { 186,4983 }, { 187,4983 }, { 188,4983 }, { 189,4983 }, + { 190,4983 }, { 191,4983 }, { 192,4983 }, { 193,4983 }, { 194,4983 }, + { 195,4983 }, { 196,4983 }, { 197,4983 }, { 198,4983 }, { 199,4983 }, + { 200,4983 }, { 201,4983 }, { 202,4983 }, { 203,4983 }, { 204,4983 }, + { 205,4983 }, { 206,4983 }, { 207,4983 }, { 208,4983 }, { 209,4983 }, + + { 210,4983 }, { 211,4983 }, { 212,4983 }, { 213,4983 }, { 214,4983 }, + { 215,4983 }, { 216,4983 }, { 217,4983 }, { 218,4983 }, { 219,4983 }, + { 220,4983 }, { 221,4983 }, { 222,4983 }, { 223,4983 }, { 224,4983 }, + { 225,4983 }, { 226,4983 }, { 227,4983 }, { 228,4983 }, { 229,4983 }, + { 230,4983 }, { 231,4983 }, { 232,4983 }, { 233,4983 }, { 234,4983 }, + { 235,4983 }, { 236,4983 }, { 237,4983 }, { 238,4983 }, { 239,4983 }, + { 240,4983 }, { 241,4983 }, { 242,4983 }, { 243,4983 }, { 244,4983 }, + { 245,4983 }, { 246,4983 }, { 247,4983 }, { 248,4983 }, { 249,4983 }, + { 250,4983 }, { 251,4983 }, { 252,4983 }, { 253,4983 }, { 254,4983 }, + { 255,4983 }, { 256,4983 }, { 0, 10 }, { 0,11650 }, { 1,4983 }, + + { 2,4983 }, { 3,4983 }, { 4,4983 }, { 5,4983 }, { 6,4983 }, + { 7,4983 }, { 8,4983 }, { 9,4983 }, { 10,4983 }, { 11,4983 }, + { 12,4983 }, { 13,4983 }, { 14,4983 }, { 15,4983 }, { 16,4983 }, + { 17,4983 }, { 18,4983 }, { 19,4983 }, { 20,4983 }, { 21,4983 }, + { 22,4983 }, { 23,4983 }, { 24,4983 }, { 25,4983 }, { 26,4983 }, + { 27,4983 }, { 28,4983 }, { 29,4983 }, { 30,4983 }, { 31,4983 }, + { 32,4983 }, { 33,4983 }, { 34,4983 }, { 35,4983 }, { 36,4983 }, + { 37,4983 }, { 38,4983 }, { 0, 0 }, { 40,4983 }, { 41,4983 }, + { 42,4983 }, { 43,4983 }, { 44,4983 }, { 45,4983 }, { 46,4983 }, + { 47,4983 }, { 48,4983 }, { 49,4983 }, { 50,4983 }, { 51,4983 }, + + { 52,4983 }, { 53,4983 }, { 54,4983 }, { 55,4983 }, { 56,4983 }, + { 57,4983 }, { 58,4983 }, { 59,4983 }, { 60,4983 }, { 61,4983 }, + { 62,4983 }, { 63,4983 }, { 64,4983 }, { 65,4983 }, { 66,4983 }, + { 67,4983 }, { 68,4983 }, { 69,4983 }, { 70,4983 }, { 71,4983 }, + { 72,4983 }, { 73,4983 }, { 74,4983 }, { 75,4983 }, { 76,4983 }, + { 77,4983 }, { 78,4983 }, { 79,4983 }, { 80,4983 }, { 81,4983 }, + { 82,4983 }, { 83,4983 }, { 84,4983 }, { 85,4983 }, { 86,4983 }, + { 87,4983 }, { 88,4983 }, { 89,4983 }, { 90,4983 }, { 91,4983 }, + { 92,4983 }, { 93,4983 }, { 94,4983 }, { 95,4983 }, { 96,4983 }, + { 97,4983 }, { 98,4983 }, { 99,4983 }, { 100,4983 }, { 101,4983 }, + + { 102,4983 }, { 103,4983 }, { 104,4983 }, { 105,4983 }, { 106,4983 }, + { 107,4983 }, { 108,4983 }, { 109,4983 }, { 110,4983 }, { 111,4983 }, + { 112,4983 }, { 113,4983 }, { 114,4983 }, { 115,4983 }, { 116,4983 }, + { 117,4983 }, { 118,4983 }, { 119,4983 }, { 120,4983 }, { 121,4983 }, + { 122,4983 }, { 123,4983 }, { 124,4983 }, { 125,4983 }, { 126,4983 }, + { 127,4983 }, { 128,4983 }, { 129,4983 }, { 130,4983 }, { 131,4983 }, + { 132,4983 }, { 133,4983 }, { 134,4983 }, { 135,4983 }, { 136,4983 }, + { 137,4983 }, { 138,4983 }, { 139,4983 }, { 140,4983 }, { 141,4983 }, + { 142,4983 }, { 143,4983 }, { 144,4983 }, { 145,4983 }, { 146,4983 }, + { 147,4983 }, { 148,4983 }, { 149,4983 }, { 150,4983 }, { 151,4983 }, + + { 152,4983 }, { 153,4983 }, { 154,4983 }, { 155,4983 }, { 156,4983 }, + { 157,4983 }, { 158,4983 }, { 159,4983 }, { 160,4983 }, { 161,4983 }, + { 162,4983 }, { 163,4983 }, { 164,4983 }, { 165,4983 }, { 166,4983 }, + { 167,4983 }, { 168,4983 }, { 169,4983 }, { 170,4983 }, { 171,4983 }, + { 172,4983 }, { 173,4983 }, { 174,4983 }, { 175,4983 }, { 176,4983 }, + { 177,4983 }, { 178,4983 }, { 179,4983 }, { 180,4983 }, { 181,4983 }, + { 182,4983 }, { 183,4983 }, { 184,4983 }, { 185,4983 }, { 186,4983 }, + { 187,4983 }, { 188,4983 }, { 189,4983 }, { 190,4983 }, { 191,4983 }, + { 192,4983 }, { 193,4983 }, { 194,4983 }, { 195,4983 }, { 196,4983 }, + { 197,4983 }, { 198,4983 }, { 199,4983 }, { 200,4983 }, { 201,4983 }, + + { 202,4983 }, { 203,4983 }, { 204,4983 }, { 205,4983 }, { 206,4983 }, + { 207,4983 }, { 208,4983 }, { 209,4983 }, { 210,4983 }, { 211,4983 }, + { 212,4983 }, { 213,4983 }, { 214,4983 }, { 215,4983 }, { 216,4983 }, + { 217,4983 }, { 218,4983 }, { 219,4983 }, { 220,4983 }, { 221,4983 }, + { 222,4983 }, { 223,4983 }, { 224,4983 }, { 225,4983 }, { 226,4983 }, + { 227,4983 }, { 228,4983 }, { 229,4983 }, { 230,4983 }, { 231,4983 }, + { 232,4983 }, { 233,4983 }, { 234,4983 }, { 235,4983 }, { 236,4983 }, + { 237,4983 }, { 238,4983 }, { 239,4983 }, { 240,4983 }, { 241,4983 }, + { 242,4983 }, { 243,4983 }, { 244,4983 }, { 245,4983 }, { 246,4983 }, + { 247,4983 }, { 248,4983 }, { 249,4983 }, { 250,4983 }, { 251,4983 }, + + { 252,4983 }, { 253,4983 }, { 254,4983 }, { 255,4983 }, { 256,4983 }, + { 0, 22 }, { 0,11392 }, { 1,4983 }, { 2,4983 }, { 3,4983 }, + { 4,4983 }, { 5,4983 }, { 6,4983 }, { 7,4983 }, { 8,4983 }, + { 9,4983 }, { 10,4983 }, { 11,4983 }, { 12,4983 }, { 13,4983 }, + { 14,4983 }, { 15,4983 }, { 16,4983 }, { 17,4983 }, { 18,4983 }, + { 19,4983 }, { 20,4983 }, { 21,4983 }, { 22,4983 }, { 23,4983 }, + { 24,4983 }, { 25,4983 }, { 26,4983 }, { 27,4983 }, { 28,4983 }, + { 29,4983 }, { 30,4983 }, { 31,4983 }, { 32,4983 }, { 33,4983 }, + { 34,4983 }, { 35,4983 }, { 36,4983 }, { 37,4983 }, { 38,4983 }, + { 0, 0 }, { 40,4983 }, { 41,4983 }, { 42,4983 }, { 43,4983 }, + + { 44,4983 }, { 45,4983 }, { 46,4983 }, { 47,4983 }, { 48,4983 }, + { 49,4983 }, { 50,4983 }, { 51,4983 }, { 52,4983 }, { 53,4983 }, + { 54,4983 }, { 55,4983 }, { 56,4983 }, { 57,4983 }, { 58,4983 }, + { 59,4983 }, { 60,4983 }, { 61,4983 }, { 62,4983 }, { 63,4983 }, + { 64,4983 }, { 65,4983 }, { 66,4983 }, { 67,4983 }, { 68,4983 }, + { 69,4983 }, { 70,4983 }, { 71,4983 }, { 72,4983 }, { 73,4983 }, + { 74,4983 }, { 75,4983 }, { 76,4983 }, { 77,4983 }, { 78,4983 }, + { 79,4983 }, { 80,4983 }, { 81,4983 }, { 82,4983 }, { 83,4983 }, + { 84,4983 }, { 85,4983 }, { 86,4983 }, { 87,4983 }, { 88,4983 }, + { 89,4983 }, { 90,4983 }, { 91,4983 }, { 92,4983 }, { 93,4983 }, + + { 94,4983 }, { 95,4983 }, { 96,4983 }, { 97,4983 }, { 98,4983 }, + { 99,4983 }, { 100,4983 }, { 101,4983 }, { 102,4983 }, { 103,4983 }, + { 104,4983 }, { 105,4983 }, { 106,4983 }, { 107,4983 }, { 108,4983 }, + { 109,4983 }, { 110,4983 }, { 111,4983 }, { 112,4983 }, { 113,4983 }, + { 114,4983 }, { 115,4983 }, { 116,4983 }, { 117,4983 }, { 118,4983 }, + { 119,4983 }, { 120,4983 }, { 121,4983 }, { 122,4983 }, { 123,4983 }, + { 124,4983 }, { 125,4983 }, { 126,4983 }, { 127,4983 }, { 128,4983 }, + { 129,4983 }, { 130,4983 }, { 131,4983 }, { 132,4983 }, { 133,4983 }, + { 134,4983 }, { 135,4983 }, { 136,4983 }, { 137,4983 }, { 138,4983 }, + { 139,4983 }, { 140,4983 }, { 141,4983 }, { 142,4983 }, { 143,4983 }, + + { 144,4983 }, { 145,4983 }, { 146,4983 }, { 147,4983 }, { 148,4983 }, + { 149,4983 }, { 150,4983 }, { 151,4983 }, { 152,4983 }, { 153,4983 }, + { 154,4983 }, { 155,4983 }, { 156,4983 }, { 157,4983 }, { 158,4983 }, + { 159,4983 }, { 160,4983 }, { 161,4983 }, { 162,4983 }, { 163,4983 }, + { 164,4983 }, { 165,4983 }, { 166,4983 }, { 167,4983 }, { 168,4983 }, + { 169,4983 }, { 170,4983 }, { 171,4983 }, { 172,4983 }, { 173,4983 }, + { 174,4983 }, { 175,4983 }, { 176,4983 }, { 177,4983 }, { 178,4983 }, + { 179,4983 }, { 180,4983 }, { 181,4983 }, { 182,4983 }, { 183,4983 }, + { 184,4983 }, { 185,4983 }, { 186,4983 }, { 187,4983 }, { 188,4983 }, + { 189,4983 }, { 190,4983 }, { 191,4983 }, { 192,4983 }, { 193,4983 }, + + { 194,4983 }, { 195,4983 }, { 196,4983 }, { 197,4983 }, { 198,4983 }, + { 199,4983 }, { 200,4983 }, { 201,4983 }, { 202,4983 }, { 203,4983 }, + { 204,4983 }, { 205,4983 }, { 206,4983 }, { 207,4983 }, { 208,4983 }, + { 209,4983 }, { 210,4983 }, { 211,4983 }, { 212,4983 }, { 213,4983 }, + { 214,4983 }, { 215,4983 }, { 216,4983 }, { 217,4983 }, { 218,4983 }, + { 219,4983 }, { 220,4983 }, { 221,4983 }, { 222,4983 }, { 223,4983 }, + { 224,4983 }, { 225,4983 }, { 226,4983 }, { 227,4983 }, { 228,4983 }, + { 229,4983 }, { 230,4983 }, { 231,4983 }, { 232,4983 }, { 233,4983 }, + { 234,4983 }, { 235,4983 }, { 236,4983 }, { 237,4983 }, { 238,4983 }, + { 239,4983 }, { 240,4983 }, { 241,4983 }, { 242,4983 }, { 243,4983 }, + + { 244,4983 }, { 245,4983 }, { 246,4983 }, { 247,4983 }, { 248,4983 }, + { 249,4983 }, { 250,4983 }, { 251,4983 }, { 252,4983 }, { 253,4983 }, + { 254,4983 }, { 255,4983 }, { 256,4983 }, { 0, 19 }, { 0,11134 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 19 }, { 0,11129 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,4983 }, { 10,4988 }, + { 0, 0 }, { 12,4983 }, { 13,4988 }, { 9,4999 }, { 10,4999 }, + { 0, 0 }, { 12,4999 }, { 13,4999 }, { 0, 0 }, { 0, 19 }, + { 0,11113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,4983 }, + { 10,4983 }, { 32,4983 }, { 12,4983 }, { 13,4983 }, { 0, 0 }, + + { 0, 0 }, { 32,4999 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,-3785 }, { 45,-3807 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 45,-3812 }, + { 0, 0 }, { 0, 0 }, { 32,4983 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,-3801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 45,-3828 }, { 0, 23 }, { 0,11066 }, { 1,4983 }, { 2,4983 }, + { 3,4983 }, { 4,4983 }, { 5,4983 }, { 6,4983 }, { 7,4983 }, + { 8,4983 }, { 9,4983 }, { 10,4983 }, { 11,4983 }, { 12,4983 }, + { 13,4983 }, { 14,4983 }, { 15,4983 }, { 16,4983 }, { 17,4983 }, + + { 18,4983 }, { 19,4983 }, { 20,4983 }, { 21,4983 }, { 22,4983 }, + { 23,4983 }, { 24,4983 }, { 25,4983 }, { 26,4983 }, { 27,4983 }, + { 28,4983 }, { 29,4983 }, { 30,4983 }, { 31,4983 }, { 32,4983 }, + { 33,4983 }, { 34,4983 }, { 35,4983 }, { 36,4983 }, { 37,4983 }, + { 38,4983 }, { 0, 0 }, { 40,4983 }, { 41,4983 }, { 42,4983 }, + { 43,4983 }, { 44,4983 }, { 45,4983 }, { 46,4983 }, { 47,4983 }, + { 48,4983 }, { 49,4983 }, { 50,4983 }, { 51,4983 }, { 52,4983 }, + { 53,4983 }, { 54,4983 }, { 55,4983 }, { 56,4983 }, { 57,4983 }, + { 58,4983 }, { 59,4983 }, { 60,4983 }, { 61,4983 }, { 62,4983 }, + { 63,4983 }, { 64,4983 }, { 65,4983 }, { 66,4983 }, { 67,4983 }, + + { 68,4983 }, { 69,4983 }, { 70,4983 }, { 71,4983 }, { 72,4983 }, + { 73,4983 }, { 74,4983 }, { 75,4983 }, { 76,4983 }, { 77,4983 }, + { 78,4983 }, { 79,4983 }, { 80,4983 }, { 81,4983 }, { 82,4983 }, + { 83,4983 }, { 84,4983 }, { 85,4983 }, { 86,4983 }, { 87,4983 }, + { 88,4983 }, { 89,4983 }, { 90,4983 }, { 91,4983 }, { 0, 0 }, + { 93,4983 }, { 94,4983 }, { 95,4983 }, { 96,4983 }, { 97,4983 }, + { 98,4983 }, { 99,4983 }, { 100,4983 }, { 101,4983 }, { 102,4983 }, + { 103,4983 }, { 104,4983 }, { 105,4983 }, { 106,4983 }, { 107,4983 }, + { 108,4983 }, { 109,4983 }, { 110,4983 }, { 111,4983 }, { 112,4983 }, + { 113,4983 }, { 114,4983 }, { 115,4983 }, { 116,4983 }, { 117,4983 }, + + { 118,4983 }, { 119,4983 }, { 120,4983 }, { 121,4983 }, { 122,4983 }, + { 123,4983 }, { 124,4983 }, { 125,4983 }, { 126,4983 }, { 127,4983 }, + { 128,4983 }, { 129,4983 }, { 130,4983 }, { 131,4983 }, { 132,4983 }, + { 133,4983 }, { 134,4983 }, { 135,4983 }, { 136,4983 }, { 137,4983 }, + { 138,4983 }, { 139,4983 }, { 140,4983 }, { 141,4983 }, { 142,4983 }, + { 143,4983 }, { 144,4983 }, { 145,4983 }, { 146,4983 }, { 147,4983 }, + { 148,4983 }, { 149,4983 }, { 150,4983 }, { 151,4983 }, { 152,4983 }, + { 153,4983 }, { 154,4983 }, { 155,4983 }, { 156,4983 }, { 157,4983 }, + { 158,4983 }, { 159,4983 }, { 160,4983 }, { 161,4983 }, { 162,4983 }, + { 163,4983 }, { 164,4983 }, { 165,4983 }, { 166,4983 }, { 167,4983 }, + + { 168,4983 }, { 169,4983 }, { 170,4983 }, { 171,4983 }, { 172,4983 }, + { 173,4983 }, { 174,4983 }, { 175,4983 }, { 176,4983 }, { 177,4983 }, + { 178,4983 }, { 179,4983 }, { 180,4983 }, { 181,4983 }, { 182,4983 }, + { 183,4983 }, { 184,4983 }, { 185,4983 }, { 186,4983 }, { 187,4983 }, + { 188,4983 }, { 189,4983 }, { 190,4983 }, { 191,4983 }, { 192,4983 }, + { 193,4983 }, { 194,4983 }, { 195,4983 }, { 196,4983 }, { 197,4983 }, + { 198,4983 }, { 199,4983 }, { 200,4983 }, { 201,4983 }, { 202,4983 }, + { 203,4983 }, { 204,4983 }, { 205,4983 }, { 206,4983 }, { 207,4983 }, + { 208,4983 }, { 209,4983 }, { 210,4983 }, { 211,4983 }, { 212,4983 }, + { 213,4983 }, { 214,4983 }, { 215,4983 }, { 216,4983 }, { 217,4983 }, + + { 218,4983 }, { 219,4983 }, { 220,4983 }, { 221,4983 }, { 222,4983 }, + { 223,4983 }, { 224,4983 }, { 225,4983 }, { 226,4983 }, { 227,4983 }, + { 228,4983 }, { 229,4983 }, { 230,4983 }, { 231,4983 }, { 232,4983 }, + { 233,4983 }, { 234,4983 }, { 235,4983 }, { 236,4983 }, { 237,4983 }, + { 238,4983 }, { 239,4983 }, { 240,4983 }, { 241,4983 }, { 242,4983 }, + { 243,4983 }, { 244,4983 }, { 245,4983 }, { 246,4983 }, { 247,4983 }, + { 248,4983 }, { 249,4983 }, { 250,4983 }, { 251,4983 }, { 252,4983 }, + { 253,4983 }, { 254,4983 }, { 255,4983 }, { 256,4983 }, { 0, 23 }, + { 0,10808 }, { 1,4725 }, { 2,4725 }, { 3,4725 }, { 4,4725 }, + { 5,4725 }, { 6,4725 }, { 7,4725 }, { 8,4725 }, { 9,4725 }, + + { 10,4725 }, { 11,4725 }, { 12,4725 }, { 13,4725 }, { 14,4725 }, + { 15,4725 }, { 16,4725 }, { 17,4725 }, { 18,4725 }, { 19,4725 }, + { 20,4725 }, { 21,4725 }, { 22,4725 }, { 23,4725 }, { 24,4725 }, + { 25,4725 }, { 26,4725 }, { 27,4725 }, { 28,4725 }, { 29,4725 }, + { 30,4725 }, { 31,4725 }, { 32,4725 }, { 33,4725 }, { 34,4725 }, + { 35,4725 }, { 36,4725 }, { 37,4725 }, { 38,4725 }, { 0, 0 }, + { 40,4725 }, { 41,4725 }, { 42,4725 }, { 43,4725 }, { 44,4725 }, + { 45,4725 }, { 46,4725 }, { 47,4725 }, { 48,4725 }, { 49,4725 }, + { 50,4725 }, { 51,4725 }, { 52,4725 }, { 53,4725 }, { 54,4725 }, + { 55,4725 }, { 56,4725 }, { 57,4725 }, { 58,4725 }, { 59,4725 }, + + { 60,4725 }, { 61,4725 }, { 62,4725 }, { 63,4725 }, { 64,4725 }, + { 65,4725 }, { 66,4725 }, { 67,4725 }, { 68,4725 }, { 69,4725 }, + { 70,4725 }, { 71,4725 }, { 72,4725 }, { 73,4725 }, { 74,4725 }, + { 75,4725 }, { 76,4725 }, { 77,4725 }, { 78,4725 }, { 79,4725 }, + { 80,4725 }, { 81,4725 }, { 82,4725 }, { 83,4725 }, { 84,4725 }, + { 85,4725 }, { 86,4725 }, { 87,4725 }, { 88,4725 }, { 89,4725 }, + { 90,4725 }, { 91,4725 }, { 0, 0 }, { 93,4725 }, { 94,4725 }, + { 95,4725 }, { 96,4725 }, { 97,4725 }, { 98,4725 }, { 99,4725 }, + { 100,4725 }, { 101,4725 }, { 102,4725 }, { 103,4725 }, { 104,4725 }, + { 105,4725 }, { 106,4725 }, { 107,4725 }, { 108,4725 }, { 109,4725 }, + + { 110,4725 }, { 111,4725 }, { 112,4725 }, { 113,4725 }, { 114,4725 }, + { 115,4725 }, { 116,4725 }, { 117,4725 }, { 118,4725 }, { 119,4725 }, + { 120,4725 }, { 121,4725 }, { 122,4725 }, { 123,4725 }, { 124,4725 }, + { 125,4725 }, { 126,4725 }, { 127,4725 }, { 128,4725 }, { 129,4725 }, + { 130,4725 }, { 131,4725 }, { 132,4725 }, { 133,4725 }, { 134,4725 }, + { 135,4725 }, { 136,4725 }, { 137,4725 }, { 138,4725 }, { 139,4725 }, + { 140,4725 }, { 141,4725 }, { 142,4725 }, { 143,4725 }, { 144,4725 }, + { 145,4725 }, { 146,4725 }, { 147,4725 }, { 148,4725 }, { 149,4725 }, + { 150,4725 }, { 151,4725 }, { 152,4725 }, { 153,4725 }, { 154,4725 }, + { 155,4725 }, { 156,4725 }, { 157,4725 }, { 158,4725 }, { 159,4725 }, + + { 160,4725 }, { 161,4725 }, { 162,4725 }, { 163,4725 }, { 164,4725 }, + { 165,4725 }, { 166,4725 }, { 167,4725 }, { 168,4725 }, { 169,4725 }, + { 170,4725 }, { 171,4725 }, { 172,4725 }, { 173,4725 }, { 174,4725 }, + { 175,4725 }, { 176,4725 }, { 177,4725 }, { 178,4725 }, { 179,4725 }, + { 180,4725 }, { 181,4725 }, { 182,4725 }, { 183,4725 }, { 184,4725 }, + { 185,4725 }, { 186,4725 }, { 187,4725 }, { 188,4725 }, { 189,4725 }, + { 190,4725 }, { 191,4725 }, { 192,4725 }, { 193,4725 }, { 194,4725 }, + { 195,4725 }, { 196,4725 }, { 197,4725 }, { 198,4725 }, { 199,4725 }, + { 200,4725 }, { 201,4725 }, { 202,4725 }, { 203,4725 }, { 204,4725 }, + { 205,4725 }, { 206,4725 }, { 207,4725 }, { 208,4725 }, { 209,4725 }, + + { 210,4725 }, { 211,4725 }, { 212,4725 }, { 213,4725 }, { 214,4725 }, + { 215,4725 }, { 216,4725 }, { 217,4725 }, { 218,4725 }, { 219,4725 }, + { 220,4725 }, { 221,4725 }, { 222,4725 }, { 223,4725 }, { 224,4725 }, + { 225,4725 }, { 226,4725 }, { 227,4725 }, { 228,4725 }, { 229,4725 }, + { 230,4725 }, { 231,4725 }, { 232,4725 }, { 233,4725 }, { 234,4725 }, + { 235,4725 }, { 236,4725 }, { 237,4725 }, { 238,4725 }, { 239,4725 }, + { 240,4725 }, { 241,4725 }, { 242,4725 }, { 243,4725 }, { 244,4725 }, + { 245,4725 }, { 246,4725 }, { 247,4725 }, { 248,4725 }, { 249,4725 }, + { 250,4725 }, { 251,4725 }, { 252,4725 }, { 253,4725 }, { 254,4725 }, + { 255,4725 }, { 256,4725 }, { 0, 32 }, { 0,10550 }, { 1,-4362 }, + + { 2,-4362 }, { 3,-4362 }, { 4,-4362 }, { 5,-4362 }, { 6,-4362 }, + { 7,-4362 }, { 8,-4362 }, { 9,-4362 }, { 10,-4362 }, { 11,-4362 }, + { 12,-4362 }, { 13,-4362 }, { 14,-4362 }, { 15,-4362 }, { 16,-4362 }, + { 17,-4362 }, { 18,-4362 }, { 19,-4362 }, { 20,-4362 }, { 21,-4362 }, + { 22,-4362 }, { 23,-4362 }, { 24,-4362 }, { 25,-4362 }, { 26,-4362 }, + { 27,-4362 }, { 28,-4362 }, { 29,-4362 }, { 30,-4362 }, { 31,-4362 }, + { 32,-4362 }, { 33,-4362 }, { 34,-4362 }, { 35,-4362 }, { 36,-4362 }, + { 37,-4362 }, { 38,-4362 }, { 39,-4362 }, { 40,-4362 }, { 41,-4362 }, + { 42,-4362 }, { 43,-4362 }, { 44,-4362 }, { 45,-4362 }, { 46,-4362 }, + { 47,-4362 }, { 48,4725 }, { 49,4725 }, { 50,4725 }, { 51,4725 }, + + { 52,4725 }, { 53,4725 }, { 54,4725 }, { 55,4725 }, { 56,-4362 }, + { 57,-4362 }, { 58,-4362 }, { 59,-4362 }, { 60,-4362 }, { 61,-4362 }, + { 62,-4362 }, { 63,-4362 }, { 64,-4362 }, { 65,-4362 }, { 66,-4362 }, + { 67,-4362 }, { 68,-4362 }, { 69,-4362 }, { 70,-4362 }, { 71,-4362 }, + { 72,-4362 }, { 73,-4362 }, { 74,-4362 }, { 75,-4362 }, { 76,-4362 }, + { 77,-4362 }, { 78,-4362 }, { 79,-4362 }, { 80,-4362 }, { 81,-4362 }, + { 82,-4362 }, { 83,-4362 }, { 84,-4362 }, { 85,4733 }, { 86,-4362 }, + { 87,-4362 }, { 88,-4362 }, { 89,-4362 }, { 90,-4362 }, { 91,-4362 }, + { 92,-4362 }, { 93,-4362 }, { 94,-4362 }, { 95,-4362 }, { 96,-4362 }, + { 97,-4362 }, { 98,-4362 }, { 99,-4362 }, { 100,-4362 }, { 101,-4362 }, + + { 102,-4362 }, { 103,-4362 }, { 104,-4362 }, { 105,-4362 }, { 106,-4362 }, + { 107,-4362 }, { 108,-4362 }, { 109,-4362 }, { 110,-4362 }, { 111,-4362 }, + { 112,-4362 }, { 113,-4362 }, { 114,-4362 }, { 115,-4362 }, { 116,-4362 }, + { 117,4756 }, { 118,-4362 }, { 119,-4362 }, { 120,4794 }, { 121,-4362 }, + { 122,-4362 }, { 123,-4362 }, { 124,-4362 }, { 125,-4362 }, { 126,-4362 }, + { 127,-4362 }, { 128,-4362 }, { 129,-4362 }, { 130,-4362 }, { 131,-4362 }, + { 132,-4362 }, { 133,-4362 }, { 134,-4362 }, { 135,-4362 }, { 136,-4362 }, + { 137,-4362 }, { 138,-4362 }, { 139,-4362 }, { 140,-4362 }, { 141,-4362 }, + { 142,-4362 }, { 143,-4362 }, { 144,-4362 }, { 145,-4362 }, { 146,-4362 }, + { 147,-4362 }, { 148,-4362 }, { 149,-4362 }, { 150,-4362 }, { 151,-4362 }, + + { 152,-4362 }, { 153,-4362 }, { 154,-4362 }, { 155,-4362 }, { 156,-4362 }, + { 157,-4362 }, { 158,-4362 }, { 159,-4362 }, { 160,-4362 }, { 161,-4362 }, + { 162,-4362 }, { 163,-4362 }, { 164,-4362 }, { 165,-4362 }, { 166,-4362 }, + { 167,-4362 }, { 168,-4362 }, { 169,-4362 }, { 170,-4362 }, { 171,-4362 }, + { 172,-4362 }, { 173,-4362 }, { 174,-4362 }, { 175,-4362 }, { 176,-4362 }, + { 177,-4362 }, { 178,-4362 }, { 179,-4362 }, { 180,-4362 }, { 181,-4362 }, + { 182,-4362 }, { 183,-4362 }, { 184,-4362 }, { 185,-4362 }, { 186,-4362 }, + { 187,-4362 }, { 188,-4362 }, { 189,-4362 }, { 190,-4362 }, { 191,-4362 }, + { 192,-4362 }, { 193,-4362 }, { 194,-4362 }, { 195,-4362 }, { 196,-4362 }, + { 197,-4362 }, { 198,-4362 }, { 199,-4362 }, { 200,-4362 }, { 201,-4362 }, + + { 202,-4362 }, { 203,-4362 }, { 204,-4362 }, { 205,-4362 }, { 206,-4362 }, + { 207,-4362 }, { 208,-4362 }, { 209,-4362 }, { 210,-4362 }, { 211,-4362 }, + { 212,-4362 }, { 213,-4362 }, { 214,-4362 }, { 215,-4362 }, { 216,-4362 }, + { 217,-4362 }, { 218,-4362 }, { 219,-4362 }, { 220,-4362 }, { 221,-4362 }, + { 222,-4362 }, { 223,-4362 }, { 224,-4362 }, { 225,-4362 }, { 226,-4362 }, + { 227,-4362 }, { 228,-4362 }, { 229,-4362 }, { 230,-4362 }, { 231,-4362 }, + { 232,-4362 }, { 233,-4362 }, { 234,-4362 }, { 235,-4362 }, { 236,-4362 }, + { 237,-4362 }, { 238,-4362 }, { 239,-4362 }, { 240,-4362 }, { 241,-4362 }, + { 242,-4362 }, { 243,-4362 }, { 244,-4362 }, { 245,-4362 }, { 246,-4362 }, + { 247,-4362 }, { 248,-4362 }, { 249,-4362 }, { 250,-4362 }, { 251,-4362 }, + + { 252,-4362 }, { 253,-4362 }, { 254,-4362 }, { 255,-4362 }, { 256,-4362 }, + { 0, 36 }, { 0,10292 }, { 1,4640 }, { 2,4640 }, { 3,4640 }, + { 4,4640 }, { 5,4640 }, { 6,4640 }, { 7,4640 }, { 8,4640 }, + { 9,4640 }, { 10,4640 }, { 11,4640 }, { 12,4640 }, { 13,4640 }, + { 14,4640 }, { 15,4640 }, { 16,4640 }, { 17,4640 }, { 18,4640 }, + { 19,4640 }, { 20,4640 }, { 21,4640 }, { 22,4640 }, { 23,4640 }, + { 24,4640 }, { 25,4640 }, { 26,4640 }, { 27,4640 }, { 28,4640 }, + { 29,4640 }, { 30,4640 }, { 31,4640 }, { 32,4640 }, { 33,4640 }, + { 34,4640 }, { 35,4640 }, { 0, 0 }, { 37,4640 }, { 38,4640 }, + { 39,4640 }, { 40,4640 }, { 41,4640 }, { 42,4640 }, { 43,4640 }, + + { 44,4640 }, { 45,4640 }, { 46,4640 }, { 47,4640 }, { 48,4640 }, + { 49,4640 }, { 50,4640 }, { 51,4640 }, { 52,4640 }, { 53,4640 }, + { 54,4640 }, { 55,4640 }, { 56,4640 }, { 57,4640 }, { 58,4640 }, + { 59,4640 }, { 60,4640 }, { 61,4640 }, { 62,4640 }, { 63,4640 }, + { 64,4640 }, { 65,4640 }, { 66,4640 }, { 67,4640 }, { 68,4640 }, + { 69,4640 }, { 70,4640 }, { 71,4640 }, { 72,4640 }, { 73,4640 }, + { 74,4640 }, { 75,4640 }, { 76,4640 }, { 77,4640 }, { 78,4640 }, + { 79,4640 }, { 80,4640 }, { 81,4640 }, { 82,4640 }, { 83,4640 }, + { 84,4640 }, { 85,4640 }, { 86,4640 }, { 87,4640 }, { 88,4640 }, + { 89,4640 }, { 90,4640 }, { 91,4640 }, { 92,4640 }, { 93,4640 }, + + { 94,4640 }, { 95,4640 }, { 96,4640 }, { 97,4640 }, { 98,4640 }, + { 99,4640 }, { 100,4640 }, { 101,4640 }, { 102,4640 }, { 103,4640 }, + { 104,4640 }, { 105,4640 }, { 106,4640 }, { 107,4640 }, { 108,4640 }, + { 109,4640 }, { 110,4640 }, { 111,4640 }, { 112,4640 }, { 113,4640 }, + { 114,4640 }, { 115,4640 }, { 116,4640 }, { 117,4640 }, { 118,4640 }, + { 119,4640 }, { 120,4640 }, { 121,4640 }, { 122,4640 }, { 123,4640 }, + { 124,4640 }, { 125,4640 }, { 126,4640 }, { 127,4640 }, { 128,4640 }, + { 129,4640 }, { 130,4640 }, { 131,4640 }, { 132,4640 }, { 133,4640 }, + { 134,4640 }, { 135,4640 }, { 136,4640 }, { 137,4640 }, { 138,4640 }, + { 139,4640 }, { 140,4640 }, { 141,4640 }, { 142,4640 }, { 143,4640 }, + + { 144,4640 }, { 145,4640 }, { 146,4640 }, { 147,4640 }, { 148,4640 }, + { 149,4640 }, { 150,4640 }, { 151,4640 }, { 152,4640 }, { 153,4640 }, + { 154,4640 }, { 155,4640 }, { 156,4640 }, { 157,4640 }, { 158,4640 }, + { 159,4640 }, { 160,4640 }, { 161,4640 }, { 162,4640 }, { 163,4640 }, + { 164,4640 }, { 165,4640 }, { 166,4640 }, { 167,4640 }, { 168,4640 }, + { 169,4640 }, { 170,4640 }, { 171,4640 }, { 172,4640 }, { 173,4640 }, + { 174,4640 }, { 175,4640 }, { 176,4640 }, { 177,4640 }, { 178,4640 }, + { 179,4640 }, { 180,4640 }, { 181,4640 }, { 182,4640 }, { 183,4640 }, + { 184,4640 }, { 185,4640 }, { 186,4640 }, { 187,4640 }, { 188,4640 }, + { 189,4640 }, { 190,4640 }, { 191,4640 }, { 192,4640 }, { 193,4640 }, + + { 194,4640 }, { 195,4640 }, { 196,4640 }, { 197,4640 }, { 198,4640 }, + { 199,4640 }, { 200,4640 }, { 201,4640 }, { 202,4640 }, { 203,4640 }, + { 204,4640 }, { 205,4640 }, { 206,4640 }, { 207,4640 }, { 208,4640 }, + { 209,4640 }, { 210,4640 }, { 211,4640 }, { 212,4640 }, { 213,4640 }, + { 214,4640 }, { 215,4640 }, { 216,4640 }, { 217,4640 }, { 218,4640 }, + { 219,4640 }, { 220,4640 }, { 221,4640 }, { 222,4640 }, { 223,4640 }, + { 224,4640 }, { 225,4640 }, { 226,4640 }, { 227,4640 }, { 228,4640 }, + { 229,4640 }, { 230,4640 }, { 231,4640 }, { 232,4640 }, { 233,4640 }, + { 234,4640 }, { 235,4640 }, { 236,4640 }, { 237,4640 }, { 238,4640 }, + { 239,4640 }, { 240,4640 }, { 241,4640 }, { 242,4640 }, { 243,4640 }, + + { 244,4640 }, { 245,4640 }, { 246,4640 }, { 247,4640 }, { 248,4640 }, + { 249,4640 }, { 250,4640 }, { 251,4640 }, { 252,4640 }, { 253,4640 }, + { 254,4640 }, { 255,4640 }, { 256,4640 }, { 0, 36 }, { 0,10034 }, + { 1,4382 }, { 2,4382 }, { 3,4382 }, { 4,4382 }, { 5,4382 }, + { 6,4382 }, { 7,4382 }, { 8,4382 }, { 9,4382 }, { 10,4382 }, + { 11,4382 }, { 12,4382 }, { 13,4382 }, { 14,4382 }, { 15,4382 }, + { 16,4382 }, { 17,4382 }, { 18,4382 }, { 19,4382 }, { 20,4382 }, + { 21,4382 }, { 22,4382 }, { 23,4382 }, { 24,4382 }, { 25,4382 }, + { 26,4382 }, { 27,4382 }, { 28,4382 }, { 29,4382 }, { 30,4382 }, + { 31,4382 }, { 32,4382 }, { 33,4382 }, { 34,4382 }, { 35,4382 }, + + { 0, 0 }, { 37,4382 }, { 38,4382 }, { 39,4382 }, { 40,4382 }, + { 41,4382 }, { 42,4382 }, { 43,4382 }, { 44,4382 }, { 45,4382 }, + { 46,4382 }, { 47,4382 }, { 48,4382 }, { 49,4382 }, { 50,4382 }, + { 51,4382 }, { 52,4382 }, { 53,4382 }, { 54,4382 }, { 55,4382 }, + { 56,4382 }, { 57,4382 }, { 58,4382 }, { 59,4382 }, { 60,4382 }, + { 61,4382 }, { 62,4382 }, { 63,4382 }, { 64,4382 }, { 65,4382 }, + { 66,4382 }, { 67,4382 }, { 68,4382 }, { 69,4382 }, { 70,4382 }, + { 71,4382 }, { 72,4382 }, { 73,4382 }, { 74,4382 }, { 75,4382 }, + { 76,4382 }, { 77,4382 }, { 78,4382 }, { 79,4382 }, { 80,4382 }, + { 81,4382 }, { 82,4382 }, { 83,4382 }, { 84,4382 }, { 85,4382 }, + + { 86,4382 }, { 87,4382 }, { 88,4382 }, { 89,4382 }, { 90,4382 }, + { 91,4382 }, { 92,4382 }, { 93,4382 }, { 94,4382 }, { 95,4382 }, + { 96,4382 }, { 97,4382 }, { 98,4382 }, { 99,4382 }, { 100,4382 }, + { 101,4382 }, { 102,4382 }, { 103,4382 }, { 104,4382 }, { 105,4382 }, + { 106,4382 }, { 107,4382 }, { 108,4382 }, { 109,4382 }, { 110,4382 }, + { 111,4382 }, { 112,4382 }, { 113,4382 }, { 114,4382 }, { 115,4382 }, + { 116,4382 }, { 117,4382 }, { 118,4382 }, { 119,4382 }, { 120,4382 }, + { 121,4382 }, { 122,4382 }, { 123,4382 }, { 124,4382 }, { 125,4382 }, + { 126,4382 }, { 127,4382 }, { 128,4382 }, { 129,4382 }, { 130,4382 }, + { 131,4382 }, { 132,4382 }, { 133,4382 }, { 134,4382 }, { 135,4382 }, + + { 136,4382 }, { 137,4382 }, { 138,4382 }, { 139,4382 }, { 140,4382 }, + { 141,4382 }, { 142,4382 }, { 143,4382 }, { 144,4382 }, { 145,4382 }, + { 146,4382 }, { 147,4382 }, { 148,4382 }, { 149,4382 }, { 150,4382 }, + { 151,4382 }, { 152,4382 }, { 153,4382 }, { 154,4382 }, { 155,4382 }, + { 156,4382 }, { 157,4382 }, { 158,4382 }, { 159,4382 }, { 160,4382 }, + { 161,4382 }, { 162,4382 }, { 163,4382 }, { 164,4382 }, { 165,4382 }, + { 166,4382 }, { 167,4382 }, { 168,4382 }, { 169,4382 }, { 170,4382 }, + { 171,4382 }, { 172,4382 }, { 173,4382 }, { 174,4382 }, { 175,4382 }, + { 176,4382 }, { 177,4382 }, { 178,4382 }, { 179,4382 }, { 180,4382 }, + { 181,4382 }, { 182,4382 }, { 183,4382 }, { 184,4382 }, { 185,4382 }, + + { 186,4382 }, { 187,4382 }, { 188,4382 }, { 189,4382 }, { 190,4382 }, + { 191,4382 }, { 192,4382 }, { 193,4382 }, { 194,4382 }, { 195,4382 }, + { 196,4382 }, { 197,4382 }, { 198,4382 }, { 199,4382 }, { 200,4382 }, + { 201,4382 }, { 202,4382 }, { 203,4382 }, { 204,4382 }, { 205,4382 }, + { 206,4382 }, { 207,4382 }, { 208,4382 }, { 209,4382 }, { 210,4382 }, + { 211,4382 }, { 212,4382 }, { 213,4382 }, { 214,4382 }, { 215,4382 }, + { 216,4382 }, { 217,4382 }, { 218,4382 }, { 219,4382 }, { 220,4382 }, + { 221,4382 }, { 222,4382 }, { 223,4382 }, { 224,4382 }, { 225,4382 }, + { 226,4382 }, { 227,4382 }, { 228,4382 }, { 229,4382 }, { 230,4382 }, + { 231,4382 }, { 232,4382 }, { 233,4382 }, { 234,4382 }, { 235,4382 }, + + { 236,4382 }, { 237,4382 }, { 238,4382 }, { 239,4382 }, { 240,4382 }, + { 241,4382 }, { 242,4382 }, { 243,4382 }, { 244,4382 }, { 245,4382 }, + { 246,4382 }, { 247,4382 }, { 248,4382 }, { 249,4382 }, { 250,4382 }, + { 251,4382 }, { 252,4382 }, { 253,4382 }, { 254,4382 }, { 255,4382 }, + { 256,4382 }, { 0, 38 }, { 0,9776 }, { 0, 1 }, { 0,9774 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 10, 0 }, + { 0, 0 }, { 12, 0 }, { 13, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, - { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, - { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 33,3871 }, - { 0, 0 }, { 35,3871 }, { 0, 0 }, { 37,3871 }, { 38,3871 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,3871 }, { 43,3871 }, - { 69, 113 }, { 45,3871 }, { 0, 0 }, { 47,3871 }, { 46,-5589 }, - { 0, 0 }, { 48,3871 }, { 49,3871 }, { 50,3871 }, { 51,3871 }, - { 52,3871 }, { 53,3871 }, { 54,3871 }, { 55,3871 }, { 56,3871 }, - { 57,3871 }, { 60,3871 }, { 61,3871 }, { 62,3871 }, { 63,3871 }, - { 64,3871 }, { 0, 57 }, { 0,5176 }, { 0, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 69, 86 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 101, 113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 61 }, { 0,5154 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 36,-5116 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 94,3871 }, { 0, 0 }, { 96,3871 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 101, 86 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 46, -64 }, { 0, 0 }, - { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, - - { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, - { 124,3871 }, { 0, 0 }, { 126,3871 }, { 0, 50 }, { 0,5114 }, - { 0, 0 }, { 0, 0 }, { 43,3807 }, { 0, 0 }, { 45,3807 }, - { 0, 0 }, { 69, 22 }, { 48,3849 }, { 49,3849 }, { 50,3849 }, - { 51,3849 }, { 52,3849 }, { 53,3849 }, { 54,3849 }, { 55,3849 }, - { 56,3849 }, { 57,3849 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 33,-759 }, { 0, 0 }, { 35,-759 }, - { 0, 0 }, { 37,-759 }, { 38,-759 }, { 101, 22 }, { 0, 52 }, - - { 0,5073 }, { 42,-759 }, { 43,-759 }, { 0, 0 }, { 45,-759 }, - { 0, 0 }, { 47,-759 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,-759 }, - { 61,-759 }, { 62,-759 }, { 63,-759 }, { 64,-759 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,-800 }, { 0, 0 }, - { 35,-800 }, { 0, 0 }, { 37,-800 }, { 38,-800 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 42,-800 }, { 43,-800 }, { 0, 0 }, - { 45,-800 }, { 0, 0 }, { 47,-800 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,4382 }, { 66,4382 }, { 67,4382 }, + { 68,4382 }, { 69,4382 }, { 70,4382 }, { 71,4382 }, { 72,4382 }, + { 73,4382 }, { 74,4382 }, { 75,4382 }, { 76,4382 }, { 77,4382 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,-759 }, { 0, 0 }, - { 96,-759 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 60,-800 }, { 61,-800 }, { 62,-800 }, { 63,-800 }, { 64,-800 }, - { 0, 0 }, { 0, 49 }, { 0,5006 }, { 0, 0 }, { 0, 0 }, + { 78,4382 }, { 79,4382 }, { 80,4382 }, { 81,4382 }, { 82,4382 }, + { 83,4382 }, { 84,4382 }, { 85,4382 }, { 86,4382 }, { 87,4382 }, + { 88,4382 }, { 89,4382 }, { 90,4382 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,4382 }, { 0, 0 }, { 97,4382 }, + { 98,4382 }, { 99,4382 }, { 100,4382 }, { 101,4382 }, { 102,4382 }, + { 103,4382 }, { 104,4382 }, { 105,4382 }, { 106,4382 }, { 107,4382 }, + { 108,4382 }, { 109,4382 }, { 110,4382 }, { 111,4382 }, { 112,4382 }, + { 113,4382 }, { 114,4382 }, { 115,4382 }, { 116,4382 }, { 117,4382 }, + { 118,4382 }, { 119,4382 }, { 120,4382 }, { 121,4382 }, { 122,4382 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 51 }, { 0,4995 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124,-759 }, { 0, 0 }, - { 126,-759 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,-800 }, - { 0, 0 }, { 96,-800 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 33,-867 }, { 0, 0 }, { 35,-867 }, { 0, 0 }, { 37,-867 }, - { 38,-867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,-867 }, - { 43,-867 }, { 33,-878 }, { 45,-867 }, { 35,-878 }, { 47,-867 }, - { 37,-878 }, { 38,-878 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 42,-878 }, { 43,-878 }, { 0, 0 }, { 45,-878 }, { 124,-800 }, - { 47,-878 }, { 126,-800 }, { 60,-867 }, { 61,-867 }, { 62,-867 }, - { 63,-867 }, { 64,-867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,-878 }, { 61,-878 }, - { 62,-878 }, { 63,-878 }, { 64,-878 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 128,4382 }, { 129,4382 }, { 130,4382 }, { 131,4382 }, { 132,4382 }, + { 133,4382 }, { 134,4382 }, { 135,4382 }, { 136,4382 }, { 137,4382 }, + { 138,4382 }, { 139,4382 }, { 140,4382 }, { 141,4382 }, { 142,4382 }, + { 143,4382 }, { 144,4382 }, { 145,4382 }, { 146,4382 }, { 147,4382 }, + { 148,4382 }, { 149,4382 }, { 150,4382 }, { 151,4382 }, { 152,4382 }, + { 153,4382 }, { 154,4382 }, { 155,4382 }, { 156,4382 }, { 157,4382 }, + { 158,4382 }, { 159,4382 }, { 160,4382 }, { 161,4382 }, { 162,4382 }, + { 163,4382 }, { 164,4382 }, { 165,4382 }, { 166,4382 }, { 167,4382 }, + { 168,4382 }, { 169,4382 }, { 170,4382 }, { 171,4382 }, { 172,4382 }, + { 173,4382 }, { 174,4382 }, { 175,4382 }, { 176,4382 }, { 177,4382 }, + { 178,4382 }, { 179,4382 }, { 180,4382 }, { 181,4382 }, { 182,4382 }, + { 183,4382 }, { 184,4382 }, { 185,4382 }, { 186,4382 }, { 187,4382 }, + { 188,4382 }, { 189,4382 }, { 190,4382 }, { 191,4382 }, { 192,4382 }, + { 193,4382 }, { 194,4382 }, { 195,4382 }, { 196,4382 }, { 197,4382 }, + { 198,4382 }, { 199,4382 }, { 200,4382 }, { 201,4382 }, { 202,4382 }, + { 203,4382 }, { 204,4382 }, { 205,4382 }, { 206,4382 }, { 207,4382 }, + { 208,4382 }, { 209,4382 }, { 210,4382 }, { 211,4382 }, { 212,4382 }, + { 213,4382 }, { 214,4382 }, { 215,4382 }, { 216,4382 }, { 217,4382 }, + { 218,4382 }, { 219,4382 }, { 220,4382 }, { 221,4382 }, { 222,4382 }, + { 223,4382 }, { 224,4382 }, { 225,4382 }, { 226,4382 }, { 227,4382 }, + + { 228,4382 }, { 229,4382 }, { 230,4382 }, { 231,4382 }, { 232,4382 }, + { 233,4382 }, { 234,4382 }, { 235,4382 }, { 236,4382 }, { 237,4382 }, + { 238,4382 }, { 239,4382 }, { 240,4382 }, { 241,4382 }, { 242,4382 }, + { 243,4382 }, { 244,4382 }, { 245,4382 }, { 246,4382 }, { 247,4382 }, + { 248,4382 }, { 249,4382 }, { 250,4382 }, { 251,4382 }, { 252,4382 }, + { 253,4382 }, { 254,4382 }, { 255,4382 }, { 0, 55 }, { 0,9519 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 63 }, { 0,4915 }, { 0, 0 }, - { 0, 0 }, { 94,-867 }, { 0, 0 }, { 96,-867 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 53 }, + { 0,9508 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 94,-878 }, { 0, 0 }, { 96,-878 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 56 }, { 0,9491 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 33, 0 }, { 0, 0 }, { 35, 0 }, + { 0, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 42, 0 }, { 43, 0 }, { 33, -11 }, { 45, 0 }, + { 35, -11 }, { 47, 0 }, { 37, -11 }, { 38, -11 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 42, -11 }, { 43, -11 }, { 0, 0 }, + { 45, -11 }, { 0, 0 }, { 47, -11 }, { 0, 0 }, { 60, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 60, -11 }, { 61, -11 }, { 62, -11 }, { 63, -11 }, { 64, -11 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 34 }, + { 0,9428 }, { 0, 0 }, { 0, 0 }, { 94, 0 }, { 0, 0 }, + { 96, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94, -11 }, + { 0, 0 }, { 96, -11 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 124,-867 }, { 0, 0 }, { 126,-867 }, { 36, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 124,-878 }, { 0, 0 }, { 126,-878 }, - { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, - { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, - { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, - { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, - { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, - { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, - { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, - - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, - { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, - { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, - { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, - { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, - { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, - { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, - { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, - { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, - - { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, - { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, - { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, - { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, - { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, - { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, - { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, - { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, - { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, - { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, - - { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, - { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, - { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, - { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, - { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, - { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, - { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, - { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, - { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, - { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, - - { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, - { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, - { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 11 }, - { 0,4658 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, - { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, - { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, - { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, - { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, - { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, - { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124, 0 }, { 0, 0 }, + { 126, 0 }, { 36,-5802 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124, -11 }, + { 0, 0 }, { 126, -11 }, { 0, 0 }, { 48,4373 }, { 49,4373 }, + { 50,4373 }, { 51,4373 }, { 52,4373 }, { 53,4373 }, { 54,4373 }, + { 55,4373 }, { 56,4373 }, { 57,4373 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,4373 }, { 66,4373 }, { 67,4373 }, { 68,4373 }, { 69,4373 }, + { 70,4373 }, { 71,4373 }, { 72,4373 }, { 73,4373 }, { 74,4373 }, + { 75,4373 }, { 76,4373 }, { 77,4373 }, { 78,4373 }, { 79,4373 }, + + { 80,4373 }, { 81,4373 }, { 82,4373 }, { 83,4373 }, { 84,4373 }, + { 85,4373 }, { 86,4373 }, { 87,4373 }, { 88,4373 }, { 89,4373 }, + { 90,4373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4373 }, { 0, 0 }, { 97,4373 }, { 98,4373 }, { 99,4373 }, + { 100,4373 }, { 101,4373 }, { 102,4373 }, { 103,4373 }, { 104,4373 }, + { 105,4373 }, { 106,4373 }, { 107,4373 }, { 108,4373 }, { 109,4373 }, + { 110,4373 }, { 111,4373 }, { 112,4373 }, { 113,4373 }, { 114,4373 }, + { 115,4373 }, { 116,4373 }, { 117,4373 }, { 118,4373 }, { 119,4373 }, + { 120,4373 }, { 121,4373 }, { 122,4373 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,4373 }, { 129,4373 }, + + { 130,4373 }, { 131,4373 }, { 132,4373 }, { 133,4373 }, { 134,4373 }, + { 135,4373 }, { 136,4373 }, { 137,4373 }, { 138,4373 }, { 139,4373 }, + { 140,4373 }, { 141,4373 }, { 142,4373 }, { 143,4373 }, { 144,4373 }, + { 145,4373 }, { 146,4373 }, { 147,4373 }, { 148,4373 }, { 149,4373 }, + { 150,4373 }, { 151,4373 }, { 152,4373 }, { 153,4373 }, { 154,4373 }, + { 155,4373 }, { 156,4373 }, { 157,4373 }, { 158,4373 }, { 159,4373 }, + { 160,4373 }, { 161,4373 }, { 162,4373 }, { 163,4373 }, { 164,4373 }, + { 165,4373 }, { 166,4373 }, { 167,4373 }, { 168,4373 }, { 169,4373 }, + { 170,4373 }, { 171,4373 }, { 172,4373 }, { 173,4373 }, { 174,4373 }, + { 175,4373 }, { 176,4373 }, { 177,4373 }, { 178,4373 }, { 179,4373 }, + + { 180,4373 }, { 181,4373 }, { 182,4373 }, { 183,4373 }, { 184,4373 }, + { 185,4373 }, { 186,4373 }, { 187,4373 }, { 188,4373 }, { 189,4373 }, + { 190,4373 }, { 191,4373 }, { 192,4373 }, { 193,4373 }, { 194,4373 }, + { 195,4373 }, { 196,4373 }, { 197,4373 }, { 198,4373 }, { 199,4373 }, + { 200,4373 }, { 201,4373 }, { 202,4373 }, { 203,4373 }, { 204,4373 }, + { 205,4373 }, { 206,4373 }, { 207,4373 }, { 208,4373 }, { 209,4373 }, + { 210,4373 }, { 211,4373 }, { 212,4373 }, { 213,4373 }, { 214,4373 }, + { 215,4373 }, { 216,4373 }, { 217,4373 }, { 218,4373 }, { 219,4373 }, + { 220,4373 }, { 221,4373 }, { 222,4373 }, { 223,4373 }, { 224,4373 }, + { 225,4373 }, { 226,4373 }, { 227,4373 }, { 228,4373 }, { 229,4373 }, + + { 230,4373 }, { 231,4373 }, { 232,4373 }, { 233,4373 }, { 234,4373 }, + { 235,4373 }, { 236,4373 }, { 237,4373 }, { 238,4373 }, { 239,4373 }, + { 240,4373 }, { 241,4373 }, { 242,4373 }, { 243,4373 }, { 244,4373 }, + { 245,4373 }, { 246,4373 }, { 247,4373 }, { 248,4373 }, { 249,4373 }, + { 250,4373 }, { 251,4373 }, { 252,4373 }, { 253,4373 }, { 254,4373 }, + { 255,4373 }, { 0, 2 }, { 0,9171 }, { 1,4373 }, { 2,4373 }, + { 3,4373 }, { 4,4373 }, { 5,4373 }, { 6,4373 }, { 7,4373 }, + { 8,4373 }, { 9,4373 }, { 0, 0 }, { 11,4373 }, { 12,4373 }, + { 0, 0 }, { 14,4373 }, { 15,4373 }, { 16,4373 }, { 17,4373 }, + { 18,4373 }, { 19,4373 }, { 20,4373 }, { 21,4373 }, { 22,4373 }, + + { 23,4373 }, { 24,4373 }, { 25,4373 }, { 26,4373 }, { 27,4373 }, + { 28,4373 }, { 29,4373 }, { 30,4373 }, { 31,4373 }, { 32,4373 }, + { 33,4631 }, { 34,4373 }, { 35,4631 }, { 36,4373 }, { 37,4631 }, + { 38,4631 }, { 39,4373 }, { 40,4373 }, { 41,4373 }, { 42,4631 }, + { 43,4631 }, { 44,4373 }, { 45,4631 }, { 46,4373 }, { 47,4631 }, + { 48,4373 }, { 49,4373 }, { 50,4373 }, { 51,4373 }, { 52,4373 }, + { 53,4373 }, { 54,4373 }, { 55,4373 }, { 56,4373 }, { 57,4373 }, + { 58,4373 }, { 59,4373 }, { 60,4631 }, { 61,4631 }, { 62,4631 }, + { 63,4631 }, { 64,4631 }, { 65,4373 }, { 66,4373 }, { 67,4373 }, + { 68,4373 }, { 69,4373 }, { 70,4373 }, { 71,4373 }, { 72,4373 }, + + { 73,4373 }, { 74,4373 }, { 75,4373 }, { 76,4373 }, { 77,4373 }, + { 78,4373 }, { 79,4373 }, { 80,4373 }, { 81,4373 }, { 82,4373 }, + { 83,4373 }, { 84,4373 }, { 85,4373 }, { 86,4373 }, { 87,4373 }, + { 88,4373 }, { 89,4373 }, { 90,4373 }, { 91,4373 }, { 92,4373 }, + { 93,4373 }, { 94,4631 }, { 95,4373 }, { 96,4631 }, { 97,4373 }, + { 98,4373 }, { 99,4373 }, { 100,4373 }, { 101,4373 }, { 102,4373 }, + { 103,4373 }, { 104,4373 }, { 105,4373 }, { 106,4373 }, { 107,4373 }, + { 108,4373 }, { 109,4373 }, { 110,4373 }, { 111,4373 }, { 112,4373 }, + { 113,4373 }, { 114,4373 }, { 115,4373 }, { 116,4373 }, { 117,4373 }, + { 118,4373 }, { 119,4373 }, { 120,4373 }, { 121,4373 }, { 122,4373 }, + + { 123,4373 }, { 124,4631 }, { 125,4373 }, { 126,4631 }, { 127,4373 }, + { 128,4373 }, { 129,4373 }, { 130,4373 }, { 131,4373 }, { 132,4373 }, + { 133,4373 }, { 134,4373 }, { 135,4373 }, { 136,4373 }, { 137,4373 }, + { 138,4373 }, { 139,4373 }, { 140,4373 }, { 141,4373 }, { 142,4373 }, + { 143,4373 }, { 144,4373 }, { 145,4373 }, { 146,4373 }, { 147,4373 }, + { 148,4373 }, { 149,4373 }, { 150,4373 }, { 151,4373 }, { 152,4373 }, + { 153,4373 }, { 154,4373 }, { 155,4373 }, { 156,4373 }, { 157,4373 }, + { 158,4373 }, { 159,4373 }, { 160,4373 }, { 161,4373 }, { 162,4373 }, + { 163,4373 }, { 164,4373 }, { 165,4373 }, { 166,4373 }, { 167,4373 }, + { 168,4373 }, { 169,4373 }, { 170,4373 }, { 171,4373 }, { 172,4373 }, + + { 173,4373 }, { 174,4373 }, { 175,4373 }, { 176,4373 }, { 177,4373 }, + { 178,4373 }, { 179,4373 }, { 180,4373 }, { 181,4373 }, { 182,4373 }, + { 183,4373 }, { 184,4373 }, { 185,4373 }, { 186,4373 }, { 187,4373 }, + { 188,4373 }, { 189,4373 }, { 190,4373 }, { 191,4373 }, { 192,4373 }, + { 193,4373 }, { 194,4373 }, { 195,4373 }, { 196,4373 }, { 197,4373 }, + { 198,4373 }, { 199,4373 }, { 200,4373 }, { 201,4373 }, { 202,4373 }, + { 203,4373 }, { 204,4373 }, { 205,4373 }, { 206,4373 }, { 207,4373 }, + { 208,4373 }, { 209,4373 }, { 210,4373 }, { 211,4373 }, { 212,4373 }, + { 213,4373 }, { 214,4373 }, { 215,4373 }, { 216,4373 }, { 217,4373 }, + { 218,4373 }, { 219,4373 }, { 220,4373 }, { 221,4373 }, { 222,4373 }, + + { 223,4373 }, { 224,4373 }, { 225,4373 }, { 226,4373 }, { 227,4373 }, + { 228,4373 }, { 229,4373 }, { 230,4373 }, { 231,4373 }, { 232,4373 }, + { 233,4373 }, { 234,4373 }, { 235,4373 }, { 236,4373 }, { 237,4373 }, + { 238,4373 }, { 239,4373 }, { 240,4373 }, { 241,4373 }, { 242,4373 }, + { 243,4373 }, { 244,4373 }, { 245,4373 }, { 246,4373 }, { 247,4373 }, + { 248,4373 }, { 249,4373 }, { 250,4373 }, { 251,4373 }, { 252,4373 }, + { 253,4373 }, { 254,4373 }, { 255,4373 }, { 256,4373 }, { 0, 64 }, + { 0,8913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,4631 }, { 49,4631 }, + { 50,4631 }, { 51,4631 }, { 52,4631 }, { 53,4631 }, { 54,4631 }, + { 55,4631 }, { 56,4631 }, { 57,4631 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-5977 }, { 66,-5977 }, { 67,-5977 }, { 68,-5977 }, { 69,4888 }, + { 70,-5977 }, { 71,-5977 }, { 72,-5977 }, { 73,-5977 }, { 74,-5977 }, + { 75,-5977 }, { 76,-5977 }, { 77,-5977 }, { 78,-5977 }, { 79,-5977 }, + { 80,-5977 }, { 81,-5977 }, { 82,-5977 }, { 83,-5977 }, { 84,-5977 }, + { 85,-5977 }, { 86,-5977 }, { 87,-5977 }, { 88,-5977 }, { 89,-5977 }, + { 90,-5977 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4898 }, { 0, 0 }, { 97,-5977 }, { 98,-5977 }, { 99,-5977 }, + { 100,-5977 }, { 101,4888 }, { 102,-5977 }, { 103,-5977 }, { 104,-5977 }, + { 105,-5977 }, { 106,-5977 }, { 107,-5977 }, { 108,-5977 }, { 109,-5977 }, + { 110,-5977 }, { 111,-5977 }, { 112,-5977 }, { 113,-5977 }, { 114,-5977 }, + + { 115,-5977 }, { 116,-5977 }, { 117,-5977 }, { 118,-5977 }, { 119,-5977 }, + { 120,-5977 }, { 121,-5977 }, { 122,-5977 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-5977 }, { 129,-5977 }, + { 130,-5977 }, { 131,-5977 }, { 132,-5977 }, { 133,-5977 }, { 134,-5977 }, + { 135,-5977 }, { 136,-5977 }, { 137,-5977 }, { 138,-5977 }, { 139,-5977 }, + { 140,-5977 }, { 141,-5977 }, { 142,-5977 }, { 143,-5977 }, { 144,-5977 }, + { 145,-5977 }, { 146,-5977 }, { 147,-5977 }, { 148,-5977 }, { 149,-5977 }, + { 150,-5977 }, { 151,-5977 }, { 152,-5977 }, { 153,-5977 }, { 154,-5977 }, + { 155,-5977 }, { 156,-5977 }, { 157,-5977 }, { 158,-5977 }, { 159,-5977 }, + { 160,-5977 }, { 161,-5977 }, { 162,-5977 }, { 163,-5977 }, { 164,-5977 }, + + { 165,-5977 }, { 166,-5977 }, { 167,-5977 }, { 168,-5977 }, { 169,-5977 }, + { 170,-5977 }, { 171,-5977 }, { 172,-5977 }, { 173,-5977 }, { 174,-5977 }, + { 175,-5977 }, { 176,-5977 }, { 177,-5977 }, { 178,-5977 }, { 179,-5977 }, + { 180,-5977 }, { 181,-5977 }, { 182,-5977 }, { 183,-5977 }, { 184,-5977 }, + { 185,-5977 }, { 186,-5977 }, { 187,-5977 }, { 188,-5977 }, { 189,-5977 }, + { 190,-5977 }, { 191,-5977 }, { 192,-5977 }, { 193,-5977 }, { 194,-5977 }, + { 195,-5977 }, { 196,-5977 }, { 197,-5977 }, { 198,-5977 }, { 199,-5977 }, + { 200,-5977 }, { 201,-5977 }, { 202,-5977 }, { 203,-5977 }, { 204,-5977 }, + { 205,-5977 }, { 206,-5977 }, { 207,-5977 }, { 208,-5977 }, { 209,-5977 }, + { 210,-5977 }, { 211,-5977 }, { 212,-5977 }, { 213,-5977 }, { 214,-5977 }, + + { 215,-5977 }, { 216,-5977 }, { 217,-5977 }, { 218,-5977 }, { 219,-5977 }, + { 220,-5977 }, { 221,-5977 }, { 222,-5977 }, { 223,-5977 }, { 224,-5977 }, + { 225,-5977 }, { 226,-5977 }, { 227,-5977 }, { 228,-5977 }, { 229,-5977 }, + { 230,-5977 }, { 231,-5977 }, { 232,-5977 }, { 233,-5977 }, { 234,-5977 }, + { 235,-5977 }, { 236,-5977 }, { 237,-5977 }, { 238,-5977 }, { 239,-5977 }, + { 240,-5977 }, { 241,-5977 }, { 242,-5977 }, { 243,-5977 }, { 244,-5977 }, + { 245,-5977 }, { 246,-5977 }, { 247,-5977 }, { 248,-5977 }, { 249,-5977 }, + { 250,-5977 }, { 251,-5977 }, { 252,-5977 }, { 253,-5977 }, { 254,-5977 }, + { 255,-5977 }, { 0, 3 }, { 0,8656 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 64 }, { 0,8624 }, + { 33,4666 }, { 0, 0 }, { 35,4666 }, { 0, 0 }, { 37,4666 }, + { 38,4666 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,4666 }, + { 43,4666 }, { 0, 0 }, { 45,4666 }, { 0, 0 }, { 47,4666 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, - { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, - { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, - { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, - { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, - { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, - { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, - { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, - { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, - { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 0, 0 }, { 0, 0 }, { 60,4666 }, { 61,4666 }, { 62,4666 }, + { 63,4666 }, { 64,4666 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 46,-6264 }, { 0, 0 }, { 48,4700 }, { 49,4700 }, { 50,4700 }, + { 51,4700 }, { 52,4700 }, { 53,4700 }, { 54,4700 }, { 55,4700 }, + { 56,4700 }, { 57,4700 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 94,4666 }, { 0, 0 }, { 96,4666 }, { 65,-6266 }, + { 66,-6266 }, { 67,-6266 }, { 68,-6266 }, { 69,4599 }, { 70,-6266 }, + { 71,-6266 }, { 72,-6266 }, { 73,-6266 }, { 74,-6266 }, { 75,-6266 }, - { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, - { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, - { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, - { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, - { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, - { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, - { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, - { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, - { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, - { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 76,-6266 }, { 77,-6266 }, { 78,-6266 }, { 79,-6266 }, { 80,-6266 }, + { 81,-6266 }, { 82,-6266 }, { 83,-6266 }, { 84,-6266 }, { 85,-6266 }, + { 86,-6266 }, { 87,-6266 }, { 88,-6266 }, { 89,-6266 }, { 90,-6266 }, + { 0, 0 }, { 124,4666 }, { 0, 0 }, { 126,4666 }, { 95,-6266 }, + { 0, 0 }, { 97,-6266 }, { 98,-6266 }, { 99,-6266 }, { 100,-6266 }, + { 101,4599 }, { 102,-6266 }, { 103,-6266 }, { 104,-6266 }, { 105,-6266 }, + { 106,-6266 }, { 107,-6266 }, { 108,-6266 }, { 109,-6266 }, { 110,-6266 }, + { 111,-6266 }, { 112,-6266 }, { 113,-6266 }, { 114,-6266 }, { 115,-6266 }, + { 116,-6266 }, { 117,-6266 }, { 118,-6266 }, { 119,-6266 }, { 120,-6266 }, + { 121,-6266 }, { 122,-6266 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, - { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, - { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, - { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, - { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, - { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, - { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, - { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, - { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, - { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 0, 0 }, { 0, 0 }, { 128,-6266 }, { 129,-6266 }, { 130,-6266 }, + { 131,-6266 }, { 132,-6266 }, { 133,-6266 }, { 134,-6266 }, { 135,-6266 }, + { 136,-6266 }, { 137,-6266 }, { 138,-6266 }, { 139,-6266 }, { 140,-6266 }, + { 141,-6266 }, { 142,-6266 }, { 143,-6266 }, { 144,-6266 }, { 145,-6266 }, + { 146,-6266 }, { 147,-6266 }, { 148,-6266 }, { 149,-6266 }, { 150,-6266 }, + { 151,-6266 }, { 152,-6266 }, { 153,-6266 }, { 154,-6266 }, { 155,-6266 }, + { 156,-6266 }, { 157,-6266 }, { 158,-6266 }, { 159,-6266 }, { 160,-6266 }, + { 161,-6266 }, { 162,-6266 }, { 163,-6266 }, { 164,-6266 }, { 165,-6266 }, + { 166,-6266 }, { 167,-6266 }, { 168,-6266 }, { 169,-6266 }, { 170,-6266 }, + { 171,-6266 }, { 172,-6266 }, { 173,-6266 }, { 174,-6266 }, { 175,-6266 }, - { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, - { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, - { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, - { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, - { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, - { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, - { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, - { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, - { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, - { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 176,-6266 }, { 177,-6266 }, { 178,-6266 }, { 179,-6266 }, { 180,-6266 }, + { 181,-6266 }, { 182,-6266 }, { 183,-6266 }, { 184,-6266 }, { 185,-6266 }, + { 186,-6266 }, { 187,-6266 }, { 188,-6266 }, { 189,-6266 }, { 190,-6266 }, + { 191,-6266 }, { 192,-6266 }, { 193,-6266 }, { 194,-6266 }, { 195,-6266 }, + { 196,-6266 }, { 197,-6266 }, { 198,-6266 }, { 199,-6266 }, { 200,-6266 }, + { 201,-6266 }, { 202,-6266 }, { 203,-6266 }, { 204,-6266 }, { 205,-6266 }, + { 206,-6266 }, { 207,-6266 }, { 208,-6266 }, { 209,-6266 }, { 210,-6266 }, + { 211,-6266 }, { 212,-6266 }, { 213,-6266 }, { 214,-6266 }, { 215,-6266 }, + { 216,-6266 }, { 217,-6266 }, { 218,-6266 }, { 219,-6266 }, { 220,-6266 }, + { 221,-6266 }, { 222,-6266 }, { 223,-6266 }, { 224,-6266 }, { 225,-6266 }, - { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, - { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, - { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, - { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, - { 255, 0 }, { 256, 0 }, { 0, 6 }, { 0,4400 }, { 1, 0 }, - { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, - { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, - { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, - { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, - { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, + { 226,-6266 }, { 227,-6266 }, { 228,-6266 }, { 229,-6266 }, { 230,-6266 }, + { 231,-6266 }, { 232,-6266 }, { 233,-6266 }, { 234,-6266 }, { 235,-6266 }, + { 236,-6266 }, { 237,-6266 }, { 238,-6266 }, { 239,-6266 }, { 240,-6266 }, + { 241,-6266 }, { 242,-6266 }, { 243,-6266 }, { 244,-6266 }, { 245,-6266 }, + { 246,-6266 }, { 247,-6266 }, { 248,-6266 }, { 249,-6266 }, { 250,-6266 }, + { 251,-6266 }, { 252,-6266 }, { 253,-6266 }, { 254,-6266 }, { 255,-6266 }, + { 0, 57 }, { 0,8367 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, - { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, { 36, 0 }, - { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, - { 0, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, - { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, - { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, - { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, - { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, - { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 46,-257 }, { 0, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-6859 }, { 66,-6859 }, { 67,-6859 }, { 68,-6859 }, + + { 69, 257 }, { 70,-6859 }, { 71,-6859 }, { 72,-6859 }, { 73,-6859 }, + { 74,-6859 }, { 75,-6859 }, { 76,-6859 }, { 77,-6859 }, { 78,-6859 }, + { 79,-6859 }, { 80,-6859 }, { 81,-6859 }, { 82,-6859 }, { 83,-6859 }, + { 84,-6859 }, { 85,-6859 }, { 86,-6859 }, { 87,-6859 }, { 88,-6859 }, + { 89,-6859 }, { 90,-6859 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95, 298 }, { 0, 0 }, { 97,-6859 }, { 98,-6859 }, + { 99,-6859 }, { 100,-6859 }, { 101, 257 }, { 102,-6859 }, { 103,-6859 }, + { 104,-6859 }, { 105,-6859 }, { 106,-6859 }, { 107,-6859 }, { 108,-6859 }, + { 109,-6859 }, { 110,-6859 }, { 111,-6859 }, { 112,-6859 }, { 113,-6859 }, + { 114,-6859 }, { 115,-6859 }, { 116,-6859 }, { 117,-6859 }, { 118,-6859 }, - { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, - { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, - { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, - { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, - { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, - { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, - { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, - { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, - { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, - { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, + { 119,-6859 }, { 120,-6859 }, { 121,-6859 }, { 122,-6859 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-6859 }, + { 129,-6859 }, { 130,-6859 }, { 131,-6859 }, { 132,-6859 }, { 133,-6859 }, + { 134,-6859 }, { 135,-6859 }, { 136,-6859 }, { 137,-6859 }, { 138,-6859 }, + { 139,-6859 }, { 140,-6859 }, { 141,-6859 }, { 142,-6859 }, { 143,-6859 }, + { 144,-6859 }, { 145,-6859 }, { 146,-6859 }, { 147,-6859 }, { 148,-6859 }, + { 149,-6859 }, { 150,-6859 }, { 151,-6859 }, { 152,-6859 }, { 153,-6859 }, + { 154,-6859 }, { 155,-6859 }, { 156,-6859 }, { 157,-6859 }, { 158,-6859 }, + { 159,-6859 }, { 160,-6859 }, { 161,-6859 }, { 162,-6859 }, { 163,-6859 }, + { 164,-6859 }, { 165,-6859 }, { 166,-6859 }, { 167,-6859 }, { 168,-6859 }, - { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, - { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, - { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, - { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, - { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, - { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, - { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, - { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, - { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, - { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 169,-6859 }, { 170,-6859 }, { 171,-6859 }, { 172,-6859 }, { 173,-6859 }, + { 174,-6859 }, { 175,-6859 }, { 176,-6859 }, { 177,-6859 }, { 178,-6859 }, + { 179,-6859 }, { 180,-6859 }, { 181,-6859 }, { 182,-6859 }, { 183,-6859 }, + { 184,-6859 }, { 185,-6859 }, { 186,-6859 }, { 187,-6859 }, { 188,-6859 }, + { 189,-6859 }, { 190,-6859 }, { 191,-6859 }, { 192,-6859 }, { 193,-6859 }, + { 194,-6859 }, { 195,-6859 }, { 196,-6859 }, { 197,-6859 }, { 198,-6859 }, + { 199,-6859 }, { 200,-6859 }, { 201,-6859 }, { 202,-6859 }, { 203,-6859 }, + { 204,-6859 }, { 205,-6859 }, { 206,-6859 }, { 207,-6859 }, { 208,-6859 }, + { 209,-6859 }, { 210,-6859 }, { 211,-6859 }, { 212,-6859 }, { 213,-6859 }, + { 214,-6859 }, { 215,-6859 }, { 216,-6859 }, { 217,-6859 }, { 218,-6859 }, - { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, - { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, - { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, - { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, - { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, - { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, - { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, - { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, - { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, - { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 219,-6859 }, { 220,-6859 }, { 221,-6859 }, { 222,-6859 }, { 223,-6859 }, + { 224,-6859 }, { 225,-6859 }, { 226,-6859 }, { 227,-6859 }, { 228,-6859 }, + { 229,-6859 }, { 230,-6859 }, { 231,-6859 }, { 232,-6859 }, { 233,-6859 }, + { 234,-6859 }, { 235,-6859 }, { 236,-6859 }, { 237,-6859 }, { 238,-6859 }, + { 239,-6859 }, { 240,-6859 }, { 241,-6859 }, { 242,-6859 }, { 243,-6859 }, + { 244,-6859 }, { 245,-6859 }, { 246,-6859 }, { 247,-6859 }, { 248,-6859 }, + { 249,-6859 }, { 250,-6859 }, { 251,-6859 }, { 252,-6859 }, { 253,-6859 }, + { 254,-6859 }, { 255,-6859 }, { 0, 68 }, { 0,8110 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 62 }, { 0,8100 }, { 0, 0 }, - { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, - { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, - { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, - { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, - { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, - { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, - { 0, 4 }, { 0,4142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 61 }, { 0,8092 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 68 }, { 0,8069 }, + { 0, 0 }, { 43,4445 }, { 0, 0 }, { 45,4445 }, { 0, 0 }, + { 0, 0 }, { 48,4700 }, { 49,4700 }, { 50,4700 }, { 51,4700 }, + { 52,4700 }, { 53,4700 }, { 54,4700 }, { 55,4700 }, { 56,4700 }, + { 57,4700 }, { 48,4947 }, { 49,4947 }, { 50,4947 }, { 51,4947 }, + + { 52,4947 }, { 53,4947 }, { 54,4947 }, { 55,4947 }, { 48,5196 }, + { 49,5196 }, { 50,5196 }, { 51,5196 }, { 52,5196 }, { 53,5196 }, + { 54,5196 }, { 55,5196 }, { 56,5196 }, { 57,5196 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,2863 }, - { 0, 0 }, { 35,2863 }, { 0, 0 }, { 37,2863 }, { 38,2863 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,2863 }, { 43,2863 }, - { 0, 0 }, { 45,2863 }, { 0, 0 }, { 47,2863 }, { 0, 0 }, + { 0, 0 }, { 65,5196 }, { 66,5196 }, { 67,5196 }, { 68,5196 }, + { 69,5196 }, { 70,5196 }, { 48,5468 }, { 49,5468 }, { 50,5468 }, + { 51,5468 }, { 52,5468 }, { 53,5468 }, { 54,5468 }, { 55,5468 }, + { 56,5468 }, { 57,5468 }, { 0, 50 }, { 0,8010 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,4955 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 52 }, { 0,7999 }, + + { 0, 0 }, { 95,5453 }, { 0, 0 }, { 97,5196 }, { 98,5196 }, + { 99,5196 }, { 100,5196 }, { 101,5196 }, { 102,5196 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 60,2863 }, { 61,2863 }, { 62,2863 }, { 63,2863 }, - { 64,2863 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 33,-1509 }, { 0, 0 }, { 35,-1509 }, { 0, 0 }, + { 37,-1509 }, { 38,-1509 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 42,-1509 }, { 43,-1509 }, { 33,-1520 }, { 45,-1509 }, { 35,-1520 }, + { 47,-1509 }, { 37,-1520 }, { 38,-1520 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 42,-1520 }, { 43,-1520 }, { 0, 0 }, { 45,-1520 }, + { 0, 0 }, { 47,-1520 }, { 0, 0 }, { 60,-1509 }, { 61,-1509 }, + { 62,-1509 }, { 63,-1509 }, { 64,-1509 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,-1520 }, + { 61,-1520 }, { 62,-1520 }, { 63,-1520 }, { 64,-1520 }, { 0, 0 }, + { 0, 49 }, { 0,7932 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 94,-1509 }, { 0, 0 }, { 96,-1509 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,-1520 }, { 0, 0 }, + { 96,-1520 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,-1587 }, + + { 0, 0 }, { 35,-1587 }, { 0, 0 }, { 37,-1587 }, { 38,-1587 }, + { 0, 51 }, { 0,7892 }, { 0, 0 }, { 42,-1587 }, { 43,-1587 }, + { 0, 0 }, { 45,-1587 }, { 124,-1509 }, { 47,-1587 }, { 126,-1509 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124,-1520 }, { 0, 0 }, + { 126,-1520 }, { 60,-1587 }, { 61,-1587 }, { 62,-1587 }, { 63,-1587 }, + { 64,-1587 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,-1627 }, + { 0, 0 }, { 35,-1627 }, { 0, 0 }, { 37,-1627 }, { 38,-1627 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,-1627 }, { 43,-1627 }, + + { 0, 0 }, { 45,-1627 }, { 0, 0 }, { 47,-1627 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 94,-1587 }, { 0, 0 }, { 96,-1587 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 60,-1627 }, { 61,-1627 }, { 62,-1627 }, { 63,-1627 }, + { 64,-1627 }, { 0, 74 }, { 0,7826 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 94,2863 }, { 0, 0 }, { 96,2863 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 124,-1587 }, { 0, 0 }, { 126,-1587 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 94,-1627 }, { 0, 0 }, { 96,-1627 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 124,-1627 }, { 0, 0 }, { 126,-1627 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, + { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, + { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, + { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, + { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, + { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, + { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, + { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 124,2863 }, { 0, 0 }, { 126,2863 }, { 0, 44 }, { 0,4014 }, + + { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, + { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, + { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, + { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, + { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, + { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, + { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, + { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, + + { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, + { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, + { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, + { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, + { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, + { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, + { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, + { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, + + { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, + { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, + { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, + { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, + { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 11 }, { 0,7569 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, - { 31, 0 }, { 32, 0 }, { 33, 0 }, { 0, 0 }, { 35, 0 }, - { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, - + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, - { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, - { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, - { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, - { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, - { 256, 0 }, { 0, 10 }, { 0,3756 }, { 1, 0 }, { 2, 0 }, + { 256, 0 }, { 0, 6 }, { 0,7311 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, + { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, - { 33, 0 }, { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, - { 38, 0 }, { 0, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, - { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, + { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, { 0, 0 }, + { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, + { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, - { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, - { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, - { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, - { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, - { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 22 }, - { 0,3498 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, - { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, - { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, - { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, - { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 4 }, + { 0,7053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33,4709 }, { 0, 0 }, + { 35,4709 }, { 0, 0 }, { 37,4709 }, { 38,4709 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 42,4709 }, { 43,4709 }, { 0, 0 }, + { 45,4709 }, { 0, 0 }, { 47,4709 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 60,4709 }, { 61,4709 }, { 62,4709 }, { 63,4709 }, { 64,4709 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94,4709 }, + { 0, 0 }, { 96,4709 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124,4709 }, + { 0, 0 }, { 126,4709 }, { 0, 44 }, { 0,6925 }, { 1, 0 }, + { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, + { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, + { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, + { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, + { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, + + { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, + { 32, 0 }, { 33, 0 }, { 0, 0 }, { 35, 0 }, { 36, 0 }, + { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, + { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, + { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, + { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, + { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, + + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, + { 0, 10 }, { 0,6667 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, + { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, + { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, + + { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, + { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, + { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, + { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, + { 0, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, + { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, + { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, + { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, + { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 22 }, { 0,6409 }, + { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, + { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, + + { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, + { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, + { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 40, 0 }, + { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, + { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, + + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, + { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, + { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, + { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, + { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, + { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, + { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, + + { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, + { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, + { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, + { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, + { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, + { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, + { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, + { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, + { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, + + { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, + { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, + { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, + { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, + { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, + { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, + { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, + { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, + { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, + + { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, + { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, + { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, + { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, + { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, + { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, + { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, + { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, + { 256, 0 }, { 0, 19 }, { 0,6151 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 19 }, { 0,6146 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9, 0 }, { 10, 5 }, { 0, 0 }, { 12, 0 }, + { 13, 5 }, { 9, 16 }, { 10, 16 }, { 0, 0 }, { 12, 16 }, + { 13, 16 }, { 0, 0 }, { 0, 19 }, { 0,6130 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9, 0 }, { 10, 0 }, { 32, 0 }, + { 12, 0 }, { 13, 0 }, { 0, 0 }, { 0, 0 }, { 32, 16 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 39,-8768 }, { 45,-8790 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 45,-8795 }, { 0, 0 }, { 0, 0 }, + + { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 39,-8784 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 45,-8811 }, { 0, 23 }, + { 0,6083 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, @@ -3749,20 +4090,20 @@ static const struct yy_trans_info yy_transition[17678] = { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, - { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, - { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 90, 0 }, { 91, 0 }, { 0, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, - { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, @@ -3771,9 +4112,9 @@ static const struct yy_trans_info yy_transition[17678] = { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, - { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, @@ -3782,41 +4123,64 @@ static const struct yy_trans_info yy_transition[17678] = { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, - { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, - { 255, 0 }, { 256, 0 }, { 0, 19 }, { 0,3240 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 19 }, { 0,3235 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 9, 0 }, { 10, 5 }, { 0, 0 }, - { 12, 0 }, { 13, 5 }, { 9, 16 }, { 10, 16 }, { 0, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 30 }, { 0,5825 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 28 }, { 0,5817 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 12, 16 }, { 13, 16 }, { 0, 0 }, { 0, 19 }, { 0,3219 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0,5794 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 10, 0 }, - { 32, 0 }, { 12, 0 }, { 13, 0 }, { 0, 0 }, { 0, 0 }, - { 32, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 39,-7600 }, { 45,-7597 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 45,-7602 }, { 0, 0 }, - { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,-7616 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 45,-7618 }, - - { 0, 23 }, { 0,3172 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,3483 }, { 49,3483 }, { 50,3483 }, { 51,3483 }, + { 52,3483 }, { 53,3483 }, { 54,3483 }, { 55,3483 }, { 48,3490 }, + { 49,3490 }, { 50,3490 }, { 51,3490 }, { 52,3490 }, { 53,3490 }, + { 54,3490 }, { 55,3490 }, { 56,3490 }, { 57,3490 }, { 0, 0 }, + { 0, 0 }, { 0, 29 }, { 0,5756 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,3490 }, { 66,3490 }, { 67,3490 }, { 68,3490 }, + + { 69,3490 }, { 70,3490 }, { 48,3529 }, { 49,3529 }, { 50,3529 }, + { 51,3529 }, { 52,3529 }, { 53,3529 }, { 54,3529 }, { 55,3529 }, + { 56,3529 }, { 57,3529 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,3529 }, + { 66,3529 }, { 67,3529 }, { 68,3529 }, { 69,3529 }, { 70,3529 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,3490 }, { 98,3490 }, + { 99,3490 }, { 100,3490 }, { 101,3490 }, { 102,3490 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,3514 }, { 49,3514 }, { 50,3514 }, { 51,3514 }, { 52,3514 }, + { 53,3514 }, { 54,3514 }, { 55,3514 }, { 56,3514 }, { 57,3514 }, + + { 0, 0 }, { 97,3529 }, { 98,3529 }, { 99,3529 }, { 100,3529 }, + { 101,3529 }, { 102,3529 }, { 65,3514 }, { 66,3514 }, { 67,3514 }, + { 68,3514 }, { 69,3514 }, { 70,3514 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,3514 }, + { 98,3514 }, { 99,3514 }, { 100,3514 }, { 101,3514 }, { 102,3514 }, + { 0, 36 }, { 0,5652 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, - { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, - { 0, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + { 34, 0 }, { 35, 0 }, { 0, 0 }, { 37, 0 }, { 38, 0 }, + { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, - { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, @@ -3824,10 +4188,10 @@ static const struct yy_trans_info yy_transition[17678] = { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, - { 89, 0 }, { 90, 0 }, { 91, 0 }, { 0, 0 }, { 93, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, - { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, @@ -3837,8 +4201,8 @@ static const struct yy_trans_info yy_transition[17678] = { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, - { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, @@ -3848,8 +4212,8 @@ static const struct yy_trans_info yy_transition[17678] = { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, - { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, @@ -3859,650 +4223,1195 @@ static const struct yy_trans_info yy_transition[17678] = { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, - { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, - { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 30 }, { 0,2914 }, + + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 37 }, { 0,5394 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 28 }, { 0,2906 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, - { 0,2883 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 48,1652 }, { 49,1652 }, { 50,1652 }, - { 51,1652 }, { 52,1652 }, { 53,1652 }, { 54,1652 }, { 55,1652 }, - { 48,1676 }, { 49,1676 }, { 50,1676 }, { 51,1676 }, { 52,1676 }, - { 53,1676 }, { 54,1676 }, { 55,1676 }, { 56,1676 }, { 57,1676 }, - { 0, 0 }, { 0, 0 }, { 0, 29 }, { 0,2845 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65,1676 }, { 66,1676 }, { 67,1676 }, - { 68,1676 }, { 69,1676 }, { 70,1676 }, { 48,1691 }, { 49,1691 }, - { 50,1691 }, { 51,1691 }, { 52,1691 }, { 53,1691 }, { 54,1691 }, - { 55,1691 }, { 56,1691 }, { 57,1691 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,1691 }, { 66,1691 }, { 67,1691 }, { 68,1691 }, { 69,1691 }, - { 70,1691 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,1676 }, - { 98,1676 }, { 99,1676 }, { 100,1676 }, { 101,1676 }, { 102,1676 }, + { 36,-9498 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 48,1676 }, { 49,1676 }, { 50,1676 }, { 51,1676 }, - { 52,1676 }, { 53,1676 }, { 54,1676 }, { 55,1676 }, { 56,1676 }, - { 57,1676 }, { 0, 0 }, { 97,1691 }, { 98,1691 }, { 99,1691 }, - { 100,1691 }, { 101,1691 }, { 102,1691 }, { 65,1676 }, { 66,1676 }, - { 67,1676 }, { 68,1676 }, { 69,1676 }, { 70,1676 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,3211 }, { 49,3211 }, { 50,3211 }, + { 51,3211 }, { 52,3211 }, { 53,3211 }, { 54,3211 }, { 55,3211 }, + { 56,3211 }, { 57,3211 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,3211 }, + { 66,3211 }, { 67,3211 }, { 68,3211 }, { 69,3211 }, { 70,3211 }, + { 71,3211 }, { 72,3211 }, { 73,3211 }, { 74,3211 }, { 75,3211 }, + { 76,3211 }, { 77,3211 }, { 78,3211 }, { 79,3211 }, { 80,3211 }, + { 81,3211 }, { 82,3211 }, { 83,3211 }, { 84,3211 }, { 85,3211 }, + { 86,3211 }, { 87,3211 }, { 88,3211 }, { 89,3211 }, { 90,3211 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,3211 }, + + { 0, 0 }, { 97,3211 }, { 98,3211 }, { 99,3211 }, { 100,3211 }, + { 101,3211 }, { 102,3211 }, { 103,3211 }, { 104,3211 }, { 105,3211 }, + { 106,3211 }, { 107,3211 }, { 108,3211 }, { 109,3211 }, { 110,3211 }, + { 111,3211 }, { 112,3211 }, { 113,3211 }, { 114,3211 }, { 115,3211 }, + { 116,3211 }, { 117,3211 }, { 118,3211 }, { 119,3211 }, { 120,3211 }, + { 121,3211 }, { 122,3211 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 128,3211 }, { 129,3211 }, { 130,3211 }, + { 131,3211 }, { 132,3211 }, { 133,3211 }, { 134,3211 }, { 135,3211 }, + { 136,3211 }, { 137,3211 }, { 138,3211 }, { 139,3211 }, { 140,3211 }, + { 141,3211 }, { 142,3211 }, { 143,3211 }, { 144,3211 }, { 145,3211 }, + + { 146,3211 }, { 147,3211 }, { 148,3211 }, { 149,3211 }, { 150,3211 }, + { 151,3211 }, { 152,3211 }, { 153,3211 }, { 154,3211 }, { 155,3211 }, + { 156,3211 }, { 157,3211 }, { 158,3211 }, { 159,3211 }, { 160,3211 }, + { 161,3211 }, { 162,3211 }, { 163,3211 }, { 164,3211 }, { 165,3211 }, + { 166,3211 }, { 167,3211 }, { 168,3211 }, { 169,3211 }, { 170,3211 }, + { 171,3211 }, { 172,3211 }, { 173,3211 }, { 174,3211 }, { 175,3211 }, + { 176,3211 }, { 177,3211 }, { 178,3211 }, { 179,3211 }, { 180,3211 }, + { 181,3211 }, { 182,3211 }, { 183,3211 }, { 184,3211 }, { 185,3211 }, + { 186,3211 }, { 187,3211 }, { 188,3211 }, { 189,3211 }, { 190,3211 }, + { 191,3211 }, { 192,3211 }, { 193,3211 }, { 194,3211 }, { 195,3211 }, + + { 196,3211 }, { 197,3211 }, { 198,3211 }, { 199,3211 }, { 200,3211 }, + { 201,3211 }, { 202,3211 }, { 203,3211 }, { 204,3211 }, { 205,3211 }, + { 206,3211 }, { 207,3211 }, { 208,3211 }, { 209,3211 }, { 210,3211 }, + { 211,3211 }, { 212,3211 }, { 213,3211 }, { 214,3211 }, { 215,3211 }, + { 216,3211 }, { 217,3211 }, { 218,3211 }, { 219,3211 }, { 220,3211 }, + { 221,3211 }, { 222,3211 }, { 223,3211 }, { 224,3211 }, { 225,3211 }, + { 226,3211 }, { 227,3211 }, { 228,3211 }, { 229,3211 }, { 230,3211 }, + { 231,3211 }, { 232,3211 }, { 233,3211 }, { 234,3211 }, { 235,3211 }, + { 236,3211 }, { 237,3211 }, { 238,3211 }, { 239,3211 }, { 240,3211 }, + { 241,3211 }, { 242,3211 }, { 243,3211 }, { 244,3211 }, { 245,3211 }, + + { 246,3211 }, { 247,3211 }, { 248,3211 }, { 249,3211 }, { 250,3211 }, + { 251,3211 }, { 252,3211 }, { 253,3211 }, { 254,3211 }, { 255,3211 }, + { 0, 28 }, { 0,5137 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0,5114 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 97,1676 }, { 98,1676 }, { 99,1676 }, { 100,1676 }, { 101,1676 }, - { 102,1676 }, { 0, 36 }, { 0,2741 }, { 1, 0 }, { 2, 0 }, - { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, - { 8, 0 }, { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, - { 13, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, - { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, - { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, - { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, - { 33, 0 }, { 34, 0 }, { 35, 0 }, { 0, 0 }, { 37, 0 }, - { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, - { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, - { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, - { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, - { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, - { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,3211 }, + { 49,3211 }, { 50,3211 }, { 51,3211 }, { 52,3211 }, { 53,3211 }, + { 54,3211 }, { 55,3211 }, { 56,3211 }, { 57,3211 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,3211 }, { 66,3211 }, { 67,3211 }, { 68,3211 }, + { 69,3211 }, { 70,3211 }, { 48,3211 }, { 49,3211 }, { 50,3211 }, + { 51,3211 }, { 52,3211 }, { 53,3211 }, { 54,3211 }, { 55,3211 }, + { 56,3211 }, { 57,3211 }, { 0, 34 }, { 0,5055 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,3211 }, - { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, - { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, - { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, - { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, - { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, - { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, - { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, - { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, - { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, - { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 66,3211 }, { 67,3211 }, { 68,3211 }, { 69,3211 }, { 70,3211 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,3211 }, { 98,3211 }, + { 99,3211 }, { 100,3211 }, { 101,3211 }, { 102,3211 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,-10175 }, + { 0, 0 }, { 97,3211 }, { 98,3211 }, { 99,3211 }, { 100,3211 }, + { 101,3211 }, { 102,3211 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, - { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, - { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, - { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, - { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, - { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, - { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, - { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, - { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, - { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, - { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, - { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, - { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, - { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, - { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, - { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, - { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, - { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, - { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, - { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, - { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, - { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, - { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, - { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, - { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, - { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, - { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, - { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 37 }, - { 0,2483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 2 }, + + { 0,4798 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, { 14, 0 }, + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, + { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, + { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, + { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, + + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, + { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, + { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 2 }, { 0,4540 }, { 1,-258 }, + { 2,-258 }, { 3,-258 }, { 4,-258 }, { 5,-258 }, { 6,-258 }, + { 7,-258 }, { 8,-258 }, { 9,-258 }, { 0, 0 }, { 11,-258 }, + { 12,-258 }, { 0, 0 }, { 14,-258 }, { 15,-258 }, { 16,-258 }, + { 17,-258 }, { 18,-258 }, { 19,-258 }, { 20,-258 }, { 21,-258 }, + { 22,-258 }, { 23,-258 }, { 24,-258 }, { 25,-258 }, { 26,-258 }, + { 27,-258 }, { 28,-258 }, { 29,-258 }, { 30,-258 }, { 31,-258 }, + { 32,-258 }, { 33, 0 }, { 34,-258 }, { 35, 0 }, { 36,-258 }, + { 37, 0 }, { 38, 0 }, { 39,-258 }, { 40,-258 }, { 41,-258 }, + + { 42, 0 }, { 43, 0 }, { 44,-258 }, { 45, 0 }, { 46,-258 }, + { 47, 0 }, { 48,-258 }, { 49,-258 }, { 50,-258 }, { 51,-258 }, + { 52,-258 }, { 53,-258 }, { 54,-258 }, { 55,-258 }, { 56,-258 }, + { 57,-258 }, { 58,-258 }, { 59,-258 }, { 60, 0 }, { 61, 0 }, + { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65,-258 }, { 66,-258 }, + { 67,-258 }, { 68,-258 }, { 69,-258 }, { 70,-258 }, { 71,-258 }, + { 72,-258 }, { 73,-258 }, { 74,-258 }, { 75,-258 }, { 76,-258 }, + { 77,-258 }, { 78,-258 }, { 79,-258 }, { 80,-258 }, { 81,-258 }, + { 82,-258 }, { 83,-258 }, { 84,-258 }, { 85,-258 }, { 86,-258 }, + { 87,-258 }, { 88,-258 }, { 89,-258 }, { 90,-258 }, { 91,-258 }, + + { 92,-258 }, { 93,-258 }, { 94, 0 }, { 95,-258 }, { 96, 0 }, + { 97,-258 }, { 98,-258 }, { 99,-258 }, { 100,-258 }, { 101,-258 }, + { 102,-258 }, { 103,-258 }, { 104,-258 }, { 105,-258 }, { 106,-258 }, + { 107,-258 }, { 108,-258 }, { 109,-258 }, { 110,-258 }, { 111,-258 }, + { 112,-258 }, { 113,-258 }, { 114,-258 }, { 115,-258 }, { 116,-258 }, + { 117,-258 }, { 118,-258 }, { 119,-258 }, { 120,-258 }, { 121,-258 }, + { 122,-258 }, { 123,-258 }, { 124, 0 }, { 125,-258 }, { 126, 0 }, + { 127,-258 }, { 128,-258 }, { 129,-258 }, { 130,-258 }, { 131,-258 }, + { 132,-258 }, { 133,-258 }, { 134,-258 }, { 135,-258 }, { 136,-258 }, + { 137,-258 }, { 138,-258 }, { 139,-258 }, { 140,-258 }, { 141,-258 }, + + { 142,-258 }, { 143,-258 }, { 144,-258 }, { 145,-258 }, { 146,-258 }, + { 147,-258 }, { 148,-258 }, { 149,-258 }, { 150,-258 }, { 151,-258 }, + { 152,-258 }, { 153,-258 }, { 154,-258 }, { 155,-258 }, { 156,-258 }, + { 157,-258 }, { 158,-258 }, { 159,-258 }, { 160,-258 }, { 161,-258 }, + { 162,-258 }, { 163,-258 }, { 164,-258 }, { 165,-258 }, { 166,-258 }, + { 167,-258 }, { 168,-258 }, { 169,-258 }, { 170,-258 }, { 171,-258 }, + { 172,-258 }, { 173,-258 }, { 174,-258 }, { 175,-258 }, { 176,-258 }, + { 177,-258 }, { 178,-258 }, { 179,-258 }, { 180,-258 }, { 181,-258 }, + { 182,-258 }, { 183,-258 }, { 184,-258 }, { 185,-258 }, { 186,-258 }, + { 187,-258 }, { 188,-258 }, { 189,-258 }, { 190,-258 }, { 191,-258 }, + + { 192,-258 }, { 193,-258 }, { 194,-258 }, { 195,-258 }, { 196,-258 }, + { 197,-258 }, { 198,-258 }, { 199,-258 }, { 200,-258 }, { 201,-258 }, + { 202,-258 }, { 203,-258 }, { 204,-258 }, { 205,-258 }, { 206,-258 }, + { 207,-258 }, { 208,-258 }, { 209,-258 }, { 210,-258 }, { 211,-258 }, + { 212,-258 }, { 213,-258 }, { 214,-258 }, { 215,-258 }, { 216,-258 }, + { 217,-258 }, { 218,-258 }, { 219,-258 }, { 220,-258 }, { 221,-258 }, + { 222,-258 }, { 223,-258 }, { 224,-258 }, { 225,-258 }, { 226,-258 }, + { 227,-258 }, { 228,-258 }, { 229,-258 }, { 230,-258 }, { 231,-258 }, + { 232,-258 }, { 233,-258 }, { 234,-258 }, { 235,-258 }, { 236,-258 }, + { 237,-258 }, { 238,-258 }, { 239,-258 }, { 240,-258 }, { 241,-258 }, + + { 242,-258 }, { 243,-258 }, { 244,-258 }, { 245,-258 }, { 246,-258 }, + { 247,-258 }, { 248,-258 }, { 249,-258 }, { 250,-258 }, { 251,-258 }, + { 252,-258 }, { 253,-258 }, { 254,-258 }, { 255,-258 }, { 256,-258 }, + { 0, 64 }, { 0,4282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 36,-8348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,1373 }, { 49,1373 }, - { 50,1373 }, { 51,1373 }, { 52,1373 }, { 53,1373 }, { 54,1373 }, - { 55,1373 }, { 56,1373 }, { 57,1373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,1373 }, { 66,1373 }, { 67,1373 }, { 68,1373 }, { 69,1373 }, - { 70,1373 }, { 71,1373 }, { 72,1373 }, { 73,1373 }, { 74,1373 }, - { 75,1373 }, { 76,1373 }, { 77,1373 }, { 78,1373 }, { 79,1373 }, - { 80,1373 }, { 81,1373 }, { 82,1373 }, { 83,1373 }, { 84,1373 }, - { 85,1373 }, { 86,1373 }, { 87,1373 }, { 88,1373 }, { 89,1373 }, - { 90,1373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 95,1373 }, { 0, 0 }, { 97,1373 }, { 98,1373 }, { 99,1373 }, - { 100,1373 }, { 101,1373 }, { 102,1373 }, { 103,1373 }, { 104,1373 }, - { 105,1373 }, { 106,1373 }, { 107,1373 }, { 108,1373 }, { 109,1373 }, - - { 110,1373 }, { 111,1373 }, { 112,1373 }, { 113,1373 }, { 114,1373 }, - { 115,1373 }, { 116,1373 }, { 117,1373 }, { 118,1373 }, { 119,1373 }, - { 120,1373 }, { 121,1373 }, { 122,1373 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,1373 }, { 129,1373 }, - { 130,1373 }, { 131,1373 }, { 132,1373 }, { 133,1373 }, { 134,1373 }, - { 135,1373 }, { 136,1373 }, { 137,1373 }, { 138,1373 }, { 139,1373 }, - { 140,1373 }, { 141,1373 }, { 142,1373 }, { 143,1373 }, { 144,1373 }, - { 145,1373 }, { 146,1373 }, { 147,1373 }, { 148,1373 }, { 149,1373 }, - { 150,1373 }, { 151,1373 }, { 152,1373 }, { 153,1373 }, { 154,1373 }, - { 155,1373 }, { 156,1373 }, { 157,1373 }, { 158,1373 }, { 159,1373 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-10608 }, { 66,-10608 }, { 67,-10608 }, { 68,-10608 }, + { 69, 257 }, { 70,-10608 }, { 71,-10608 }, { 72,-10608 }, { 73,-10608 }, + { 74,-10608 }, { 75,-10608 }, { 76,-10608 }, { 77,-10608 }, { 78,-10608 }, + { 79,-10608 }, { 80,-10608 }, { 81,-10608 }, { 82,-10608 }, { 83,-10608 }, - { 160,1373 }, { 161,1373 }, { 162,1373 }, { 163,1373 }, { 164,1373 }, - { 165,1373 }, { 166,1373 }, { 167,1373 }, { 168,1373 }, { 169,1373 }, - { 170,1373 }, { 171,1373 }, { 172,1373 }, { 173,1373 }, { 174,1373 }, - { 175,1373 }, { 176,1373 }, { 177,1373 }, { 178,1373 }, { 179,1373 }, - { 180,1373 }, { 181,1373 }, { 182,1373 }, { 183,1373 }, { 184,1373 }, - { 185,1373 }, { 186,1373 }, { 187,1373 }, { 188,1373 }, { 189,1373 }, - { 190,1373 }, { 191,1373 }, { 192,1373 }, { 193,1373 }, { 194,1373 }, - { 195,1373 }, { 196,1373 }, { 197,1373 }, { 198,1373 }, { 199,1373 }, - { 200,1373 }, { 201,1373 }, { 202,1373 }, { 203,1373 }, { 204,1373 }, - { 205,1373 }, { 206,1373 }, { 207,1373 }, { 208,1373 }, { 209,1373 }, + { 84,-10608 }, { 85,-10608 }, { 86,-10608 }, { 87,-10608 }, { 88,-10608 }, + { 89,-10608 }, { 90,-10608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95, 267 }, { 0, 0 }, { 97,-10608 }, { 98,-10608 }, + { 99,-10608 }, { 100,-10608 }, { 101, 257 }, { 102,-10608 }, { 103,-10608 }, + { 104,-10608 }, { 105,-10608 }, { 106,-10608 }, { 107,-10608 }, { 108,-10608 }, + { 109,-10608 }, { 110,-10608 }, { 111,-10608 }, { 112,-10608 }, { 113,-10608 }, + { 114,-10608 }, { 115,-10608 }, { 116,-10608 }, { 117,-10608 }, { 118,-10608 }, + { 119,-10608 }, { 120,-10608 }, { 121,-10608 }, { 122,-10608 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-10608 }, + { 129,-10608 }, { 130,-10608 }, { 131,-10608 }, { 132,-10608 }, { 133,-10608 }, + + { 134,-10608 }, { 135,-10608 }, { 136,-10608 }, { 137,-10608 }, { 138,-10608 }, + { 139,-10608 }, { 140,-10608 }, { 141,-10608 }, { 142,-10608 }, { 143,-10608 }, + { 144,-10608 }, { 145,-10608 }, { 146,-10608 }, { 147,-10608 }, { 148,-10608 }, + { 149,-10608 }, { 150,-10608 }, { 151,-10608 }, { 152,-10608 }, { 153,-10608 }, + { 154,-10608 }, { 155,-10608 }, { 156,-10608 }, { 157,-10608 }, { 158,-10608 }, + { 159,-10608 }, { 160,-10608 }, { 161,-10608 }, { 162,-10608 }, { 163,-10608 }, + { 164,-10608 }, { 165,-10608 }, { 166,-10608 }, { 167,-10608 }, { 168,-10608 }, + { 169,-10608 }, { 170,-10608 }, { 171,-10608 }, { 172,-10608 }, { 173,-10608 }, + { 174,-10608 }, { 175,-10608 }, { 176,-10608 }, { 177,-10608 }, { 178,-10608 }, + { 179,-10608 }, { 180,-10608 }, { 181,-10608 }, { 182,-10608 }, { 183,-10608 }, - { 210,1373 }, { 211,1373 }, { 212,1373 }, { 213,1373 }, { 214,1373 }, - { 215,1373 }, { 216,1373 }, { 217,1373 }, { 218,1373 }, { 219,1373 }, - { 220,1373 }, { 221,1373 }, { 222,1373 }, { 223,1373 }, { 224,1373 }, - { 225,1373 }, { 226,1373 }, { 227,1373 }, { 228,1373 }, { 229,1373 }, - { 230,1373 }, { 231,1373 }, { 232,1373 }, { 233,1373 }, { 234,1373 }, - { 235,1373 }, { 236,1373 }, { 237,1373 }, { 238,1373 }, { 239,1373 }, - { 240,1373 }, { 241,1373 }, { 242,1373 }, { 243,1373 }, { 244,1373 }, - { 245,1373 }, { 246,1373 }, { 247,1373 }, { 248,1373 }, { 249,1373 }, - { 250,1373 }, { 251,1373 }, { 252,1373 }, { 253,1373 }, { 254,1373 }, - { 255,1373 }, { 0, 28 }, { 0,2226 }, { 0, 0 }, { 0, 0 }, + { 184,-10608 }, { 185,-10608 }, { 186,-10608 }, { 187,-10608 }, { 188,-10608 }, + { 189,-10608 }, { 190,-10608 }, { 191,-10608 }, { 192,-10608 }, { 193,-10608 }, + { 194,-10608 }, { 195,-10608 }, { 196,-10608 }, { 197,-10608 }, { 198,-10608 }, + { 199,-10608 }, { 200,-10608 }, { 201,-10608 }, { 202,-10608 }, { 203,-10608 }, + { 204,-10608 }, { 205,-10608 }, { 206,-10608 }, { 207,-10608 }, { 208,-10608 }, + { 209,-10608 }, { 210,-10608 }, { 211,-10608 }, { 212,-10608 }, { 213,-10608 }, + { 214,-10608 }, { 215,-10608 }, { 216,-10608 }, { 217,-10608 }, { 218,-10608 }, + { 219,-10608 }, { 220,-10608 }, { 221,-10608 }, { 222,-10608 }, { 223,-10608 }, + { 224,-10608 }, { 225,-10608 }, { 226,-10608 }, { 227,-10608 }, { 228,-10608 }, + { 229,-10608 }, { 230,-10608 }, { 231,-10608 }, { 232,-10608 }, { 233,-10608 }, + { 234,-10608 }, { 235,-10608 }, { 236,-10608 }, { 237,-10608 }, { 238,-10608 }, + { 239,-10608 }, { 240,-10608 }, { 241,-10608 }, { 242,-10608 }, { 243,-10608 }, + { 244,-10608 }, { 245,-10608 }, { 246,-10608 }, { 247,-10608 }, { 248,-10608 }, + { 249,-10608 }, { 250,-10608 }, { 251,-10608 }, { 252,-10608 }, { 253,-10608 }, + { 254,-10608 }, { 255,-10608 }, { 0, 72 }, { 0,4025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 72 }, { 0,4015 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, - { 0,2203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 3 }, { 0,3990 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 48,1373 }, { 49,1373 }, { 50,1373 }, { 51,1373 }, { 52,1373 }, + { 0, 0 }, { 43, 360 }, { 0, 0 }, { 45, 360 }, { 0, 0 }, + { 0, 0 }, { 48, 615 }, { 49, 615 }, { 50, 615 }, { 51, 615 }, + { 52, 615 }, { 53, 615 }, { 54, 615 }, { 55, 615 }, { 56, 615 }, + { 57, 615 }, { 48,-267 }, { 49,-267 }, { 50,-267 }, { 51,-267 }, + { 52,-267 }, { 53,-267 }, { 54,-267 }, { 55,-267 }, { 56,-267 }, + { 57,-267 }, { 33, 0 }, { 0, 0 }, { 35, 0 }, { 0, 0 }, + { 37, 0 }, { 38, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 53,1373 }, { 54,1373 }, { 55,1373 }, { 56,1373 }, { 57,1373 }, + { 42, 0 }, { 43, 0 }, { 0, 0 }, { 45, 0 }, { 0, 0 }, + { 47, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60, 0 }, { 61, 0 }, + { 62, 0 }, { 63, 0 }, { 64, 0 }, { 0, 64 }, { 0,3924 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65,1373 }, { 66,1373 }, { 67,1373 }, - { 68,1373 }, { 69,1373 }, { 70,1373 }, { 48,1373 }, { 49,1373 }, - { 50,1373 }, { 51,1373 }, { 52,1373 }, { 53,1373 }, { 54,1373 }, - { 55,1373 }, { 56,1373 }, { 57,1373 }, { 0, 34 }, { 0,2144 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,1373 }, { 66,1373 }, { 67,1373 }, { 68,1373 }, { 69,1373 }, - { 70,1373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,1373 }, - { 98,1373 }, { 99,1373 }, { 100,1373 }, { 101,1373 }, { 102,1373 }, + { 0, 0 }, { 0, 0 }, { 94, 0 }, { 0, 0 }, { 96, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 36,-8961 }, { 0, 0 }, { 97,1373 }, { 98,1373 }, { 99,1373 }, - { 100,1373 }, { 101,1373 }, { 102,1373 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, - { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, - { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, - { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 0, 0 }, { 0, 0 }, { 48,2059 }, { 49,2059 }, { 50,2059 }, + { 51,2059 }, { 52,2059 }, { 53,2059 }, { 54,2059 }, { 55,2059 }, + { 56,2059 }, { 57,2059 }, { 124, 0 }, { 0, 0 }, { 126, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-10966 }, + { 66,-10966 }, { 67,-10966 }, { 68,-10966 }, { 69,-101 }, { 70,-10966 }, + { 71,-10966 }, { 72,-10966 }, { 73,-10966 }, { 74,-10966 }, { 75,-10966 }, - { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, - { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, - { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, - { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, - { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, - { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, - { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, - { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, - { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 76,-10966 }, { 77,-10966 }, { 78,-10966 }, { 79,-10966 }, { 80,-10966 }, + { 81,-10966 }, { 82,-10966 }, { 83,-10966 }, { 84,-10966 }, { 85,-10966 }, + { 86,-10966 }, { 87,-10966 }, { 88,-10966 }, { 89,-10966 }, { 90,-10966 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,2316 }, + { 0, 0 }, { 97,-10966 }, { 98,-10966 }, { 99,-10966 }, { 100,-10966 }, + { 101,-101 }, { 102,-10966 }, { 103,-10966 }, { 104,-10966 }, { 105,-10966 }, + { 106,-10966 }, { 107,-10966 }, { 108,-10966 }, { 109,-10966 }, { 110,-10966 }, + { 111,-10966 }, { 112,-10966 }, { 113,-10966 }, { 114,-10966 }, { 115,-10966 }, + { 116,-10966 }, { 117,-10966 }, { 118,-10966 }, { 119,-10966 }, { 120,-10966 }, + { 121,-10966 }, { 122,-10966 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 121, 0 }, { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, - { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, - { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, - { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, - { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, - { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, - { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, - { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, - { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 0, 0 }, { 0, 0 }, { 128,-10966 }, { 129,-10966 }, { 130,-10966 }, + { 131,-10966 }, { 132,-10966 }, { 133,-10966 }, { 134,-10966 }, { 135,-10966 }, + { 136,-10966 }, { 137,-10966 }, { 138,-10966 }, { 139,-10966 }, { 140,-10966 }, + { 141,-10966 }, { 142,-10966 }, { 143,-10966 }, { 144,-10966 }, { 145,-10966 }, + { 146,-10966 }, { 147,-10966 }, { 148,-10966 }, { 149,-10966 }, { 150,-10966 }, + { 151,-10966 }, { 152,-10966 }, { 153,-10966 }, { 154,-10966 }, { 155,-10966 }, + { 156,-10966 }, { 157,-10966 }, { 158,-10966 }, { 159,-10966 }, { 160,-10966 }, + { 161,-10966 }, { 162,-10966 }, { 163,-10966 }, { 164,-10966 }, { 165,-10966 }, + { 166,-10966 }, { 167,-10966 }, { 168,-10966 }, { 169,-10966 }, { 170,-10966 }, + { 171,-10966 }, { 172,-10966 }, { 173,-10966 }, { 174,-10966 }, { 175,-10966 }, - { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, - { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, - { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, - { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, - { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, - { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, - { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, - { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, - { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, - { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 176,-10966 }, { 177,-10966 }, { 178,-10966 }, { 179,-10966 }, { 180,-10966 }, + { 181,-10966 }, { 182,-10966 }, { 183,-10966 }, { 184,-10966 }, { 185,-10966 }, + { 186,-10966 }, { 187,-10966 }, { 188,-10966 }, { 189,-10966 }, { 190,-10966 }, + { 191,-10966 }, { 192,-10966 }, { 193,-10966 }, { 194,-10966 }, { 195,-10966 }, + { 196,-10966 }, { 197,-10966 }, { 198,-10966 }, { 199,-10966 }, { 200,-10966 }, + { 201,-10966 }, { 202,-10966 }, { 203,-10966 }, { 204,-10966 }, { 205,-10966 }, + { 206,-10966 }, { 207,-10966 }, { 208,-10966 }, { 209,-10966 }, { 210,-10966 }, + { 211,-10966 }, { 212,-10966 }, { 213,-10966 }, { 214,-10966 }, { 215,-10966 }, + { 216,-10966 }, { 217,-10966 }, { 218,-10966 }, { 219,-10966 }, { 220,-10966 }, + { 221,-10966 }, { 222,-10966 }, { 223,-10966 }, { 224,-10966 }, { 225,-10966 }, - { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, - { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, - { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, - { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, - { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, - { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, - { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, - { 0, 2 }, { 0,1887 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, - { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, - { 9, 0 }, { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, + { 226,-10966 }, { 227,-10966 }, { 228,-10966 }, { 229,-10966 }, { 230,-10966 }, + { 231,-10966 }, { 232,-10966 }, { 233,-10966 }, { 234,-10966 }, { 235,-10966 }, + { 236,-10966 }, { 237,-10966 }, { 238,-10966 }, { 239,-10966 }, { 240,-10966 }, + { 241,-10966 }, { 242,-10966 }, { 243,-10966 }, { 244,-10966 }, { 245,-10966 }, + { 246,-10966 }, { 247,-10966 }, { 248,-10966 }, { 249,-10966 }, { 250,-10966 }, + { 251,-10966 }, { 252,-10966 }, { 253,-10966 }, { 254,-10966 }, { 255,-10966 }, + { 0, 60 }, { 0,3667 }, { 0, 67 }, { 0,3665 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, - { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, - { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, - { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, - { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, - { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, - { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, - { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, - { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, - { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, + { 49, 0 }, { 48, 255 }, { 49, 255 }, { 50, 255 }, { 51, 255 }, + { 52, 255 }, { 53, 255 }, { 54, 255 }, { 55, 255 }, { 56, 255 }, + { 57, 255 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-11201 }, { 66,-11201 }, { 67,-11201 }, { 68,-11201 }, + + { 69,-11201 }, { 70,-11201 }, { 71,-11201 }, { 72,-11201 }, { 73,-11201 }, + { 74,-11201 }, { 75,-11201 }, { 76,-11201 }, { 77,-11201 }, { 78,-11201 }, + { 79,-11201 }, { 80,-11201 }, { 81,-11201 }, { 82,-11201 }, { 83,-11201 }, + { 84,-11201 }, { 85,-11201 }, { 86,-11201 }, { 87,-11201 }, { 88,-11201 }, + { 89,-11201 }, { 90,-11201 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-11196 }, { 0, 0 }, { 97,-11201 }, { 98,-11201 }, + { 99,-11201 }, { 100,-11201 }, { 101,-11201 }, { 102,-11201 }, { 103,-11201 }, + { 104,-11201 }, { 105,-11201 }, { 106,-11201 }, { 107,-11201 }, { 108,-11201 }, + { 109,-11201 }, { 110,-11201 }, { 111,-11201 }, { 112,-11201 }, { 113,-11201 }, + { 114,-11201 }, { 115,-11201 }, { 116,-11201 }, { 117,-11201 }, { 118,-11201 }, + + { 119,-11201 }, { 120,-11201 }, { 121,-11201 }, { 122,-11201 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-11201 }, + { 129,-11201 }, { 130,-11201 }, { 131,-11201 }, { 132,-11201 }, { 133,-11201 }, + { 134,-11201 }, { 135,-11201 }, { 136,-11201 }, { 137,-11201 }, { 138,-11201 }, + { 139,-11201 }, { 140,-11201 }, { 141,-11201 }, { 142,-11201 }, { 143,-11201 }, + { 144,-11201 }, { 145,-11201 }, { 146,-11201 }, { 147,-11201 }, { 148,-11201 }, + { 149,-11201 }, { 150,-11201 }, { 151,-11201 }, { 152,-11201 }, { 153,-11201 }, + { 154,-11201 }, { 155,-11201 }, { 156,-11201 }, { 157,-11201 }, { 158,-11201 }, + { 159,-11201 }, { 160,-11201 }, { 161,-11201 }, { 162,-11201 }, { 163,-11201 }, + { 164,-11201 }, { 165,-11201 }, { 166,-11201 }, { 167,-11201 }, { 168,-11201 }, + + { 169,-11201 }, { 170,-11201 }, { 171,-11201 }, { 172,-11201 }, { 173,-11201 }, + { 174,-11201 }, { 175,-11201 }, { 176,-11201 }, { 177,-11201 }, { 178,-11201 }, + { 179,-11201 }, { 180,-11201 }, { 181,-11201 }, { 182,-11201 }, { 183,-11201 }, + { 184,-11201 }, { 185,-11201 }, { 186,-11201 }, { 187,-11201 }, { 188,-11201 }, + { 189,-11201 }, { 190,-11201 }, { 191,-11201 }, { 192,-11201 }, { 193,-11201 }, + { 194,-11201 }, { 195,-11201 }, { 196,-11201 }, { 197,-11201 }, { 198,-11201 }, + { 199,-11201 }, { 200,-11201 }, { 201,-11201 }, { 202,-11201 }, { 203,-11201 }, + { 204,-11201 }, { 205,-11201 }, { 206,-11201 }, { 207,-11201 }, { 208,-11201 }, + { 209,-11201 }, { 210,-11201 }, { 211,-11201 }, { 212,-11201 }, { 213,-11201 }, + { 214,-11201 }, { 215,-11201 }, { 216,-11201 }, { 217,-11201 }, { 218,-11201 }, + + { 219,-11201 }, { 220,-11201 }, { 221,-11201 }, { 222,-11201 }, { 223,-11201 }, + { 224,-11201 }, { 225,-11201 }, { 226,-11201 }, { 227,-11201 }, { 228,-11201 }, + { 229,-11201 }, { 230,-11201 }, { 231,-11201 }, { 232,-11201 }, { 233,-11201 }, + { 234,-11201 }, { 235,-11201 }, { 236,-11201 }, { 237,-11201 }, { 238,-11201 }, + { 239,-11201 }, { 240,-11201 }, { 241,-11201 }, { 242,-11201 }, { 243,-11201 }, + { 244,-11201 }, { 245,-11201 }, { 246,-11201 }, { 247,-11201 }, { 248,-11201 }, + { 249,-11201 }, { 250,-11201 }, { 251,-11201 }, { 252,-11201 }, { 253,-11201 }, + { 254,-11201 }, { 255,-11201 }, { 0, 66 }, { 0,3410 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,1812 }, { 49,1812 }, { 50,1812 }, { 51,1812 }, + { 52,1812 }, { 53,1812 }, { 54,1812 }, { 55,1812 }, { 56,1812 }, + { 57,1812 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-11451 }, { 66,-11451 }, + { 67,-11451 }, { 68,-11451 }, { 69,-11451 }, { 70,-11451 }, { 71,-11451 }, + { 72,-11451 }, { 73,-11451 }, { 74,-11451 }, { 75,-11451 }, { 76,-11451 }, + { 77,-11451 }, { 78,-11451 }, { 79,-11451 }, { 80,-11451 }, { 81,-11451 }, + { 82,-11451 }, { 83,-11451 }, { 84,-11451 }, { 85,-11451 }, { 86,-11451 }, + { 87,-11451 }, { 88,-11451 }, { 89,-11451 }, { 90,-11451 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,2069 }, { 0, 0 }, + { 97,-11451 }, { 98,-11451 }, { 99,-11451 }, { 100,-11451 }, { 101,-11451 }, + { 102,-11451 }, { 103,-11451 }, { 104,-11451 }, { 105,-11451 }, { 106,-11451 }, + { 107,-11451 }, { 108,-11451 }, { 109,-11451 }, { 110,-11451 }, { 111,-11451 }, + + { 112,-11451 }, { 113,-11451 }, { 114,-11451 }, { 115,-11451 }, { 116,-11451 }, + { 117,-11451 }, { 118,-11451 }, { 119,-11451 }, { 120,-11451 }, { 121,-11451 }, + { 122,-11451 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 128,-11451 }, { 129,-11451 }, { 130,-11451 }, { 131,-11451 }, + { 132,-11451 }, { 133,-11451 }, { 134,-11451 }, { 135,-11451 }, { 136,-11451 }, + { 137,-11451 }, { 138,-11451 }, { 139,-11451 }, { 140,-11451 }, { 141,-11451 }, + { 142,-11451 }, { 143,-11451 }, { 144,-11451 }, { 145,-11451 }, { 146,-11451 }, + { 147,-11451 }, { 148,-11451 }, { 149,-11451 }, { 150,-11451 }, { 151,-11451 }, + { 152,-11451 }, { 153,-11451 }, { 154,-11451 }, { 155,-11451 }, { 156,-11451 }, + { 157,-11451 }, { 158,-11451 }, { 159,-11451 }, { 160,-11451 }, { 161,-11451 }, + + { 162,-11451 }, { 163,-11451 }, { 164,-11451 }, { 165,-11451 }, { 166,-11451 }, + { 167,-11451 }, { 168,-11451 }, { 169,-11451 }, { 170,-11451 }, { 171,-11451 }, + { 172,-11451 }, { 173,-11451 }, { 174,-11451 }, { 175,-11451 }, { 176,-11451 }, + { 177,-11451 }, { 178,-11451 }, { 179,-11451 }, { 180,-11451 }, { 181,-11451 }, + { 182,-11451 }, { 183,-11451 }, { 184,-11451 }, { 185,-11451 }, { 186,-11451 }, + { 187,-11451 }, { 188,-11451 }, { 189,-11451 }, { 190,-11451 }, { 191,-11451 }, + { 192,-11451 }, { 193,-11451 }, { 194,-11451 }, { 195,-11451 }, { 196,-11451 }, + { 197,-11451 }, { 198,-11451 }, { 199,-11451 }, { 200,-11451 }, { 201,-11451 }, + { 202,-11451 }, { 203,-11451 }, { 204,-11451 }, { 205,-11451 }, { 206,-11451 }, + { 207,-11451 }, { 208,-11451 }, { 209,-11451 }, { 210,-11451 }, { 211,-11451 }, + + { 212,-11451 }, { 213,-11451 }, { 214,-11451 }, { 215,-11451 }, { 216,-11451 }, + { 217,-11451 }, { 218,-11451 }, { 219,-11451 }, { 220,-11451 }, { 221,-11451 }, + { 222,-11451 }, { 223,-11451 }, { 224,-11451 }, { 225,-11451 }, { 226,-11451 }, + { 227,-11451 }, { 228,-11451 }, { 229,-11451 }, { 230,-11451 }, { 231,-11451 }, + { 232,-11451 }, { 233,-11451 }, { 234,-11451 }, { 235,-11451 }, { 236,-11451 }, + { 237,-11451 }, { 238,-11451 }, { 239,-11451 }, { 240,-11451 }, { 241,-11451 }, + { 242,-11451 }, { 243,-11451 }, { 244,-11451 }, { 245,-11451 }, { 246,-11451 }, + { 247,-11451 }, { 248,-11451 }, { 249,-11451 }, { 250,-11451 }, { 251,-11451 }, + { 252,-11451 }, { 253,-11451 }, { 254,-11451 }, { 255,-11451 }, { 0, 59 }, + { 0,3153 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 62 }, { 0,3145 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, - { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, - { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, - { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, - { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, - { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, - { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, - { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, - { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, - { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, - { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 55, 0 }, { 48, -8 }, { 49, -8 }, { 50, -8 }, { 51, -8 }, + { 52, -8 }, { 53, -8 }, { 54, -8 }, { 55, -8 }, { 0, 0 }, + { 65,-11706 }, { 66,-11706 }, { 67,-11706 }, { 68,-11706 }, { 69,-11706 }, + { 70,-11706 }, { 71,-11706 }, { 72,-11706 }, { 73,-11706 }, { 74,-11706 }, + { 75,-11706 }, { 76,-11706 }, { 77,-11706 }, { 78,-11706 }, { 79,-11706 }, + { 80,-11706 }, { 81,-11706 }, { 82,-11706 }, { 83,-11706 }, { 84,-11706 }, + { 85,-11706 }, { 86,-11706 }, { 87,-11706 }, { 88,-11706 }, { 89,-11706 }, + { 90,-11706 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,1822 }, { 0, 0 }, { 97,-11706 }, { 98,-11706 }, { 99,-11706 }, + { 100,-11706 }, { 101,-11706 }, { 102,-11706 }, { 103,-11706 }, { 104,-11706 }, - { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, - { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, - { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, - { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, - { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, - { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, - { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, - { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, - { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, - { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 105,-11706 }, { 106,-11706 }, { 107,-11706 }, { 108,-11706 }, { 109,-11706 }, + { 110,-11706 }, { 111,-11706 }, { 112,-11706 }, { 113,-11706 }, { 114,-11706 }, + { 115,-11706 }, { 116,-11706 }, { 117,-11706 }, { 118,-11706 }, { 119,-11706 }, + { 120,-11706 }, { 121,-11706 }, { 122,-11706 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-11706 }, { 129,-11706 }, + { 130,-11706 }, { 131,-11706 }, { 132,-11706 }, { 133,-11706 }, { 134,-11706 }, + { 135,-11706 }, { 136,-11706 }, { 137,-11706 }, { 138,-11706 }, { 139,-11706 }, + { 140,-11706 }, { 141,-11706 }, { 142,-11706 }, { 143,-11706 }, { 144,-11706 }, + { 145,-11706 }, { 146,-11706 }, { 147,-11706 }, { 148,-11706 }, { 149,-11706 }, + { 150,-11706 }, { 151,-11706 }, { 152,-11706 }, { 153,-11706 }, { 154,-11706 }, - { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, - { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, - { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, - { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, - { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, - { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, - { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, - { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, - { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, - { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 155,-11706 }, { 156,-11706 }, { 157,-11706 }, { 158,-11706 }, { 159,-11706 }, + { 160,-11706 }, { 161,-11706 }, { 162,-11706 }, { 163,-11706 }, { 164,-11706 }, + { 165,-11706 }, { 166,-11706 }, { 167,-11706 }, { 168,-11706 }, { 169,-11706 }, + { 170,-11706 }, { 171,-11706 }, { 172,-11706 }, { 173,-11706 }, { 174,-11706 }, + { 175,-11706 }, { 176,-11706 }, { 177,-11706 }, { 178,-11706 }, { 179,-11706 }, + { 180,-11706 }, { 181,-11706 }, { 182,-11706 }, { 183,-11706 }, { 184,-11706 }, + { 185,-11706 }, { 186,-11706 }, { 187,-11706 }, { 188,-11706 }, { 189,-11706 }, + { 190,-11706 }, { 191,-11706 }, { 192,-11706 }, { 193,-11706 }, { 194,-11706 }, + { 195,-11706 }, { 196,-11706 }, { 197,-11706 }, { 198,-11706 }, { 199,-11706 }, + { 200,-11706 }, { 201,-11706 }, { 202,-11706 }, { 203,-11706 }, { 204,-11706 }, - { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, - { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, - { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, - { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, - { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, - { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, - { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, - { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, - { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 2 }, { 0,1629 }, - { 1,-258 }, { 2,-258 }, { 3,-258 }, { 4,-258 }, { 5,-258 }, - - { 6,-258 }, { 7,-258 }, { 8,-258 }, { 9,-258 }, { 0, 0 }, - { 11,-258 }, { 12,-258 }, { 0, 0 }, { 14,-258 }, { 15,-258 }, - { 16,-258 }, { 17,-258 }, { 18,-258 }, { 19,-258 }, { 20,-258 }, - { 21,-258 }, { 22,-258 }, { 23,-258 }, { 24,-258 }, { 25,-258 }, - { 26,-258 }, { 27,-258 }, { 28,-258 }, { 29,-258 }, { 30,-258 }, - { 31,-258 }, { 32,-258 }, { 33, 0 }, { 34,-258 }, { 35, 0 }, - { 36,-258 }, { 37, 0 }, { 38, 0 }, { 39,-258 }, { 40,-258 }, - { 41,-258 }, { 42, 0 }, { 43, 0 }, { 44,-258 }, { 45, 0 }, - { 46,-258 }, { 47, 0 }, { 48,-258 }, { 49,-258 }, { 50,-258 }, - { 51,-258 }, { 52,-258 }, { 53,-258 }, { 54,-258 }, { 55,-258 }, - - { 56,-258 }, { 57,-258 }, { 58,-258 }, { 59,-258 }, { 60, 0 }, - { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65,-258 }, - { 66,-258 }, { 67,-258 }, { 68,-258 }, { 69,-258 }, { 70,-258 }, - { 71,-258 }, { 72,-258 }, { 73,-258 }, { 74,-258 }, { 75,-258 }, - { 76,-258 }, { 77,-258 }, { 78,-258 }, { 79,-258 }, { 80,-258 }, - { 81,-258 }, { 82,-258 }, { 83,-258 }, { 84,-258 }, { 85,-258 }, - { 86,-258 }, { 87,-258 }, { 88,-258 }, { 89,-258 }, { 90,-258 }, - { 91,-258 }, { 92,-258 }, { 93,-258 }, { 94, 0 }, { 95,-258 }, - { 96, 0 }, { 97,-258 }, { 98,-258 }, { 99,-258 }, { 100,-258 }, - { 101,-258 }, { 102,-258 }, { 103,-258 }, { 104,-258 }, { 105,-258 }, - - { 106,-258 }, { 107,-258 }, { 108,-258 }, { 109,-258 }, { 110,-258 }, - { 111,-258 }, { 112,-258 }, { 113,-258 }, { 114,-258 }, { 115,-258 }, - { 116,-258 }, { 117,-258 }, { 118,-258 }, { 119,-258 }, { 120,-258 }, - { 121,-258 }, { 122,-258 }, { 123,-258 }, { 124, 0 }, { 125,-258 }, - { 126, 0 }, { 127,-258 }, { 128,-258 }, { 129,-258 }, { 130,-258 }, - { 131,-258 }, { 132,-258 }, { 133,-258 }, { 134,-258 }, { 135,-258 }, - { 136,-258 }, { 137,-258 }, { 138,-258 }, { 139,-258 }, { 140,-258 }, - { 141,-258 }, { 142,-258 }, { 143,-258 }, { 144,-258 }, { 145,-258 }, - { 146,-258 }, { 147,-258 }, { 148,-258 }, { 149,-258 }, { 150,-258 }, - { 151,-258 }, { 152,-258 }, { 153,-258 }, { 154,-258 }, { 155,-258 }, - - { 156,-258 }, { 157,-258 }, { 158,-258 }, { 159,-258 }, { 160,-258 }, - { 161,-258 }, { 162,-258 }, { 163,-258 }, { 164,-258 }, { 165,-258 }, - { 166,-258 }, { 167,-258 }, { 168,-258 }, { 169,-258 }, { 170,-258 }, - { 171,-258 }, { 172,-258 }, { 173,-258 }, { 174,-258 }, { 175,-258 }, - { 176,-258 }, { 177,-258 }, { 178,-258 }, { 179,-258 }, { 180,-258 }, - { 181,-258 }, { 182,-258 }, { 183,-258 }, { 184,-258 }, { 185,-258 }, - { 186,-258 }, { 187,-258 }, { 188,-258 }, { 189,-258 }, { 190,-258 }, - { 191,-258 }, { 192,-258 }, { 193,-258 }, { 194,-258 }, { 195,-258 }, - { 196,-258 }, { 197,-258 }, { 198,-258 }, { 199,-258 }, { 200,-258 }, - { 201,-258 }, { 202,-258 }, { 203,-258 }, { 204,-258 }, { 205,-258 }, - - { 206,-258 }, { 207,-258 }, { 208,-258 }, { 209,-258 }, { 210,-258 }, - { 211,-258 }, { 212,-258 }, { 213,-258 }, { 214,-258 }, { 215,-258 }, - { 216,-258 }, { 217,-258 }, { 218,-258 }, { 219,-258 }, { 220,-258 }, - { 221,-258 }, { 222,-258 }, { 223,-258 }, { 224,-258 }, { 225,-258 }, - { 226,-258 }, { 227,-258 }, { 228,-258 }, { 229,-258 }, { 230,-258 }, - { 231,-258 }, { 232,-258 }, { 233,-258 }, { 234,-258 }, { 235,-258 }, - { 236,-258 }, { 237,-258 }, { 238,-258 }, { 239,-258 }, { 240,-258 }, - { 241,-258 }, { 242,-258 }, { 243,-258 }, { 244,-258 }, { 245,-258 }, - { 246,-258 }, { 247,-258 }, { 248,-258 }, { 249,-258 }, { 250,-258 }, - { 251,-258 }, { 252,-258 }, { 253,-258 }, { 254,-258 }, { 255,-258 }, - - { 256,-258 }, { 0, 3 }, { 0,1371 }, { 0, 58 }, { 0,1369 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 62 }, { 0,1347 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 33, 0 }, { 0, 0 }, { 35, 0 }, { 0, 0 }, { 37, 0 }, - { 38, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42, 0 }, - { 43, 0 }, { 0, 0 }, { 45, 0 }, { 0, 0 }, { 47, 0 }, - - { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, - { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, - { 56, 0 }, { 57, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, - { 63, 0 }, { 64, 0 }, { 0, 60 }, { 0,1305 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 69,-3785 }, { 48, 42 }, - { 49, 42 }, { 50, 42 }, { 51, 42 }, { 52, 42 }, { 53, 42 }, - { 54, 42 }, { 55, 42 }, { 56, 42 }, { 57, 42 }, { 0, 0 }, + { 205,-11706 }, { 206,-11706 }, { 207,-11706 }, { 208,-11706 }, { 209,-11706 }, + { 210,-11706 }, { 211,-11706 }, { 212,-11706 }, { 213,-11706 }, { 214,-11706 }, + { 215,-11706 }, { 216,-11706 }, { 217,-11706 }, { 218,-11706 }, { 219,-11706 }, + { 220,-11706 }, { 221,-11706 }, { 222,-11706 }, { 223,-11706 }, { 224,-11706 }, + { 225,-11706 }, { 226,-11706 }, { 227,-11706 }, { 228,-11706 }, { 229,-11706 }, + { 230,-11706 }, { 231,-11706 }, { 232,-11706 }, { 233,-11706 }, { 234,-11706 }, + { 235,-11706 }, { 236,-11706 }, { 237,-11706 }, { 238,-11706 }, { 239,-11706 }, + { 240,-11706 }, { 241,-11706 }, { 242,-11706 }, { 243,-11706 }, { 244,-11706 }, + { 245,-11706 }, { 246,-11706 }, { 247,-11706 }, { 248,-11706 }, { 249,-11706 }, + { 250,-11706 }, { 251,-11706 }, { 252,-11706 }, { 253,-11706 }, { 254,-11706 }, + + { 255,-11706 }, { 0, 58 }, { 0,2896 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,1573 }, { 66,1573 }, { 67,1573 }, + { 68,1573 }, { 69,1573 }, { 70,1573 }, { 71,-11957 }, { 72,-11957 }, + { 73,-11957 }, { 74,-11957 }, { 75,-11957 }, { 76,-11957 }, { 77,-11957 }, + { 78,-11957 }, { 79,-11957 }, { 80,-11957 }, { 81,-11957 }, { 82,-11957 }, + { 83,-11957 }, { 84,-11957 }, { 85,-11957 }, { 86,-11957 }, { 87,-11957 }, + { 88,-11957 }, { 89,-11957 }, { 90,-11957 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,1830 }, { 0, 0 }, { 97,1573 }, + + { 98,1573 }, { 99,1573 }, { 100,1573 }, { 101,1573 }, { 102,1573 }, + { 103,-11957 }, { 104,-11957 }, { 105,-11957 }, { 106,-11957 }, { 107,-11957 }, + { 108,-11957 }, { 109,-11957 }, { 110,-11957 }, { 111,-11957 }, { 112,-11957 }, + { 113,-11957 }, { 114,-11957 }, { 115,-11957 }, { 116,-11957 }, { 117,-11957 }, + { 118,-11957 }, { 119,-11957 }, { 120,-11957 }, { 121,-11957 }, { 122,-11957 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 4 }, { 0,1279 }, - { 0, 0 }, { 94, 0 }, { 0, 0 }, { 96, 0 }, { 0, 0 }, + { 128,-11957 }, { 129,-11957 }, { 130,-11957 }, { 131,-11957 }, { 132,-11957 }, + { 133,-11957 }, { 134,-11957 }, { 135,-11957 }, { 136,-11957 }, { 137,-11957 }, + { 138,-11957 }, { 139,-11957 }, { 140,-11957 }, { 141,-11957 }, { 142,-11957 }, + { 143,-11957 }, { 144,-11957 }, { 145,-11957 }, { 146,-11957 }, { 147,-11957 }, + + { 148,-11957 }, { 149,-11957 }, { 150,-11957 }, { 151,-11957 }, { 152,-11957 }, + { 153,-11957 }, { 154,-11957 }, { 155,-11957 }, { 156,-11957 }, { 157,-11957 }, + { 158,-11957 }, { 159,-11957 }, { 160,-11957 }, { 161,-11957 }, { 162,-11957 }, + { 163,-11957 }, { 164,-11957 }, { 165,-11957 }, { 166,-11957 }, { 167,-11957 }, + { 168,-11957 }, { 169,-11957 }, { 170,-11957 }, { 171,-11957 }, { 172,-11957 }, + { 173,-11957 }, { 174,-11957 }, { 175,-11957 }, { 176,-11957 }, { 177,-11957 }, + { 178,-11957 }, { 179,-11957 }, { 180,-11957 }, { 181,-11957 }, { 182,-11957 }, + { 183,-11957 }, { 184,-11957 }, { 185,-11957 }, { 186,-11957 }, { 187,-11957 }, + { 188,-11957 }, { 189,-11957 }, { 190,-11957 }, { 191,-11957 }, { 192,-11957 }, + { 193,-11957 }, { 194,-11957 }, { 195,-11957 }, { 196,-11957 }, { 197,-11957 }, + { 198,-11957 }, { 199,-11957 }, { 200,-11957 }, { 201,-11957 }, { 202,-11957 }, + { 203,-11957 }, { 204,-11957 }, { 205,-11957 }, { 206,-11957 }, { 207,-11957 }, + { 208,-11957 }, { 209,-11957 }, { 210,-11957 }, { 211,-11957 }, { 212,-11957 }, + { 213,-11957 }, { 214,-11957 }, { 215,-11957 }, { 216,-11957 }, { 217,-11957 }, + { 218,-11957 }, { 219,-11957 }, { 220,-11957 }, { 221,-11957 }, { 222,-11957 }, + { 223,-11957 }, { 224,-11957 }, { 225,-11957 }, { 226,-11957 }, { 227,-11957 }, + { 228,-11957 }, { 229,-11957 }, { 230,-11957 }, { 231,-11957 }, { 232,-11957 }, + { 233,-11957 }, { 234,-11957 }, { 235,-11957 }, { 236,-11957 }, { 237,-11957 }, + { 238,-11957 }, { 239,-11957 }, { 240,-11957 }, { 241,-11957 }, { 242,-11957 }, + { 243,-11957 }, { 244,-11957 }, { 245,-11957 }, { 246,-11957 }, { 247,-11957 }, + + { 248,-11957 }, { 249,-11957 }, { 250,-11957 }, { 251,-11957 }, { 252,-11957 }, + { 253,-11957 }, { 254,-11957 }, { 255,-11957 }, { 0, 61 }, { 0,2639 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 101,-3785 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 30 }, { 0,1262 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, - { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 57, 0 }, { 124, 0 }, { 33, 0 }, { 126, 0 }, { 35, 0 }, - { 0, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 42, 0 }, { 43, 0 }, { 0, 0 }, { 45, 0 }, - { 0, 0 }, { 47, 0 }, { 0, 28 }, { 0,1230 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 57 }, { 0,2601 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60, 0 }, - { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 48,-9542 }, - { 49,-9542 }, { 50,-9542 }, { 51,-9542 }, { 52,-9542 }, { 53,-9542 }, - { 54,-9542 }, { 55,-9542 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-257 }, { 49,-257 }, { 50,-257 }, + { 51,-257 }, { 52,-257 }, { 53,-257 }, { 54,-257 }, { 55,-257 }, + { 56,-257 }, { 57,-257 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-257 }, + { 66,-257 }, { 67,-257 }, { 68,-257 }, { 69,-257 }, { 70,-257 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 28 }, { 0,1192 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 46,1573 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 97,-257 }, { 98,-257 }, { 99,-257 }, { 100,-257 }, + { 101,-257 }, { 102,-257 }, { 65,-12625 }, { 66,-12625 }, { 67,-12625 }, + { 68,-12625 }, { 69,-5509 }, { 70,-12625 }, { 71,-12625 }, { 72,-12625 }, + { 73,-12625 }, { 74,-12625 }, { 75,-12625 }, { 76,-12625 }, { 77,-12625 }, + { 78,-12625 }, { 79,-12625 }, { 80,-12625 }, { 81,-12625 }, { 82,-12625 }, + { 83,-12625 }, { 84,-12625 }, { 85,-12625 }, { 86,-12625 }, { 87,-12625 }, + { 88,-12625 }, { 89,-12625 }, { 90,-12625 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-5468 }, { 0, 0 }, { 97,-12625 }, + { 98,-12625 }, { 99,-12625 }, { 100,-12625 }, { 101,-5509 }, { 102,-12625 }, + + { 103,-12625 }, { 104,-12625 }, { 105,-12625 }, { 106,-12625 }, { 107,-12625 }, + { 108,-12625 }, { 109,-12625 }, { 110,-12625 }, { 111,-12625 }, { 112,-12625 }, + { 113,-12625 }, { 114,-12625 }, { 115,-12625 }, { 116,-12625 }, { 117,-12625 }, + { 118,-12625 }, { 119,-12625 }, { 120,-12625 }, { 121,-12625 }, { 122,-12625 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 128,-12625 }, { 129,-12625 }, { 130,-12625 }, { 131,-12625 }, { 132,-12625 }, + { 133,-12625 }, { 134,-12625 }, { 135,-12625 }, { 136,-12625 }, { 137,-12625 }, + { 138,-12625 }, { 139,-12625 }, { 140,-12625 }, { 141,-12625 }, { 142,-12625 }, + { 143,-12625 }, { 144,-12625 }, { 145,-12625 }, { 146,-12625 }, { 147,-12625 }, + { 148,-12625 }, { 149,-12625 }, { 150,-12625 }, { 151,-12625 }, { 152,-12625 }, + + { 153,-12625 }, { 154,-12625 }, { 155,-12625 }, { 156,-12625 }, { 157,-12625 }, + { 158,-12625 }, { 159,-12625 }, { 160,-12625 }, { 161,-12625 }, { 162,-12625 }, + { 163,-12625 }, { 164,-12625 }, { 165,-12625 }, { 166,-12625 }, { 167,-12625 }, + { 168,-12625 }, { 169,-12625 }, { 170,-12625 }, { 171,-12625 }, { 172,-12625 }, + { 173,-12625 }, { 174,-12625 }, { 175,-12625 }, { 176,-12625 }, { 177,-12625 }, + { 178,-12625 }, { 179,-12625 }, { 180,-12625 }, { 181,-12625 }, { 182,-12625 }, + { 183,-12625 }, { 184,-12625 }, { 185,-12625 }, { 186,-12625 }, { 187,-12625 }, + { 188,-12625 }, { 189,-12625 }, { 190,-12625 }, { 191,-12625 }, { 192,-12625 }, + { 193,-12625 }, { 194,-12625 }, { 195,-12625 }, { 196,-12625 }, { 197,-12625 }, + { 198,-12625 }, { 199,-12625 }, { 200,-12625 }, { 201,-12625 }, { 202,-12625 }, + + { 203,-12625 }, { 204,-12625 }, { 205,-12625 }, { 206,-12625 }, { 207,-12625 }, + { 208,-12625 }, { 209,-12625 }, { 210,-12625 }, { 211,-12625 }, { 212,-12625 }, + { 213,-12625 }, { 214,-12625 }, { 215,-12625 }, { 216,-12625 }, { 217,-12625 }, + { 218,-12625 }, { 219,-12625 }, { 220,-12625 }, { 221,-12625 }, { 222,-12625 }, + { 223,-12625 }, { 224,-12625 }, { 225,-12625 }, { 226,-12625 }, { 227,-12625 }, + { 228,-12625 }, { 229,-12625 }, { 230,-12625 }, { 231,-12625 }, { 232,-12625 }, + { 233,-12625 }, { 234,-12625 }, { 235,-12625 }, { 236,-12625 }, { 237,-12625 }, + { 238,-12625 }, { 239,-12625 }, { 240,-12625 }, { 241,-12625 }, { 242,-12625 }, + { 243,-12625 }, { 244,-12625 }, { 245,-12625 }, { 246,-12625 }, { 247,-12625 }, + { 248,-12625 }, { 249,-12625 }, { 250,-12625 }, { 251,-12625 }, { 252,-12625 }, + + { 253,-12625 }, { 254,-12625 }, { 255,-12625 }, { 0, 4 }, { 0,2344 }, + { 0, 30 }, { 0,2342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 28 }, { 0,2327 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 33, 0 }, { 0, 0 }, { 35, 0 }, + { 0, 0 }, { 37, 0 }, { 38, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 42, 0 }, { 43, 0 }, { 0, 0 }, { 45, 0 }, + + { 0, 0 }, { 47, 0 }, { 0, 0 }, { 0, 0 }, { 48,-12509 }, + { 49,-12509 }, { 50,-12509 }, { 51,-12509 }, { 52,-12509 }, { 53,-12509 }, + { 54,-12509 }, { 55,-12509 }, { 0, 0 }, { 0, 0 }, { 60, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 48,1556 }, + { 49,1556 }, { 50,1556 }, { 51,1556 }, { 52,1556 }, { 53,1556 }, + { 54,1556 }, { 55,1556 }, { 56,1556 }, { 57,1556 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0,2265 }, { 0, 0 }, + { 0, 0 }, { 65,1556 }, { 66,1556 }, { 67,1556 }, { 68,1556 }, + { 69,1556 }, { 70,1556 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 94, 0 }, { 0, 0 }, - { 96, 0 }, { 48, 438 }, { 49, 438 }, { 50, 438 }, { 51, 438 }, - { 52, 438 }, { 53, 438 }, { 54, 438 }, { 55, 438 }, { 56, 438 }, - { 57, 438 }, { 0, 0 }, { 0, 0 }, { 0, 31 }, { 0,1169 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 438 }, { 66, 438 }, - { 67, 438 }, { 68, 438 }, { 69, 438 }, { 70, 438 }, { 0, 0 }, + { 96, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 31 }, { 0,2242 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,1556 }, { 98,1556 }, + { 99,1556 }, { 100,1556 }, { 101,1556 }, { 102,1556 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 124, 0 }, { 0, 0 }, - { 126, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 423 }, - { 49, 423 }, { 50, 423 }, { 51, 423 }, { 52, 423 }, { 53, 423 }, - { 54, 423 }, { 55, 423 }, { 56, 423 }, { 57, 423 }, { 0, 0 }, - { 97, 438 }, { 98, 438 }, { 99, 438 }, { 100, 438 }, { 101, 438 }, - { 102, 438 }, { 65, 423 }, { 66, 423 }, { 67, 423 }, { 68, 423 }, - - { 69, 423 }, { 70, 423 }, { 48,-9621 }, { 49,-9621 }, { 50,-9621 }, - { 51,-9621 }, { 52,-9621 }, { 53,-9621 }, { 54,-9621 }, { 55,-9621 }, - { 56,-9621 }, { 57,-9621 }, { 0, 37 }, { 0,1110 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-9621 }, - { 66,-9621 }, { 67,-9621 }, { 68,-9621 }, { 69,-9621 }, { 70,-9621 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 423 }, { 98, 423 }, - { 99, 423 }, { 100, 423 }, { 101, 423 }, { 102, 423 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 36,-9721 }, - - { 0, 0 }, { 97,-9621 }, { 98,-9621 }, { 99,-9621 }, { 100,-9621 }, - { 101,-9621 }, { 102,-9621 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, - { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, - { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, - { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, - { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, - { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, - { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 126, 0 }, { 48,1517 }, { 49,1517 }, { 50,1517 }, { 51,1517 }, + { 52,1517 }, { 53,1517 }, { 54,1517 }, { 55,1517 }, { 56,1517 }, + { 57,1517 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,1517 }, { 66,1517 }, - { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, - { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, - { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, - { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, - { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, - { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, - { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, - { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 67,1517 }, { 68,1517 }, { 69,1517 }, { 70,1517 }, { 48,-12598 }, + { 49,-12598 }, { 50,-12598 }, { 51,-12598 }, { 52,-12598 }, { 53,-12598 }, + { 54,-12598 }, { 55,-12598 }, { 56,-12598 }, { 57,-12598 }, { 0, 37 }, + { 0,2183 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-12598 }, { 66,-12598 }, { 67,-12598 }, { 68,-12598 }, + { 69,-12598 }, { 70,-12598 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 97,1517 }, { 98,1517 }, { 99,1517 }, { 100,1517 }, { 101,1517 }, + { 102,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 }, - { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, - { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, - { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, - { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, - { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, - { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, - { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, - { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, - { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, - { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 0, 0 }, { 36,-12709 }, { 0, 0 }, { 97,-12598 }, { 98,-12598 }, + { 99,-12598 }, { 100,-12598 }, { 101,-12598 }, { 102,-12598 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, - { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, - { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, - { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, - { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, - { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, - { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, - { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, - { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, - { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, - { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95, 0 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, - { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, - { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, - { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, - { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 28 }, - { 0, 853 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 0, 28 }, { 0,1926 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 830 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, + { 0,1903 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 143 }, { 49, 143 }, - { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, - { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 0 }, { 0, 0 }, - { 0, 28 }, { 0, 792 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, - { 70, 143 }, { 48, 143 }, { 49, 143 }, { 50, 143 }, { 51, 143 }, - { 52, 143 }, { 53, 143 }, { 54, 143 }, { 55, 143 }, { 56, 143 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,1216 }, { 49,1216 }, { 50,1216 }, { 51,1216 }, { 52,1216 }, + { 53,1216 }, { 54,1216 }, { 55,1216 }, { 56,1216 }, { 57,1216 }, + { 0, 0 }, { 0, 0 }, { 0, 64 }, { 0,1865 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,1216 }, { 66,1216 }, { 67,1216 }, + { 68,1216 }, { 69,1216 }, { 70,1216 }, { 48,1216 }, { 49,1216 }, + { 50,1216 }, { 51,1216 }, { 52,1216 }, { 53,1216 }, { 54,1216 }, - { 57, 143 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 769 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 143 }, { 66, 143 }, - { 67, 143 }, { 68, 143 }, { 69, 143 }, { 70, 143 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, - { 100, 143 }, { 101, 143 }, { 102, 143 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 143 }, - { 49, 143 }, { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, - { 54, 143 }, { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 0 }, - { 97, 143 }, { 98, 143 }, { 99, 143 }, { 100, 143 }, { 101, 143 }, - { 102, 143 }, { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, + { 55,1216 }, { 56,1216 }, { 57,1216 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,1216 }, { 66,1216 }, { 67,1216 }, { 68,1216 }, { 69,1216 }, + { 70,1216 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,1216 }, + { 98,1216 }, { 99,1216 }, { 100,1216 }, { 101,1216 }, { 102,1216 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 0, 0 }, { 97,1216 }, { 98,1216 }, { 99,1216 }, + { 100,1216 }, { 101,1216 }, { 102,1216 }, { 65,-13025 }, { 66,-13025 }, + + { 67,-13025 }, { 68,-13025 }, { 69,-2160 }, { 70,-13025 }, { 71,-13025 }, + { 72,-13025 }, { 73,-13025 }, { 74,-13025 }, { 75,-13025 }, { 76,-13025 }, + { 77,-13025 }, { 78,-13025 }, { 79,-13025 }, { 80,-13025 }, { 81,-13025 }, + { 82,-13025 }, { 83,-13025 }, { 84,-13025 }, { 85,-13025 }, { 86,-13025 }, + { 87,-13025 }, { 88,-13025 }, { 89,-13025 }, { 90,-13025 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 257 }, { 0, 0 }, + { 97,-13025 }, { 98,-13025 }, { 99,-13025 }, { 100,-13025 }, { 101,-2160 }, + { 102,-13025 }, { 103,-13025 }, { 104,-13025 }, { 105,-13025 }, { 106,-13025 }, + { 107,-13025 }, { 108,-13025 }, { 109,-13025 }, { 110,-13025 }, { 111,-13025 }, + { 112,-13025 }, { 113,-13025 }, { 114,-13025 }, { 115,-13025 }, { 116,-13025 }, + + { 117,-13025 }, { 118,-13025 }, { 119,-13025 }, { 120,-13025 }, { 121,-13025 }, + { 122,-13025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 128,-13025 }, { 129,-13025 }, { 130,-13025 }, { 131,-13025 }, + { 132,-13025 }, { 133,-13025 }, { 134,-13025 }, { 135,-13025 }, { 136,-13025 }, + { 137,-13025 }, { 138,-13025 }, { 139,-13025 }, { 140,-13025 }, { 141,-13025 }, + { 142,-13025 }, { 143,-13025 }, { 144,-13025 }, { 145,-13025 }, { 146,-13025 }, + { 147,-13025 }, { 148,-13025 }, { 149,-13025 }, { 150,-13025 }, { 151,-13025 }, + { 152,-13025 }, { 153,-13025 }, { 154,-13025 }, { 155,-13025 }, { 156,-13025 }, + { 157,-13025 }, { 158,-13025 }, { 159,-13025 }, { 160,-13025 }, { 161,-13025 }, + { 162,-13025 }, { 163,-13025 }, { 164,-13025 }, { 165,-13025 }, { 166,-13025 }, + + { 167,-13025 }, { 168,-13025 }, { 169,-13025 }, { 170,-13025 }, { 171,-13025 }, + { 172,-13025 }, { 173,-13025 }, { 174,-13025 }, { 175,-13025 }, { 176,-13025 }, + { 177,-13025 }, { 178,-13025 }, { 179,-13025 }, { 180,-13025 }, { 181,-13025 }, + { 182,-13025 }, { 183,-13025 }, { 184,-13025 }, { 185,-13025 }, { 186,-13025 }, + { 187,-13025 }, { 188,-13025 }, { 189,-13025 }, { 190,-13025 }, { 191,-13025 }, + { 192,-13025 }, { 193,-13025 }, { 194,-13025 }, { 195,-13025 }, { 196,-13025 }, + { 197,-13025 }, { 198,-13025 }, { 199,-13025 }, { 200,-13025 }, { 201,-13025 }, + { 202,-13025 }, { 203,-13025 }, { 204,-13025 }, { 205,-13025 }, { 206,-13025 }, + { 207,-13025 }, { 208,-13025 }, { 209,-13025 }, { 210,-13025 }, { 211,-13025 }, + { 212,-13025 }, { 213,-13025 }, { 214,-13025 }, { 215,-13025 }, { 216,-13025 }, + + { 217,-13025 }, { 218,-13025 }, { 219,-13025 }, { 220,-13025 }, { 221,-13025 }, + { 222,-13025 }, { 223,-13025 }, { 224,-13025 }, { 225,-13025 }, { 226,-13025 }, + { 227,-13025 }, { 228,-13025 }, { 229,-13025 }, { 230,-13025 }, { 231,-13025 }, + { 232,-13025 }, { 233,-13025 }, { 234,-13025 }, { 235,-13025 }, { 236,-13025 }, + { 237,-13025 }, { 238,-13025 }, { 239,-13025 }, { 240,-13025 }, { 241,-13025 }, + { 242,-13025 }, { 243,-13025 }, { 244,-13025 }, { 245,-13025 }, { 246,-13025 }, + { 247,-13025 }, { 248,-13025 }, { 249,-13025 }, { 250,-13025 }, { 251,-13025 }, + { 252,-13025 }, { 253,-13025 }, { 254,-13025 }, { 255,-13025 }, { 0, 72 }, + { 0,1608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 66 }, + + { 0,1598 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-257 }, { 49,-257 }, + { 50,-257 }, { 51,-257 }, { 52,-257 }, { 53,-257 }, { 54,-257 }, + { 55,-257 }, { 56,-257 }, { 57,-257 }, { 48, 0 }, { 49, 0 }, - { 69, 143 }, { 70, 143 }, { 48, 143 }, { 49, 143 }, { 50, 143 }, - { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, { 55, 143 }, - { 56, 143 }, { 57, 143 }, { 0, 28 }, { 0, 710 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 143 }, - { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, { 70, 143 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, - { 99, 143 }, { 100, 143 }, { 101, 143 }, { 102, 143 }, { 0, 0 }, - { 0, 28 }, { 0, 687 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-13263 }, { 66,-13263 }, { 67,-13263 }, { 68,-13263 }, { 69,-13263 }, + { 70,-13263 }, { 71,-13263 }, { 72,-13263 }, { 73,-13263 }, { 74,-13263 }, + { 75,-13263 }, { 76,-13263 }, { 77,-13263 }, { 78,-13263 }, { 79,-13263 }, + { 80,-13263 }, { 81,-13263 }, { 82,-13263 }, { 83,-13263 }, { 84,-13263 }, + { 85,-13263 }, { 86,-13263 }, { 87,-13263 }, { 88,-13263 }, { 89,-13263 }, + { 90,-13263 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95, 257 }, { 0, 0 }, { 97,-13263 }, { 98,-13263 }, { 99,-13263 }, + + { 100,-13263 }, { 101,-13263 }, { 102,-13263 }, { 103,-13263 }, { 104,-13263 }, + { 105,-13263 }, { 106,-13263 }, { 107,-13263 }, { 108,-13263 }, { 109,-13263 }, + { 110,-13263 }, { 111,-13263 }, { 112,-13263 }, { 113,-13263 }, { 114,-13263 }, + { 115,-13263 }, { 116,-13263 }, { 117,-13263 }, { 118,-13263 }, { 119,-13263 }, + { 120,-13263 }, { 121,-13263 }, { 122,-13263 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-13263 }, { 129,-13263 }, + { 130,-13263 }, { 131,-13263 }, { 132,-13263 }, { 133,-13263 }, { 134,-13263 }, + { 135,-13263 }, { 136,-13263 }, { 137,-13263 }, { 138,-13263 }, { 139,-13263 }, + { 140,-13263 }, { 141,-13263 }, { 142,-13263 }, { 143,-13263 }, { 144,-13263 }, + { 145,-13263 }, { 146,-13263 }, { 147,-13263 }, { 148,-13263 }, { 149,-13263 }, + + { 150,-13263 }, { 151,-13263 }, { 152,-13263 }, { 153,-13263 }, { 154,-13263 }, + { 155,-13263 }, { 156,-13263 }, { 157,-13263 }, { 158,-13263 }, { 159,-13263 }, + { 160,-13263 }, { 161,-13263 }, { 162,-13263 }, { 163,-13263 }, { 164,-13263 }, + { 165,-13263 }, { 166,-13263 }, { 167,-13263 }, { 168,-13263 }, { 169,-13263 }, + { 170,-13263 }, { 171,-13263 }, { 172,-13263 }, { 173,-13263 }, { 174,-13263 }, + { 175,-13263 }, { 176,-13263 }, { 177,-13263 }, { 178,-13263 }, { 179,-13263 }, + { 180,-13263 }, { 181,-13263 }, { 182,-13263 }, { 183,-13263 }, { 184,-13263 }, + { 185,-13263 }, { 186,-13263 }, { 187,-13263 }, { 188,-13263 }, { 189,-13263 }, + { 190,-13263 }, { 191,-13263 }, { 192,-13263 }, { 193,-13263 }, { 194,-13263 }, + { 195,-13263 }, { 196,-13263 }, { 197,-13263 }, { 198,-13263 }, { 199,-13263 }, + + { 200,-13263 }, { 201,-13263 }, { 202,-13263 }, { 203,-13263 }, { 204,-13263 }, + { 205,-13263 }, { 206,-13263 }, { 207,-13263 }, { 208,-13263 }, { 209,-13263 }, + { 210,-13263 }, { 211,-13263 }, { 212,-13263 }, { 213,-13263 }, { 214,-13263 }, + { 215,-13263 }, { 216,-13263 }, { 217,-13263 }, { 218,-13263 }, { 219,-13263 }, + { 220,-13263 }, { 221,-13263 }, { 222,-13263 }, { 223,-13263 }, { 224,-13263 }, + { 225,-13263 }, { 226,-13263 }, { 227,-13263 }, { 228,-13263 }, { 229,-13263 }, + { 230,-13263 }, { 231,-13263 }, { 232,-13263 }, { 233,-13263 }, { 234,-13263 }, + { 235,-13263 }, { 236,-13263 }, { 237,-13263 }, { 238,-13263 }, { 239,-13263 }, + { 240,-13263 }, { 241,-13263 }, { 242,-13263 }, { 243,-13263 }, { 244,-13263 }, + { 245,-13263 }, { 246,-13263 }, { 247,-13263 }, { 248,-13263 }, { 249,-13263 }, + + { 250,-13263 }, { 251,-13263 }, { 252,-13263 }, { 253,-13263 }, { 254,-13263 }, + { 255,-13263 }, { 0, 73 }, { 0,1341 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 70 }, { 0,1331 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 58 }, + { 0,1323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-257 }, { 49,-257 }, { 50,-257 }, { 51,-257 }, { 52,-257 }, + { 53,-257 }, { 54,-257 }, { 55,-257 }, { 56,-257 }, { 57,-257 }, + { 48,-1822 }, { 49,-1822 }, { 50,-1822 }, { 51,-1822 }, { 52,-1822 }, + { 53,-1822 }, { 54,-1822 }, { 55,-1822 }, { 48,-1573 }, { 49,-1573 }, + { 50,-1573 }, { 51,-1573 }, { 52,-1573 }, { 53,-1573 }, { 54,-1573 }, + { 55,-1573 }, { 56,-1573 }, { 57,-1573 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71,-13530 }, { 72,-13530 }, { 73,-13530 }, { 74,-13530 }, + + { 75,-13530 }, { 76,-13530 }, { 77,-13530 }, { 78,-13530 }, { 79,-13530 }, + { 80,-13530 }, { 81,-13530 }, { 82,-13530 }, { 83,-13530 }, { 84,-13530 }, + { 85,-13530 }, { 86,-13530 }, { 87,-13530 }, { 88,-13530 }, { 89,-13530 }, + { 90,-13530 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95, 257 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103,-13530 }, { 104,-13530 }, + { 105,-13530 }, { 106,-13530 }, { 107,-13530 }, { 108,-13530 }, { 109,-13530 }, + { 110,-13530 }, { 111,-13530 }, { 112,-13530 }, { 113,-13530 }, { 114,-13530 }, + { 115,-13530 }, { 116,-13530 }, { 117,-13530 }, { 118,-13530 }, { 119,-13530 }, + { 120,-13530 }, { 121,-13530 }, { 122,-13530 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-13530 }, { 129,-13530 }, + { 130,-13530 }, { 131,-13530 }, { 132,-13530 }, { 133,-13530 }, { 134,-13530 }, + { 135,-13530 }, { 136,-13530 }, { 137,-13530 }, { 138,-13530 }, { 139,-13530 }, + { 140,-13530 }, { 141,-13530 }, { 142,-13530 }, { 143,-13530 }, { 144,-13530 }, + { 145,-13530 }, { 146,-13530 }, { 147,-13530 }, { 148,-13530 }, { 149,-13530 }, + { 150,-13530 }, { 151,-13530 }, { 152,-13530 }, { 153,-13530 }, { 154,-13530 }, + { 155,-13530 }, { 156,-13530 }, { 157,-13530 }, { 158,-13530 }, { 159,-13530 }, + { 160,-13530 }, { 161,-13530 }, { 162,-13530 }, { 163,-13530 }, { 164,-13530 }, + { 165,-13530 }, { 166,-13530 }, { 167,-13530 }, { 168,-13530 }, { 169,-13530 }, + { 170,-13530 }, { 171,-13530 }, { 172,-13530 }, { 173,-13530 }, { 174,-13530 }, + + { 175,-13530 }, { 176,-13530 }, { 177,-13530 }, { 178,-13530 }, { 179,-13530 }, + { 180,-13530 }, { 181,-13530 }, { 182,-13530 }, { 183,-13530 }, { 184,-13530 }, + { 185,-13530 }, { 186,-13530 }, { 187,-13530 }, { 188,-13530 }, { 189,-13530 }, + { 190,-13530 }, { 191,-13530 }, { 192,-13530 }, { 193,-13530 }, { 194,-13530 }, + { 195,-13530 }, { 196,-13530 }, { 197,-13530 }, { 198,-13530 }, { 199,-13530 }, + { 200,-13530 }, { 201,-13530 }, { 202,-13530 }, { 203,-13530 }, { 204,-13530 }, + { 205,-13530 }, { 206,-13530 }, { 207,-13530 }, { 208,-13530 }, { 209,-13530 }, + { 210,-13530 }, { 211,-13530 }, { 212,-13530 }, { 213,-13530 }, { 214,-13530 }, + { 215,-13530 }, { 216,-13530 }, { 217,-13530 }, { 218,-13530 }, { 219,-13530 }, + { 220,-13530 }, { 221,-13530 }, { 222,-13530 }, { 223,-13530 }, { 224,-13530 }, + + { 225,-13530 }, { 226,-13530 }, { 227,-13530 }, { 228,-13530 }, { 229,-13530 }, + { 230,-13530 }, { 231,-13530 }, { 232,-13530 }, { 233,-13530 }, { 234,-13530 }, + { 235,-13530 }, { 236,-13530 }, { 237,-13530 }, { 238,-13530 }, { 239,-13530 }, + { 240,-13530 }, { 241,-13530 }, { 242,-13530 }, { 243,-13530 }, { 244,-13530 }, + { 245,-13530 }, { 246,-13530 }, { 247,-13530 }, { 248,-13530 }, { 249,-13530 }, + { 250,-13530 }, { 251,-13530 }, { 252,-13530 }, { 253,-13530 }, { 254,-13530 }, + { 255,-13530 }, { 0, 69 }, { 0,1066 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 64 }, + { 0,1028 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-1830 }, { 49,-1830 }, { 50,-1830 }, { 51,-1830 }, { 52,-1830 }, + { 53,-1830 }, { 54,-1830 }, { 55,-1830 }, { 56,-1830 }, { 57,-1830 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-1830 }, { 66,-1830 }, { 67,-1830 }, + + { 68,-1830 }, { 69,-1830 }, { 70,-1830 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-2896 }, { 49,-2896 }, + { 50,-2896 }, { 51,-2896 }, { 52,-2896 }, { 53,-2896 }, { 54,-2896 }, + { 55,-2896 }, { 56,-2896 }, { 57,-2896 }, { 0, 0 }, { 97,-1830 }, + { 98,-1830 }, { 99,-1830 }, { 100,-1830 }, { 101,-1830 }, { 102,-1830 }, + { 65,-13862 }, { 66,-13862 }, { 67,-13862 }, { 68,-13862 }, { 69,-2997 }, + { 70,-13862 }, { 71,-13862 }, { 72,-13862 }, { 73,-13862 }, { 74,-13862 }, + { 75,-13862 }, { 76,-13862 }, { 77,-13862 }, { 78,-13862 }, { 79,-13862 }, + + { 80,-13862 }, { 81,-13862 }, { 82,-13862 }, { 83,-13862 }, { 84,-13862 }, + { 85,-13862 }, { 86,-13862 }, { 87,-13862 }, { 88,-13862 }, { 89,-13862 }, + { 90,-13862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-13862 }, { 0, 0 }, { 97,-13862 }, { 98,-13862 }, { 99,-13862 }, + { 100,-13862 }, { 101,-2997 }, { 102,-13862 }, { 103,-13862 }, { 104,-13862 }, + { 105,-13862 }, { 106,-13862 }, { 107,-13862 }, { 108,-13862 }, { 109,-13862 }, + { 110,-13862 }, { 111,-13862 }, { 112,-13862 }, { 113,-13862 }, { 114,-13862 }, + { 115,-13862 }, { 116,-13862 }, { 117,-13862 }, { 118,-13862 }, { 119,-13862 }, + { 120,-13862 }, { 121,-13862 }, { 122,-13862 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 128,-13862 }, { 129,-13862 }, + + { 130,-13862 }, { 131,-13862 }, { 132,-13862 }, { 133,-13862 }, { 134,-13862 }, + { 135,-13862 }, { 136,-13862 }, { 137,-13862 }, { 138,-13862 }, { 139,-13862 }, + { 140,-13862 }, { 141,-13862 }, { 142,-13862 }, { 143,-13862 }, { 144,-13862 }, + { 145,-13862 }, { 146,-13862 }, { 147,-13862 }, { 148,-13862 }, { 149,-13862 }, + { 150,-13862 }, { 151,-13862 }, { 152,-13862 }, { 153,-13862 }, { 154,-13862 }, + { 155,-13862 }, { 156,-13862 }, { 157,-13862 }, { 158,-13862 }, { 159,-13862 }, + { 160,-13862 }, { 161,-13862 }, { 162,-13862 }, { 163,-13862 }, { 164,-13862 }, + { 165,-13862 }, { 166,-13862 }, { 167,-13862 }, { 168,-13862 }, { 169,-13862 }, + { 170,-13862 }, { 171,-13862 }, { 172,-13862 }, { 173,-13862 }, { 174,-13862 }, + { 175,-13862 }, { 176,-13862 }, { 177,-13862 }, { 178,-13862 }, { 179,-13862 }, + + { 180,-13862 }, { 181,-13862 }, { 182,-13862 }, { 183,-13862 }, { 184,-13862 }, + { 185,-13862 }, { 186,-13862 }, { 187,-13862 }, { 188,-13862 }, { 189,-13862 }, + { 190,-13862 }, { 191,-13862 }, { 192,-13862 }, { 193,-13862 }, { 194,-13862 }, + { 195,-13862 }, { 196,-13862 }, { 197,-13862 }, { 198,-13862 }, { 199,-13862 }, + { 200,-13862 }, { 201,-13862 }, { 202,-13862 }, { 203,-13862 }, { 204,-13862 }, + { 205,-13862 }, { 206,-13862 }, { 207,-13862 }, { 208,-13862 }, { 209,-13862 }, + { 210,-13862 }, { 211,-13862 }, { 212,-13862 }, { 213,-13862 }, { 214,-13862 }, + { 215,-13862 }, { 216,-13862 }, { 217,-13862 }, { 218,-13862 }, { 219,-13862 }, + { 220,-13862 }, { 221,-13862 }, { 222,-13862 }, { 223,-13862 }, { 224,-13862 }, + { 225,-13862 }, { 226,-13862 }, { 227,-13862 }, { 228,-13862 }, { 229,-13862 }, + + { 230,-13862 }, { 231,-13862 }, { 232,-13862 }, { 233,-13862 }, { 234,-13862 }, + { 235,-13862 }, { 236,-13862 }, { 237,-13862 }, { 238,-13862 }, { 239,-13862 }, + { 240,-13862 }, { 241,-13862 }, { 242,-13862 }, { 243,-13862 }, { 244,-13862 }, + { 245,-13862 }, { 246,-13862 }, { 247,-13862 }, { 248,-13862 }, { 249,-13862 }, + { 250,-13862 }, { 251,-13862 }, { 252,-13862 }, { 253,-13862 }, { 254,-13862 }, + { 255,-13862 }, { 0, 28 }, { 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, + + { 0, 748 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 143 }, { 49, 143 }, { 50, 143 }, { 51, 143 }, { 52, 143 }, + { 53, 143 }, { 54, 143 }, { 55, 143 }, { 56, 143 }, { 57, 143 }, + { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 710 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 143 }, { 66, 143 }, { 67, 143 }, + { 68, 143 }, { 69, 143 }, { 70, 143 }, { 48, 143 }, { 49, 143 }, - { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, { 100, 143 }, - { 101, 143 }, { 102, 143 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, + { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 0 }, { 0, 0 }, + { 0, 28 }, { 0, 687 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, + { 70, 143 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 143 }, + { 98, 143 }, { 99, 143 }, { 100, 143 }, { 101, 143 }, { 102, 143 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 143 }, { 49, 143 }, { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, { 55, 143 }, { 56, 143 }, - { 57, 143 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 649 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 143 }, { 66, 143 }, + { 57, 143 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, + + { 100, 143 }, { 101, 143 }, { 102, 143 }, { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, { 70, 143 }, { 48, 143 }, { 49, 143 }, { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, - { 54, 143 }, { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 0 }, - { 0, 0 }, { 0, 28 }, { 0, 626 }, { 0, 0 }, { 0, 0 }, - + { 54, 143 }, { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 28 }, + { 0, 628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, { 70, 143 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, { 100, 143 }, { 101, 143 }, - { 102, 143 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 48, 143 }, { 49, 143 }, { 50, 143 }, - { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, { 55, 143 }, - { 56, 143 }, { 57, 143 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, - { 99, 143 }, { 100, 143 }, { 101, 143 }, { 102, 143 }, { 65, 143 }, - { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, { 70, 143 }, - { 48,-10162 }, { 49,-10162 }, { 50,-10162 }, { 51,-10162 }, { 52,-10162 }, - - { 53,-10162 }, { 54,-10162 }, { 55,-10162 }, { 56,-10162 }, { 57,-10162 }, - { 0, 28 }, { 0, 567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65,-10162 }, { 66,-10162 }, { 67,-10162 }, - { 68,-10162 }, { 69,-10162 }, { 70,-10162 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, { 100, 143 }, - { 101, 143 }, { 102, 143 }, { 0, 0 }, { 0, 28 }, { 0, 544 }, + { 102, 143 }, { 0, 0 }, { 0, 28 }, { 0, 605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,-10162 }, - { 98,-10162 }, { 99,-10162 }, { 100,-10162 }, { 101,-10162 }, { 102,-10162 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, + { 99, 143 }, { 100, 143 }, { 101, 143 }, { 102, 143 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 143 }, { 49, 143 }, + { 50, 143 }, { 51, 143 }, { 52, 143 }, { 53, 143 }, { 54, 143 }, + { 55, 143 }, { 56, 143 }, { 57, 143 }, { 0, 0 }, { 0, 0 }, + { 0, 28 }, { 0, 567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 143 }, { 66, 143 }, { 67, 143 }, { 68, 143 }, { 69, 143 }, + { 70, 143 }, { 48,-14226 }, { 49,-14226 }, { 50,-14226 }, { 51,-14226 }, + { 52,-14226 }, { 53,-14226 }, { 54,-14226 }, { 55,-14226 }, { 56,-14226 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 84 }, - { 49, 84 }, { 50, 84 }, { 51, 84 }, { 52, 84 }, { 53, 84 }, - { 54, 84 }, { 55, 84 }, { 56, 84 }, { 57, 84 }, { 0, 0 }, - { 0, 0 }, { 0, 28 }, { 0, 506 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 65, 84 }, { 66, 84 }, { 67, 84 }, { 68, 84 }, - { 69, 84 }, { 70, 84 }, { 48,-10242 }, { 49,-10242 }, { 50,-10242 }, - { 51,-10242 }, { 52,-10242 }, { 53,-10242 }, { 54,-10242 }, { 55,-10242 }, - { 56,-10242 }, { 57,-10242 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, - { 0, 483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-10242 }, - { 66,-10242 }, { 67,-10242 }, { 68,-10242 }, { 69,-10242 }, { 70,-10242 }, + { 57,-14226 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 544 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-14226 }, { 66,-14226 }, + { 67,-14226 }, { 68,-14226 }, { 69,-14226 }, { 70,-14226 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 97, 143 }, { 98, 143 }, { 99, 143 }, + { 100, 143 }, { 101, 143 }, { 102, 143 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 105 }, + { 49, 105 }, { 50, 105 }, { 51, 105 }, { 52, 105 }, { 53, 105 }, + { 54, 105 }, { 55, 105 }, { 56, 105 }, { 57, 105 }, { 0, 0 }, + { 97,-14226 }, { 98,-14226 }, { 99,-14226 }, { 100,-14226 }, { 101,-14226 }, + { 102,-14226 }, { 65, 105 }, { 66, 105 }, { 67, 105 }, { 68, 105 }, + + { 69, 105 }, { 70, 105 }, { 48,-14283 }, { 49,-14283 }, { 50,-14283 }, + { 51,-14283 }, { 52,-14283 }, { 53,-14283 }, { 54,-14283 }, { 55,-14283 }, + { 56,-14283 }, { 57,-14283 }, { 0, 28 }, { 0, 485 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-14283 }, + { 66,-14283 }, { 67,-14283 }, { 68,-14283 }, { 69,-14283 }, { 70,-14283 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 105 }, { 98, 105 }, + { 99, 105 }, { 100, 105 }, { 101, 105 }, { 102, 105 }, { 0, 0 }, + { 0, 28 }, { 0, 462 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 97,-14283 }, { 98,-14283 }, { 99,-14283 }, { 100,-14283 }, + { 101,-14283 }, { 102,-14283 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48, 61 }, { 49, 61 }, { 50, 61 }, { 51, 61 }, + { 52, 61 }, { 53, 61 }, { 54, 61 }, { 55, 61 }, { 56, 61 }, + { 57, 61 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 424 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 61 }, { 66, 61 }, + { 67, 61 }, { 68, 61 }, { 69, 61 }, { 70, 61 }, { 48, 61 }, + { 49, 61 }, { 50, 61 }, { 51, 61 }, { 52, 61 }, { 53, 61 }, + { 54, 61 }, { 55, 61 }, { 56, 61 }, { 57, 61 }, { 0, 0 }, + { 0, 0 }, { 0, 28 }, { 0, 401 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 84 }, { 98, 84 }, - { 99, 84 }, { 100, 84 }, { 101, 84 }, { 102, 84 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65, 61 }, { 66, 61 }, { 67, 61 }, { 68, 61 }, + { 69, 61 }, { 70, 61 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 97, 61 }, { 98, 61 }, { 99, 61 }, { 100, 61 }, { 101, 61 }, + { 102, 61 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48, 82 }, { 49, 82 }, { 50, 82 }, + { 51, 82 }, { 52, 82 }, { 53, 82 }, { 54, 82 }, { 55, 82 }, + { 56, 82 }, { 57, 82 }, { 0, 0 }, { 97, 61 }, { 98, 61 }, + { 99, 61 }, { 100, 61 }, { 101, 61 }, { 102, 61 }, { 65, 82 }, + { 66, 82 }, { 67, 82 }, { 68, 82 }, { 69, 82 }, { 70, 82 }, { 48, 82 }, { 49, 82 }, { 50, 82 }, { 51, 82 }, { 52, 82 }, - { 53, 82 }, { 54, 82 }, { 55, 82 }, { 56, 82 }, { 57, 82 }, - { 0, 0 }, { 97,-10242 }, { 98,-10242 }, { 99,-10242 }, { 100,-10242 }, - { 101,-10242 }, { 102,-10242 }, { 65, 82 }, { 66, 82 }, { 67, 82 }, - { 68, 82 }, { 69, 82 }, { 70, 82 }, { 48, 82 }, { 49, 82 }, - { 50, 82 }, { 51, 82 }, { 52, 82 }, { 53, 82 }, { 54, 82 }, - { 55, 82 }, { 56, 82 }, { 57, 82 }, { 0, 28 }, { 0, 424 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65, 82 }, { 66, 82 }, { 67, 82 }, { 68, 82 }, { 69, 82 }, - { 70, 82 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 82 }, - { 98, 82 }, { 99, 82 }, { 100, 82 }, { 101, 82 }, { 102, 82 }, - { 0, 0 }, { 0, 28 }, { 0, 401 }, { 0, 0 }, { 0, 0 }, + { 53, 82 }, { 54, 82 }, { 55, 82 }, { 56, 82 }, { 57, 82 }, + { 0, 28 }, { 0, 342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 82 }, { 66, 82 }, { 67, 82 }, + { 68, 82 }, { 69, 82 }, { 70, 82 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 97, 82 }, { 98, 82 }, { 99, 82 }, { 100, 82 }, + { 101, 82 }, { 102, 82 }, { 0, 0 }, { 0, 28 }, { 0, 319 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 97, 82 }, { 98, 82 }, { 99, 82 }, - { 100, 82 }, { 101, 82 }, { 102, 82 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 48, 61 }, { 49, 61 }, { 50, 61 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 82 }, + { 98, 82 }, { 99, 82 }, { 100, 82 }, { 101, 82 }, { 102, 82 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 61 }, + { 49, 61 }, { 50, 61 }, { 51, 61 }, { 52, 61 }, { 53, 61 }, + { 54, 61 }, { 55, 61 }, { 56, 61 }, { 57, 61 }, { 0, 0 }, + { 0, 0 }, { 0, 28 }, { 0, 281 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65, 61 }, { 66, 61 }, { 67, 61 }, { 68, 61 }, + { 69, 61 }, { 70, 61 }, { 48, 61 }, { 49, 61 }, { 50, 61 }, { 51, 61 }, { 52, 61 }, { 53, 61 }, { 54, 61 }, { 55, 61 }, { 56, 61 }, { 57, 61 }, { 0, 0 }, { 0, 0 }, { 0, 28 }, - { 0, 363 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 61 }, + { 0, 258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 61 }, { 66, 61 }, { 67, 61 }, { 68, 61 }, { 69, 61 }, { 70, 61 }, - { 48, 61 }, { 49, 61 }, { 50, 61 }, { 51, 61 }, { 52, 61 }, - { 53, 61 }, { 54, 61 }, { 55, 61 }, { 56, 61 }, { 57, 61 }, - { 0, 0 }, { 0, 0 }, { 0, 28 }, { 0, 340 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65, 61 }, { 66, 61 }, { 67, 61 }, - { 68, 61 }, { 69, 61 }, { 70, 61 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 97, 61 }, { 98, 61 }, { 99, 61 }, { 100, 61 }, - - { 101, 61 }, { 102, 61 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 82 }, { 49, 82 }, - { 50, 82 }, { 51, 82 }, { 52, 82 }, { 53, 82 }, { 54, 82 }, - { 55, 82 }, { 56, 82 }, { 57, 82 }, { 0, 0 }, { 97, 61 }, - { 98, 61 }, { 99, 61 }, { 100, 61 }, { 101, 61 }, { 102, 61 }, - { 65, 82 }, { 66, 82 }, { 67, 82 }, { 68, 82 }, { 69, 82 }, - { 70, 82 }, { 48, 82 }, { 49, 82 }, { 50, 82 }, { 51, 82 }, - { 52, 82 }, { 53, 82 }, { 54, 82 }, { 55, 82 }, { 56, 82 }, - { 57, 82 }, { 0, 28 }, { 0, 281 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 82 }, { 66, 82 }, - { 67, 82 }, { 68, 82 }, { 69, 82 }, { 70, 82 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 97, 82 }, { 98, 82 }, { 99, 82 }, - { 100, 82 }, { 101, 82 }, { 102, 82 }, { 0, 0 }, { 0, 28 }, - { 0, 258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97, 61 }, { 98, 61 }, + { 99, 61 }, { 100, 61 }, { 101, 61 }, { 102, 61 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 97, 82 }, { 98, 82 }, { 99, 82 }, { 100, 82 }, { 101, 82 }, - { 102, 82 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 48,-10507 }, { 49,-10507 }, { 50,-10507 }, { 51,-10507 }, { 52,-10507 }, - { 53,-10507 }, { 54,-10507 }, { 55,-10507 }, { 56,-10507 }, { 57,-10507 }, + { 48,-14550 }, { 49,-14550 }, { 50,-14550 }, { 51,-14550 }, { 52,-14550 }, + { 53,-14550 }, { 54,-14550 }, { 55,-14550 }, { 56,-14550 }, { 57,-14550 }, + { 0, 0 }, { 97, 61 }, { 98, 61 }, { 99, 61 }, { 100, 61 }, + { 101, 61 }, { 102, 61 }, { 65,-14550 }, { 66,-14550 }, { 67,-14550 }, + { 68,-14550 }, { 69,-14550 }, { 70,-14550 }, { 48,-14569 }, { 49,-14569 }, + { 50,-14569 }, { 51,-14569 }, { 52,-14569 }, { 53,-14569 }, { 54,-14569 }, + { 55,-14569 }, { 56,-14569 }, { 57,-14569 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 65,-10507 }, { 66,-10507 }, { 67,-10507 }, - { 68,-10507 }, { 69,-10507 }, { 70,-10507 }, { 48,-10528 }, { 49,-10528 }, - { 50,-10528 }, { 51,-10528 }, { 52,-10528 }, { 53,-10528 }, { 54,-10528 }, - { 55,-10528 }, { 56,-10528 }, { 57,-10528 }, { 0, 0 }, { 0, 0 }, + { 65,-14569 }, { 66,-14569 }, { 67,-14569 }, { 68,-14569 }, { 69,-14569 }, + { 70,-14569 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,-14550 }, + { 98,-14550 }, { 99,-14550 }, { 100,-14550 }, { 101,-14550 }, { 102,-14550 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 65,-10528 }, { 66,-10528 }, { 67,-10528 }, { 68,-10528 }, { 69,-10528 }, - { 70,-10528 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 97,-10507 }, - { 98,-10507 }, { 99,-10507 }, { 100,-10507 }, { 101,-10507 }, { 102,-10507 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 97,-10528 }, { 98,-10528 }, { 99,-10528 }, - { 100,-10528 }, { 101,-10528 }, { 102,-10528 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 97,-14569 }, { 98,-14569 }, { 99,-14569 }, + { 100,-14569 }, { 101,-14569 }, { 102,-14569 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, { 257, 66 }, { 1, 0 }, }; + { 0, 0 }, { 0, 0 }, { 257, 77 }, { 1, 0 }, }; static __thread const struct yy_trans_info *yy_start_state_list[25] = { @@ -4544,7 +5453,7 @@ static __thread const struct yy_trans_info *yy_start_state_list[25] = #define YY_RESTORE_YY_MORE_OFFSET #line 1 "scan.l" -#line 47 "scan.l" +#line 49 "scan.l" /* LCOV_EXCL_START */ @@ -4628,7 +5537,7 @@ static void addlit(char *ytext, int yleng, core_yyscan_t yyscanner); static void addlitchar(unsigned char ychar, core_yyscan_t yyscanner); static char *litbufdup(core_yyscan_t yyscanner); static unsigned char unescape_single_char(unsigned char c, core_yyscan_t yyscanner); -static int process_integer_literal(const char *token, YYSTYPE *lval); +static int process_integer_literal(const char *token, YYSTYPE *lval, int base); static void addunicode(pg_wchar c, yyscan_t yyscanner); #define yyerror(msg) scanner_yyerror(msg, yyscanner) @@ -4647,7 +5556,7 @@ static void check_escape_warning(core_yyscan_t yyscanner); extern int core_yyget_column(yyscan_t yyscanner); extern void core_yyset_column(int column_no, yyscan_t yyscanner); -#line 4601 "scan.c" +#line 5510 "scan.c" #define YY_NO_INPUT 1 /* * OK, here is a short description of lex/flex rules behavior. @@ -4780,9 +5689,9 @@ extern void core_yyset_column(int column_no, yyscan_t yyscanner); * Unary minus is not part of a number here. Instead we pass it separately to * the parser, and there it gets coerced via doNegate(). * - * {decimalfail} is used because we would like "1..10" to lex as 1, dot_dot, 10. + * {numericfail} 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 + * {realfail} is added to prevent the need for scanner * backup when the {real} rule fails to match completely. */ /* @@ -4797,7 +5706,7 @@ extern void core_yyset_column(int column_no, yyscan_t yyscanner); * Note that xcstart must appear before operator, as explained above! * Also whitespace (comment) must appear before operator. */ -#line 4751 "scan.c" +#line 5660 "scan.c" #define INITIAL 0 #define xb 1 @@ -5090,10 +5999,10 @@ YY_DECL } { -#line 419 "scan.l" +#line 439 "scan.l" -#line 5047 "scan.c" +#line 5956 "scan.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -5133,14 +6042,14 @@ YY_DECL case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 421 "scan.l" +#line 441 "scan.l" { /* ignore */ } YY_BREAK case 2: YY_RULE_SETUP -#line 425 "scan.l" +#line 445 "scan.l" { SET_YYLLOC(); return SQL_COMMENT; @@ -5148,7 +6057,7 @@ YY_RULE_SETUP YY_BREAK case 3: YY_RULE_SETUP -#line 430 "scan.l" +#line 450 "scan.l" { /* Set location in case of syntax error in comment */ SET_YYLLOC(); @@ -5161,7 +6070,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 440 "scan.l" +#line 460 "scan.l" { (yyextra->xcdepth)++; /* Put back any characters past slash-star; see above */ @@ -5170,7 +6079,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 446 "scan.l" +#line 466 "scan.l" { if (yyextra->xcdepth <= 0) { @@ -5185,27 +6094,27 @@ YY_RULE_SETUP case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 457 "scan.l" +#line 477 "scan.l" { /* ignore */ } YY_BREAK case 7: YY_RULE_SETUP -#line 461 "scan.l" +#line 481 "scan.l" { /* ignore */ } YY_BREAK case 8: YY_RULE_SETUP -#line 465 "scan.l" +#line 485 "scan.l" { /* ignore */ } YY_BREAK case YY_STATE_EOF(xc): -#line 469 "scan.l" +#line 489 "scan.l" { yyerror("unterminated /* comment"); } @@ -5213,7 +6122,7 @@ case YY_STATE_EOF(xc): /* */ case 9: YY_RULE_SETUP -#line 474 "scan.l" +#line 494 "scan.l" { /* Binary bit type. * At some point we should simply pass the string @@ -5229,22 +6138,22 @@ YY_RULE_SETUP YY_BREAK case 10: /* rule 10 can match eol */ -#line 487 "scan.l" +#line 507 "scan.l" case 11: /* rule 11 can match eol */ YY_RULE_SETUP -#line 487 "scan.l" +#line 507 "scan.l" { addlit(yytext, yyleng, yyscanner); } YY_BREAK case YY_STATE_EOF(xb): -#line 490 "scan.l" +#line 510 "scan.l" { yyerror("unterminated bit string literal"); } YY_BREAK case 12: YY_RULE_SETUP -#line 492 "scan.l" +#line 512 "scan.l" { /* Hexadecimal bit type. * At some point we should simply pass the string @@ -5259,12 +6168,12 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(xh): -#line 504 "scan.l" +#line 524 "scan.l" { yyerror("unterminated hexadecimal string literal"); } YY_BREAK case 13: YY_RULE_SETUP -#line 506 "scan.l" +#line 526 "scan.l" { /* National character. * We will pass this along as a normal character string, @@ -5294,7 +6203,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 533 "scan.l" +#line 553 "scan.l" { yyextra->warn_on_first_escape = true; yyextra->saw_non_ascii = false; @@ -5308,7 +6217,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 543 "scan.l" +#line 563 "scan.l" { yyextra->warn_on_first_escape = false; yyextra->saw_non_ascii = false; @@ -5319,7 +6228,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 550 "scan.l" +#line 570 "scan.l" { SET_YYLLOC(); if (!yyextra->standard_conforming_strings) @@ -5334,7 +6243,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 562 "scan.l" +#line 582 "scan.l" { /* * When we are scanning a quoted string and see an end @@ -5351,7 +6260,7 @@ YY_RULE_SETUP case 18: /* rule 18 can match eol */ YY_RULE_SETUP -#line 574 "scan.l" +#line 594 "scan.l" { /* * Found a quote continuation, so return to the in-quote @@ -5363,13 +6272,13 @@ YY_RULE_SETUP YY_BREAK case 19: /* rule 19 can match eol */ -#line 583 "scan.l" +#line 603 "scan.l" case 20: /* rule 20 can match eol */ -#line 584 "scan.l" +#line 604 "scan.l" YY_RULE_SETUP case YY_STATE_EOF(xqs): -#line 584 "scan.l" +#line 604 "scan.l" { /* * Failed to see a quote continuation. Throw back @@ -5413,7 +6322,7 @@ case YY_STATE_EOF(xqs): YY_BREAK case 21: YY_RULE_SETUP -#line 625 "scan.l" +#line 645 "scan.l" { addlitchar('\'', yyscanner); } @@ -5421,7 +6330,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 628 "scan.l" +#line 648 "scan.l" { addlit(yytext, yyleng, yyscanner); } @@ -5429,14 +6338,14 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 631 "scan.l" +#line 651 "scan.l" { addlit(yytext, yyleng, yyscanner); } YY_BREAK case 24: YY_RULE_SETUP -#line 634 "scan.l" +#line 654 "scan.l" { pg_wchar c = strtoul(yytext + 2, NULL, 16); @@ -5468,7 +6377,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 662 "scan.l" +#line 682 "scan.l" { pg_wchar c = strtoul(yytext + 2, NULL, 16); @@ -5491,13 +6400,13 @@ YY_RULE_SETUP } YY_BREAK case 26: -#line 683 "scan.l" +#line 703 "scan.l" case 27: /* rule 27 can match eol */ -#line 684 "scan.l" +#line 704 "scan.l" YY_RULE_SETUP case YY_STATE_EOF(xeu): -#line 684 "scan.l" +#line 704 "scan.l" { /* Set the error cursor to point at missing esc seq */ SET_YYLLOC(); @@ -5506,7 +6415,7 @@ case YY_STATE_EOF(xeu): YY_BREAK case 28: YY_RULE_SETUP -#line 689 "scan.l" +#line 709 "scan.l" { /* Set the error cursor to point at malformed esc seq */ SET_YYLLOC(); @@ -5520,7 +6429,7 @@ YY_RULE_SETUP case 29: /* rule 29 can match eol */ YY_RULE_SETUP -#line 698 "scan.l" +#line 718 "scan.l" { if (yytext[1] == '\'') { @@ -5540,7 +6449,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 714 "scan.l" +#line 734 "scan.l" { unsigned char c = strtoul(yytext + 1, NULL, 8); @@ -5552,7 +6461,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 722 "scan.l" +#line 742 "scan.l" { unsigned char c = strtoul(yytext + 2, NULL, 16); @@ -5564,7 +6473,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 730 "scan.l" +#line 750 "scan.l" { /* This is only needed for \ just before EOF */ addlitchar(yytext[0], yyscanner); @@ -5573,12 +6482,12 @@ YY_RULE_SETUP case YY_STATE_EOF(xq): case YY_STATE_EOF(xe): case YY_STATE_EOF(xus): -#line 734 "scan.l" +#line 754 "scan.l" { yyerror("unterminated quoted string"); } YY_BREAK case 33: YY_RULE_SETUP -#line 736 "scan.l" +#line 756 "scan.l" { SET_YYLLOC(); yyextra->dolqstart = pstrdup(yytext); @@ -5588,7 +6497,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 742 "scan.l" +#line 762 "scan.l" { SET_YYLLOC(); /* throw back all but the initial "$" */ @@ -5599,7 +6508,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 749 "scan.l" +#line 769 "scan.l" { if (strcmp(yytext, yyextra->dolqstart) == 0) { @@ -5625,33 +6534,33 @@ YY_RULE_SETUP case 36: /* rule 36 can match eol */ YY_RULE_SETUP -#line 770 "scan.l" +#line 790 "scan.l" { addlit(yytext, yyleng, yyscanner); } YY_BREAK case 37: YY_RULE_SETUP -#line 773 "scan.l" +#line 793 "scan.l" { addlit(yytext, yyleng, yyscanner); } YY_BREAK case 38: YY_RULE_SETUP -#line 776 "scan.l" +#line 796 "scan.l" { /* This is only needed for $ inside the quoted text */ addlitchar(yytext[0], yyscanner); } YY_BREAK case YY_STATE_EOF(xdolq): -#line 780 "scan.l" +#line 800 "scan.l" { yyerror("unterminated dollar-quoted string"); } YY_BREAK case 39: YY_RULE_SETUP -#line 782 "scan.l" +#line 802 "scan.l" { SET_YYLLOC(); BEGIN(xd); @@ -5660,7 +6569,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 787 "scan.l" +#line 807 "scan.l" { SET_YYLLOC(); BEGIN(xui); @@ -5669,7 +6578,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 792 "scan.l" +#line 812 "scan.l" { char *ident; @@ -5686,7 +6595,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 805 "scan.l" +#line 825 "scan.l" { BEGIN(INITIAL); if (yyextra->literallen == 0) @@ -5699,7 +6608,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 814 "scan.l" +#line 834 "scan.l" { addlitchar('"', yyscanner); } @@ -5707,19 +6616,19 @@ YY_RULE_SETUP case 44: /* rule 44 can match eol */ YY_RULE_SETUP -#line 817 "scan.l" +#line 837 "scan.l" { addlit(yytext, yyleng, yyscanner); } YY_BREAK case YY_STATE_EOF(xd): case YY_STATE_EOF(xui): -#line 820 "scan.l" +#line 840 "scan.l" { yyerror("unterminated quoted identifier"); } YY_BREAK case 45: YY_RULE_SETUP -#line 822 "scan.l" +#line 842 "scan.l" { char *ident; @@ -5735,7 +6644,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 835 "scan.l" +#line 855 "scan.l" { SET_YYLLOC(); return TYPECAST; @@ -5743,7 +6652,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 840 "scan.l" +#line 860 "scan.l" { SET_YYLLOC(); return DOT_DOT; @@ -5751,7 +6660,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 845 "scan.l" +#line 865 "scan.l" { SET_YYLLOC(); return COLON_EQUALS; @@ -5759,7 +6668,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 850 "scan.l" +#line 870 "scan.l" { SET_YYLLOC(); return EQUALS_GREATER; @@ -5767,7 +6676,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 855 "scan.l" +#line 875 "scan.l" { SET_YYLLOC(); return LESS_EQUALS; @@ -5775,7 +6684,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 860 "scan.l" +#line 880 "scan.l" { SET_YYLLOC(); return GREATER_EQUALS; @@ -5783,7 +6692,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 865 "scan.l" +#line 885 "scan.l" { /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ SET_YYLLOC(); @@ -5792,7 +6701,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 871 "scan.l" +#line 891 "scan.l" { /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ SET_YYLLOC(); @@ -5801,7 +6710,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 877 "scan.l" +#line 897 "scan.l" { SET_YYLLOC(); return yytext[0]; @@ -5809,7 +6718,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 882 "scan.l" +#line 902 "scan.l" { /* * Check for embedded slash-star or dash-dash; those @@ -5920,7 +6829,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 990 "scan.l" +#line 1010 "scan.l" { SET_YYLLOC(); yylval->ival = atol(yytext + 1); @@ -5929,66 +6838,147 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 996 "scan.l" +#line 1016 "scan.l" { SET_YYLLOC(); - return process_integer_literal(yytext, yylval); + return process_integer_literal(yytext, yylval, 10); } YY_BREAK case 58: YY_RULE_SETUP -#line 1000 "scan.l" +#line 1020 "scan.l" +{ + SET_YYLLOC(); + return process_integer_literal(yytext, yylval, 16); + } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 1024 "scan.l" +{ + SET_YYLLOC(); + return process_integer_literal(yytext, yylval, 8); + } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 1028 "scan.l" +{ + SET_YYLLOC(); + return process_integer_literal(yytext, yylval, 2); + } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 1032 "scan.l" +{ + SET_YYLLOC(); + yyerror("invalid hexadecimal integer"); + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 1036 "scan.l" +{ + SET_YYLLOC(); + yyerror("invalid octal integer"); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 1040 "scan.l" +{ + SET_YYLLOC(); + yyerror("invalid binary integer"); + } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 1044 "scan.l" { SET_YYLLOC(); yylval->str = pstrdup(yytext); return FCONST; } YY_BREAK -case 59: +case 65: YY_RULE_SETUP -#line 1005 "scan.l" +#line 1049 "scan.l" { /* throw back the .., and treat as integer */ yyless(yyleng - 2); SET_YYLLOC(); - return process_integer_literal(yytext, yylval); + return process_integer_literal(yytext, yylval, 10); } YY_BREAK -case 60: +case 66: YY_RULE_SETUP -#line 1011 "scan.l" +#line 1055 "scan.l" { SET_YYLLOC(); yylval->str = pstrdup(yytext); return FCONST; } YY_BREAK -case 61: +case 67: YY_RULE_SETUP -#line 1016 "scan.l" +#line 1060 "scan.l" { - /* - * throw back the [Ee], and figure out whether what - * remains is an {integer} or {decimal}. - */ - yyless(yyleng - 1); SET_YYLLOC(); - return process_integer_literal(yytext, yylval); + yyerror("trailing junk after numeric literal"); } YY_BREAK -case 62: +case 68: YY_RULE_SETUP -#line 1025 "scan.l" +#line 1064 "scan.l" { - /* throw back the [Ee][+-], and proceed as above */ - yyless(yyleng - 2); SET_YYLLOC(); - return process_integer_literal(yytext, yylval); + yyerror("trailing junk after numeric literal"); } YY_BREAK -case 63: +case 69: +YY_RULE_SETUP +#line 1068 "scan.l" +{ + SET_YYLLOC(); + yyerror("trailing junk after numeric literal"); + } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 1072 "scan.l" +{ + SET_YYLLOC(); + yyerror("trailing junk after numeric literal"); + } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 1076 "scan.l" +{ + SET_YYLLOC(); + yyerror("trailing junk after numeric literal"); + } + YY_BREAK +case 72: +YY_RULE_SETUP +#line 1080 "scan.l" +{ + SET_YYLLOC(); + yyerror("trailing junk after numeric literal"); + } + YY_BREAK +case 73: YY_RULE_SETUP -#line 1033 "scan.l" +#line 1084 "scan.l" +{ + SET_YYLLOC(); + yyerror("trailing junk after numeric literal"); + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 1090 "scan.l" { int kwnum; char *ident; @@ -6015,27 +7005,27 @@ YY_RULE_SETUP return IDENT; } YY_BREAK -case 64: +case 75: YY_RULE_SETUP -#line 1059 "scan.l" +#line 1116 "scan.l" { SET_YYLLOC(); return yytext[0]; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1064 "scan.l" +#line 1121 "scan.l" { SET_YYLLOC(); yyterminate(); } YY_BREAK -case 65: +case 76: YY_RULE_SETUP -#line 1069 "scan.l" +#line 1126 "scan.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 5989 "scan.c" +#line 6979 "scan.c" case YY_END_OF_BUFFER: { @@ -6915,7 +7905,7 @@ static int yy_flex_strlen (const char * s , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 1069 "scan.l" +#line 1126 "scan.l" /* LCOV_EXCL_STOP */ @@ -7167,18 +8157,17 @@ litbufdup(core_yyscan_t yyscanner) } /* - * Process {integer}. Note this will also do the right thing with {decimal}, - * ie digits and a decimal point. + * Process {decinteger}, {hexinteger}, etc. Note this will also do the right + * thing with {numeric}, ie digits and a decimal point. */ static int -process_integer_literal(const char *token, YYSTYPE *lval) +process_integer_literal(const char *token, YYSTYPE *lval, int base) { - int val; - char *endptr; + ErrorSaveContext escontext = {T_ErrorSaveContext}; + int32 val; - errno = 0; - val = strtoint(token, &endptr, 10); - if (*endptr != '\0' || errno == ERANGE) + val = pg_strtoint32_safe(token, (Node *) &escontext); + if (escontext.error_occurred) { /* integer too large (or contains decimal pt), treat it as a float */ lval->str = pstrdup(token); diff --git a/src/postgres/src_backend_parser_scansup.c b/src/postgres/src_backend_parser_scansup.c index d07bd4b2..8457bb45 100644 --- a/src/postgres/src_backend_parser_scansup.c +++ b/src/postgres/src_backend_parser_scansup.c @@ -12,7 +12,7 @@ * scansup.c * scanner support routines used by the core lexer * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_backend_postmaster_postmaster.c b/src/postgres/src_backend_postmaster_postmaster.c index 896c4227..46cf7d55 100644 --- a/src/postgres/src_backend_postmaster_postmaster.c +++ b/src/postgres/src_backend_postmaster_postmaster.c @@ -38,7 +38,7 @@ * clients. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -83,10 +83,6 @@ #include #include -#ifdef HAVE_SYS_SELECT_H -#include -#endif - #ifdef USE_BONJOUR #include #endif @@ -112,6 +108,7 @@ #include "libpq/libpq.h" #include "libpq/pqformat.h" #include "libpq/pqsignal.h" +#include "nodes/queryjumble.h" #include "pg_getopt.h" #include "pgstat.h" #include "port/pg_bswap.h" @@ -136,7 +133,6 @@ #include "utils/memutils.h" #include "utils/pidfile.h" #include "utils/ps_status.h" -#include "utils/queryjumble.h" #include "utils/timeout.h" #include "utils/timestamp.h" #include "utils/varlena.h" @@ -214,30 +210,30 @@ static Backend *ShmemBackendArray; /* - * ReservedBackends is the number of backends reserved for superuser use. - * This number is taken out of the pool size given by MaxConnections so - * number of backend slots available to non-superusers is - * (MaxConnections - ReservedBackends). Note what this really means is - * "if there are <= ReservedBackends connections available, only superusers - * can make new connections" --- pre-existing superuser connections don't - * count against the limit. + * SuperuserReservedConnections is the number of backends reserved for + * superuser use, and ReservedConnections is the number of backends reserved + * for use by roles with privileges of the pg_use_reserved_connections + * predefined role. These are taken out of the pool of MaxConnections backend + * slots, so the number of backend slots available for roles that are neither + * superuser nor have privileges of pg_use_reserved_connections is + * (MaxConnections - SuperuserReservedConnections - ReservedConnections). + * + * If the number of remaining slots is less than or equal to + * SuperuserReservedConnections, only superusers can make new connections. If + * the number of remaining slots is greater than SuperuserReservedConnections + * but less than or equal to + * (SuperuserReservedConnections + ReservedConnections), only superusers and + * roles with privileges of pg_use_reserved_connections can make new + * connections. Note that pre-existing superuser and + * pg_use_reserved_connections connections don't count against the limits. */ + /* The socket(s) we're listening to. */ #define MAXLISTEN 64 -/* - * These globals control the behavior of the postmaster in case some - * backend dumps core. Normally, it kills all peers of the dead backend - * and reinitializes shared memory. By specifying -s or -n, we can have - * the postmaster stop (rather than kill) peers and not reinitialize - * shared data structures. (Reinit is currently dead code, though.) - */ - - - /* still more option variables */ @@ -253,6 +249,8 @@ static Backend *ShmemBackendArray; + + /* PIDs of special child processes; 0 when not running */ @@ -380,6 +378,17 @@ __thread bool ClientAuthInProgress = false; +/* set when signals arrive */ + + + + + + + +/* event multiplexing object */ + + #ifdef USE_SSL /* Set when and if SSL has been initialized properly */ static bool LoadedSSL = false; @@ -398,11 +407,14 @@ static void getInstallationPaths(const char *argv0); static void checkControlFile(void); static Port *ConnCreate(int serverFd); static void ConnFree(Port *port); -static void reset_shared(void); -static void SIGHUP_handler(SIGNAL_ARGS); -static void pmdie(SIGNAL_ARGS); -static void reaper(SIGNAL_ARGS); -static void sigusr1_handler(SIGNAL_ARGS); +static void handle_pm_pmsignal_signal(SIGNAL_ARGS); +static void handle_pm_child_exit_signal(SIGNAL_ARGS); +static void handle_pm_reload_request_signal(SIGNAL_ARGS); +static void handle_pm_shutdown_request_signal(SIGNAL_ARGS); +static void process_pm_pmsignal(void); +static void process_pm_child_exit(void); +static void process_pm_reload_request(void); +static void process_pm_shutdown_request(void); static void process_startup_packet_die(SIGNAL_ARGS); static void dummy_handler(SIGNAL_ARGS); static void StartupPacketTimeoutHandler(void); @@ -420,12 +432,12 @@ static int BackendStartup(Port *port); static int ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done); static void SendNegotiateProtocolVersion(List *unrecognized_protocol_options); static void processCancelRequest(Port *port, void *pkt); -static int initMasks(fd_set *rmask); static void report_fork_failure_to_client(Port *port, int errnum); static CAC_state canAcceptConnections(int backend_type); static bool RandomCancelKey(int32 *cancel_key); static void signal_child(pid_t pid, int signal); -static bool SignalSomeChildren(int signal, int targets); +static void sigquit_child(pid_t pid); +static bool SignalSomeChildren(int signal, int target); static void TerminateChildren(int signal); #define SignalChildren(sig) SignalSomeChildren(sig, BACKEND_TYPE_ALL) @@ -579,8 +591,6 @@ HANDLE PostmasterHandle; */ #ifdef WIN32 #endif -#ifdef SIGURG -#endif #ifdef SIGTTIN #endif #ifdef SIGTTOU @@ -597,8 +607,6 @@ HANDLE PostmasterHandle; #endif #ifdef USE_BONJOUR #endif -#ifdef HAVE_UNIX_SOCKETS -#endif #ifdef HAVE_PTHREAD_IS_THREADED_NP #endif @@ -630,7 +638,7 @@ HANDLE PostmasterHandle; /* - * Determine how long should we let ServerLoop sleep. + * Determine how long should we let ServerLoop sleep, in milliseconds. * * In normal conditions we wait at most one minute, to ensure that the other * background tasks handled by ServerLoop get done even when no requests are @@ -641,19 +649,21 @@ HANDLE PostmasterHandle; /* - * Main idle loop of postmaster - * - * NB: Needs to be called with signals blocked + * Activate or deactivate notifications of server socket events. Since we + * don't currently have a way to remove events from an existing WaitEventSet, + * we'll just destroy and recreate the whole thing. This is called during + * shutdown so we can wait for backends to exit without accepting new + * connections, and during crash reinitialization when we need to start + * listening for new connections again. The WaitEventSet will be freed in fork + * children by ClosePostmasterPorts(). */ -#ifdef HAVE_PTHREAD_IS_THREADED_NP -#endif + /* - * Initialise the masks for select() for the ports we are listening on. - * Return the number of sockets to listen on. + * Main idle loop of postmaster */ - - +#ifdef HAVE_PTHREAD_IS_THREADED_NP +#endif /* * Read a client's startup packet and do something according to it. @@ -766,49 +776,48 @@ HANDLE PostmasterHandle; #ifndef WIN32 #endif - /* - * reset_shared -- reset shared memory and semaphores + * Child processes use SIGUSR1 to notify us of 'pmsignals'. pg_ctl uses + * SIGUSR1 to ask postmaster to check for logrotate and promote files. */ +/* + * pg_ctl uses SIGHUP to request a reload of the configuration files. + */ + /* - * SIGHUP -- reread config files, and tell children to do same + * Re-read config files, and tell children to do same. */ -#ifdef WIN32 -#endif #ifdef USE_SSL #endif #ifdef EXEC_BACKEND #endif -#ifdef WIN32 -#endif + +/* + * pg_ctl uses SIGTERM, SIGINT and SIGQUIT to request different types of + * shutdown. + */ /* - * pmdie -- signal handler for processing various postmaster signals. + * Process shutdown request. */ -#ifdef WIN32 -#endif #ifdef USE_SYSTEMD #endif #ifdef USE_SYSTEMD #endif #ifdef USE_SYSTEMD #endif -#ifdef WIN32 -#endif + + /* - * Reaper -- signal handler to cleanup after a child process dies. + * Cleanup after a child process dies. */ -#ifdef WIN32 -#endif #ifdef USE_SYSTEMD #endif -#ifdef WIN32 -#endif /* * Scan the bgworkers list and see if the given PID (which has just stopped @@ -858,8 +867,9 @@ HANDLE PostmasterHandle; /* * Advance the postmaster's state machine and take actions as appropriate * - * This is common code for pmdie(), reaper() and sigusr1_handler(), which - * receive the signals that might mean we need to change state. + * This is common code for process_pm_shutdown_request(), + * process_pm_child_exit() and process_pm_pmsignal(), which process the signals + * that might mean we need to change state. */ @@ -883,6 +893,16 @@ HANDLE PostmasterHandle; #ifdef HAVE_SETSID #endif +/* + * Convenience function for killing a child process after a crash of some + * other child process. We log the action at a higher level than we would + * otherwise do, and we apply send_abort_for_crash to decide which signal + * to send. Normally it's SIGQUIT -- and most other comments in this file + * are written on the assumption that it is -- but developers might prefer + * to use SIGABRT to collect per-child core dumps. + */ + + /* * Send a signal to the targeted children (but NOT special children; * dead_end children are never signaled, either). @@ -1267,18 +1287,10 @@ internal_forkexec(int argc, char *argv[], Port *port) /* * Queue a waiter to signal when this child dies. The wait will be handled - * automatically by an operating system thread pool. - * - * Note: use malloc instead of palloc, since it needs to be thread-safe. - * Struct will be free():d from the callback function that runs on a - * different thread. + * automatically by an operating system thread pool. The memory will be + * freed by a later call to waitpid(). */ - childinfo = malloc(sizeof(win32_deadchild_waitinfo)); - if (!childinfo) - ereport(FATAL, - (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of memory"))); - + childinfo = palloc(sizeof(win32_deadchild_waitinfo)); childinfo->procHandle = pi.hProcess; childinfo->procId = pi.dwProcessId; @@ -1292,7 +1304,7 @@ internal_forkexec(int argc, char *argv[], Port *port) (errmsg_internal("could not register process for wait: error code %lu", GetLastError()))); - /* Don't close pi.hProcess here - the wait thread needs access to it */ + /* Don't close pi.hProcess here - waitpid() needs access to it */ CloseHandle(pi.hThread); @@ -1532,16 +1544,13 @@ SubPostmasterMain(int argc, char *argv[]) #endif /* - * sigusr1_handler - handle signal conditions from child processes + * Handle pmsignal conditions representing requests from backends, + * and check for promote and logrotate requests from pg_ctl. */ -#ifdef WIN32 -#endif #ifdef USE_SYSTEMD #endif #ifdef USE_SYSTEMD #endif -#ifdef WIN32 -#endif /* * SIGTERM while processing startup packet. @@ -2124,36 +2133,21 @@ ShmemBackendArrayRemove(Backend *bn) static pid_t waitpid(pid_t pid, int *exitstatus, int options) { + win32_deadchild_waitinfo *childinfo; + DWORD exitcode; DWORD dwd; ULONG_PTR key; OVERLAPPED *ovl; - /* - * Check if there are any dead children. If there are, return the pid of - * the first one that died. - */ - if (GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0)) + /* Try to consume one win32_deadchild_waitinfo from the queue. */ + if (!GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0)) { - *exitstatus = (int) key; - return dwd; + errno = EAGAIN; + return -1; } - return -1; -} - -/* - * Note! Code below executes on a thread pool! All operations must - * be thread safe! Note that elog() and friends must *not* be used. - */ -static void WINAPI -pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired) -{ - win32_deadchild_waitinfo *childinfo = (win32_deadchild_waitinfo *) lpParameter; - DWORD exitcode; - - if (TimerOrWaitFired) - return; /* timeout. Should never happen, since we use - * INFINITE as timeout value. */ + childinfo = (win32_deadchild_waitinfo *) key; + pid = childinfo->procId; /* * Remove handle from wait - required even though it's set to wait only @@ -2169,13 +2163,11 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired) write_stderr("could not read exit code for process\n"); exitcode = 255; } - - if (!PostQueuedCompletionStatus(win32ChildQueue, childinfo->procId, (ULONG_PTR) exitcode, NULL)) - write_stderr("could not post child completion status\n"); + *exitstatus = exitcode; /* - * Handle is per-process, so we close it here instead of in the - * originating thread + * Close the process handle. Only after this point can the PID can be + * recycled by the kernel. */ CloseHandle(childinfo->procHandle); @@ -2183,9 +2175,36 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired) * Free struct that was allocated before the call to * RegisterWaitForSingleObject() */ - free(childinfo); + pfree(childinfo); + + return pid; +} + +/* + * Note! Code below executes on a thread pool! All operations must + * be thread safe! Note that elog() and friends must *not* be used. + */ +static void WINAPI +pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired) +{ + /* Should never happen, since we use INFINITE as timeout value. */ + if (TimerOrWaitFired) + return; + + /* + * Post the win32_deadchild_waitinfo object for waitpid() to deal with. If + * that fails, we leak the object, but we also leak a whole process and + * get into an unrecoverable state, so there's not much point in worrying + * about that. We'd like to panic, but we can't use that infrastructure + * from this thread. + */ + if (!PostQueuedCompletionStatus(win32ChildQueue, + 0, + (ULONG_PTR) lpParameter, + NULL)) + write_stderr("could not post child completion status\n"); - /* Queue SIGCHLD signal */ + /* Queue SIGCHLD signal. */ pg_queue_signal(SIGCHLD); } #endif /* WIN32 */ diff --git a/src/postgres/src_backend_storage_ipc_ipc.c b/src/postgres/src_backend_storage_ipc_ipc.c index 09703912..b3b8cce7 100644 --- a/src/postgres/src_backend_storage_ipc_ipc.c +++ b/src/postgres/src_backend_storage_ipc_ipc.c @@ -15,7 +15,7 @@ * exit-time cleanup for either a postmaster or a backend. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_backend_storage_lmgr_s_lock.c b/src/postgres/src_backend_storage_lmgr_s_lock.c deleted file mode 100644 index 16518ef3..00000000 --- a/src/postgres/src_backend_storage_lmgr_s_lock.c +++ /dev/null @@ -1,371 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - s_lock - * - perform_spin_delay - * - spins_per_delay - * - s_lock_stuck - * - finish_spin_delay - *-------------------------------------------------------------------- - */ - -/*------------------------------------------------------------------------- - * - * s_lock.c - * Hardware-dependent implementation of spinlocks. - * - * When waiting for a contended spinlock we loop tightly for awhile, then - * delay using pg_usleep() and try again. Preferably, "awhile" should be a - * small multiple of the maximum time we expect a spinlock to be held. 100 - * iterations seems about right as an initial guess. However, on a - * uniprocessor the loop is a waste of cycles, while in a multi-CPU scenario - * it's usually better to spin a bit longer than to call the kernel, so we try - * to adapt the spin loop count depending on whether we seem to be in a - * uniprocessor or multiprocessor. - * - * Note: you might think MIN_SPINS_PER_DELAY should be just 1, but you'd - * be wrong; there are platforms where that can result in a "stuck - * spinlock" failure. This has been seen particularly on Alphas; it seems - * that the first TAS after returning from kernel space will always fail - * on that hardware. - * - * Once we do decide to block, we use randomly increasing pg_usleep() - * delays. The first delay is 1 msec, then the delay randomly increases to - * about one second, after which we reset to 1 msec and start again. The - * idea here is that in the presence of heavy contention we need to - * increase the delay, else the spinlock holder may never get to run and - * release the lock. (Consider situation where spinlock holder has been - * nice'd down in priority by the scheduler --- it will not get scheduled - * until all would-be acquirers are sleeping, so if we always use a 1-msec - * sleep, there is a real possibility of starvation.) But we can't just - * clamp the delay to an upper bound, else it would take a long time to - * make a reasonable number of tries. - * - * We time out and declare error after NUM_DELAYS delays (thus, exactly - * that many tries). With the given settings, this will usually take 2 or - * so minutes. It seems better to fix the total number of tries (and thus - * the probability of unintended failure) than to fix the total time - * spent. - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/backend/storage/lmgr/s_lock.c - * - *------------------------------------------------------------------------- - */ -#include "postgres.h" - -#include -#include - -#include "common/pg_prng.h" -#include "port/atomics.h" -#include "storage/s_lock.h" - -#define MIN_SPINS_PER_DELAY 10 -#define MAX_SPINS_PER_DELAY 1000 -#define NUM_DELAYS 1000 -#define MIN_DELAY_USEC 1000L -#define MAX_DELAY_USEC 1000000L - - - - -static __thread int spins_per_delay = DEFAULT_SPINS_PER_DELAY; - - - -/* - * s_lock_stuck() - complain about a stuck spinlock - */ -static void -s_lock_stuck(const char *file, int line, const char *func) -{ - if (!func) - func = "(unknown)"; -#if defined(S_LOCK_TEST) - fprintf(stderr, - "\nStuck spinlock detected at %s, %s:%d.\n", - func, file, line); - exit(1); -#else - elog(PANIC, "stuck spinlock detected at %s, %s:%d", - func, file, line); -#endif -} - -/* - * s_lock(lock) - platform-independent portion of waiting for a spinlock. - */ -int -s_lock(volatile slock_t *lock, const char *file, int line, const char *func) -{ - SpinDelayStatus delayStatus; - - init_spin_delay(&delayStatus, file, line, func); - - while (TAS_SPIN(lock)) - { - perform_spin_delay(&delayStatus); - } - - finish_spin_delay(&delayStatus); - - return delayStatus.delays; -} - -#ifdef USE_DEFAULT_S_UNLOCK -void -s_unlock(volatile slock_t *lock) -{ -#ifdef TAS_ACTIVE_WORD - /* HP's PA-RISC */ - *TAS_ACTIVE_WORD(lock) = -1; -#else - *lock = 0; -#endif -} -#endif - -/* - * Wait while spinning on a contended spinlock. - */ -void -perform_spin_delay(SpinDelayStatus *status) -{ - /* CPU-specific delay each time through the loop */ - SPIN_DELAY(); - - /* Block the process every spins_per_delay tries */ - if (++(status->spins) >= spins_per_delay) - { - if (++(status->delays) > NUM_DELAYS) - s_lock_stuck(status->file, status->line, status->func); - - if (status->cur_delay == 0) /* first time to delay? */ - status->cur_delay = MIN_DELAY_USEC; - - pg_usleep(status->cur_delay); - -#if defined(S_LOCK_TEST) - fprintf(stdout, "*"); - fflush(stdout); -#endif - - /* increase delay by a random fraction between 1X and 2X */ - status->cur_delay += (int) (status->cur_delay * - pg_prng_double(&pg_global_prng_state) + 0.5); - /* wrap back to minimum delay when max is exceeded */ - if (status->cur_delay > MAX_DELAY_USEC) - status->cur_delay = MIN_DELAY_USEC; - - status->spins = 0; - } -} - -/* - * After acquiring a spinlock, update estimates about how long to loop. - * - * If we were able to acquire the lock without delaying, it's a good - * indication we are in a multiprocessor. If we had to delay, it's a sign - * (but not a sure thing) that we are in a uniprocessor. Hence, we - * decrement spins_per_delay slowly when we had to delay, and increase it - * rapidly when we didn't. It's expected that spins_per_delay will - * converge to the minimum value on a uniprocessor and to the maximum - * value on a multiprocessor. - * - * Note: spins_per_delay is local within our current process. We want to - * average these observations across multiple backends, since it's - * relatively rare for this function to even get entered, and so a single - * backend might not live long enough to converge on a good value. That - * is handled by the two routines below. - */ -void -finish_spin_delay(SpinDelayStatus *status) -{ - if (status->cur_delay == 0) - { - /* we never had to delay */ - if (spins_per_delay < MAX_SPINS_PER_DELAY) - spins_per_delay = Min(spins_per_delay + 100, MAX_SPINS_PER_DELAY); - } - else - { - if (spins_per_delay > MIN_SPINS_PER_DELAY) - spins_per_delay = Max(spins_per_delay - 1, MIN_SPINS_PER_DELAY); - } -} - -/* - * Set local copy of spins_per_delay during backend startup. - * - * NB: this has to be pretty fast as it is called while holding a spinlock - */ - - -/* - * Update shared estimate of spins_per_delay during backend exit. - * - * NB: this has to be pretty fast as it is called while holding a spinlock - */ - - - -/* - * Various TAS implementations that cannot live in s_lock.h as no inline - * definition exists (yet). - * In the future, get rid of tas.[cso] and fold it into this file. - * - * If you change something here, you will likely need to modify s_lock.h too, - * because the definitions for these are split between this file and s_lock.h. - */ - - -#ifdef HAVE_SPINLOCKS /* skip spinlocks if requested */ - - -#if defined(__GNUC__) - -/* - * All the gcc flavors that are not inlined - */ - - -/* - * Note: all the if-tests here probably ought to be testing gcc version - * rather than platform, but I don't have adequate info to know what to - * write. Ideally we'd flush all this in favor of the inline version. - */ -#if defined(__m68k__) && !defined(__linux__) -/* really means: extern int tas(slock_t* **lock); */ -static void -tas_dummy() -{ - __asm__ __volatile__( -#if (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(__ELF__) -/* no underscore for label and % for registers */ - "\ -.global tas \n\ -tas: \n\ - movel %sp@(0x4),%a0 \n\ - tas %a0@ \n\ - beq _success \n\ - moveq #-128,%d0 \n\ - rts \n\ -_success: \n\ - moveq #0,%d0 \n\ - rts \n" -#else - "\ -.global _tas \n\ -_tas: \n\ - movel sp@(0x4),a0 \n\ - tas a0@ \n\ - beq _success \n\ - moveq #-128,d0 \n\ - rts \n\ -_success: \n\ - moveq #0,d0 \n\ - rts \n" -#endif /* (__NetBSD__ || __OpenBSD__) && __ELF__ */ - ); -} -#endif /* __m68k__ && !__linux__ */ -#endif /* not __GNUC__ */ -#endif /* HAVE_SPINLOCKS */ - - - -/*****************************************************************************/ -#if defined(S_LOCK_TEST) - -/* - * test program for verifying a port's spinlock support. - */ - -struct test_lock_struct -{ - char pad1; - slock_t lock; - char pad2; -}; - -volatile struct test_lock_struct test_lock; - -int -main() -{ - pg_prng_seed(&pg_global_prng_state, (uint64) time(NULL)); - - test_lock.pad1 = test_lock.pad2 = 0x44; - - S_INIT_LOCK(&test_lock.lock); - - if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) - { - printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); - return 1; - } - - if (!S_LOCK_FREE(&test_lock.lock)) - { - printf("S_LOCK_TEST: failed, lock not initialized\n"); - return 1; - } - - S_LOCK(&test_lock.lock); - - if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) - { - printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); - return 1; - } - - if (S_LOCK_FREE(&test_lock.lock)) - { - printf("S_LOCK_TEST: failed, lock not locked\n"); - return 1; - } - - S_UNLOCK(&test_lock.lock); - - if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) - { - printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); - return 1; - } - - if (!S_LOCK_FREE(&test_lock.lock)) - { - printf("S_LOCK_TEST: failed, lock not unlocked\n"); - return 1; - } - - S_LOCK(&test_lock.lock); - - if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) - { - printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); - return 1; - } - - if (S_LOCK_FREE(&test_lock.lock)) - { - printf("S_LOCK_TEST: failed, lock not re-locked\n"); - return 1; - } - - printf("S_LOCK_TEST: this will print %d stars and then\n", NUM_DELAYS); - printf(" exit with a 'stuck spinlock' message\n"); - printf(" if S_LOCK() and TAS() are working.\n"); - fflush(stdout); - - s_lock(&test_lock.lock, __FILE__, __LINE__, PG_FUNCNAME_MACRO); - - printf("S_LOCK_TEST: failed, lock not locked\n"); - return 1; -} - -#endif /* S_LOCK_TEST */ diff --git a/src/postgres/src_backend_tcop_postgres.c b/src/postgres/src_backend_tcop_postgres.c index 2ed5bad3..0cc71dbd 100644 --- a/src/postgres/src_backend_tcop_postgres.c +++ b/src/postgres/src_backend_tcop_postgres.c @@ -16,7 +16,7 @@ * postgres.c * POSTGRES C Backend Interface * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -36,17 +36,12 @@ #include #include #include +#include #include -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#ifdef HAVE_SYS_RESOURCE_H #include -#include -#endif -#ifndef HAVE_GETRUSAGE -#include "rusagestub.h" +#ifdef USE_VALGRIND +#include #endif #include "access/parallel.h" @@ -88,6 +83,7 @@ #include "tcop/pquery.h" #include "tcop/tcopprot.h" #include "tcop/utility.h" +#include "utils/guc_hooks.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/ps_status.h" @@ -150,13 +146,6 @@ static __thread long max_stack_depth_bytes = 100 * 1024L; static __thread char *stack_base_ptr = NULL; -/* - * On IA64 we also have to remember the register stack base. - */ -#if defined(__ia64__) || defined(__ia64) -static char *register_stack_base_ptr = NULL; -#endif - /* * Flag to keep track of whether we have started a transaction. * For extended query protocol this has to be remembered across messages. @@ -224,6 +213,36 @@ static void enable_statement_timeout(void); static void disable_statement_timeout(void); +/* ---------------------------------------------------------------- + * infrastructure for valgrind debugging + * ---------------------------------------------------------------- + */ +#ifdef USE_VALGRIND +/* This variable should be set at the top of the main loop. */ +static unsigned int old_valgrind_error_count; + +/* + * If Valgrind detected any errors since old_valgrind_error_count was updated, + * report the current query as the cause. This should be called at the end + * of message processing. + */ +static void +valgrind_report_error_query(const char *query) +{ + unsigned int valgrind_error_count = VALGRIND_COUNT_ERRORS; + + if (unlikely(valgrind_error_count != old_valgrind_error_count) && + query != NULL) + VALGRIND_PRINTF("Valgrind detected %u error(s) during execution of \"%s\"\n", + valgrind_error_count - old_valgrind_error_count, + query); +} + +#else /* !USE_VALGRIND */ +#define valgrind_report_error_query(query) ((void) 0) +#endif /* USE_VALGRIND */ + + /* ---------------------------------------------------------------- * routines to obtain user input * ---------------------------------------------------------------- @@ -305,6 +324,8 @@ static void disable_statement_timeout(void); */ #ifdef COPY_PARSE_PLAN_TREES #endif +#ifdef WRITE_READ_PARSE_PLAN_TREES +#endif /* * Given a raw parsetree (gram.y output), and optionally information about @@ -558,45 +579,6 @@ static void disable_statement_timeout(void); void ProcessInterrupts(void) {} - -/* - * IA64-specific code to fetch the AR.BSP register for stack depth checks. - * - * We currently support gcc, icc, and HP-UX's native compiler here. - * - * Note: while icc accepts gcc asm blocks on x86[_64], this is not true on - * ia64 (at least not in icc versions before 12.x). So we have to carry a - * separate implementation for it. - */ -#if defined(__ia64__) || defined(__ia64) - -#if defined(__hpux) && !defined(__GNUC__) && !defined(__INTEL_COMPILER) -/* Assume it's HP-UX native compiler */ -#include -#define ia64_get_bsp() ((char *) (_Asm_mov_from_ar(_AREG_BSP, _NO_FENCE))) -#elif defined(__INTEL_COMPILER) -/* icc */ -#include -#define ia64_get_bsp() ((char *) __getReg(_IA64_REG_AR_BSP)) -#else -/* gcc */ -static __inline__ char * -ia64_get_bsp(void) -{ - char *ret; - - /* the ;; is a "stop", seems to be required before fetching BSP */ - __asm__ __volatile__( - ";;\n" - " mov %0=ar.bsp \n" -: "=r"(ret)); - - return ret; -} -#endif -#endif /* IA64 */ - - /* * set_stack_base: set up reference point for stack depth checking * @@ -604,14 +586,9 @@ ia64_get_bsp(void) */ #ifndef HAVE__BUILTIN_FRAME_ADDRESS #endif -#if defined(__ia64__) || defined(__ia64) -#else -#endif #ifdef HAVE__BUILTIN_FRAME_ADDRESS #else #endif -#if defined(__ia64__) || defined(__ia64) -#endif /* * restore_stack_base: restore reference point for stack depth checking @@ -622,9 +599,7 @@ ia64_get_bsp(void) * the main thread's stack, so it sets the base pointer before the call, and * restores it afterwards. */ -#if defined(__ia64__) || defined(__ia64) -#else -#endif + /* * check_stack_depth/stack_is_too_deep: check for excessively deep recursion @@ -680,22 +655,6 @@ stack_is_too_deep(void) stack_base_ptr != NULL) return true; - /* - * On IA64 there is a separate "register" stack that requires its own - * independent check. For this, we have to measure the change in the - * "BSP" pointer from PostgresMain to here. Logic is just as above, - * except that we know IA64's register stack grows up. - * - * Note we assume that the same max_stack_depth applies to both stacks. - */ -#if defined(__ia64__) || defined(__ia64) - stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr); - - if (stack_depth > max_stack_depth_bytes && - register_stack_base_ptr != NULL) - return true; -#endif /* IA64 */ - return false; } @@ -705,6 +664,28 @@ stack_is_too_deep(void) /* GUC assign hook for max_stack_depth */ +/* + * GUC check_hook for client_connection_check_interval + */ + + +/* + * GUC check_hook for log_parser_stats, log_planner_stats, log_executor_stats + * + * This function and check_log_stats interact to prevent their variables from + * being set in a disallowed combination. This is a hack that doesn't really + * work right; for example it might fail while applying pg_db_role_setting + * values even though the final state would have been acceptable. However, + * since these variables are legacy settings with little production usage, + * we tolerate that. + */ + + +/* + * GUC check_hook for log_statement_stats + */ + + /* * set_debug_options --- apply "-d N" command line option @@ -769,7 +750,8 @@ stack_is_too_deep(void) * if reasonably possible. * ---------------------------------------------------------------- */ - +#ifdef USE_VALGRIND +#endif /* * Throw an error if we're a WAL sender process. @@ -786,11 +768,8 @@ stack_is_too_deep(void) * * Return -1 if unknown */ -#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK) -#else /* no getrlimit */ -#if defined(WIN32) || defined(__CYGWIN__) -#else /* not windows ... give up */ -#endif +#if defined(HAVE_GETRLIMIT) +#else #endif @@ -799,11 +778,11 @@ stack_is_too_deep(void) -#if defined(HAVE_GETRUSAGE) +#ifndef WIN32 #if defined(__darwin__) #else #endif -#endif /* HAVE_GETRUSAGE */ +#endif /* !WIN32 */ /* * on_proc_exit handler to log end of session diff --git a/src/postgres/src_backend_utils_activity_pgstat_database.c b/src/postgres/src_backend_utils_activity_pgstat_database.c index e6ce060f..6b5d6b48 100644 --- a/src/postgres/src_backend_utils_activity_pgstat_database.c +++ b/src/postgres/src_backend_utils_activity_pgstat_database.c @@ -14,7 +14,7 @@ * storage implementation and the details about individual types of * statistics. * - * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Copyright (c) 2001-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/backend/utils/activity/pgstat_database.c diff --git a/src/postgres/src_backend_utils_adt_datum.c b/src/postgres/src_backend_utils_adt_datum.c index 853ef924..9243506b 100644 --- a/src/postgres/src_backend_utils_adt_datum.c +++ b/src/postgres/src_backend_utils_adt_datum.c @@ -11,7 +11,7 @@ * datum.c * POSTGRES Datum (abstract data type) manipulation routines. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -51,6 +51,7 @@ #include "postgres.h" #include "access/detoast.h" +#include "catalog/pg_type_d.h" #include "common/hashfn.h" #include "fmgr.h" #include "utils/builtins.h" @@ -283,12 +284,9 @@ datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen) * datum_image_eq() in all cases can use this as their "equalimage" support * function. * - * Currently, we unconditionally assume that any B-Tree operator class that - * registers btequalimage as its support function 4 must be able to safely use - * optimizations like deduplication (i.e. we return true unconditionally). If - * it ever proved necessary to rescind support for an operator class, we could - * do that in a targeted fashion by doing something with the opcintype - * argument. + * Earlier minor releases erroneously associated this function with + * interval_ops. Detect that case to rescind deduplication support, without + * requiring initdb. *------------------------------------------------------------------------- */ diff --git a/src/postgres/src_backend_utils_adt_expandeddatum.c b/src/postgres/src_backend_utils_adt_expandeddatum.c index f4c8fcd2..3738f993 100644 --- a/src/postgres/src_backend_utils_adt_expandeddatum.c +++ b/src/postgres/src_backend_utils_adt_expandeddatum.c @@ -11,7 +11,7 @@ * expandeddatum.c * Support functions for "expanded" value representations. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_backend_utils_adt_format_type.c b/src/postgres/src_backend_utils_adt_format_type.c index db7a7412..753f9c17 100644 --- a/src/postgres/src_backend_utils_adt_format_type.c +++ b/src/postgres/src_backend_utils_adt_format_type.c @@ -10,7 +10,7 @@ * Display type names "nicely". * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/postgres/src_backend_utils_adt_numutils.c b/src/postgres/src_backend_utils_adt_numutils.c new file mode 100644 index 00000000..162dc380 --- /dev/null +++ b/src/postgres/src_backend_utils_adt_numutils.c @@ -0,0 +1,489 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - pg_strtoint32_safe + * - hexlookup + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * numutils.c + * utility functions for I/O of built-in numeric types. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/utils/adt/numutils.c + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include +#include +#include + +#include "common/int.h" +#include "utils/builtins.h" +#include "port/pg_bitutils.h" + +/* + * A table of all two-digit numbers. This is used to speed up decimal digit + * generation by copying pairs of digits into the final output. + */ + + +/* + * Adapted from http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 + */ + + + + +static const int8 hexlookup[128] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -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, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; + +/* + * Convert input string to a signed 16 bit integer. Input strings may be + * expressed in base-10, hexadecimal, octal, or binary format, all of which + * can be prefixed by an optional sign character, either '+' (the default) or + * '-' for negative numbers. Hex strings are recognized by the digits being + * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O + * prefix. The binary representation is recognized by the 0b or 0B prefix. + * + * Allows any number of leading or trailing whitespace characters. Digits may + * optionally be separated by a single underscore character. These can only + * come between digits and not before or after the digits. Underscores have + * no effect on the return value and are supported only to assist in improving + * the human readability of the input strings. + * + * pg_strtoint16() will throw ereport() upon bad input format or overflow; + * while pg_strtoint16_safe() instead returns such complaints in *escontext, + * if it's an ErrorSaveContext. +* + * NB: Accumulate input as an unsigned number, to deal with two's complement + * representation of the most negative number, which can't be represented as a + * signed positive number. + */ + + + + +/* + * Convert input string to a signed 32 bit integer. Input strings may be + * expressed in base-10, hexadecimal, octal, or binary format, all of which + * can be prefixed by an optional sign character, either '+' (the default) or + * '-' for negative numbers. Hex strings are recognized by the digits being + * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O + * prefix. The binary representation is recognized by the 0b or 0B prefix. + * + * Allows any number of leading or trailing whitespace characters. Digits may + * optionally be separated by a single underscore character. These can only + * come between digits and not before or after the digits. Underscores have + * no effect on the return value and are supported only to assist in improving + * the human readability of the input strings. + * + * pg_strtoint32() will throw ereport() upon bad input format or overflow; + * while pg_strtoint32_safe() instead returns such complaints in *escontext, + * if it's an ErrorSaveContext. + * + * NB: Accumulate input as an unsigned number, to deal with two's complement + * representation of the most negative number, which can't be represented as a + * signed positive number. + */ + + +int32 +pg_strtoint32_safe(const char *s, Node *escontext) +{ + const char *ptr = s; + const char *firstdigit; + uint32 tmp = 0; + bool neg = false; + unsigned char digit; + + /* + * The majority of cases are likely to be base-10 digits without any + * underscore separator characters. We'll first try to parse the string + * with the assumption that's the case and only fallback on a slower + * implementation which handles hex, octal and binary strings and + * underscores if the fastpath version cannot parse the string. + */ + + /* leave it up to the slow path to look for leading spaces */ + + if (*ptr == '-') + { + ptr++; + neg = true; + } + + /* a leading '+' is uncommon so leave that for the slow path */ + + /* process the first digit */ + digit = (*ptr - '0'); + + /* + * Exploit unsigned arithmetic to save having to check both the upper and + * lower bounds of the digit. + */ + if (likely(digit < 10)) + { + ptr++; + tmp = digit; + } + else + { + /* we need at least one digit */ + goto slow; + } + + /* process remaining digits */ + for (;;) + { + digit = (*ptr - '0'); + + if (digit >= 10) + break; + + ptr++; + + if (unlikely(tmp > -(PG_INT32_MIN / 10))) + goto out_of_range; + + tmp = tmp * 10 + digit; + } + + /* when the string does not end in a digit, let the slow path handle it */ + if (unlikely(*ptr != '\0')) + goto slow; + + if (neg) + { + /* check the negative equivalent will fit without overflowing */ + if (unlikely(tmp > (uint32) (-(PG_INT32_MIN + 1)) + 1)) + goto out_of_range; + return -((int32) tmp); + } + + if (unlikely(tmp > PG_INT32_MAX)) + goto out_of_range; + + return (int32) tmp; + +slow: + tmp = 0; + ptr = s; + /* no need to reset neg */ + + /* skip leading spaces */ + while (isspace((unsigned char) *ptr)) + ptr++; + + /* handle sign */ + if (*ptr == '-') + { + ptr++; + neg = true; + } + else if (*ptr == '+') + ptr++; + + /* process digits */ + if (ptr[0] == '0' && (ptr[1] == 'x' || ptr[1] == 'X')) + { + firstdigit = ptr += 2; + + for (;;) + { + if (isxdigit((unsigned char) *ptr)) + { + if (unlikely(tmp > -(PG_INT32_MIN / 16))) + goto out_of_range; + + tmp = tmp * 16 + hexlookup[(unsigned char) *ptr++]; + } + else if (*ptr == '_') + { + /* underscore must be followed by more digits */ + ptr++; + if (*ptr == '\0' || !isxdigit((unsigned char) *ptr)) + goto invalid_syntax; + } + else + break; + } + } + else if (ptr[0] == '0' && (ptr[1] == 'o' || ptr[1] == 'O')) + { + firstdigit = ptr += 2; + + for (;;) + { + if (*ptr >= '0' && *ptr <= '7') + { + if (unlikely(tmp > -(PG_INT32_MIN / 8))) + goto out_of_range; + + tmp = tmp * 8 + (*ptr++ - '0'); + } + else if (*ptr == '_') + { + /* underscore must be followed by more digits */ + ptr++; + if (*ptr == '\0' || *ptr < '0' || *ptr > '7') + goto invalid_syntax; + } + else + break; + } + } + else if (ptr[0] == '0' && (ptr[1] == 'b' || ptr[1] == 'B')) + { + firstdigit = ptr += 2; + + for (;;) + { + if (*ptr >= '0' && *ptr <= '1') + { + if (unlikely(tmp > -(PG_INT32_MIN / 2))) + goto out_of_range; + + tmp = tmp * 2 + (*ptr++ - '0'); + } + else if (*ptr == '_') + { + /* underscore must be followed by more digits */ + ptr++; + if (*ptr == '\0' || *ptr < '0' || *ptr > '1') + goto invalid_syntax; + } + else + break; + } + } + else + { + firstdigit = ptr; + + for (;;) + { + if (*ptr >= '0' && *ptr <= '9') + { + if (unlikely(tmp > -(PG_INT32_MIN / 10))) + goto out_of_range; + + tmp = tmp * 10 + (*ptr++ - '0'); + } + else if (*ptr == '_') + { + /* underscore may not be first */ + if (unlikely(ptr == firstdigit)) + goto invalid_syntax; + /* and it must be followed by more digits */ + ptr++; + if (*ptr == '\0' || !isdigit((unsigned char) *ptr)) + goto invalid_syntax; + } + else + break; + } + } + + /* require at least one digit */ + if (unlikely(ptr == firstdigit)) + goto invalid_syntax; + + /* allow trailing whitespace, but not other trailing chars */ + while (isspace((unsigned char) *ptr)) + ptr++; + + if (unlikely(*ptr != '\0')) + goto invalid_syntax; + + if (neg) + { + /* check the negative equivalent will fit without overflowing */ + if (tmp > (uint32) (-(PG_INT32_MIN + 1)) + 1) + goto out_of_range; + return -((int32) tmp); + } + + if (tmp > PG_INT32_MAX) + goto out_of_range; + + return (int32) tmp; + +out_of_range: + ereturn(escontext, 0, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("value \"%s\" is out of range for type %s", + s, "integer"))); + +invalid_syntax: + ereturn(escontext, 0, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("invalid input syntax for type %s: \"%s\"", + "integer", s))); +} + +/* + * Convert input string to a signed 64 bit integer. Input strings may be + * expressed in base-10, hexadecimal, octal, or binary format, all of which + * can be prefixed by an optional sign character, either '+' (the default) or + * '-' for negative numbers. Hex strings are recognized by the digits being + * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O + * prefix. The binary representation is recognized by the 0b or 0B prefix. + * + * Allows any number of leading or trailing whitespace characters. Digits may + * optionally be separated by a single underscore character. These can only + * come between digits and not before or after the digits. Underscores have + * no effect on the return value and are supported only to assist in improving + * the human readability of the input strings. + * + * pg_strtoint64() will throw ereport() upon bad input format or overflow; + * while pg_strtoint64_safe() instead returns such complaints in *escontext, + * if it's an ErrorSaveContext. + * + * NB: Accumulate input as an unsigned number, to deal with two's complement + * representation of the most negative number, which can't be represented as a + * signed positive number. + */ + + + + +/* + * Convert input string to an unsigned 32 bit integer. + * + * Allows any number of leading or trailing whitespace characters. + * + * If endloc isn't NULL, store a pointer to the rest of the string there, + * so that caller can parse the rest. Otherwise, it's an error if anything + * but whitespace follows. + * + * typname is what is reported in error messges. + * + * If escontext points to an ErrorSaveContext node, that is filled instead + * of throwing an error; the caller must check SOFT_ERROR_OCCURRED() + * to detect errors. + */ +#if PG_UINT32_MAX != ULONG_MAX +#endif + +/* + * Convert input string to an unsigned 64 bit integer. + * + * Allows any number of leading or trailing whitespace characters. + * + * If endloc isn't NULL, store a pointer to the rest of the string there, + * so that caller can parse the rest. Otherwise, it's an error if anything + * but whitespace follows. + * + * typname is what is reported in error messges. + * + * If escontext points to an ErrorSaveContext node, that is filled instead + * of throwing an error; the caller must check SOFT_ERROR_OCCURRED() + * to detect errors. + */ + + +/* + * pg_itoa: converts a signed 16-bit integer to its string representation + * and returns strlen(a). + * + * Caller must ensure that 'a' points to enough memory to hold the result + * (at least 7 bytes, counting a leading sign and trailing NUL). + * + * It doesn't seem worth implementing this separately. + */ + + +/* + * pg_ultoa_n: converts an unsigned 32-bit integer to its string representation, + * not NUL-terminated, and returns the length of that string representation + * + * Caller must ensure that 'a' points to enough memory to hold the result (at + * least 10 bytes) + */ + + +/* + * pg_ltoa: converts a signed 32-bit integer to its string representation and + * returns strlen(a). + * + * It is the caller's responsibility to ensure that a is at least 12 bytes long, + * which is enough room to hold a minus sign, a maximally long int32, and the + * above terminating NUL. + */ + + +/* + * Get the decimal representation, not NUL-terminated, and return the length of + * same. Caller must ensure that a points to at least MAXINT8LEN bytes. + */ + + +/* + * pg_lltoa: converts a signed 64-bit integer to its string representation and + * returns strlen(a). + * + * Caller must ensure that 'a' points to enough memory to hold the result + * (at least MAXINT8LEN + 1 bytes, counting a leading sign and trailing NUL). + */ + + + +/* + * pg_ultostr_zeropad + * Converts 'value' into a decimal string representation stored at 'str'. + * 'minwidth' specifies the minimum width of the result; any extra space + * is filled up by prefixing the number with zeros. + * + * Returns the ending address of the string result (the last character written + * plus 1). Note that no NUL terminator is written. + * + * The intended use-case for this function is to build strings that contain + * multiple individual numbers, for example: + * + * str = pg_ultostr_zeropad(str, hours, 2); + * *str++ = ':'; + * str = pg_ultostr_zeropad(str, mins, 2); + * *str++ = ':'; + * str = pg_ultostr_zeropad(str, secs, 2); + * *str = '\0'; + * + * Note: Caller must ensure that 'str' points to enough memory to hold the + * result. + */ + + +/* + * pg_ultostr + * Converts 'value' into a decimal string representation stored at 'str'. + * + * Returns the ending address of the string result (the last character written + * plus 1). Note that no NUL terminator is written. + * + * The intended use-case for this function is to build strings that contain + * multiple individual numbers, for example: + * + * str = pg_ultostr(str, a); + * *str++ = ' '; + * str = pg_ultostr(str, b); + * *str = '\0'; + * + * Note: Caller must ensure that 'str' points to enough memory to hold the + * result. + */ + diff --git a/src/postgres/src_backend_utils_adt_ruleutils.c b/src/postgres/src_backend_utils_adt_ruleutils.c index c0974812..92579913 100644 --- a/src/postgres/src_backend_utils_adt_ruleutils.c +++ b/src/postgres/src_backend_utils_adt_ruleutils.c @@ -11,7 +11,7 @@ * Functions to convert stored expressions/querytrees back to * source text * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -419,6 +419,8 @@ static void get_update_query_targetlist_def(Query *query, List *targetList, RangeTblEntry *rte); static void get_delete_query_def(Query *query, deparse_context *context, bool colNamesVisible); +static void get_merge_query_def(Query *query, deparse_context *context, + bool colNamesVisible); static void get_utility_query_def(Query *query, deparse_context *context); static void get_basic_select_query(Query *query, deparse_context *context, TupleDesc resultDesc, bool colNamesVisible); @@ -465,9 +467,15 @@ static void get_func_expr(FuncExpr *expr, deparse_context *context, bool showimplicit); static void get_agg_expr(Aggref *aggref, deparse_context *context, Aggref *original_aggref); +static void get_agg_expr_helper(Aggref *aggref, deparse_context *context, + Aggref *original_aggref, const char *funcname, + const char *options, bool is_json_objectagg); static void get_agg_combine_expr(Node *node, deparse_context *context, void *callback_arg); static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context); +static void get_windowfunc_expr_helper(WindowFunc *wfunc, deparse_context *context, + const char *funcname, const char *options, + bool is_json_objectagg); static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context); static void get_coercion_expr(Node *arg, deparse_context *context, Oid resulttype, int32 resulttypmod, @@ -475,6 +483,15 @@ static void get_coercion_expr(Node *arg, deparse_context *context, static void get_const_expr(Const *constval, deparse_context *context, int showtype); static void get_const_collation(Const *constval, deparse_context *context); +static void get_json_format(JsonFormat *format, StringInfo buf); +static void get_json_constructor(JsonConstructorExpr *ctor, + deparse_context *context, bool showimplicit); +static void get_json_constructor_options(JsonConstructorExpr *ctor, + StringInfo buf); +static void get_json_agg_constructor(JsonConstructorExpr *ctor, + deparse_context *context, + const char *funcname, + bool is_json_objectagg); static void simple_quote_literal(StringInfo buf, const char *val); static void get_sublink_expr(SubLink *sublink, deparse_context *context); static void get_tablefunc(TableFunc *tf, deparse_context *context, @@ -483,6 +500,8 @@ static void get_from_clause(Query *query, const char *prefix, deparse_context *context); static void get_from_clause_item(Node *jtnode, Query *query, deparse_context *context); +static void get_rte_alias(RangeTblEntry *rte, int varno, bool use_as, + deparse_context *context); static void get_column_alias_list(deparse_columns *colinfo, deparse_context *context); static void get_from_clause_coldeflist(RangeTblFunction *rtfunc, @@ -584,6 +603,9 @@ static void get_reloptions(StringInfo buf, Datum reloptions); /* Internal version that just reports the key-column definitions */ +/* Internal version, extensible with flags to control its behavior */ + + /* * Internal workhorse to decompile an index definition. * @@ -637,7 +659,7 @@ static void get_reloptions(StringInfo buf, Datum reloptions); * * Returns the partition key specification, ie, the following: * - * PARTITION BY { RANGE | LIST | HASH } (column opt_collation opt_opclass [, ...]) + * { RANGE | LIST | HASH } (column opt_collation opt_opclass [, ...]) */ @@ -744,8 +766,8 @@ static void get_reloptions(StringInfo buf, Datum reloptions); * * Note: if you change the output format of this function, be careful not * to break psql's rules (in \ef and \sf) for identifying the start of the - * function body. To wit: the function body starts on a line that begins - * with "AS ", and no preceding line will look like that. + * function body. To wit: the function body starts on a line that begins with + * "AS ", "BEGIN ", or "RETURN ", and no preceding line will look like that. */ @@ -1214,6 +1236,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions); +/* ---------- + * get_merge_query_def - Parse back a MERGE parsetree + * ---------- + */ + + + /* ---------- * get_utility_query_def - Parse back a UTILITY parsetree * ---------- @@ -1413,6 +1442,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions); */ +/* + * get_agg_expr_helper - subroutine for get_agg_expr and + * get_json_agg_constructor + */ + + /* * This is a helper function for get_agg_expr(). It's used when we deparse * a combining Aggref; resolve_special_varno locates the corresponding partial @@ -1425,6 +1460,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions); */ + +/* + * get_windowfunc_expr_helper - subroutine for get_windowfunc_expr and + * get_json_agg_constructor + */ + + /* * get_func_sql_syntax - Parse back a SQL-syntax function call * @@ -1463,6 +1505,31 @@ static void get_reloptions(StringInfo buf, Datum reloptions); */ +/* + * get_json_format - Parse back a JsonFormat node + */ + + +/* + * get_json_returning - Parse back a JsonReturning structure + */ + + +/* + * get_json_constructor - Parse back a JsonConstructorExpr node + */ + + +/* + * Append options, if any, to the JSON constructor being deparsed + */ + + +/* + * get_json_agg_constructor - Parse back an aggregate JsonConstructorExpr node + */ + + /* * simple_quote_literal - Format a string as a SQL literal, append to buf */ @@ -1494,6 +1561,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions); +/* + * get_rte_alias - print the relation's alias, if needed + * + * If printed, the alias is preceded by a space, or by " AS " if use_as is true. + */ + + /* * get_column_alias_list - print column alias list for an RTE * @@ -1533,7 +1607,7 @@ static void get_reloptions(StringInfo buf, Datum reloptions); /* * generate_opclass_name - * Compute the name to display for a opclass specified by OID + * Compute the name to display for an opclass specified by OID * * The result includes all necessary quoting and schema-prefixing. */ diff --git a/src/postgres/src_backend_utils_error_assert.c b/src/postgres/src_backend_utils_error_assert.c index 1533e5e6..869d2eb9 100644 --- a/src/postgres/src_backend_utils_error_assert.c +++ b/src/postgres/src_backend_utils_error_assert.c @@ -9,7 +9,7 @@ * assert.c * Assert support code. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -34,20 +34,17 @@ */ void ExceptionalCondition(const char *conditionName, - const char *errorType, const char *fileName, int lineNumber) { /* Report the failure on stderr (or local equivalent) */ if (!PointerIsValid(conditionName) - || !PointerIsValid(fileName) - || !PointerIsValid(errorType)) + || !PointerIsValid(fileName)) write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n", (int) getpid()); else - write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n", - errorType, conditionName, - fileName, lineNumber, (int) getpid()); + write_stderr("TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n", + conditionName, fileName, lineNumber, (int) getpid()); /* Usually this shouldn't be needed, but make sure the msg went out */ fflush(stderr); diff --git a/src/postgres/src_backend_utils_error_elog.c b/src/postgres/src_backend_utils_error_elog.c index 6dfd560b..c0c67340 100644 --- a/src/postgres/src_backend_utils_error_elog.c +++ b/src/postgres/src_backend_utils_error_elog.c @@ -13,6 +13,8 @@ * - is_log_level_output * - should_output_to_client * - recursion_depth + * - get_error_stack_entry + * - set_stack_entry_domain * - errmsg_internal * - errcode * - errmsg @@ -25,9 +27,14 @@ * - emit_log_hook * - send_message_to_server_log * - send_message_to_frontend + * - set_stack_entry_location * - matches_backtrace_functions + * - backtrace_symbol_list * - set_backtrace + * - FreeErrorDataContents * - geterrcode + * - errsave_start + * - errsave_finish * - errhint * - errposition * - internalerrposition @@ -86,7 +93,7 @@ * overflow.) * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -114,6 +121,7 @@ #include "libpq/libpq.h" #include "libpq/pqformat.h" #include "mb/pg_wchar.h" +#include "nodes/miscnodes.h" #include "miscadmin.h" #include "pgstat.h" #include "postmaster/bgworker.h" @@ -122,9 +130,10 @@ #include "storage/ipc.h" #include "storage/proc.h" #include "tcop/tcopprot.h" -#include "utils/guc.h" +#include "utils/guc_hooks.h" #include "utils/memutils.h" #include "utils/ps_status.h" +#include "utils/varlena.h" /* In this module, access gettext() via err_gettext() */ @@ -159,6 +168,10 @@ __thread emit_log_hook_type emit_log_hook = NULL; +/* Processed form of backtrace_symbols GUC */ +static __thread char *backtrace_symbol_list; + + #ifdef HAVE_SYSLOG /* @@ -221,10 +234,17 @@ static __thread int recursion_depth = 0; static const char *err_gettext(const char *str) pg_attribute_format_arg(1); +static ErrorData *get_error_stack_entry(void); +static void set_stack_entry_domain(ErrorData *edata, const char *domain); +static void set_stack_entry_location(ErrorData *edata, + const char *filename, int lineno, + const char *funcname); +static bool matches_backtrace_functions(const char *funcname); static pg_noinline void set_backtrace(ErrorData *edata, int num_skip); static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str); +static void FreeErrorDataContents(ErrorData *edata); static void write_console(const char *line, int len); -static const char *process_log_prefix_padding(const char *p, int *padding); +static const char *process_log_prefix_padding(const char *p, int *ppadding); static void log_line_prefix(StringInfo buf, ErrorData *edata); static void send_message_to_server_log(ErrorData *edata); static void send_message_to_frontend(ErrorData *edata); @@ -468,27 +488,13 @@ errstart(int elevel, const char *domain) debug_query_string = NULL; } } - if (++errordata_stack_depth >= ERRORDATA_STACK_SIZE) - { - /* - * Wups, stack not big enough. We treat this as a PANIC condition - * because it suggests an infinite loop of errors during error - * recovery. - */ - errordata_stack_depth = -1; /* make room on stack */ - ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded"))); - } /* Initialize data for this error frame */ - edata = &errordata[errordata_stack_depth]; - MemSet(edata, 0, sizeof(ErrorData)); + edata = get_error_stack_entry(); edata->elevel = elevel; edata->output_to_server = output_to_server; edata->output_to_client = output_to_client; - /* the default text domain is the backend's */ - edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres"); - /* initialize context_domain the same way (see set_errcontext_domain()) */ - edata->context_domain = edata->domain; + set_stack_entry_domain(edata, domain); /* Select default errcode based on elevel */ if (elevel >= ERROR) edata->sqlerrcode = ERRCODE_INTERNAL_ERROR; @@ -496,8 +502,6 @@ errstart(int elevel, const char *domain) edata->sqlerrcode = ERRCODE_WARNING; else edata->sqlerrcode = ERRCODE_SUCCESSFUL_COMPLETION; - /* errno is saved here so that error parameter eval can't change it */ - edata->saved_errno = errno; /* * Any allocations for this error state level should go into ErrorContext @@ -508,32 +512,6 @@ errstart(int elevel, const char *domain) return true; } -/* - * Checks whether the given funcname matches backtrace_functions; see - * check_backtrace_functions. - */ -static bool -matches_backtrace_functions(const char *funcname) -{ - char *p; - - if (!backtrace_symbol_list || funcname == NULL || funcname[0] == '\0') - return false; - - p = backtrace_symbol_list; - for (;;) - { - if (*p == '\0') /* end of backtrace_symbol_list */ - break; - - if (strcmp(funcname, p) == 0) - return true; - p += strlen(p) + 1; - } - - return false; -} - /* * errfinish --- end an error-reporting cycle * @@ -554,23 +532,7 @@ errfinish(const char *filename, int lineno, const char *funcname) CHECK_STACK_DEPTH(); /* Save the last few bits of error state into the stack entry */ - if (filename) - { - const char *slash; - - /* keep only base name, useful especially for vpath builds */ - slash = strrchr(filename, '/'); - if (slash) - filename = slash + 1; - /* Some Windows compilers use backslashes in __FILE__ strings */ - slash = strrchr(filename, '\\'); - if (slash) - filename = slash + 1; - } - - edata->filename = filename; - edata->lineno = lineno; - edata->funcname = funcname; + set_stack_entry_location(edata, filename, lineno, funcname); elevel = edata->elevel; @@ -580,6 +542,7 @@ errfinish(const char *filename, int lineno, const char *funcname) */ oldcontext = MemoryContextSwitchTo(ErrorContext); + /* Collect backtrace, if enabled and we didn't already */ if (!edata->backtrace && edata->funcname && backtrace_functions && @@ -630,31 +593,7 @@ errfinish(const char *filename, int lineno, const char *funcname) EmitErrorReport(); /* Now free up subsidiary data attached to stack entry, and release it */ - if (edata->message) - pfree(edata->message); - if (edata->detail) - pfree(edata->detail); - if (edata->detail_log) - pfree(edata->detail_log); - if (edata->hint) - pfree(edata->hint); - if (edata->context) - pfree(edata->context); - if (edata->backtrace) - pfree(edata->backtrace); - if (edata->schema_name) - pfree(edata->schema_name); - if (edata->table_name) - pfree(edata->table_name); - if (edata->column_name) - pfree(edata->column_name); - if (edata->datatype_name) - pfree(edata->datatype_name); - if (edata->constraint_name) - pfree(edata->constraint_name); - if (edata->internalquery) - pfree(edata->internalquery); - + FreeErrorDataContents(edata); errordata_stack_depth--; /* Exit error-handling context */ @@ -681,8 +620,7 @@ errfinish(const char *filename, int lineno, const char *funcname) * Any other code you might be tempted to add here should probably be * in an on_proc_exit or on_shmem_exit callback instead. */ - fflush(stdout); - fflush(stderr); + fflush(NULL); /* * Let the cumulative stats system know. Only mark the session as @@ -708,8 +646,7 @@ errfinish(const char *filename, int lineno, const char *funcname) * XXX: what if we are *in* the postmaster? abort() won't kill our * children... */ - fflush(stdout); - fflush(stderr); + fflush(NULL); abort(); } @@ -722,6 +659,242 @@ errfinish(const char *filename, int lineno, const char *funcname) } +/* + * errsave_start --- begin a "soft" error-reporting cycle + * + * If "context" isn't an ErrorSaveContext node, this behaves as + * errstart(ERROR, domain), and the errsave() macro ends up acting + * exactly like ereport(ERROR, ...). + * + * If "context" is an ErrorSaveContext node, but the node creator only wants + * notification of the fact of a soft error without any details, we just set + * the error_occurred flag in the ErrorSaveContext node and return false, + * which will cause us to skip the remaining error processing steps. + * + * Otherwise, create and initialize error stack entry and return true. + * Subsequently, errmsg() and perhaps other routines will be called to further + * populate the stack entry. Finally, errsave_finish() will be called to + * tidy up. + */ +bool +errsave_start(struct Node *context, const char *domain) +{ + ErrorSaveContext *escontext; + ErrorData *edata; + + /* + * Do we have a context for soft error reporting? If not, just punt to + * errstart(). + */ + if (context == NULL || !IsA(context, ErrorSaveContext)) + return errstart(ERROR, domain); + + /* Report that a soft error was detected */ + escontext = (ErrorSaveContext *) context; + escontext->error_occurred = true; + + /* Nothing else to do if caller wants no further details */ + if (!escontext->details_wanted) + return false; + + /* + * Okay, crank up a stack entry to store the info in. + */ + + recursion_depth++; + + /* Initialize data for this error frame */ + edata = get_error_stack_entry(); + edata->elevel = LOG; /* signal all is well to errsave_finish */ + set_stack_entry_domain(edata, domain); + /* Select default errcode based on the assumed elevel of ERROR */ + edata->sqlerrcode = ERRCODE_INTERNAL_ERROR; + + /* + * Any allocations for this error state level should go into the caller's + * context. We don't need to pollute ErrorContext, or even require it to + * exist, in this code path. + */ + edata->assoc_context = CurrentMemoryContext; + + recursion_depth--; + return true; +} + +/* + * errsave_finish --- end a "soft" error-reporting cycle + * + * If errsave_start() decided this was a regular error, behave as + * errfinish(). Otherwise, package up the error details and save + * them in the ErrorSaveContext node. + */ +void +errsave_finish(struct Node *context, const char *filename, int lineno, + const char *funcname) +{ + ErrorSaveContext *escontext = (ErrorSaveContext *) context; + ErrorData *edata = &errordata[errordata_stack_depth]; + + /* verify stack depth before accessing *edata */ + CHECK_STACK_DEPTH(); + + /* + * If errsave_start punted to errstart, then elevel will be ERROR or + * perhaps even PANIC. Punt likewise to errfinish. + */ + if (edata->elevel >= ERROR) + { + errfinish(filename, lineno, funcname); + pg_unreachable(); + } + + /* + * Else, we should package up the stack entry contents and deliver them to + * the caller. + */ + recursion_depth++; + + /* Save the last few bits of error state into the stack entry */ + set_stack_entry_location(edata, filename, lineno, funcname); + + /* Replace the LOG value that errsave_start inserted */ + edata->elevel = ERROR; + + /* + * We skip calling backtrace and context functions, which are more likely + * to cause trouble than provide useful context; they might act on the + * assumption that a transaction abort is about to occur. + */ + + /* + * Make a copy of the error info for the caller. All the subsidiary + * strings are already in the caller's context, so it's sufficient to + * flat-copy the stack entry. + */ + escontext->error_data = palloc_object(ErrorData); + memcpy(escontext->error_data, edata, sizeof(ErrorData)); + + /* Exit error-handling context */ + errordata_stack_depth--; + recursion_depth--; +} + + +/* + * get_error_stack_entry --- allocate and initialize a new stack entry + * + * The entry should be freed, when we're done with it, by calling + * FreeErrorDataContents() and then decrementing errordata_stack_depth. + * + * Returning the entry's address is just a notational convenience, + * since it had better be errordata[errordata_stack_depth]. + * + * Although the error stack is not large, we don't expect to run out of space. + * Using more than one entry implies a new error report during error recovery, + * which is possible but already suggests we're in trouble. If we exhaust the + * stack, almost certainly we are in an infinite loop of errors during error + * recovery, so we give up and PANIC. + * + * (Note that this is distinct from the recursion_depth checks, which + * guard against recursion while handling a single stack entry.) + */ +static ErrorData * +get_error_stack_entry(void) +{ + ErrorData *edata; + + /* Allocate error frame */ + errordata_stack_depth++; + if (unlikely(errordata_stack_depth >= ERRORDATA_STACK_SIZE)) + { + /* Wups, stack not big enough */ + errordata_stack_depth = -1; /* make room on stack */ + ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded"))); + } + + /* Initialize error frame to all zeroes/NULLs */ + edata = &errordata[errordata_stack_depth]; + memset(edata, 0, sizeof(ErrorData)); + + /* Save errno immediately to ensure error parameter eval can't change it */ + edata->saved_errno = errno; + + return edata; +} + +/* + * set_stack_entry_domain --- fill in the internationalization domain + */ +static void +set_stack_entry_domain(ErrorData *edata, const char *domain) +{ + /* the default text domain is the backend's */ + edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres"); + /* initialize context_domain the same way (see set_errcontext_domain()) */ + edata->context_domain = edata->domain; +} + +/* + * set_stack_entry_location --- fill in code-location details + * + * Store the values of __FILE__, __LINE__, and __func__ from the call site. + * We make an effort to normalize __FILE__, since compilers are inconsistent + * about how much of the path they'll include, and we'd prefer that the + * behavior not depend on that (especially, that it not vary with build path). + */ +static void +set_stack_entry_location(ErrorData *edata, + const char *filename, int lineno, + const char *funcname) +{ + if (filename) + { + const char *slash; + + /* keep only base name, useful especially for vpath builds */ + slash = strrchr(filename, '/'); + if (slash) + filename = slash + 1; + /* Some Windows compilers use backslashes in __FILE__ strings */ + slash = strrchr(filename, '\\'); + if (slash) + filename = slash + 1; + } + + edata->filename = filename; + edata->lineno = lineno; + edata->funcname = funcname; +} + +/* + * matches_backtrace_functions --- checks whether the given funcname matches + * backtrace_functions + * + * See check_backtrace_functions. + */ +static bool +matches_backtrace_functions(const char *funcname) +{ + const char *p; + + if (!backtrace_symbol_list || funcname == NULL || funcname[0] == '\0') + return false; + + p = backtrace_symbol_list; + for (;;) + { + if (*p == '\0') /* end of backtrace_symbol_list */ + break; + + if (strcmp(funcname, p) == 0) + return true; + p += strlen(p) + 1; + } + + return false; +} + + /* * errcode --- add SQLSTATE error code to the current error * @@ -1391,6 +1564,40 @@ CopyErrorData(void) */ +/* + * FreeErrorDataContents --- free the subsidiary data of an ErrorData. + * + * This can be used on either an error stack entry or a copied ErrorData. + */ +static void +FreeErrorDataContents(ErrorData *edata) +{ + if (edata->message) + pfree(edata->message); + if (edata->detail) + pfree(edata->detail); + if (edata->detail_log) + pfree(edata->detail_log); + if (edata->hint) + pfree(edata->hint); + if (edata->context) + pfree(edata->context); + if (edata->backtrace) + pfree(edata->backtrace); + if (edata->schema_name) + pfree(edata->schema_name); + if (edata->table_name) + pfree(edata->table_name); + if (edata->column_name) + pfree(edata->column_name); + if (edata->datatype_name) + pfree(edata->datatype_name); + if (edata->constraint_name) + pfree(edata->constraint_name); + if (edata->internalquery) + pfree(edata->internalquery); +} + /* * FlushErrorState --- flush the error state after error recovery * @@ -1479,8 +1686,7 @@ pg_re_throw(void) } /* Doesn't return ... */ - ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion", - __FILE__, __LINE__); + ExceptionalCondition("pg_re_throw tried to return", __FILE__, __LINE__); } @@ -1504,13 +1710,49 @@ pg_re_throw(void) +/* + * GUC check_hook for backtrace_functions + * + * We split the input string, where commas separate function names + * and certain whitespace chars are ignored, into a \0-separated (and + * \0\0-terminated) list of function names. This formulation allows + * easy scanning when an error is thrown while avoiding the use of + * non-reentrant strtok(), as well as keeping the output data in a + * single palloc() chunk. + */ + + +/* + * GUC assign_hook for backtrace_functions + */ + + +/* + * GUC check_hook for log_destination + */ #ifdef HAVE_SYSLOG +#endif +#ifdef WIN32 +#endif + +/* + * GUC assign_hook for log_destination + */ + /* - * Set or update the parameters for syslog logging + * GUC assign_hook for syslog_ident */ +#ifdef HAVE_SYSLOG +#endif +/* + * GUC assign_hook for syslog_facility + */ +#ifdef HAVE_SYSLOG +#endif +#ifdef HAVE_SYSLOG /* * Write a message line to syslog @@ -1677,7 +1919,12 @@ write_eventlog(int level, const char *line, int len) /* - * Format tag info for log lines; append to the provided buffer. + * Format log status information using Log_line_prefix. + */ + + +/* + * Format log status info; append to the provided buffer. */ @@ -1803,6 +2050,16 @@ write_stderr(const char *fmt,...) } +/* + * Write a message to STDERR using only async-signal-safe functions. This can + * be used to safely emit a message from a signal handler. + * + * TODO: It is likely possible to safely do a limited amount of string + * interpolation (e.g., %s and %d), but that is not presently supported. + */ + + + /* * Adjust the level of a recovery-related message per trace_recovery_messages. * diff --git a/src/postgres/src_backend_utils_fmgr_fmgr.c b/src/postgres/src_backend_utils_fmgr_fmgr.c index 88db8236..3cd4feee 100644 --- a/src/postgres/src_backend_utils_fmgr_fmgr.c +++ b/src/postgres/src_backend_utils_fmgr_fmgr.c @@ -9,7 +9,7 @@ * fmgr.c * The Postgres function manager. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -29,6 +29,7 @@ #include "lib/stringinfo.h" #include "miscadmin.h" #include "nodes/makefuncs.h" +#include "nodes/miscnodes.h" #include "nodes/nodeFuncs.h" #include "pgstat.h" #include "utils/acl.h" @@ -366,6 +367,37 @@ FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, */ +/* + * Call a previously-looked-up datatype input function, with non-exception + * handling of "soft" errors. + * + * This is basically like InputFunctionCall, but the converted Datum is + * returned into *result while the function result is true for success or + * false for failure. Also, the caller may pass an ErrorSaveContext node. + * (We declare that as "fmNodePtr" to avoid including nodes.h in fmgr.h.) + * + * If escontext points to an ErrorSaveContext, any "soft" errors detected by + * the input function will be reported by filling the escontext struct and + * returning false. (The caller can choose to test SOFT_ERROR_OCCURRED(), + * but checking the function result instead is usually cheaper.) + * + * If escontext does not point to an ErrorSaveContext, errors are reported + * via ereport(ERROR), so that there is no functional difference from + * InputFunctionCall; the result will always be true if control returns. + */ + + +/* + * Call a directly-named datatype input function, with non-exception + * handling of "soft" errors. + * + * This is like InputFunctionCallSafe, except that it is given a direct + * pointer to the C function to call. We assume that that function is + * strict. Also, the function cannot be one that needs to + * look at FmgrInfo, since there won't be any. + */ + + /* * Call a previously-looked-up datatype output function. * diff --git a/src/postgres/src_backend_utils_hash_dynahash.c b/src/postgres/src_backend_utils_hash_dynahash.c deleted file mode 100644 index 453767e9..00000000 --- a/src/postgres/src_backend_utils_hash_dynahash.c +++ /dev/null @@ -1,1116 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - hash_search - * - hash_search_with_hash_value - * - has_seq_scans - * - num_seq_scans - * - seq_scan_tables - * - expand_table - * - dir_realloc - * - CurrentDynaHashCxt - * - seg_alloc - * - calc_bucket - * - hash_corrupted - * - DynaHashAlloc - * - get_hash_entry - * - element_alloc - *-------------------------------------------------------------------- - */ - -/*------------------------------------------------------------------------- - * - * dynahash.c - * dynamic chained hash tables - * - * dynahash.c supports both local-to-a-backend hash tables and hash tables in - * shared memory. For shared hash tables, it is the caller's responsibility - * to provide appropriate access interlocking. The simplest convention is - * that a single LWLock protects the whole hash table. Searches (HASH_FIND or - * hash_seq_search) need only shared lock, but any update requires exclusive - * lock. For heavily-used shared tables, the single-lock approach creates a - * concurrency bottleneck, so we also support "partitioned" locking wherein - * there are multiple LWLocks guarding distinct subsets of the table. To use - * a hash table in partitioned mode, the HASH_PARTITION flag must be given - * to hash_create. This prevents any attempt to split buckets on-the-fly. - * Therefore, each hash bucket chain operates independently, and no fields - * of the hash header change after init except nentries and freeList. - * (A partitioned table uses multiple copies of those fields, guarded by - * spinlocks, for additional concurrency.) - * This lets any subset of the hash buckets be treated as a separately - * lockable partition. We expect callers to use the low-order bits of a - * lookup key's hash value as a partition number --- this will work because - * of the way calc_bucket() maps hash values to bucket numbers. - * - * For hash tables in shared memory, the memory allocator function should - * match malloc's semantics of returning NULL on failure. For hash tables - * in local memory, we typically use palloc() which will throw error on - * failure. The code in this file has to cope with both cases. - * - * dynahash.c provides support for these types of lookup keys: - * - * 1. Null-terminated C strings (truncated if necessary to fit in keysize), - * compared as though by strcmp(). This is selected by specifying the - * HASH_STRINGS flag to hash_create. - * - * 2. Arbitrary binary data of size keysize, compared as though by memcmp(). - * (Caller must ensure there are no undefined padding bits in the keys!) - * This is selected by specifying the HASH_BLOBS flag to hash_create. - * - * 3. More complex key behavior can be selected by specifying user-supplied - * hashing, comparison, and/or key-copying functions. At least a hashing - * function must be supplied; comparison defaults to memcmp() and key copying - * to memcpy() when a user-defined hashing function is selected. - * - * Compared to simplehash, dynahash has the following benefits: - * - * - It supports partitioning, which is useful for shared memory access using - * locks. - * - Shared memory hashes are allocated in a fixed size area at startup and - * are discoverable by name from other processes. - * - Because entries don't need to be moved in the case of hash conflicts, - * dynahash has better performance for large entries. - * - Guarantees stable pointers to entries. - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/backend/utils/hash/dynahash.c - * - *------------------------------------------------------------------------- - */ - -/* - * Original comments: - * - * Dynamic hashing, after CACM April 1988 pp 446-457, by Per-Ake Larson. - * Coded into C, with minor code improvements, and with hsearch(3) interface, - * by ejp@ausmelb.oz, Jul 26, 1988: 13:16; - * also, hcreate/hdestroy routines added to simulate hsearch(3). - * - * These routines simulate hsearch(3) and family, with the important - * difference that the hash table is dynamic - can grow indefinitely - * beyond its original size (as supplied to hcreate()). - * - * Performance appears to be comparable to that of hsearch(3). - * The 'source-code' options referred to in hsearch(3)'s 'man' page - * are not implemented; otherwise functionality is identical. - * - * Compilation controls: - * HASH_DEBUG controls some informative traces, mainly for debugging. - * HASH_STATISTICS causes HashAccesses and HashCollisions to be maintained; - * when combined with HASH_DEBUG, these are displayed by hdestroy(). - * - * Problems & fixes to ejp@ausmelb.oz. WARNING: relies on pre-processor - * concatenation property, in probably unnecessary code 'optimization'. - * - * Modified margo@postgres.berkeley.edu February 1990 - * added multiple table interface - * Modified by sullivan@postgres.berkeley.edu April 1990 - * changed ctl structure for shared memory - */ - -#include "postgres.h" - -#include - -#include "access/xact.h" -#include "common/hashfn.h" -#include "port/pg_bitutils.h" -#include "storage/shmem.h" -#include "storage/spin.h" -#include "utils/dynahash.h" -#include "utils/memutils.h" - - -/* - * Constants - * - * A hash table has a top-level "directory", each of whose entries points - * to a "segment" of ssize bucket headers. The maximum number of hash - * buckets is thus dsize * ssize (but dsize may be expansible). Of course, - * the number of records in the table can be larger, but we don't want a - * whole lot of records per bucket or performance goes down. - * - * In a hash table allocated in shared memory, the directory cannot be - * expanded because it must stay at a fixed address. The directory size - * should be selected using hash_select_dirsize (and you'd better have - * a good idea of the maximum number of entries!). For non-shared hash - * tables, the initial directory size can be left at the default. - */ -#define DEF_SEGSIZE 256 -#define DEF_SEGSIZE_SHIFT 8 /* must be log2(DEF_SEGSIZE) */ -#define DEF_DIRSIZE 256 - -/* Number of freelists to be used for a partitioned hash table. */ -#define NUM_FREELISTS 32 - -/* A hash bucket is a linked list of HASHELEMENTs */ -typedef HASHELEMENT *HASHBUCKET; - -/* A hash segment is an array of bucket headers */ -typedef HASHBUCKET *HASHSEGMENT; - -/* - * Per-freelist data. - * - * In a partitioned hash table, each freelist is associated with a specific - * set of hashcodes, as determined by the FREELIST_IDX() macro below. - * nentries tracks the number of live hashtable entries having those hashcodes - * (NOT the number of entries in the freelist, as you might expect). - * - * The coverage of a freelist might be more or less than one partition, so it - * needs its own lock rather than relying on caller locking. Relying on that - * wouldn't work even if the coverage was the same, because of the occasional - * need to "borrow" entries from another freelist; see get_hash_entry(). - * - * Using an array of FreeListData instead of separate arrays of mutexes, - * nentries and freeLists helps to reduce sharing of cache lines between - * different mutexes. - */ -typedef struct -{ - slock_t mutex; /* spinlock for this freelist */ - long nentries; /* number of entries in associated buckets */ - HASHELEMENT *freeList; /* chain of free elements */ -} FreeListData; - -/* - * Header structure for a hash table --- contains all changeable info - * - * In a shared-memory hash table, the HASHHDR is in shared memory, while - * each backend has a local HTAB struct. For a non-shared table, there isn't - * any functional difference between HASHHDR and HTAB, but we separate them - * anyway to share code between shared and non-shared tables. - */ -struct HASHHDR -{ - /* - * The freelist can become a point of contention in high-concurrency hash - * tables, so we use an array of freelists, each with its own mutex and - * nentries count, instead of just a single one. Although the freelists - * normally operate independently, we will scavenge entries from freelists - * other than a hashcode's default freelist when necessary. - * - * If the hash table is not partitioned, only freeList[0] is used and its - * spinlock is not used at all; callers' locking is assumed sufficient. - */ - FreeListData freeList[NUM_FREELISTS]; - - /* These fields can change, but not in a partitioned table */ - /* Also, dsize can't change in a shared table, even if unpartitioned */ - long dsize; /* directory size */ - long nsegs; /* number of allocated segments (<= dsize) */ - uint32 max_bucket; /* ID of maximum bucket in use */ - uint32 high_mask; /* mask to modulo into entire table */ - uint32 low_mask; /* mask to modulo into lower half of table */ - - /* These fields are fixed at hashtable creation */ - Size keysize; /* hash key length in bytes */ - Size entrysize; /* total user element size in bytes */ - long num_partitions; /* # partitions (must be power of 2), or 0 */ - long max_dsize; /* 'dsize' limit if directory is fixed size */ - long ssize; /* segment size --- must be power of 2 */ - int sshift; /* segment shift = log2(ssize) */ - int nelem_alloc; /* number of entries to allocate at once */ - -#ifdef HASH_STATISTICS - - /* - * Count statistics here. NB: stats code doesn't bother with mutex, so - * counts could be corrupted a bit in a partitioned table. - */ - long accesses; - long collisions; -#endif -}; - -#define IS_PARTITIONED(hctl) ((hctl)->num_partitions != 0) - -#define FREELIST_IDX(hctl, hashcode) \ - (IS_PARTITIONED(hctl) ? (hashcode) % NUM_FREELISTS : 0) - -/* - * Top control structure for a hashtable --- in a shared table, each backend - * has its own copy (OK since no fields change at runtime) - */ -struct HTAB -{ - HASHHDR *hctl; /* => shared control information */ - HASHSEGMENT *dir; /* directory of segment starts */ - HashValueFunc hash; /* hash function */ - HashCompareFunc match; /* key comparison function */ - HashCopyFunc keycopy; /* key copying function */ - HashAllocFunc alloc; /* memory allocator */ - MemoryContext hcxt; /* memory context if default allocator used */ - char *tabname; /* table name (for error messages) */ - bool isshared; /* true if table is in shared memory */ - bool isfixed; /* if true, don't enlarge */ - - /* freezing a shared table isn't allowed, so we can keep state here */ - bool frozen; /* true = no more inserts allowed */ - - /* We keep local copies of these fixed values to reduce contention */ - Size keysize; /* hash key length in bytes */ - long ssize; /* segment size --- must be power of 2 */ - int sshift; /* segment shift = log2(ssize) */ -}; - -/* - * Key (also entry) part of a HASHELEMENT - */ -#define ELEMENTKEY(helem) (((char *)(helem)) + MAXALIGN(sizeof(HASHELEMENT))) - -/* - * Obtain element pointer given pointer to key - */ -#define ELEMENT_FROM_KEY(key) \ - ((HASHELEMENT *) (((char *) (key)) - MAXALIGN(sizeof(HASHELEMENT)))) - -/* - * Fast MOD arithmetic, assuming that y is a power of 2 ! - */ -#define MOD(x,y) ((x) & ((y)-1)) - -#ifdef HASH_STATISTICS -static long hash_accesses, - hash_collisions, - hash_expansions; -#endif - -/* - * Private function prototypes - */ -static void *DynaHashAlloc(Size size); -static HASHSEGMENT seg_alloc(HTAB *hashp); -static bool element_alloc(HTAB *hashp, int nelem, int freelist_idx); -static bool dir_realloc(HTAB *hashp); -static bool expand_table(HTAB *hashp); -static HASHBUCKET get_hash_entry(HTAB *hashp, int freelist_idx); -static void hdefault(HTAB *hashp); -static int choose_nelem_alloc(Size entrysize); -static bool init_htab(HTAB *hashp, long nelem); -static void hash_corrupted(HTAB *hashp); -static long next_pow2_long(long num); -static int next_pow2_int(long num); -static void register_seq_scan(HTAB *hashp); -static void deregister_seq_scan(HTAB *hashp); -static bool has_seq_scans(HTAB *hashp); - - -/* - * memory allocation support - */ -static __thread MemoryContext CurrentDynaHashCxt = NULL; - - -static void * -DynaHashAlloc(Size size) -{ - Assert(MemoryContextIsValid(CurrentDynaHashCxt)); - return MemoryContextAlloc(CurrentDynaHashCxt, size); -} - - -/* - * HashCompareFunc for string keys - * - * Because we copy keys with strlcpy(), they will be truncated at keysize-1 - * bytes, so we can only compare that many ... hence strncmp is almost but - * not quite the right thing. - */ - - - -/************************** CREATE ROUTINES **********************/ - -/* - * hash_create -- create a new dynamic hash table - * - * tabname: a name for the table (for debugging purposes) - * nelem: maximum number of elements expected - * *info: additional table parameters, as indicated by flags - * flags: bitmask indicating which parameters to take from *info - * - * The flags value *must* include HASH_ELEM. (Formerly, this was nominally - * optional, but the default keysize and entrysize values were useless.) - * The flags value must also include exactly one of HASH_STRINGS, HASH_BLOBS, - * or HASH_FUNCTION, to define the key hashing semantics (C strings, - * binary blobs, or custom, respectively). Callers specifying a custom - * hash function will likely also want to use HASH_COMPARE, and perhaps - * also HASH_KEYCOPY, to control key comparison and copying. - * Another often-used flag is HASH_CONTEXT, to allocate the hash table - * under info->hcxt rather than under TopMemoryContext; the default - * behavior is only suitable for session-lifespan hash tables. - * Other flags bits are special-purpose and seldom used, except for those - * associated with shared-memory hash tables, for which see ShmemInitHash(). - * - * Fields in *info are read only when the associated flags bit is set. - * It is not necessary to initialize other fields of *info. - * Neither tabname nor *info need persist after the hash_create() call. - * - * Note: It is deprecated for callers of hash_create() to explicitly specify - * string_hash, tag_hash, uint32_hash, or oid_hash. Just set HASH_STRINGS or - * HASH_BLOBS. Use HASH_FUNCTION only when you want something other than - * one of these. - * - * Note: for a shared-memory hashtable, nelem needs to be a pretty good - * estimate, since we can't expand the table on the fly. But an unshared - * hashtable can be expanded on-the-fly, so it's better for nelem to be - * on the small side and let the table grow if it's exceeded. An overly - * large nelem will penalize hash_seq_search speed without buying much. - */ - - -/* - * Set default HASHHDR parameters. - */ -#ifdef HASH_STATISTICS -#endif - -/* - * Given the user-specified entry size, choose nelem_alloc, ie, how many - * elements to add to the hash table when we need more. - */ - - -/* - * Compute derived fields of hctl and build the initial directory/segment - * arrays - */ -#ifdef HASH_DEBUG -#endif - -/* - * Estimate the space needed for a hashtable containing the given number - * of entries of given size. - * NOTE: this is used to estimate the footprint of hashtables in shared - * memory; therefore it does not count HTAB which is in local memory. - * NB: assumes that all hash structure parameters have default values! - */ - - -/* - * Select an appropriate directory size for a hashtable with the given - * maximum number of entries. - * This is only needed for hashtables in shared memory, whose directories - * cannot be expanded dynamically. - * NB: assumes that all hash structure parameters have default values! - * - * XXX this had better agree with the behavior of init_htab()... - */ - - -/* - * Compute the required initial memory allocation for a shared-memory - * hashtable with the given parameters. We need space for the HASHHDR - * and for the (non expansible) directory. - */ - - - -/********************** DESTROY ROUTINES ************************/ - - - -#ifdef HASH_STATISTICS -#endif - -/*******************************SEARCH ROUTINES *****************************/ - - -/* - * get_hash_value -- exported routine to calculate a key's hash value - * - * We export this because for partitioned tables, callers need to compute - * the partition number (from the low-order bits of the hash value) before - * searching. - */ - - -/* Convert a hash value to a bucket number */ -static inline uint32 -calc_bucket(HASHHDR *hctl, uint32 hash_val) -{ - uint32 bucket; - - bucket = hash_val & hctl->high_mask; - if (bucket > hctl->max_bucket) - bucket = bucket & hctl->low_mask; - - return bucket; -} - -/* - * hash_search -- look up key in table and perform action - * hash_search_with_hash_value -- same, with key's hash value already computed - * - * action is one of: - * HASH_FIND: look up key in table - * HASH_ENTER: look up key in table, creating entry if not present - * HASH_ENTER_NULL: same, but return NULL if out of memory - * HASH_REMOVE: look up key in table, remove entry if present - * - * Return value is a pointer to the element found/entered/removed if any, - * or NULL if no match was found. (NB: in the case of the REMOVE action, - * the result is a dangling pointer that shouldn't be dereferenced!) - * - * HASH_ENTER will normally ereport a generic "out of memory" error if - * it is unable to create a new entry. The HASH_ENTER_NULL operation is - * the same except it will return NULL if out of memory. Note that - * HASH_ENTER_NULL cannot be used with the default palloc-based allocator, - * since palloc internally ereports on out-of-memory. - * - * If foundPtr isn't NULL, then *foundPtr is set true if we found an - * existing entry in the table, false otherwise. This is needed in the - * HASH_ENTER case, but is redundant with the return value otherwise. - * - * For hash_search_with_hash_value, the hashvalue parameter must have been - * calculated with get_hash_value(). - */ -void * -hash_search(HTAB *hashp, - const void *keyPtr, - HASHACTION action, - bool *foundPtr) -{ - return hash_search_with_hash_value(hashp, - keyPtr, - hashp->hash(keyPtr, hashp->keysize), - action, - foundPtr); -} - -void * -hash_search_with_hash_value(HTAB *hashp, - const void *keyPtr, - uint32 hashvalue, - HASHACTION action, - bool *foundPtr) -{ - HASHHDR *hctl = hashp->hctl; - int freelist_idx = FREELIST_IDX(hctl, hashvalue); - Size keysize; - uint32 bucket; - long segment_num; - long segment_ndx; - HASHSEGMENT segp; - HASHBUCKET currBucket; - HASHBUCKET *prevBucketPtr; - HashCompareFunc match; - -#ifdef HASH_STATISTICS - hash_accesses++; - hctl->accesses++; -#endif - - /* - * If inserting, check if it is time to split a bucket. - * - * NOTE: failure to expand table is not a fatal error, it just means we - * have to run at higher fill factor than we wanted. However, if we're - * using the palloc allocator then it will throw error anyway on - * out-of-memory, so we must do this before modifying the table. - */ - if (action == HASH_ENTER || action == HASH_ENTER_NULL) - { - /* - * Can't split if running in partitioned mode, nor if frozen, nor if - * table is the subject of any active hash_seq_search scans. - */ - if (hctl->freeList[0].nentries > (long) hctl->max_bucket && - !IS_PARTITIONED(hctl) && !hashp->frozen && - !has_seq_scans(hashp)) - (void) expand_table(hashp); - } - - /* - * Do the initial lookup - */ - bucket = calc_bucket(hctl, hashvalue); - - segment_num = bucket >> hashp->sshift; - segment_ndx = MOD(bucket, hashp->ssize); - - segp = hashp->dir[segment_num]; - - if (segp == NULL) - hash_corrupted(hashp); - - prevBucketPtr = &segp[segment_ndx]; - currBucket = *prevBucketPtr; - - /* - * Follow collision chain looking for matching key - */ - match = hashp->match; /* save one fetch in inner loop */ - keysize = hashp->keysize; /* ditto */ - - while (currBucket != NULL) - { - if (currBucket->hashvalue == hashvalue && - match(ELEMENTKEY(currBucket), keyPtr, keysize) == 0) - break; - prevBucketPtr = &(currBucket->link); - currBucket = *prevBucketPtr; -#ifdef HASH_STATISTICS - hash_collisions++; - hctl->collisions++; -#endif - } - - if (foundPtr) - *foundPtr = (bool) (currBucket != NULL); - - /* - * OK, now what? - */ - switch (action) - { - case HASH_FIND: - if (currBucket != NULL) - return (void *) ELEMENTKEY(currBucket); - return NULL; - - case HASH_REMOVE: - if (currBucket != NULL) - { - /* if partitioned, must lock to touch nentries and freeList */ - if (IS_PARTITIONED(hctl)) - SpinLockAcquire(&(hctl->freeList[freelist_idx].mutex)); - - /* delete the record from the appropriate nentries counter. */ - Assert(hctl->freeList[freelist_idx].nentries > 0); - hctl->freeList[freelist_idx].nentries--; - - /* remove record from hash bucket's chain. */ - *prevBucketPtr = currBucket->link; - - /* add the record to the appropriate freelist. */ - currBucket->link = hctl->freeList[freelist_idx].freeList; - hctl->freeList[freelist_idx].freeList = currBucket; - - if (IS_PARTITIONED(hctl)) - SpinLockRelease(&hctl->freeList[freelist_idx].mutex); - - /* - * better hope the caller is synchronizing access to this - * element, because someone else is going to reuse it the next - * time something is added to the table - */ - return (void *) ELEMENTKEY(currBucket); - } - return NULL; - - case HASH_ENTER_NULL: - /* ENTER_NULL does not work with palloc-based allocator */ - Assert(hashp->alloc != DynaHashAlloc); - /* FALL THRU */ - - case HASH_ENTER: - /* Return existing element if found, else create one */ - if (currBucket != NULL) - return (void *) ELEMENTKEY(currBucket); - - /* disallow inserts if frozen */ - if (hashp->frozen) - elog(ERROR, "cannot insert into frozen hashtable \"%s\"", - hashp->tabname); - - currBucket = get_hash_entry(hashp, freelist_idx); - if (currBucket == NULL) - { - /* out of memory */ - if (action == HASH_ENTER_NULL) - return NULL; - /* report a generic message */ - if (hashp->isshared) - ereport(ERROR, - (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of shared memory"))); - else - ereport(ERROR, - (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of memory"))); - } - - /* link into hashbucket chain */ - *prevBucketPtr = currBucket; - currBucket->link = NULL; - - /* copy key into record */ - currBucket->hashvalue = hashvalue; - hashp->keycopy(ELEMENTKEY(currBucket), keyPtr, keysize); - - /* - * Caller is expected to fill the data field on return. DO NOT - * insert any code that could possibly throw error here, as doing - * so would leave the table entry incomplete and hence corrupt the - * caller's data structure. - */ - - return (void *) ELEMENTKEY(currBucket); - } - - elog(ERROR, "unrecognized hash action code: %d", (int) action); - - return NULL; /* keep compiler quiet */ -} - -/* - * hash_update_hash_key -- change the hash key of an existing table entry - * - * This is equivalent to removing the entry, making a new entry, and copying - * over its data, except that the entry never goes to the table's freelist. - * Therefore this cannot suffer an out-of-memory failure, even if there are - * other processes operating in other partitions of the hashtable. - * - * Returns true if successful, false if the requested new hash key is already - * present. Throws error if the specified entry pointer isn't actually a - * table member. - * - * NB: currently, there is no special case for old and new hash keys being - * identical, which means we'll report false for that situation. This is - * preferable for existing uses. - * - * NB: for a partitioned hashtable, caller must hold lock on both relevant - * partitions, if the new hash key would belong to a different partition. - */ -#ifdef HASH_STATISTICS -#endif -#ifdef HASH_STATISTICS -#endif - -/* - * Allocate a new hashtable entry if possible; return NULL if out of memory. - * (Or, if the underlying space allocator throws error for out-of-memory, - * we won't return at all.) - */ -static HASHBUCKET -get_hash_entry(HTAB *hashp, int freelist_idx) -{ - HASHHDR *hctl = hashp->hctl; - HASHBUCKET newElement; - - for (;;) - { - /* if partitioned, must lock to touch nentries and freeList */ - if (IS_PARTITIONED(hctl)) - SpinLockAcquire(&hctl->freeList[freelist_idx].mutex); - - /* try to get an entry from the freelist */ - newElement = hctl->freeList[freelist_idx].freeList; - - if (newElement != NULL) - break; - - if (IS_PARTITIONED(hctl)) - SpinLockRelease(&hctl->freeList[freelist_idx].mutex); - - /* - * No free elements in this freelist. In a partitioned table, there - * might be entries in other freelists, but to reduce contention we - * prefer to first try to get another chunk of buckets from the main - * shmem allocator. If that fails, though, we *MUST* root through all - * the other freelists before giving up. There are multiple callers - * that assume that they can allocate every element in the initially - * requested table size, or that deleting an element guarantees they - * can insert a new element, even if shared memory is entirely full. - * Failing because the needed element is in a different freelist is - * not acceptable. - */ - if (!element_alloc(hashp, hctl->nelem_alloc, freelist_idx)) - { - int borrow_from_idx; - - if (!IS_PARTITIONED(hctl)) - return NULL; /* out of memory */ - - /* try to borrow element from another freelist */ - borrow_from_idx = freelist_idx; - for (;;) - { - borrow_from_idx = (borrow_from_idx + 1) % NUM_FREELISTS; - if (borrow_from_idx == freelist_idx) - break; /* examined all freelists, fail */ - - SpinLockAcquire(&(hctl->freeList[borrow_from_idx].mutex)); - newElement = hctl->freeList[borrow_from_idx].freeList; - - if (newElement != NULL) - { - hctl->freeList[borrow_from_idx].freeList = newElement->link; - SpinLockRelease(&(hctl->freeList[borrow_from_idx].mutex)); - - /* careful: count the new element in its proper freelist */ - SpinLockAcquire(&hctl->freeList[freelist_idx].mutex); - hctl->freeList[freelist_idx].nentries++; - SpinLockRelease(&hctl->freeList[freelist_idx].mutex); - - return newElement; - } - - SpinLockRelease(&(hctl->freeList[borrow_from_idx].mutex)); - } - - /* no elements available to borrow either, so out of memory */ - return NULL; - } - } - - /* remove entry from freelist, bump nentries */ - hctl->freeList[freelist_idx].freeList = newElement->link; - hctl->freeList[freelist_idx].nentries++; - - if (IS_PARTITIONED(hctl)) - SpinLockRelease(&hctl->freeList[freelist_idx].mutex); - - return newElement; -} - -/* - * hash_get_num_entries -- get the number of entries in a hashtable - */ - - -/* - * hash_seq_init/_search/_term - * Sequentially search through hash table and return - * all the elements one by one, return NULL when no more. - * - * hash_seq_term should be called if and only if the scan is abandoned before - * completion; if hash_seq_search returns NULL then it has already done the - * end-of-scan cleanup. - * - * NOTE: caller may delete the returned element before continuing the scan. - * However, deleting any other element while the scan is in progress is - * UNDEFINED (it might be the one that curIndex is pointing at!). Also, - * if elements are added to the table while the scan is in progress, it is - * unspecified whether they will be visited by the scan or not. - * - * NOTE: it is possible to use hash_seq_init/hash_seq_search without any - * worry about hash_seq_term cleanup, if the hashtable is first locked against - * further insertions by calling hash_freeze. - * - * NOTE: to use this with a partitioned hashtable, caller had better hold - * at least shared lock on all partitions of the table throughout the scan! - * We can cope with insertions or deletions by our own backend, but *not* - * with concurrent insertions or deletions by another. - */ - - - - - - -/* - * hash_freeze - * Freeze a hashtable against future insertions (deletions are - * still allowed) - * - * The reason for doing this is that by preventing any more bucket splits, - * we no longer need to worry about registering hash_seq_search scans, - * and thus caller need not be careful about ensuring hash_seq_term gets - * called at the right times. - * - * Multiple calls to hash_freeze() are allowed, but you can't freeze a table - * with active scans (since hash_seq_term would then do the wrong thing). - */ - - - -/********************************* UTILITIES ************************/ - -/* - * Expand the table by adding one more hash bucket. - */ -static bool -expand_table(HTAB *hashp) -{ - HASHHDR *hctl = hashp->hctl; - HASHSEGMENT old_seg, - new_seg; - long old_bucket, - new_bucket; - long new_segnum, - new_segndx; - long old_segnum, - old_segndx; - HASHBUCKET *oldlink, - *newlink; - HASHBUCKET currElement, - nextElement; - - Assert(!IS_PARTITIONED(hctl)); - -#ifdef HASH_STATISTICS - hash_expansions++; -#endif - - new_bucket = hctl->max_bucket + 1; - new_segnum = new_bucket >> hashp->sshift; - new_segndx = MOD(new_bucket, hashp->ssize); - - if (new_segnum >= hctl->nsegs) - { - /* Allocate new segment if necessary -- could fail if dir full */ - if (new_segnum >= hctl->dsize) - if (!dir_realloc(hashp)) - return false; - if (!(hashp->dir[new_segnum] = seg_alloc(hashp))) - return false; - hctl->nsegs++; - } - - /* OK, we created a new bucket */ - hctl->max_bucket++; - - /* - * *Before* changing masks, find old bucket corresponding to same hash - * values; values in that bucket may need to be relocated to new bucket. - * Note that new_bucket is certainly larger than low_mask at this point, - * so we can skip the first step of the regular hash mask calc. - */ - old_bucket = (new_bucket & hctl->low_mask); - - /* - * If we crossed a power of 2, readjust masks. - */ - if ((uint32) new_bucket > hctl->high_mask) - { - hctl->low_mask = hctl->high_mask; - hctl->high_mask = (uint32) new_bucket | hctl->low_mask; - } - - /* - * Relocate records to the new bucket. NOTE: because of the way the hash - * masking is done in calc_bucket, only one old bucket can need to be - * split at this point. With a different way of reducing the hash value, - * that might not be true! - */ - old_segnum = old_bucket >> hashp->sshift; - old_segndx = MOD(old_bucket, hashp->ssize); - - old_seg = hashp->dir[old_segnum]; - new_seg = hashp->dir[new_segnum]; - - oldlink = &old_seg[old_segndx]; - newlink = &new_seg[new_segndx]; - - for (currElement = *oldlink; - currElement != NULL; - currElement = nextElement) - { - nextElement = currElement->link; - if ((long) calc_bucket(hctl, currElement->hashvalue) == old_bucket) - { - *oldlink = currElement; - oldlink = &currElement->link; - } - else - { - *newlink = currElement; - newlink = &currElement->link; - } - } - /* don't forget to terminate the rebuilt hash chains... */ - *oldlink = NULL; - *newlink = NULL; - - return true; -} - - -static bool -dir_realloc(HTAB *hashp) -{ - HASHSEGMENT *p; - HASHSEGMENT *old_p; - long new_dsize; - long old_dirsize; - long new_dirsize; - - if (hashp->hctl->max_dsize != NO_MAX_DSIZE) - return false; - - /* Reallocate directory */ - new_dsize = hashp->hctl->dsize << 1; - old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); - new_dirsize = new_dsize * sizeof(HASHSEGMENT); - - old_p = hashp->dir; - CurrentDynaHashCxt = hashp->hcxt; - p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); - - if (p != NULL) - { - memcpy(p, old_p, old_dirsize); - MemSet(((char *) p) + old_dirsize, 0, new_dirsize - old_dirsize); - hashp->dir = p; - hashp->hctl->dsize = new_dsize; - - /* XXX assume the allocator is palloc, so we know how to free */ - Assert(hashp->alloc == DynaHashAlloc); - pfree(old_p); - - return true; - } - - return false; -} - - -static HASHSEGMENT -seg_alloc(HTAB *hashp) -{ - HASHSEGMENT segp; - - CurrentDynaHashCxt = hashp->hcxt; - segp = (HASHSEGMENT) hashp->alloc(sizeof(HASHBUCKET) * hashp->ssize); - - if (!segp) - return NULL; - - MemSet(segp, 0, sizeof(HASHBUCKET) * hashp->ssize); - - return segp; -} - -/* - * allocate some new elements and link them into the indicated free list - */ -static bool -element_alloc(HTAB *hashp, int nelem, int freelist_idx) -{ - HASHHDR *hctl = hashp->hctl; - Size elementSize; - HASHELEMENT *firstElement; - HASHELEMENT *tmpElement; - HASHELEMENT *prevElement; - int i; - - if (hashp->isfixed) - return false; - - /* Each element has a HASHELEMENT header plus user data. */ - elementSize = MAXALIGN(sizeof(HASHELEMENT)) + MAXALIGN(hctl->entrysize); - - CurrentDynaHashCxt = hashp->hcxt; - firstElement = (HASHELEMENT *) hashp->alloc(nelem * elementSize); - - if (!firstElement) - return false; - - /* prepare to link all the new entries into the freelist */ - prevElement = NULL; - tmpElement = firstElement; - for (i = 0; i < nelem; i++) - { - tmpElement->link = prevElement; - prevElement = tmpElement; - tmpElement = (HASHELEMENT *) (((char *) tmpElement) + elementSize); - } - - /* if partitioned, must lock to touch freeList */ - if (IS_PARTITIONED(hctl)) - SpinLockAcquire(&hctl->freeList[freelist_idx].mutex); - - /* freelist could be nonempty if two backends did this concurrently */ - firstElement->link = hctl->freeList[freelist_idx].freeList; - hctl->freeList[freelist_idx].freeList = prevElement; - - if (IS_PARTITIONED(hctl)) - SpinLockRelease(&hctl->freeList[freelist_idx].mutex); - - return true; -} - -/* complain when we have detected a corrupted hashtable */ -static void -hash_corrupted(HTAB *hashp) -{ - /* - * If the corruption is in a shared hashtable, we'd better force a - * systemwide restart. Otherwise, just shut down this one backend. - */ - if (hashp->isshared) - elog(PANIC, "hash table \"%s\" corrupted", hashp->tabname); - else - elog(FATAL, "hash table \"%s\" corrupted", hashp->tabname); -} - -/* calculate ceil(log base 2) of num */ -#if SIZEOF_LONG < 8 -#else -#endif - -/* calculate first power of 2 >= num, bounded to what will fit in a long */ - - -/* calculate first power of 2 >= num, bounded to what will fit in an int */ - - - -/************************* SEQ SCAN TRACKING ************************/ - -/* - * We track active hash_seq_search scans here. The need for this mechanism - * comes from the fact that a scan will get confused if a bucket split occurs - * while it's in progress: it might visit entries twice, or even miss some - * entirely (if it's partway through the same bucket that splits). Hence - * we want to inhibit bucket splits if there are any active scans on the - * table being inserted into. This is a fairly rare case in current usage, - * so just postponing the split until the next insertion seems sufficient. - * - * Given present usages of the function, only a few scans are likely to be - * open concurrently; so a finite-size stack of open scans seems sufficient, - * and we don't worry that linear search is too slow. Note that we do - * allow multiple scans of the same hashtable to be open concurrently. - * - * This mechanism can support concurrent scan and insertion in a shared - * hashtable if it's the same backend doing both. It would fail otherwise, - * but locking reasons seem to preclude any such scenario anyway, so we don't - * worry. - * - * This arrangement is reasonably robust if a transient hashtable is deleted - * without notifying us. The absolute worst case is we might inhibit splits - * in another table created later at exactly the same address. We will give - * a warning at transaction end for reference leaks, so any bugs leading to - * lack of notification should be easy to catch. - */ - -#define MAX_SEQ_SCANS 100 - -static __thread HTAB *seq_scan_tables[MAX_SEQ_SCANS]; - /* tables being scanned */ - /* subtransaction nest level */ -static __thread int num_seq_scans = 0; - - - -/* Register a table as having an active hash_seq_search scan */ - - -/* Deregister an active scan */ - - -/* Check if a table has any active scan */ -static bool -has_seq_scans(HTAB *hashp) -{ - int i; - - for (i = 0; i < num_seq_scans; i++) - { - if (seq_scan_tables[i] == hashp) - return true; - } - return false; -} - -/* Clean up any open scans at end of transaction */ - - -/* Clean up any open scans at end of subtransaction */ - diff --git a/src/postgres/src_backend_utils_init_globals.c b/src/postgres/src_backend_utils_init_globals.c index 653a7c12..7a61bfbf 100644 --- a/src/postgres/src_backend_utils_init_globals.c +++ b/src/postgres/src_backend_utils_init_globals.c @@ -13,7 +13,7 @@ * globals.c * global variable declarations * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -154,7 +154,10 @@ __thread bool ExitOnAnyError = false; - /* GUC parameters for vacuum */ +/* GUC parameters for vacuum */ + + + diff --git a/src/postgres/src_backend_utils_mb_mbutils.c b/src/postgres/src_backend_utils_mb_mbutils.c index 728171cf..05a33729 100644 --- a/src/postgres/src_backend_utils_mb_mbutils.c +++ b/src/postgres/src_backend_utils_mb_mbutils.c @@ -45,7 +45,7 @@ * the result is validly encoded according to the destination encoding. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -62,6 +62,7 @@ #include "utils/builtins.h" #include "utils/memutils.h" #include "utils/syscache.h" +#include "varatt.h" /* * We maintain a simple linked list caching the fmgr lookup info for the @@ -184,7 +185,7 @@ pg_get_client_encoding(void) * * The output is null-terminated. * - * If destlen < srclen * MAX_CONVERSION_LENGTH + 1, the converted output + * If destlen < srclen * MAX_CONVERSION_INPUT_LENGTH + 1, the converted output * wouldn't necessarily fit in the output buffer, and the function will not * convert the whole input. * @@ -339,12 +340,20 @@ pg_unicode_to_server(pg_wchar c, unsigned char *s) FunctionCall6(Utf8ToServerConvProc, Int32GetDatum(PG_UTF8), Int32GetDatum(server_encoding), - CStringGetDatum(c_as_utf8), - CStringGetDatum(s), + CStringGetDatum((char *) c_as_utf8), + CStringGetDatum((char *) s), Int32GetDatum(c_as_utf8_len), BoolGetDatum(false)); } +/* + * Convert a single Unicode code point into a string in the server encoding. + * + * Same as pg_unicode_to_server(), except that we don't throw errors, + * but simply return false on conversion failure. + */ + + /* convert a multibyte string to a wchar */ diff --git a/src/postgres/src_backend_utils_misc_guc.c b/src/postgres/src_backend_utils_misc_guc.c deleted file mode 100644 index c24a2d3f..00000000 --- a/src/postgres/src_backend_utils_misc_guc.c +++ /dev/null @@ -1,1993 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - log_min_messages - * - client_min_messages - * - backtrace_functions - * - backtrace_symbol_list - * - check_function_bodies - *-------------------------------------------------------------------- - */ - -/*-------------------------------------------------------------------- - * guc.c - * - * Support for grand unified configuration scheme, including SET - * command, configuration file, and command line options. - * See src/backend/utils/misc/README for more information. - * - * - * Copyright (c) 2000-2022, PostgreSQL Global Development Group - * Written by Peter Eisentraut . - * - * IDENTIFICATION - * src/backend/utils/misc/guc.c - * - *-------------------------------------------------------------------- - */ -#include "postgres.h" - -#include -#include -#include -#include -#ifdef HAVE_POLL_H -#include -#endif -#ifndef WIN32 -#include -#endif -#include -#ifdef HAVE_SYSLOG -#include -#endif -#include - -#include "access/commit_ts.h" -#include "access/gin.h" -#include "access/rmgr.h" -#include "access/tableam.h" -#include "access/toast_compression.h" -#include "access/transam.h" -#include "access/twophase.h" -#include "access/xact.h" -#include "access/xlog_internal.h" -#include "access/xlogprefetcher.h" -#include "access/xlogrecovery.h" -#include "catalog/namespace.h" -#include "catalog/objectaccess.h" -#include "catalog/pg_authid.h" -#include "catalog/pg_parameter_acl.h" -#include "catalog/storage.h" -#include "commands/async.h" -#include "commands/prepare.h" -#include "commands/tablespace.h" -#include "commands/trigger.h" -#include "commands/user.h" -#include "commands/vacuum.h" -#include "commands/variable.h" -#include "common/string.h" -#include "funcapi.h" -#include "jit/jit.h" -#include "libpq/auth.h" -#include "libpq/libpq.h" -#include "libpq/pqformat.h" -#include "miscadmin.h" -#include "optimizer/cost.h" -#include "optimizer/geqo.h" -#include "optimizer/optimizer.h" -#include "optimizer/paths.h" -#include "optimizer/planmain.h" -#include "parser/parse_expr.h" -#include "parser/parse_type.h" -#include "parser/parser.h" -#include "parser/scansup.h" -#include "pgstat.h" -#include "postmaster/autovacuum.h" -#include "postmaster/bgworker_internals.h" -#include "postmaster/bgwriter.h" -#include "postmaster/postmaster.h" -#include "postmaster/startup.h" -#include "postmaster/syslogger.h" -#include "postmaster/walwriter.h" -#include "replication/logicallauncher.h" -#include "replication/reorderbuffer.h" -#include "replication/slot.h" -#include "replication/syncrep.h" -#include "replication/walreceiver.h" -#include "replication/walsender.h" -#include "storage/bufmgr.h" -#include "storage/dsm_impl.h" -#include "storage/fd.h" -#include "storage/large_object.h" -#include "storage/pg_shmem.h" -#include "storage/predicate.h" -#include "storage/proc.h" -#include "storage/standby.h" -#include "tcop/tcopprot.h" -#include "tsearch/ts_cache.h" -#include "utils/acl.h" -#include "utils/backend_status.h" -#include "utils/builtins.h" -#include "utils/bytea.h" -#include "utils/float.h" -#include "utils/guc_tables.h" -#include "utils/memutils.h" -#include "utils/pg_locale.h" -#include "utils/pg_lsn.h" -#include "utils/plancache.h" -#include "utils/portal.h" -#include "utils/ps_status.h" -#include "utils/queryjumble.h" -#include "utils/rls.h" -#include "utils/snapmgr.h" -#include "utils/tzparser.h" -#include "utils/inval.h" -#include "utils/varlena.h" -#include "utils/xml.h" - -#ifndef PG_KRB_SRVTAB -#define PG_KRB_SRVTAB "" -#endif - -#define CONFIG_FILENAME "postgresql.conf" -#define HBA_FILENAME "pg_hba.conf" -#define IDENT_FILENAME "pg_ident.conf" - -#ifdef EXEC_BACKEND -#define CONFIG_EXEC_PARAMS "global/config_exec_params" -#define CONFIG_EXEC_PARAMS_NEW "global/config_exec_params.new" -#endif - -/* - * Precision with which REAL type guc values are to be printed for GUC - * serialization. - */ -#define REALTYPE_PRECISION 17 - -/* XXX these should appear in other modules' header files */ -extern bool Log_disconnections; -extern int CommitDelay; -extern int CommitSiblings; -extern char *default_tablespace; -extern char *temp_tablespaces; -extern bool ignore_checksum_failure; -extern bool ignore_invalid_pages; -extern bool synchronize_seqscans; - -#ifdef TRACE_SYNCSCAN -extern bool trace_syncscan; -#endif -#ifdef DEBUG_BOUNDED_SORT -extern bool optimize_bounded_sort; -#endif - - - - - -/* global variables for check hook support */ - - - - -static void do_serialize(char **destptr, Size *maxbytes, const char *fmt,...) pg_attribute_printf(3, 4); - -static void set_config_sourcefile(const char *name, char *sourcefile, - int sourceline); -static bool call_bool_check_hook(struct config_bool *conf, bool *newval, - void **extra, GucSource source, int elevel); -static bool call_int_check_hook(struct config_int *conf, int *newval, - void **extra, GucSource source, int elevel); -static bool call_real_check_hook(struct config_real *conf, double *newval, - void **extra, GucSource source, int elevel); -static bool call_string_check_hook(struct config_string *conf, char **newval, - void **extra, GucSource source, int elevel); -static bool call_enum_check_hook(struct config_enum *conf, int *newval, - void **extra, GucSource source, int elevel); - -static bool check_log_destination(char **newval, void **extra, GucSource source); -static void assign_log_destination(const char *newval, void *extra); - -static bool check_wal_consistency_checking(char **newval, void **extra, - GucSource source); -static void assign_wal_consistency_checking(const char *newval, void *extra); - -#ifdef HAVE_SYSLOG - -#else -static int syslog_facility = 0; -#endif - -static void assign_syslog_facility(int newval, void *extra); -static void assign_syslog_ident(const char *newval, void *extra); -static void assign_session_replication_role(int newval, void *extra); -static bool check_temp_buffers(int *newval, void **extra, GucSource source); -static bool check_bonjour(bool *newval, void **extra, GucSource source); -static bool check_ssl(bool *newval, void **extra, GucSource source); -static bool check_stage_log_stats(bool *newval, void **extra, GucSource source); -static bool check_log_stats(bool *newval, void **extra, GucSource source); -static bool check_canonical_path(char **newval, void **extra, GucSource source); -static bool check_timezone_abbreviations(char **newval, void **extra, GucSource source); -static void assign_timezone_abbreviations(const char *newval, void *extra); -static void pg_timezone_abbrev_initialize(void); -static const char *show_archive_command(void); -static void assign_tcp_keepalives_idle(int newval, void *extra); -static void assign_tcp_keepalives_interval(int newval, void *extra); -static void assign_tcp_keepalives_count(int newval, void *extra); -static void assign_tcp_user_timeout(int newval, void *extra); -static const char *show_tcp_keepalives_idle(void); -static const char *show_tcp_keepalives_interval(void); -static const char *show_tcp_keepalives_count(void); -static const char *show_tcp_user_timeout(void); -static bool check_maxconnections(int *newval, void **extra, GucSource source); -static bool check_max_worker_processes(int *newval, void **extra, GucSource source); -static bool check_autovacuum_max_workers(int *newval, void **extra, GucSource source); -static bool check_max_wal_senders(int *newval, void **extra, GucSource source); -static bool check_autovacuum_work_mem(int *newval, void **extra, GucSource source); -static bool check_effective_io_concurrency(int *newval, void **extra, GucSource source); -static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source); -static bool check_huge_page_size(int *newval, void **extra, GucSource source); -static bool check_client_connection_check_interval(int *newval, void **extra, GucSource source); -static void assign_maintenance_io_concurrency(int newval, void *extra); -static bool check_application_name(char **newval, void **extra, GucSource source); -static void assign_application_name(const char *newval, void *extra); -static bool check_cluster_name(char **newval, void **extra, GucSource source); -static const char *show_unix_socket_permissions(void); -static const char *show_log_file_mode(void); -static const char *show_data_directory_mode(void); -static const char *show_in_hot_standby(void); -static bool check_backtrace_functions(char **newval, void **extra, GucSource source); -static void assign_backtrace_functions(const char *newval, void *extra); -static bool check_recovery_target_timeline(char **newval, void **extra, GucSource source); -static void assign_recovery_target_timeline(const char *newval, void *extra); -static bool check_recovery_target(char **newval, void **extra, GucSource source); -static void assign_recovery_target(const char *newval, void *extra); -static bool check_recovery_target_xid(char **newval, void **extra, GucSource source); -static void assign_recovery_target_xid(const char *newval, void *extra); -static bool check_recovery_target_time(char **newval, void **extra, GucSource source); -static void assign_recovery_target_time(const char *newval, void *extra); -static bool check_recovery_target_name(char **newval, void **extra, GucSource source); -static void assign_recovery_target_name(const char *newval, void *extra); -static bool check_recovery_target_lsn(char **newval, void **extra, GucSource source); -static void assign_recovery_target_lsn(const char *newval, void *extra); -static bool check_primary_slot_name(char **newval, void **extra, GucSource source); -static bool check_default_with_oids(bool *newval, void **extra, GucSource source); - -/* Private functions in guc-file.l that need to be called from guc.c */ -static ConfigVariable *ProcessConfigFileInternal(GucContext context, - bool applySettings, int elevel); - -/* - * Track whether there were any deferred checks for custom resource managers - * specified in wal_consistency_checking. - */ - - -/* - * Options for enum values defined in this module. - * - * NOTE! Option values may not contain double quotes! - */ - - - -StaticAssertDecl(lengthof(bytea_output_options) == (BYTEA_OUTPUT_HEX + 2), - "array length mismatch"); - -/* - * We have different sets for client and server message level options because - * they sort slightly different (see "log" level), and because "fatal"/"panic" - * aren't sensible for client_min_messages. - */ - - - - - - -StaticAssertDecl(lengthof(intervalstyle_options) == (INTSTYLE_ISO_8601 + 2), - "array length mismatch"); - - - -StaticAssertDecl(lengthof(log_error_verbosity_options) == (PGERROR_VERBOSE + 2), - "array length mismatch"); - - - -StaticAssertDecl(lengthof(log_statement_options) == (LOGSTMT_ALL + 2), - "array length mismatch"); - - - - - -StaticAssertDecl(lengthof(session_replication_role_options) == (SESSION_REPLICATION_ROLE_LOCAL + 2), - "array length mismatch"); - -#ifdef HAVE_SYSLOG -#else -#endif - - - -StaticAssertDecl(lengthof(track_function_options) == (TRACK_FUNC_ALL + 2), - "array length mismatch"); - - - -StaticAssertDecl(lengthof(stats_fetch_consistency) == (PGSTAT_FETCH_CONSISTENCY_SNAPSHOT + 2), - "array length mismatch"); - - - -StaticAssertDecl(lengthof(xmlbinary_options) == (XMLBINARY_HEX + 2), - "array length mismatch"); - - - -StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2), - "array length mismatch"); - -/* - * Although only "on", "off", and "safe_encoding" are documented, we - * accept all the likely variants of "on" and "off". - */ - - -/* - * Although only "on", "off", and "auto" are documented, we accept - * all the likely variants of "on" and "off". - */ - - -/* - * Although only "on", "off", and "partition" are documented, we - * accept all the likely variants of "on" and "off". - */ - - -/* - * Although only "on", "off", "remote_apply", "remote_write", and "local" are - * documented, we accept all the likely variants of "on" and "off". - */ - - -/* - * Although only "on", "off", "try" are documented, we accept all the likely - * variants of "on" and "off". - */ - - - - - - - - - - - - -StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2), - "array length mismatch"); - -#ifdef HAVE_SYNCFS -#endif - -#ifndef WIN32 -#endif -#ifndef EXEC_BACKEND -#endif -#ifdef WIN32 -#endif - -#ifdef USE_LZ4 -#endif - -#ifdef USE_LZ4 -#endif -#ifdef USE_ZSTD -#endif - -/* - * Options for enum values stored in other modules - */ -extern const struct config_enum_entry wal_level_options[]; -extern const struct config_enum_entry archive_mode_options[]; -extern const struct config_enum_entry recovery_target_action_options[]; -extern const struct config_enum_entry sync_method_options[]; -extern const struct config_enum_entry dynamic_shared_memory_options[]; - -/* - * GUC option variables that are exported from this module - */ - - - - - - - - - - /* this is sort of all three above - * together */ - - - - -__thread bool check_function_bodies = true; - - -/* - * This GUC exists solely for backward compatibility, check its definition for - * details. - */ - - - - -__thread int log_min_messages = WARNING; - -__thread int client_min_messages = NOTICE; - - - - - - - - - -__thread char *backtrace_functions; - -__thread char *backtrace_symbol_list; - - - - - - - - - - - - - - - - - - - - - -/* - * SSL renegotiation was been removed in PostgreSQL 9.5, but we tolerate it - * being set to zero (meaning never renegotiate) for backward compatibility. - * This avoids breaking compatibility with clients that have never supported - * renegotiation and therefore always try to zero it. - */ - - -/* - * This really belongs in pg_shmem.c, but is defined here so that it doesn't - * need to be duplicated in all the different implementations of pg_shmem.c. - */ - - - -/* - * These variables are all dummies that don't do anything, except in some - * cases provide the value for SHOW to display. The real state is elsewhere - * and is kept in sync by assign_hooks. - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* should be static, but commands/variable.c needs to get at this */ - - - -/* - * Displayable names for context types (enum GucContext) - * - * Note: these strings are deliberately not localized. - */ - - -StaticAssertDecl(lengthof(GucContext_Names) == (PGC_USERSET + 1), - "array length mismatch"); - -/* - * Displayable names for source types (enum GucSource) - * - * Note: these strings are deliberately not localized. - */ - - -StaticAssertDecl(lengthof(GucSource_Names) == (PGC_S_SESSION + 1), - "array length mismatch"); - -/* - * Displayable names for the groupings defined in enum config_group - */ - - -StaticAssertDecl(lengthof(config_group_names) == (DEVELOPER_OPTIONS + 2), - "array length mismatch"); - -/* - * Displayable names for GUC variable types (enum config_type) - * - * Note: these strings are deliberately not localized. - */ - - -StaticAssertDecl(lengthof(config_type_names) == (PGC_ENUM + 1), - "array length mismatch"); - -/* - * Unit conversion tables. - * - * There are two tables, one for memory units, and another for time units. - * For each supported conversion from one unit to another, we have an entry - * in the table. - * - * To keep things simple, and to avoid possible roundoff error, - * conversions are never chained. There needs to be a direct conversion - * between all units (of the same type). - * - * The conversions for each base unit must be kept in order from greatest to - * smallest human-friendly unit; convert_xxx_from_base_unit() rely on that. - * (The order of the base-unit groups does not matter.) - */ -#define MAX_UNIT_LEN 3 /* length of longest recognized unit string */ - -typedef struct -{ - char unit[MAX_UNIT_LEN + 1]; /* unit, as a string, like "kB" or - * "min" */ - int base_unit; /* GUC_UNIT_XXX */ - double multiplier; /* Factor for converting unit -> base_unit */ -} unit_conversion; - -/* Ensure that the constants in the tables don't overflow or underflow */ -#if BLCKSZ < 1024 || BLCKSZ > (1024*1024) -#error BLCKSZ must be between 1KB and 1MB -#endif -#if XLOG_BLCKSZ < 1024 || XLOG_BLCKSZ > (1024*1024) -#error XLOG_BLCKSZ must be between 1KB and 1MB -#endif - - - - - - - - - -/* - * Contents of GUC tables - * - * See src/backend/utils/misc/README for design notes. - * - * TO ADD AN OPTION: - * - * 1. Declare a global variable of type bool, int, double, or char* - * and make use of it. - * - * 2. Decide at what times it's safe to set the option. See guc.h for - * details. - * - * 3. Decide on a name, a default value, upper and lower bounds (if - * applicable), etc. - * - * 4. Add a record below. - * - * 5. Add it to src/backend/utils/misc/postgresql.conf.sample, if - * appropriate. - * - * 6. Don't forget to document the option (at least in config.sgml). - * - * 7. If it's a new GUC_LIST_QUOTE option, you must add it to - * variable_is_guc_list_quote() in src/bin/pg_dump/dumputils.c. - */ - - -/******** option records follow ********/ - -#ifdef USE_ASSERT_CHECKING -#else -#endif -#ifdef BTREE_BUILD_STATS -#endif -#ifdef WIN32 -#else -#endif -#ifdef LOCK_DEBUG -#endif -#ifdef TRACE_SORT -#endif -#ifdef TRACE_SYNCSCAN -#endif -#ifdef DEBUG_BOUNDED_SORT -#endif -#ifdef WAL_DEBUG -#endif - - -#ifdef LOCK_DEBUG -#endif -#ifdef USE_PREFETCH -#else -#endif -#ifdef USE_PREFETCH -#else -#endif -#ifdef DISCARD_CACHES_ENABLED -#if defined(CLOBBER_CACHE_RECURSIVELY) -#else -#endif -#else /* not DISCARD_CACHES_ENABLED */ -#endif /* not DISCARD_CACHES_ENABLED */ - - - - - -#ifdef HAVE_UNIX_SOCKETS -#else -#endif -#ifdef USE_SSL -#else -#endif -#ifdef USE_OPENSSL -#else -#endif -#ifdef USE_SSL -#else -#endif - - -#ifdef HAVE_SYSLOG -#else -#endif - -/******** end of options list ********/ - - -/* - * To allow continued support of obsolete names for GUC variables, we apply - * the following mappings to any unrecognized name. Note that an old name - * should be mapped to a new one only if the new variable has very similar - * semantics to the old. - */ - - - -/* - * Actual lookup of variables is done through this single, sorted array. - */ - - -/* Current number of variables contained in the vector */ - - -/* Vector capacity */ - - - - /* true if need to do commit/abort work */ - - /* true to enable GUC_REPORT */ - - /* true if any GUC_REPORT reports are needed */ - - /* 1 when in main transaction */ - - -static int guc_var_compare(const void *a, const void *b); -static int guc_name_compare(const char *namea, const char *nameb); -static void InitializeGUCOptionsFromEnvironment(void); -static void InitializeOneGUCOption(struct config_generic *gconf); -static void push_old_value(struct config_generic *gconf, GucAction action); -static void ReportGUCOption(struct config_generic *record); -static void reapply_stacked_values(struct config_generic *variable, - struct config_string *pHolder, - GucStack *stack, - const char *curvalue, - GucContext curscontext, GucSource cursource, - Oid cursrole); -static void ShowGUCConfigOption(const char *name, DestReceiver *dest); -static void ShowAllGUCConfig(DestReceiver *dest); -static char *_ShowOption(struct config_generic *record, bool use_units); -static bool validate_option_array_item(const char *name, const char *value, - bool skipIfNoPermissions); -static void write_auto_conf_file(int fd, const char *filename, ConfigVariable *head_p); -static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **tail_p, - const char *name, const char *value); - - -/* - * Some infrastructure for checking malloc/strdup/realloc calls - */ - - - - - - - -/* - * Detect whether strval is referenced anywhere in a GUC string item - */ - - -/* - * Support for assigning to a field of a string GUC item. Free the prior - * value if it's not referenced anywhere else in the item (including stacked - * states). - */ - - -/* - * Detect whether an "extra" struct is referenced anywhere in a GUC item - */ - - -/* - * Support for assigning to an "extra" field of a GUC item. Free the prior - * value if it's not referenced anywhere else in the item (including stacked - * states). - */ - - -/* - * Support for copying a variable's active value into a stack entry. - * The "extra" field associated with the active value is copied, too. - * - * NB: be sure stringval and extra fields of a new stack entry are - * initialized to NULL before this is used, else we'll try to free() them. - */ - - -/* - * Support for discarding a no-longer-needed value in a stack entry. - * The "extra" field associated with the stack entry is cleared, too. - */ - - - -/* - * Fetch the sorted array pointer (exported for help_config.c's use ONLY) - */ - - - -/* - * Build the sorted array. This is split out so that it could be - * re-executed after startup (e.g., we could allow loadable modules to - * add vars, and then we'd need to re-sort). - */ - - -/* - * Add a new GUC variable to the list of known variables. The - * list is expanded if needed. - */ - - -/* - * Decide whether a proposed custom variable name is allowed. - * - * It must be two or more identifiers separated by dots, where the rules - * for what is an identifier agree with scan.l. (If you change this rule, - * adjust the errdetail in find_option().) - */ - - -/* - * Create and add a placeholder variable for a custom variable name. - */ - - -/* - * Look up option "name". If it exists, return a pointer to its record. - * Otherwise, if create_placeholders is true and name is a valid-looking - * custom variable name, we'll create and return a placeholder record. - * Otherwise, if skip_errors is true, then we silently return NULL for - * an unrecognized or invalid name. Otherwise, the error is reported at - * error level elevel (and we return NULL if that's less than ERROR). - * - * Note: internal errors, primarily out-of-memory, draw an elevel-level - * report and NULL return regardless of skip_errors. Hence, callers must - * handle a NULL return whenever elevel < ERROR, but they should not need - * to emit any additional error message. (In practice, internal errors - * can only happen when create_placeholders is true, so callers passing - * false need not think terribly hard about this.) - */ - - - -/* - * comparator for qsorting and bsearching guc_variables array - */ - - -/* - * the bare comparison function for GUC names - */ - - - -/* - * Convert a GUC name to the form that should be used in pg_parameter_acl. - * - * We need to canonicalize entries since, for example, case should not be - * significant. In addition, we apply the map_old_guc_names[] mapping so that - * any obsolete names will be converted when stored in a new PG version. - * Note however that this function does not verify legality of the name. - * - * The result is a palloc'd string. - */ - - -/* - * Check whether we should allow creation of a pg_parameter_acl entry - * for the given name. (This can be applied either before or after - * canonicalizing it.) - */ - - - -/* - * Initialize GUC options during program startup. - * - * Note that we cannot read the config file yet, since we have not yet - * processed command-line switches. - */ - - -/* - * If any custom resource managers were specified in the - * wal_consistency_checking GUC, processing was deferred. Now that - * shared_preload_libraries have been loaded, process wal_consistency_checking - * again. - */ - - -/* - * Assign any GUC values that can come from the server's environment. - * - * This is called from InitializeGUCOptions, and also from ProcessConfigFile - * to deal with the possibility that a setting has been removed from - * postgresql.conf and should now get a value from the environment. - * (The latter is a kludge that should probably go away someday; if so, - * fold this back into InitializeGUCOptions.) - */ - - -/* - * Initialize one GUC option variable to its compiled-in default. - * - * Note: the reason for calling check_hooks is not that we think the boot_val - * might fail, but that the hooks might wish to compute an "extra" struct. - */ - - - -/* - * Select the configuration files and data directory to be used, and - * do the initial read of postgresql.conf. - * - * This is called after processing command-line switches. - * userDoption is the -D switch value if any (NULL if unspecified). - * progname is just for use in error messages. - * - * Returns true on success; on failure, prints a suitable error message - * to stderr and returns false. - */ - - - -/* - * Reset all options to their saved default values (implements RESET ALL) - */ - - - -/* - * push_old_value - * Push previous state during transactional assignment to a GUC variable. - */ - - - -/* - * Do GUC processing at main transaction start. - */ - - -/* - * Enter a new nesting level for GUC values. This is called at subtransaction - * start, and when entering a function that has proconfig settings, and in - * some other places where we want to set GUC variables transiently. - * NOTE we must not risk error here, else subtransaction start will be unhappy. - */ - - -/* - * Do GUC processing at transaction or subtransaction commit or abort, or - * when exiting a function that has proconfig settings, or when undoing a - * transient assignment to some GUC variables. (The name is thus a bit of - * a misnomer; perhaps it should be ExitGUCNestLevel or some such.) - * During abort, we discard all GUC settings that were applied at nesting - * levels >= nestLevel. nestLevel == 1 corresponds to the main transaction. - */ - - - -/* - * Start up automatic reporting of changes to variables marked GUC_REPORT. - * This is executed at completion of backend startup. - */ - - -/* - * ReportChangedGUCOptions: report recently-changed GUC_REPORT variables - * - * This is called just before we wait for a new client query. - * - * By handling things this way, we ensure that a ParameterStatus message - * is sent at most once per variable per query, even if the variable - * changed multiple times within the query. That's quite possible when - * using features such as function SET clauses. Function SET clauses - * also tend to cause values to change intraquery but eventually revert - * to their prevailing values; ReportGUCOption is responsible for avoiding - * redundant reports in such cases. - */ - - -/* - * ReportGUCOption: if appropriate, transmit option value to frontend - * - * We need not transmit the value if it's the same as what we last - * transmitted. However, clear the NEEDS_REPORT flag in any case. - */ - - -/* - * Convert a value from one of the human-friendly units ("kB", "min" etc.) - * to the given base unit. 'value' and 'unit' are the input value and unit - * to convert from (there can be trailing spaces in the unit string). - * The converted value is stored in *base_value. - * It's caller's responsibility to round off the converted value as necessary - * and check for out-of-range. - * - * Returns true on success, false if the input unit is not recognized. - */ - - -/* - * Convert an integer value in some base unit to a human-friendly unit. - * - * The output unit is chosen so that it's the greatest unit that can represent - * the value without loss. For example, if the base unit is GUC_UNIT_KB, 1024 - * is converted to 1 MB, but 1025 is represented as 1025 kB. - */ - - -/* - * Convert a floating-point value in some base unit to a human-friendly unit. - * - * Same as above, except we have to do the math a bit differently, and - * there's a possibility that we don't find any exact divisor. - */ - - -/* - * Return the name of a GUC's base unit (e.g. "ms") given its flags. - * Return NULL if the GUC is unitless. - */ - - - -/* - * Try to parse value as an integer. The accepted formats are the - * usual decimal, octal, or hexadecimal formats, as well as floating-point - * formats (which will be rounded to integer after any units conversion). - * Optionally, the value can be followed by a unit name if "flags" indicates - * a unit is allowed. - * - * If the string parses okay, return true, else false. - * If okay and result is not NULL, return the value in *result. - * If not okay and hintmsg is not NULL, *hintmsg is set to a suitable - * HINT message, or NULL if no hint provided. - */ - - -/* - * Try to parse value as a floating point number in the usual format. - * Optionally, the value can be followed by a unit name if "flags" indicates - * a unit is allowed. - * - * If the string parses okay, return true, else false. - * If okay and result is not NULL, return the value in *result. - * If not okay and hintmsg is not NULL, *hintmsg is set to a suitable - * HINT message, or NULL if no hint provided. - */ - - - -/* - * Lookup the name for an enum option with the selected value. - * Should only ever be called with known-valid values, so throws - * an elog(ERROR) if the enum option is not found. - * - * The returned string is a pointer to static data and not - * allocated for modification. - */ - - - -/* - * Lookup the value for an enum option with the selected name - * (case-insensitive). - * If the enum option is found, sets the retval value and returns - * true. If it's not found, return false and retval is set to 0. - */ - - - -/* - * Return a list of all available options for an enum, excluding - * hidden ones, separated by the given separator. - * If prefix is non-NULL, it is added before the first enum value. - * If suffix is non-NULL, it is added to the end of the string. - */ - - -/* - * Parse and validate a proposed value for the specified configuration - * parameter. - * - * This does built-in checks (such as range limits for an integer parameter) - * and also calls any check hook the parameter may have. - * - * record: GUC variable's info record - * name: variable name (should match the record of course) - * value: proposed value, as a string - * source: identifies source of value (check hooks may need this) - * elevel: level to log any error reports at - * newval: on success, converted parameter value is returned here - * newextra: on success, receives any "extra" data returned by check hook - * (caller must initialize *newextra to NULL) - * - * Returns true if OK, false if not (or throws error, if elevel >= ERROR) - */ - - - -/* - * set_config_option: sets option `name' to given value. - * - * The value should be a string, which will be parsed and converted to - * the appropriate data type. The context and source parameters indicate - * in which context this function is being called, so that it can apply the - * access restrictions properly. - * - * If value is NULL, set the option to its default value (normally the - * reset_val, but if source == PGC_S_DEFAULT we instead use the boot_val). - * - * action indicates whether to set the value globally in the session, locally - * to the current top transaction, or just for the duration of a function call. - * - * If changeVal is false then don't really set the option but do all - * the checks to see if it would work. - * - * elevel should normally be passed as zero, allowing this function to make - * its standard choice of ereport level. However some callers need to be - * able to override that choice; they should pass the ereport level to use. - * - * is_reload should be true only when called from read_nondefault_variables() - * or RestoreGUCState(), where we are trying to load some other process's - * GUC settings into a new process. - * - * Return value: - * +1: the value is valid and was successfully applied. - * 0: the name or value is invalid (but see below). - * -1: the value was not applied because of context, priority, or changeVal. - * - * If there is an error (non-existing option, invalid value) then an - * ereport(ERROR) is thrown *unless* this is called for a source for which - * we don't want an ERROR (currently, those are defaults, the config file, - * and per-database or per-user settings, as well as callers who specify - * a less-than-ERROR elevel). In those cases we write a suitable error - * message via ereport() and return 0. - * - * See also SetConfigOption for an external interface. - */ - - -/* - * set_config_option_ext: sets option `name' to given value. - * - * This API adds the ability to explicitly specify which role OID - * is considered to be setting the value. Most external callers can use - * set_config_option() and let it determine that based on the GucSource, - * but there are a few that are supplying a value that was determined - * in some special way and need to override the decision. Also, when - * restoring a previously-assigned value, it's important to supply the - * same role OID that set the value originally; so all guc.c callers - * that are doing that type of thing need to call this directly. - * - * Generally, srole should be GetUserId() when the source is a SQL operation, - * or BOOTSTRAP_SUPERUSERID if the source is a config file or similar. - */ -#define newval (newval_union.boolval) -#undef newval -#define newval (newval_union.intval) -#undef newval -#define newval (newval_union.realval) -#undef newval -#define newval (newval_union.stringval) -#undef newval -#define newval (newval_union.enumval) -#undef newval - - -/* - * Set the fields for source file and line number the setting came from. - */ - - -/* - * Set a config option to the given value. - * - * See also set_config_option; this is just the wrapper to be called from - * outside GUC. (This function should be used when possible, because its API - * is more stable than set_config_option's.) - * - * Note: there is no support here for setting source file/line, as it - * is currently not needed. - */ - - - - -/* - * Fetch the current value of the option `name', as a string. - * - * If the option doesn't exist, return NULL if missing_ok is true (NOTE that - * this cannot be distinguished from a string variable with a NULL value!), - * otherwise throw an ereport and don't return. - * - * If restrict_privileged is true, we also enforce that only superusers and - * members of the pg_read_all_settings role can see GUC_SUPERUSER_ONLY - * variables. This should only be passed as true in user-driven calls. - * - * The string is *not* allocated for modification and is really only - * valid until the next call to configuration related functions. - */ - - -/* - * Get the RESET value associated with the given option. - * - * Note: this is not re-entrant, due to use of static result buffer; - * not to mention that a string variable could have its reset_val changed. - * Beware of assuming the result value is good for very long. - */ - - -/* - * Get the GUC flags associated with the given option. - * - * If the option doesn't exist, return 0 if missing_ok is true, - * otherwise throw an ereport and don't return. - */ - - - -/* - * flatten_set_variable_args - * Given a parsenode List as emitted by the grammar for SET, - * convert to the flat string representation used by GUC. - * - * We need to be told the name of the variable the args are for, because - * the flattening rules vary (ugh). - * - * The result is NULL if args is NIL (i.e., SET ... TO DEFAULT), otherwise - * a palloc'd string. - */ - - -/* - * Write updated configuration parameter values into a temporary file. - * This function traverses the list of parameters and quotes the string - * values before writing them. - */ - - -/* - * Update the given list of configuration parameters, adding, replacing - * or deleting the entry for item "name" (delete if "value" == NULL). - */ - - - -/* - * Execute ALTER SYSTEM statement. - * - * Read the old PG_AUTOCONF_FILENAME file, merge in the new variable value, - * and write out an updated file. If the command is ALTER SYSTEM RESET ALL, - * we can skip reading the old file and just write an empty file. - * - * An LWLock is used to serialize updates of the configuration file. - * - * In case of an error, we leave the original automatic - * configuration file (PG_AUTOCONF_FILENAME) intact. - */ - - -/* - * SET command - */ - - -/* - * Get the value to assign for a VariableSetStmt, or NULL if it's RESET. - * The result is palloc'd. - * - * This is exported for use by actions such as ALTER ROLE SET. - */ - - -/* - * SetPGVariable - SET command exported as an easily-C-callable function. - * - * This provides access to SET TO value, as well as SET TO DEFAULT (expressed - * by passing args == NIL), but not SET FROM CURRENT functionality. - */ - - -/* - * SET command wrapped as a SQL callable function. - */ - - - -/* - * Common code for DefineCustomXXXVariable subroutines: allocate the - * new variable's config struct and fill in generic fields. - */ - - -/* - * Common code for DefineCustomXXXVariable subroutines: insert the new - * variable into the GUC variable array, replacing any placeholder. - */ - - -/* - * Recursive subroutine for define_custom_variable: reapply non-reset values - * - * We recurse so that the values are applied in the same order as originally. - * At each recursion level, apply the upper-level value (passed in) in the - * fashion implied by the stack entry. - */ - - -/* - * Functions for extensions to call to define their custom GUC variables. - */ - - - - - - - - - - -/* - * Mark the given GUC prefix as "reserved". - * - * This deletes any existing placeholders matching the prefix, - * and then prevents new ones from being created. - * Extensions should call this after they've defined all of their custom - * GUCs, to help catch misspelled config-file entries. - */ - - - -/* - * SHOW command - */ - - - - - -/* - * SHOW command - */ - - -/* - * SHOW ALL command - */ - - -/* - * Return an array of modified GUC options to show in EXPLAIN. - * - * We only report options related to query planning (marked with GUC_EXPLAIN), - * with values different from their built-in defaults. - */ - - -/* - * Return GUC variable value by name; optionally return canonical form of - * name. If the GUC is unset, then throw an error unless missing_ok is true, - * in which case return NULL. Return value is palloc'd (but *varname isn't). - */ - - -/* - * Return some of the flags associated to the specified GUC in the shape of - * a text array, and NULL if it does not exist. An empty array is returned - * if the GUC exists without any meaningful flags to show. - */ -#define MAX_GUC_FLAGS 5 - -/* - * Return GUC variable value by variable number; optionally return canonical - * form of name. Return value is palloc'd. - */ - - -/* - * Return the total number of GUC variables - */ - - -/* - * show_config_by_name - equiv to SHOW X command but implemented as - * a function. - */ - - -/* - * show_config_by_name_missing_ok - equiv to SHOW X command but implemented as - * a function. If X does not exist, suppress the error and just return NULL - * if missing_ok is true. - */ - - -/* - * show_all_settings - equiv to SHOW ALL command but implemented as - * a Table Function. - */ -#define NUM_PG_SETTINGS_ATTS 17 - - - -/* - * show_all_file_settings - * - * Returns a table of all parameter settings in all configuration files - * which includes the config file pathname, the line number, a sequence number - * indicating the order in which the settings were encountered, the parameter - * name and value, a bool showing if the value could be applied, and possibly - * an associated error message. (For problems such as syntax errors, the - * parameter name/value might be NULL.) - * - * Note: no filtering is done here, instead we depend on the GRANT system - * to prevent unprivileged users from accessing this function or the view - * built on top of it. - */ -#define NUM_PG_FILE_SETTINGS_ATTS 7 - - - - -#ifdef EXEC_BACKEND - -/* - * These routines dump out all non-default GUC options into a binary - * file that is read by all exec'ed backends. The format is: - * - * variable name, string, null terminated - * variable value, string, null terminated - * variable sourcefile, string, null terminated (empty if none) - * variable sourceline, integer - * variable source, integer - * variable scontext, integer -* variable srole, OID - */ -static void -write_one_nondefault_variable(FILE *fp, struct config_generic *gconf) -{ - if (gconf->source == PGC_S_DEFAULT) - return; - - fprintf(fp, "%s", gconf->name); - fputc(0, fp); - - switch (gconf->vartype) - { - case PGC_BOOL: - { - struct config_bool *conf = (struct config_bool *) gconf; - - if (*conf->variable) - fprintf(fp, "true"); - else - fprintf(fp, "false"); - } - break; - - case PGC_INT: - { - struct config_int *conf = (struct config_int *) gconf; - - fprintf(fp, "%d", *conf->variable); - } - break; - - case PGC_REAL: - { - struct config_real *conf = (struct config_real *) gconf; - - fprintf(fp, "%.17g", *conf->variable); - } - break; - - case PGC_STRING: - { - struct config_string *conf = (struct config_string *) gconf; - - fprintf(fp, "%s", *conf->variable); - } - break; - - case PGC_ENUM: - { - struct config_enum *conf = (struct config_enum *) gconf; - - fprintf(fp, "%s", - config_enum_lookup_by_value(conf, *conf->variable)); - } - break; - } - - fputc(0, fp); - - if (gconf->sourcefile) - fprintf(fp, "%s", gconf->sourcefile); - fputc(0, fp); - - fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp); - fwrite(&gconf->source, 1, sizeof(gconf->source), fp); - fwrite(&gconf->scontext, 1, sizeof(gconf->scontext), fp); - fwrite(&gconf->srole, 1, sizeof(gconf->srole), fp); -} - -void -write_nondefault_variables(GucContext context) -{ - int elevel; - FILE *fp; - int i; - - Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP); - - elevel = (context == PGC_SIGHUP) ? LOG : ERROR; - - /* - * Open file - */ - fp = AllocateFile(CONFIG_EXEC_PARAMS_NEW, "w"); - if (!fp) - { - ereport(elevel, - (errcode_for_file_access(), - errmsg("could not write to file \"%s\": %m", - CONFIG_EXEC_PARAMS_NEW))); - return; - } - - for (i = 0; i < num_guc_variables; i++) - { - write_one_nondefault_variable(fp, guc_variables[i]); - } - - if (FreeFile(fp)) - { - ereport(elevel, - (errcode_for_file_access(), - errmsg("could not write to file \"%s\": %m", - CONFIG_EXEC_PARAMS_NEW))); - return; - } - - /* - * Put new file in place. This could delay on Win32, but we don't hold - * any exclusive locks. - */ - rename(CONFIG_EXEC_PARAMS_NEW, CONFIG_EXEC_PARAMS); -} - - -/* - * Read string, including null byte from file - * - * Return NULL on EOF and nothing read - */ -static char * -read_string_with_null(FILE *fp) -{ - int i = 0, - ch, - maxlen = 256; - char *str = NULL; - - do - { - if ((ch = fgetc(fp)) == EOF) - { - if (i == 0) - return NULL; - else - elog(FATAL, "invalid format of exec config params file"); - } - if (i == 0) - str = guc_malloc(FATAL, maxlen); - else if (i == maxlen) - str = guc_realloc(FATAL, str, maxlen *= 2); - str[i++] = ch; - } while (ch != 0); - - return str; -} - - -/* - * This routine loads a previous postmaster dump of its non-default - * settings. - */ -void -read_nondefault_variables(void) -{ - FILE *fp; - char *varname, - *varvalue, - *varsourcefile; - int varsourceline; - GucSource varsource; - GucContext varscontext; - Oid varsrole; - - /* - * Open file - */ - fp = AllocateFile(CONFIG_EXEC_PARAMS, "r"); - if (!fp) - { - /* File not found is fine */ - if (errno != ENOENT) - ereport(FATAL, - (errcode_for_file_access(), - errmsg("could not read from file \"%s\": %m", - CONFIG_EXEC_PARAMS))); - return; - } - - for (;;) - { - struct config_generic *record; - - if ((varname = read_string_with_null(fp)) == NULL) - break; - - if ((record = find_option(varname, true, false, FATAL)) == NULL) - elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname); - - if ((varvalue = read_string_with_null(fp)) == NULL) - elog(FATAL, "invalid format of exec config params file"); - if ((varsourcefile = read_string_with_null(fp)) == NULL) - elog(FATAL, "invalid format of exec config params file"); - if (fread(&varsourceline, 1, sizeof(varsourceline), fp) != sizeof(varsourceline)) - elog(FATAL, "invalid format of exec config params file"); - if (fread(&varsource, 1, sizeof(varsource), fp) != sizeof(varsource)) - elog(FATAL, "invalid format of exec config params file"); - if (fread(&varscontext, 1, sizeof(varscontext), fp) != sizeof(varscontext)) - elog(FATAL, "invalid format of exec config params file"); - if (fread(&varsrole, 1, sizeof(varsrole), fp) != sizeof(varsrole)) - elog(FATAL, "invalid format of exec config params file"); - - (void) set_config_option_ext(varname, varvalue, - varscontext, varsource, varsrole, - GUC_ACTION_SET, true, 0, true); - if (varsourcefile[0]) - set_config_sourcefile(varname, varsourcefile, varsourceline); - - free(varname); - free(varvalue); - free(varsourcefile); - } - - FreeFile(fp); -} -#endif /* EXEC_BACKEND */ - -/* - * can_skip_gucvar: - * Decide whether SerializeGUCState can skip sending this GUC variable, - * or whether RestoreGUCState can skip resetting this GUC to default. - * - * It is somewhat magical and fragile that the same test works for both cases. - * Realize in particular that we are very likely selecting different sets of - * GUCs on the leader and worker sides! Be sure you've understood the - * comments here and in RestoreGUCState thoroughly before changing this. - */ - - -/* - * estimate_variable_size: - * Compute space needed for dumping the given GUC variable. - * - * It's OK to overestimate, but not to underestimate. - */ - - -/* - * EstimateGUCStateSpace: - * Returns the size needed to store the GUC state for the current process - */ - - -/* - * do_serialize: - * Copies the formatted string into the destination. Moves ahead the - * destination pointer, and decrements the maxbytes by that many bytes. If - * maxbytes is not sufficient to copy the string, error out. - */ - - -/* Binary copy version of do_serialize() */ - - -/* - * serialize_variable: - * Dumps name, value and other information of a GUC variable into destptr. - */ - - -/* - * SerializeGUCState: - * Dumps the complete GUC state onto the memory location at start_address. - */ - - -/* - * read_gucstate: - * Actually it does not read anything, just returns the srcptr. But it does - * move the srcptr past the terminating zero byte, so that the caller is ready - * to read the next string. - */ - - -/* Binary read version of read_gucstate(). Copies into dest */ - - -/* - * Callback used to add a context message when reporting errors that occur - * while trying to restore GUCs in parallel workers. - */ - - -/* - * RestoreGUCState: - * Reads the GUC state at the specified address and sets this process's - * GUCs to match. - * - * Note that this provides the worker with only a very shallow view of the - * leader's GUC state: we'll know about the currently active values, but not - * about stacked or reset values. That's fine since the worker is just - * executing one part of a query, within which the active values won't change - * and the stacked values are invisible. - */ - - -/* - * A little "long argument" simulation, although not quite GNU - * compliant. Takes a string of the form "some-option=some value" and - * returns name = "some_option" and value = "some value" in malloc'ed - * storage. Note that '-' is converted to '_' in the option name. If - * there is no '=' in the input string then value will be NULL. - */ - - - -/* - * Handle options fetched from pg_db_role_setting.setconfig, - * pg_proc.proconfig, etc. Caller must specify proper context/source/action. - * - * The array parameter must be an array of TEXT (it must not be NULL). - */ - - - -/* - * Add an entry to an option array. The array parameter may be NULL - * to indicate the current table entry is NULL. - */ - - - -/* - * Delete an entry from an option array. The array parameter may be NULL - * to indicate the current table entry is NULL. Also, if the return value - * is NULL then a null should be stored. - */ - - - -/* - * Given a GUC array, delete all settings from it that our permission - * level allows: if superuser, delete them all; if regular user, only - * those that are PGC_USERSET or we have permission to set - */ - - -/* - * Validate a proposed option setting for GUCArrayAdd/Delete/Reset. - * - * name is the option name. value is the proposed value for the Add case, - * or NULL for the Delete/Reset cases. If skipIfNoPermissions is true, it's - * not an error to have no permissions to set the option. - * - * Returns true if OK, false if skipIfNoPermissions is true and user does not - * have permission to change this option (all other error cases result in an - * error being thrown). - */ - - - -/* - * Called by check_hooks that want to override the normal - * ERRCODE_INVALID_PARAMETER_VALUE SQLSTATE for check hook failures. - * - * Note that GUC_check_errmsg() etc are just macros that result in a direct - * assignment to the associated variables. That is ugly, but forced by the - * limitations of C's macro mechanisms. - */ - - - -/* - * Convenience functions to manage calling a variable's check_hook. - * These mostly take care of the protocol for letting check hooks supply - * portions of the error report on failure. - */ - - - - - - - - - - - - -/* - * check_hook, assign_hook and show_hook subroutines - */ - - - - - -#ifdef HAVE_SYSLOG -#endif -#ifdef WIN32 -#endif - - - -#ifdef HAVE_SYSLOG -#endif - -#ifdef HAVE_SYSLOG -#endif - - - - - - -#ifndef USE_BONJOUR -#endif - -#ifndef USE_SSL -#endif - - - - - - - - - - - -/* - * pg_timezone_abbrev_initialize --- set default value if not done already - * - * This is called after initial loading of postgresql.conf. If no - * timezone_abbreviations setting was found therein, select default. - * If a non-default value is already installed, nothing will happen. - * - * This can also be called from ProcessConfigFile to establish the default - * value after a postgresql.conf entry for it is removed. - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef USE_PREFETCH -#endif /* USE_PREFETCH */ - -#ifndef USE_PREFETCH -#endif /* USE_PREFETCH */ - -#if !(defined(MAP_HUGE_MASK) && defined(MAP_HUGE_SHIFT)) -#endif - - - -#ifdef USE_PREFETCH -#endif - - - - - - - - - - - - - - - -/* - * We split the input string, where commas separate function names - * and certain whitespace chars are ignored, into a \0-separated (and - * \0\0-terminated) list of function names. This formulation allows - * easy scanning when an error is thrown while avoiding the use of - * non-reentrant strtok(), as well as keeping the output data in a - * single palloc() chunk. - */ - - - - - - - - -/* - * Recovery target settings: Only one of the several recovery_target* settings - * may be set. Setting a second one results in an error. The global variable - * recoveryTarget tracks which kind of recovery target was chosen. Other - * variables store the actual target value (for example a string or a xid). - * The assign functions of the parameters check whether a competing parameter - * was already set. But we want to allow setting the same parameter multiple - * times. We also want to allow unsetting a parameter and setting a different - * one, so we unset recoveryTarget when the parameter is set to an empty - * string. - */ - - - - - - - - - - - -/* - * The interpretation of the recovery_target_time string can depend on the - * time zone setting, so we need to wait until after all GUC processing is - * done before we can do the final parsing of the string. This check function - * only does a parsing pass to catch syntax errors, but we store the string - * and parse it again when we need to use it. - */ - - - - - - - - - - - - - - - - -#include "guc-file.c" diff --git a/src/postgres/src_backend_utils_misc_guc_tables.c b/src/postgres/src_backend_utils_misc_guc_tables.c new file mode 100644 index 00000000..7188a5a8 --- /dev/null +++ b/src/postgres/src_backend_utils_misc_guc_tables.c @@ -0,0 +1,494 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - log_min_messages + * - client_min_messages + * - backtrace_functions + * - check_function_bodies + *-------------------------------------------------------------------- + */ + +/*-------------------------------------------------------------------- + * + * guc_tables.c + * + * Static tables for the Grand Unified Configuration scheme. + * + * Many of these tables are const. However, ConfigureNamesBool[] + * and so on are not, because the structs in those arrays are actually + * the live per-variable state data that guc.c manipulates. While many of + * their fields are intended to be constant, some fields change at runtime. + * + * + * Copyright (c) 2000-2023, PostgreSQL Global Development Group + * Written by Peter Eisentraut . + * + * IDENTIFICATION + * src/backend/utils/misc/guc_tables.c + * + *-------------------------------------------------------------------- + */ +#include "postgres.h" + +#include +#include +#ifdef HAVE_SYSLOG +#include +#endif + +#include "access/commit_ts.h" +#include "access/gin.h" +#include "access/toast_compression.h" +#include "access/twophase.h" +#include "access/xlog_internal.h" +#include "access/xlogprefetcher.h" +#include "access/xlogrecovery.h" +#include "archive/archive_module.h" +#include "catalog/namespace.h" +#include "catalog/storage.h" +#include "commands/async.h" +#include "commands/tablespace.h" +#include "commands/trigger.h" +#include "commands/user.h" +#include "commands/vacuum.h" +#include "common/scram-common.h" +#include "jit/jit.h" +#include "libpq/auth.h" +#include "libpq/libpq.h" +#include "libpq/scram.h" +#include "nodes/queryjumble.h" +#include "optimizer/cost.h" +#include "optimizer/geqo.h" +#include "optimizer/optimizer.h" +#include "optimizer/paths.h" +#include "optimizer/planmain.h" +#include "parser/parse_expr.h" +#include "parser/parser.h" +#include "pgstat.h" +#include "postmaster/autovacuum.h" +#include "postmaster/bgworker_internals.h" +#include "postmaster/bgwriter.h" +#include "postmaster/postmaster.h" +#include "postmaster/startup.h" +#include "postmaster/syslogger.h" +#include "postmaster/walwriter.h" +#include "replication/logicallauncher.h" +#include "replication/slot.h" +#include "replication/syncrep.h" +#include "storage/bufmgr.h" +#include "storage/large_object.h" +#include "storage/pg_shmem.h" +#include "storage/predicate.h" +#include "storage/standby.h" +#include "tcop/tcopprot.h" +#include "tsearch/ts_cache.h" +#include "utils/builtins.h" +#include "utils/bytea.h" +#include "utils/float.h" +#include "utils/guc_hooks.h" +#include "utils/guc_tables.h" +#include "utils/memutils.h" +#include "utils/pg_locale.h" +#include "utils/portal.h" +#include "utils/ps_status.h" +#include "utils/inval.h" +#include "utils/xml.h" + +/* This value is normally passed in from the Makefile */ +#ifndef PG_KRB_SRVTAB +#define PG_KRB_SRVTAB "" +#endif + +/* XXX these should appear in other modules' header files */ +extern bool Log_disconnections; +extern int CommitDelay; +extern int CommitSiblings; +extern char *default_tablespace; +extern char *temp_tablespaces; +extern bool ignore_checksum_failure; +extern bool ignore_invalid_pages; + +#ifdef TRACE_SYNCSCAN +extern bool trace_syncscan; +#endif +#ifdef DEBUG_BOUNDED_SORT +extern bool optimize_bounded_sort; +#endif + +/* + * Options for enum values defined in this module. + * + * NOTE! Option values may not contain double quotes! + */ + + + +StaticAssertDecl(lengthof(bytea_output_options) == (BYTEA_OUTPUT_HEX + 2), + "array length mismatch"); + +/* + * We have different sets for client and server message level options because + * they sort slightly different (see "log" level), and because "fatal"/"panic" + * aren't sensible for client_min_messages. + */ + + + + + + + + +StaticAssertDecl(lengthof(intervalstyle_options) == (INTSTYLE_ISO_8601 + 2), + "array length mismatch"); + + + +StaticAssertDecl(lengthof(log_error_verbosity_options) == (PGERROR_VERBOSE + 2), + "array length mismatch"); + + + +StaticAssertDecl(lengthof(log_statement_options) == (LOGSTMT_ALL + 2), + "array length mismatch"); + + + + + +StaticAssertDecl(lengthof(session_replication_role_options) == (SESSION_REPLICATION_ROLE_LOCAL + 2), + "array length mismatch"); + +#ifdef HAVE_SYSLOG +#else +#endif + + + +StaticAssertDecl(lengthof(track_function_options) == (TRACK_FUNC_ALL + 2), + "array length mismatch"); + + + +StaticAssertDecl(lengthof(stats_fetch_consistency) == (PGSTAT_FETCH_CONSISTENCY_SNAPSHOT + 2), + "array length mismatch"); + + + +StaticAssertDecl(lengthof(xmlbinary_options) == (XMLBINARY_HEX + 2), + "array length mismatch"); + + + +StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2), + "array length mismatch"); + +/* + * Although only "on", "off", and "safe_encoding" are documented, we + * accept all the likely variants of "on" and "off". + */ + + +/* + * Although only "on", "off", and "auto" are documented, we accept + * all the likely variants of "on" and "off". + */ + + +/* + * Although only "on", "off", and "partition" are documented, we + * accept all the likely variants of "on" and "off". + */ + + +/* + * Although only "on", "off", "remote_apply", "remote_write", and "local" are + * documented, we accept all the likely variants of "on" and "off". + */ + + +/* + * Although only "on", "off", "try" are documented, we accept all the likely + * variants of "on" and "off". + */ + + + + + + + + + + + + + + +StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2), + "array length mismatch"); + +#ifdef HAVE_SYNCFS +#endif + +#ifndef WIN32 +#endif +#ifndef EXEC_BACKEND +#endif +#ifdef WIN32 +#endif + +#ifdef USE_LZ4 +#endif + +#ifdef USE_LZ4 +#endif +#ifdef USE_ZSTD +#endif + +/* + * Options for enum values stored in other modules + */ +extern const struct config_enum_entry wal_level_options[]; +extern const struct config_enum_entry archive_mode_options[]; +extern const struct config_enum_entry recovery_target_action_options[]; +extern const struct config_enum_entry sync_method_options[]; +extern const struct config_enum_entry dynamic_shared_memory_options[]; + +/* + * GUC option variables that are exported from this module + */ + + + + + + + + + + /* this is sort of all three above + * together */ + + + + +__thread bool check_function_bodies = true; + + +/* + * This GUC exists solely for backward compatibility, check its definition for + * details. + */ + + + + +__thread int log_min_messages = WARNING; + +__thread int client_min_messages = NOTICE; + + + + + + + + + +__thread char *backtrace_functions; + + + + + + + + + + + + + + + + + + + +/* + * SSL renegotiation was been removed in PostgreSQL 9.5, but we tolerate it + * being set to zero (meaning never renegotiate) for backward compatibility. + * This avoids breaking compatibility with clients that have never supported + * renegotiation and therefore always try to zero it. + */ + + +/* + * This really belongs in pg_shmem.c, but is defined here so that it doesn't + * need to be duplicated in all the different implementations of pg_shmem.c. + */ + + + +/* + * These variables are all dummies that don't do anything, except in some + * cases provide the value for SHOW to display. The real state is elsewhere + * and is kept in sync by assign_hooks. + */ + + + + + + + + + +#ifdef HAVE_SYSLOG +#define DEFAULT_SYSLOG_FACILITY LOG_LOCAL0 +#else +#define DEFAULT_SYSLOG_FACILITY 0 +#endif + + + + + + + + + + + + + + + + + + +#ifdef USE_ASSERT_CHECKING +#define DEFAULT_ASSERT_ENABLED true +#else +#define DEFAULT_ASSERT_ENABLED false +#endif + + + + + + + + +/* should be static, but commands/variable.c needs to get at this */ + + +/* should be static, but guc.c needs to get at this */ + + + +/* + * Displayable names for context types (enum GucContext) + * + * Note: these strings are deliberately not localized. + */ + + +StaticAssertDecl(lengthof(GucContext_Names) == (PGC_USERSET + 1), + "array length mismatch"); + +/* + * Displayable names for source types (enum GucSource) + * + * Note: these strings are deliberately not localized. + */ + + +StaticAssertDecl(lengthof(GucSource_Names) == (PGC_S_SESSION + 1), + "array length mismatch"); + +/* + * Displayable names for the groupings defined in enum config_group + */ + + +StaticAssertDecl(lengthof(config_group_names) == (DEVELOPER_OPTIONS + 2), + "array length mismatch"); + +/* + * Displayable names for GUC variable types (enum config_type) + * + * Note: these strings are deliberately not localized. + */ + + +StaticAssertDecl(lengthof(config_type_names) == (PGC_ENUM + 1), + "array length mismatch"); + + +/* + * Contents of GUC tables + * + * See src/backend/utils/misc/README for design notes. + * + * TO ADD AN OPTION: + * + * 1. Declare a global variable of type bool, int, double, or char* + * and make use of it. + * + * 2. Decide at what times it's safe to set the option. See guc.h for + * details. + * + * 3. Decide on a name, a default value, upper and lower bounds (if + * applicable), etc. + * + * 4. Add a record below. + * + * 5. Add it to src/backend/utils/misc/postgresql.conf.sample, if + * appropriate. + * + * 6. Don't forget to document the option (at least in config.sgml). + * + * 7. If it's a new GUC_LIST_QUOTE option, you must add it to + * variable_is_guc_list_quote() in src/bin/pg_dump/dumputils.c. + */ + +#ifdef BTREE_BUILD_STATS +#endif +#ifdef LOCK_DEBUG +#endif +#ifdef TRACE_SORT +#endif +#ifdef TRACE_SYNCSCAN +#endif +#ifdef DEBUG_BOUNDED_SORT +#endif +#ifdef WAL_DEBUG +#endif + + +#ifdef LOCK_DEBUG +#endif +#ifdef DISCARD_CACHES_ENABLED +#if defined(CLOBBER_CACHE_RECURSIVELY) +#else +#endif +#else /* not DISCARD_CACHES_ENABLED */ +#endif /* not DISCARD_CACHES_ENABLED */ + + + + + +#ifdef USE_SSL +#else +#endif +#ifdef USE_OPENSSL +#else +#endif +#ifdef USE_SSL +#else +#endif + + + diff --git a/src/postgres/src_backend_utils_mmgr_alignedalloc.c b/src/postgres/src_backend_utils_mmgr_alignedalloc.c new file mode 100644 index 00000000..c6eddd24 --- /dev/null +++ b/src/postgres/src_backend_utils_mmgr_alignedalloc.c @@ -0,0 +1,163 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - AlignedAllocFree + * - AlignedAllocRealloc + * - AlignedAllocGetChunkContext + * - AlignedAllocGetChunkSpace + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * alignedalloc.c + * Allocator functions to implement palloc_aligned + * + * This is not a fully-fledged MemoryContext type as there is no means to + * create a MemoryContext of this type. The code here only serves to allow + * operations such as pfree() and repalloc() to work correctly on a memory + * chunk that was allocated by palloc_aligned(). + * + * Portions Copyright (c) 2022-2023, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/backend/utils/mmgr/alignedalloc.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "utils/memdebug.h" +#include "utils/memutils_memorychunk.h" + +/* + * AlignedAllocFree +* Frees allocated memory; memory is removed from its owning context. +*/ +void +AlignedAllocFree(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + void *unaligned; + + VALGRIND_MAKE_MEM_DEFINED(chunk, sizeof(MemoryChunk)); + + Assert(!MemoryChunkIsExternal(chunk)); + + /* obtain the original (unaligned) allocated pointer */ + unaligned = MemoryChunkGetBlock(chunk); + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + GetMemoryChunkContext(unaligned)->name, chunk); +#endif + + pfree(unaligned); +} + +/* + * AlignedAllocRealloc + * Change the allocated size of a chunk and return possibly a different + * pointer to a memory address aligned to the same boundary as the + * originally requested alignment. The contents of 'pointer' will be + * copied into the returned pointer up until 'size'. Any additional + * memory will be uninitialized. + */ +void * +AlignedAllocRealloc(void *pointer, Size size) +{ + MemoryChunk *redirchunk = PointerGetMemoryChunk(pointer); + Size alignto; + void *unaligned; + MemoryContext ctx; + Size old_size; + void *newptr; + + VALGRIND_MAKE_MEM_DEFINED(redirchunk, sizeof(MemoryChunk)); + + alignto = MemoryChunkGetValue(redirchunk); + unaligned = MemoryChunkGetBlock(redirchunk); + + /* sanity check this is a power of 2 value */ + Assert((alignto & (alignto - 1)) == 0); + + /* + * Determine the size of the original allocation. We can't determine this + * exactly as GetMemoryChunkSpace() returns the total space used for the + * allocation, which for contexts like aset includes rounding up to the + * next power of 2. However, this value is just used to memcpy() the old + * data into the new allocation, so we only need to concern ourselves with + * not reading beyond the end of the original allocation's memory. The + * drawback here is that we may copy more bytes than we need to, which + * only amounts to wasted effort. We can safely subtract the extra bytes + * that we requested to allow us to align the pointer. We must also + * subtract the space for the unaligned pointer's MemoryChunk since + * GetMemoryChunkSpace should have included that. This does assume that + * all context types use MemoryChunk as a chunk header. + */ + old_size = GetMemoryChunkSpace(unaligned) - + PallocAlignedExtraBytes(alignto) - sizeof(MemoryChunk); + +#ifdef MEMORY_CONTEXT_CHECKING + /* check that GetMemoryChunkSpace returned something realistic */ + Assert(old_size >= redirchunk->requested_size); +#endif + + ctx = GetMemoryChunkContext(unaligned); + newptr = MemoryContextAllocAligned(ctx, size, alignto, 0); + + /* + * We may memcpy beyond the end of the original allocation request size, + * so we must mark the entire allocation as defined. + */ + VALGRIND_MAKE_MEM_DEFINED(pointer, old_size); + memcpy(newptr, pointer, Min(size, old_size)); + pfree(unaligned); + + return newptr; +} + +/* + * AlignedAllocGetChunkContext + * Return the MemoryContext that 'pointer' belongs to. + */ +MemoryContext +AlignedAllocGetChunkContext(void *pointer) +{ + MemoryChunk *redirchunk = PointerGetMemoryChunk(pointer); + MemoryContext cxt; + + VALGRIND_MAKE_MEM_DEFINED(redirchunk, sizeof(MemoryChunk)); + + Assert(!MemoryChunkIsExternal(redirchunk)); + + cxt = GetMemoryChunkContext(MemoryChunkGetBlock(redirchunk)); + + VALGRIND_MAKE_MEM_NOACCESS(redirchunk, sizeof(MemoryChunk)); + + return cxt; +} + +/* + * AlignedAllocGetChunkSpace + * Given a currently-allocated chunk, determine the total space + * it occupies (including all memory-allocation overhead). + */ +Size +AlignedAllocGetChunkSpace(void *pointer) +{ + MemoryChunk *redirchunk = PointerGetMemoryChunk(pointer); + void *unaligned; + Size space; + + VALGRIND_MAKE_MEM_DEFINED(redirchunk, sizeof(MemoryChunk)); + + unaligned = MemoryChunkGetBlock(redirchunk); + space = GetMemoryChunkSpace(unaligned); + + VALGRIND_MAKE_MEM_NOACCESS(redirchunk, sizeof(MemoryChunk)); + + return space; +} diff --git a/src/postgres/src_backend_utils_mmgr_aset.c b/src/postgres/src_backend_utils_mmgr_aset.c index 5716e7b8..9795aa73 100644 --- a/src/postgres/src_backend_utils_mmgr_aset.c +++ b/src/postgres/src_backend_utils_mmgr_aset.c @@ -1,18 +1,18 @@ /*-------------------------------------------------------------------- * Symbols referenced in this file: - * - AllocSetContextCreateInternal - * - context_freelists - * - AllocSetMethods * - AllocSetAlloc * - AllocSetFreeIndex * - AllocSetFree * - AllocSetRealloc * - AllocSetReset * - AllocSetDelete + * - context_freelists + * - AllocSetGetChunkContext * - AllocSetGetChunkSpace * - AllocSetIsEmpty * - AllocSetStats * - AllocSetCheck + * - AllocSetContextCreateInternal * - AllocSetDeleteFreeList *-------------------------------------------------------------------- */ @@ -26,7 +26,7 @@ * type. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION @@ -68,6 +68,8 @@ #include "port/pg_bitutils.h" #include "utils/memdebug.h" #include "utils/memutils.h" +#include "utils/memutils_memorychunk.h" +#include "utils/memutils_internal.h" /*-------------------- * Chunk freelist k holds chunks of size 1 << (k + ALLOC_MINBITS), @@ -85,7 +87,9 @@ * CAUTION: ALLOC_MINBITS must be large enough so that * 1<= 0 && (fidx) < ALLOCSET_NUM_FREELISTS) + +/* Determine the size of the chunk based on the freelist index */ +#define GetChunkSizeFromFreeListIdx(fidx) \ + ((((Size) 1) << ALLOC_MINBITS) << (fidx)) + /* * AllocSetContext is our standard implementation of MemoryContext. * @@ -142,7 +173,7 @@ typedef struct AllocSetContext MemoryContextData header; /* Standard memory-context fields */ /* Info about storage allocated in this context: */ AllocBlock blocks; /* head of list of blocks in this set */ - AllocChunk freelist[ALLOCSET_NUM_FREELISTS]; /* free chunk lists */ + MemoryChunk *freelist[ALLOCSET_NUM_FREELISTS]; /* free chunk lists */ /* Allocation parameters for this context: */ Size initBlockSize; /* initial block size */ Size maxBlockSize; /* maximum block size */ @@ -158,8 +189,8 @@ typedef AllocSetContext *AllocSet; /* * AllocBlock * An AllocBlock is the unit of memory that is obtained by aset.c - * from malloc(). It contains one or more AllocChunks, which are - * the units requested by palloc() and freed by pfree(). AllocChunks + * from malloc(). It contains one or more MemoryChunks, which are + * the units requested by palloc() and freed by pfree(). MemoryChunks * cannot be returned to malloc() individually, instead they are put * on freelists by pfree() and re-used by the next palloc() that has * a matching request size. @@ -176,50 +207,6 @@ typedef struct AllocBlockData char *endptr; /* end of space in this block */ } AllocBlockData; -/* - * AllocChunk - * The prefix of each piece of memory in an AllocBlock - * - * Note: to meet the memory context APIs, the payload area of the chunk must - * be maxaligned, and the "aset" link must be immediately adjacent to the - * payload area (cf. GetMemoryChunkContext). We simplify matters for this - * module by requiring sizeof(AllocChunkData) to be maxaligned, and then - * we can ensure things work by adding any required alignment padding before - * the "aset" field. There is a static assertion below that the alignment - * is done correctly. - */ -typedef struct AllocChunkData -{ - /* size is always the size of the usable space in the chunk */ - Size size; -#ifdef MEMORY_CONTEXT_CHECKING - /* when debugging memory usage, also store actual requested size */ - /* this is zero in a free chunk */ - Size requested_size; - -#define ALLOCCHUNK_RAWSIZE (SIZEOF_SIZE_T * 2 + SIZEOF_VOID_P) -#else -#define ALLOCCHUNK_RAWSIZE (SIZEOF_SIZE_T + SIZEOF_VOID_P) -#endif /* MEMORY_CONTEXT_CHECKING */ - - /* ensure proper alignment by adding padding if needed */ -#if (ALLOCCHUNK_RAWSIZE % MAXIMUM_ALIGNOF) != 0 - char padding[MAXIMUM_ALIGNOF - ALLOCCHUNK_RAWSIZE % MAXIMUM_ALIGNOF]; -#endif - - /* aset is the owning aset if allocated, or the freelist link if free */ - void *aset; - /* there must not be any padding to reach a MAXALIGN boundary here! */ -} AllocChunkData; - -/* - * Only the "aset" field should be accessed outside this module. - * We keep the rest of an allocated chunk's header marked NOACCESS when using - * valgrind. But note that chunk headers that are in a freelist are kept - * accessible, for simplicity. - */ -#define ALLOCCHUNK_PRIVATE_LEN offsetof(AllocChunkData, aset) - /* * AllocPointerIsValid * True iff pointer is valid allocation pointer. @@ -230,12 +217,23 @@ typedef struct AllocChunkData * AllocSetIsValid * True iff set is valid allocation set. */ -#define AllocSetIsValid(set) PointerIsValid(set) +#define AllocSetIsValid(set) \ + (PointerIsValid(set) && IsA(set, AllocSetContext)) -#define AllocPointerGetChunk(ptr) \ - ((AllocChunk)(((char *)(ptr)) - ALLOC_CHUNKHDRSZ)) -#define AllocChunkGetPointer(chk) \ - ((AllocPointer)(((char *)(chk)) + ALLOC_CHUNKHDRSZ)) +/* + * AllocBlockIsValid + * True iff block is valid block of allocation set. + */ +#define AllocBlockIsValid(block) \ + (PointerIsValid(block) && AllocSetIsValid((block)->aset)) + +/* + * We always store external chunks on a dedicated block. This makes fetching + * the block from an external chunk easy since it's always the first and only + * chunk on the block. + */ +#define ExternalChunkGetBlock(chunk) \ + (AllocBlock) ((char *) chunk - ALLOC_BLOCKHDRSZ) /* * Rather than repeatedly creating and deleting memory contexts, we keep some @@ -280,42 +278,6 @@ static __thread AllocSetFreeList context_freelists[2] = }; -/* - * These functions implement the MemoryContext API for AllocSet contexts. - */ -static void *AllocSetAlloc(MemoryContext context, Size size); -static void AllocSetFree(MemoryContext context, void *pointer); -static void *AllocSetRealloc(MemoryContext context, void *pointer, Size size); -static void AllocSetReset(MemoryContext context); -static void AllocSetDelete(MemoryContext context); -static Size AllocSetGetChunkSpace(MemoryContext context, void *pointer); -static bool AllocSetIsEmpty(MemoryContext context); -static void AllocSetStats(MemoryContext context, - MemoryStatsPrintFunc printfunc, void *passthru, - MemoryContextCounters *totals, - bool print_to_stderr); - -#ifdef MEMORY_CONTEXT_CHECKING -static void AllocSetCheck(MemoryContext context); -#endif - -/* - * This is the virtual function table for AllocSet contexts. - */ -static const MemoryContextMethods AllocSetMethods = { - AllocSetAlloc, - AllocSetFree, - AllocSetRealloc, - AllocSetReset, - AllocSetDelete, - AllocSetGetChunkSpace, - AllocSetIsEmpty, - AllocSetStats -#ifdef MEMORY_CONTEXT_CHECKING - ,AllocSetCheck -#endif -}; - /* ---------- * AllocSetFreeIndex - @@ -339,7 +301,7 @@ AllocSetFreeIndex(Size size) * or equivalently * pg_leftmost_one_pos32(size - 1) - ALLOC_MINBITS + 1 * - * However, rather than just calling that function, we duplicate the + * However, for platforms without intrinsic support, we duplicate the * logic here, allowing an additional optimization. It's reasonable * to assume that ALLOC_CHUNK_LIMIT fits in 16 bits, so we can unroll * the byte-at-a-time loop in pg_leftmost_one_pos32 and just handle @@ -349,14 +311,14 @@ AllocSetFreeIndex(Size size) * much trouble. *---------- */ -#ifdef HAVE__BUILTIN_CLZ - idx = 31 - __builtin_clz((uint32) size - 1) - ALLOC_MINBITS + 1; +#ifdef HAVE_BITSCAN_REVERSE + idx = pg_leftmost_one_pos32((uint32) size - 1) - ALLOC_MINBITS + 1; #else uint32 t, tsize; /* Statically assert that we only have a 16-bit input value. */ - StaticAssertStmt(ALLOC_CHUNK_LIMIT < (1 << 16), + StaticAssertDecl(ALLOC_CHUNK_LIMIT < (1 << 16), "ALLOC_CHUNK_LIMIT must be less than 64kB"); tsize = size - 1; @@ -407,18 +369,24 @@ AllocSetContextCreateInternal(MemoryContext parent, AllocSet set; AllocBlock block; - /* Assert we padded AllocChunkData properly */ - StaticAssertStmt(ALLOC_CHUNKHDRSZ == MAXALIGN(ALLOC_CHUNKHDRSZ), - "sizeof(AllocChunkData) is not maxaligned"); - StaticAssertStmt(offsetof(AllocChunkData, aset) + sizeof(MemoryContext) == - ALLOC_CHUNKHDRSZ, - "padding calculation in AllocChunkData is wrong"); + /* ensure MemoryChunk's size is properly maxaligned */ + StaticAssertDecl(ALLOC_CHUNKHDRSZ == MAXALIGN(ALLOC_CHUNKHDRSZ), + "sizeof(MemoryChunk) is not maxaligned"); + /* check we have enough space to store the freelist link */ + StaticAssertDecl(sizeof(AllocFreeListLink) <= (1 << ALLOC_MINBITS), + "sizeof(AllocFreeListLink) larger than minimum allocation size"); /* * First, validate allocation parameters. Once these were regular runtime - * test and elog's, but in practice Asserts seem sufficient because nobody - * varies their parameters at runtime. We somewhat arbitrarily enforce a - * minimum 1K block size. + * tests and elog's, but in practice Asserts seem sufficient because + * nobody varies their parameters at runtime. We somewhat arbitrarily + * enforce a minimum 1K block size. We restrict the maximum block size to + * MEMORYCHUNK_MAX_BLOCKOFFSET as MemoryChunks are limited to this in + * regards to addressing the offset between the chunk and the block that + * the chunk is stored on. We would be unable to store the offset between + * the chunk and block for any chunks that were beyond + * MEMORYCHUNK_MAX_BLOCKOFFSET bytes into the block if the block was to be + * larger than this. */ Assert(initBlockSize == MAXALIGN(initBlockSize) && initBlockSize >= 1024); @@ -429,6 +397,7 @@ AllocSetContextCreateInternal(MemoryContext parent, (minContextSize == MAXALIGN(minContextSize) && minContextSize >= 1024 && minContextSize <= maxBlockSize)); + Assert(maxBlockSize <= MEMORYCHUNK_MAX_BLOCKOFFSET); /* * Check whether the parameters match either available freelist. We do @@ -463,7 +432,7 @@ AllocSetContextCreateInternal(MemoryContext parent, /* Reinitialize its header, installing correct name and parent */ MemoryContextCreate((MemoryContext) set, T_AllocSetContext, - &AllocSetMethods, + MCTX_ASET_ID, parent, name); @@ -537,15 +506,20 @@ AllocSetContextCreateInternal(MemoryContext parent, * requests that are all the maximum chunk size we will waste at most * 1/8th of the allocated space. * - * We have to have allocChunkLimit a power of two, because the requested - * and actually-allocated sizes of any chunk must be on the same side of - * the limit, else we get confused about whether the chunk is "big". - * * Also, allocChunkLimit must not exceed ALLOCSET_SEPARATE_THRESHOLD. */ StaticAssertStmt(ALLOC_CHUNK_LIMIT == ALLOCSET_SEPARATE_THRESHOLD, "ALLOC_CHUNK_LIMIT != ALLOCSET_SEPARATE_THRESHOLD"); + /* + * Determine the maximum size that a chunk can be before we allocate an + * entire AllocBlock dedicated for that chunk. We set the absolute limit + * of that size as ALLOC_CHUNK_LIMIT but we reduce it further so that we + * can fit about ALLOC_CHUNK_FRACTION chunks this size on a maximally + * sized block. (We opt to keep allocChunkLimit a power-of-2 value + * primarily for legacy reasons rather than calculating it so that exactly + * ALLOC_CHUNK_FRACTION chunks fit on a maximally sized block.) + */ set->allocChunkLimit = ALLOC_CHUNK_LIMIT; while ((Size) (set->allocChunkLimit + ALLOC_CHUNKHDRSZ) > (Size) ((maxBlockSize - ALLOC_BLOCKHDRSZ) / ALLOC_CHUNK_FRACTION)) @@ -554,7 +528,7 @@ AllocSetContextCreateInternal(MemoryContext parent, /* Finally, do the type-independent part of context creation */ MemoryContextCreate((MemoryContext) set, T_AllocSetContext, - &AllocSetMethods, + MCTX_ASET_ID, parent, name); @@ -575,21 +549,23 @@ AllocSetContextCreateInternal(MemoryContext parent, * thrash malloc() when a context is repeatedly reset after small allocations, * which is typical behavior for per-tuple contexts. */ -static void +void AllocSetReset(MemoryContext context) { AllocSet set = (AllocSet) context; AllocBlock block; - Size keepersize PG_USED_FOR_ASSERTS_ONLY - = set->keeper->endptr - ((char *) set); + Size keepersize PG_USED_FOR_ASSERTS_ONLY; - AssertArg(AllocSetIsValid(set)); + Assert(AllocSetIsValid(set)); #ifdef MEMORY_CONTEXT_CHECKING /* Check for corruption and leaks before freeing */ AllocSetCheck(context); #endif + /* Remember keeper block size for Assert below */ + keepersize = set->keeper->endptr - ((char *) set); + /* Clear chunk freelists */ MemSetAligned(set->freelist, 0, sizeof(set->freelist)); @@ -643,21 +619,23 @@ AllocSetReset(MemoryContext context) * * Unlike AllocSetReset, this *must* free all resources of the set. */ -static void +void AllocSetDelete(MemoryContext context) { AllocSet set = (AllocSet) context; AllocBlock block = set->blocks; - Size keepersize PG_USED_FOR_ASSERTS_ONLY - = set->keeper->endptr - ((char *) set); + Size keepersize PG_USED_FOR_ASSERTS_ONLY; - AssertArg(AllocSetIsValid(set)); + Assert(AllocSetIsValid(set)); #ifdef MEMORY_CONTEXT_CHECKING /* Check for corruption and leaks before freeing */ AllocSetCheck(context); #endif + /* Remember keeper block size for Assert below */ + keepersize = set->keeper->endptr - ((char *) set); + /* * If the context is a candidate for a freelist, put it into that freelist * instead of destroying it. @@ -737,17 +715,17 @@ AllocSetDelete(MemoryContext context) * is marked, as mcxt.c will set it to UNDEFINED. In some paths we will * return space that is marked NOACCESS - AllocSetRealloc has to beware! */ -static void * +void * AllocSetAlloc(MemoryContext context, Size size) { AllocSet set = (AllocSet) context; AllocBlock block; - AllocChunk chunk; + MemoryChunk *chunk; int fidx; Size chunk_size; Size blksize; - AssertArg(AllocSetIsValid(set)); + Assert(AllocSetIsValid(set)); /* * If requested size exceeds maximum for chunks, allocate an entire block @@ -755,7 +733,13 @@ AllocSetAlloc(MemoryContext context, Size size) */ if (size > set->allocChunkLimit) { +#ifdef MEMORY_CONTEXT_CHECKING + /* ensure there's always space for the sentinel byte */ + chunk_size = MAXALIGN(size + 1); +#else chunk_size = MAXALIGN(size); +#endif + blksize = chunk_size + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ; block = (AllocBlock) malloc(blksize); if (block == NULL) @@ -766,18 +750,20 @@ AllocSetAlloc(MemoryContext context, Size size) block->aset = set; block->freeptr = block->endptr = ((char *) block) + blksize; - chunk = (AllocChunk) (((char *) block) + ALLOC_BLOCKHDRSZ); - chunk->aset = set; - chunk->size = chunk_size; + chunk = (MemoryChunk *) (((char *) block) + ALLOC_BLOCKHDRSZ); + + /* mark the MemoryChunk as externally managed */ + MemoryChunkSetHdrMaskExternal(chunk, MCTX_ASET_ID); + #ifdef MEMORY_CONTEXT_CHECKING chunk->requested_size = size; /* set mark to catch clobber of "unused" space */ - if (size < chunk_size) - set_sentinel(AllocChunkGetPointer(chunk), size); + Assert(size < chunk_size); + set_sentinel(MemoryChunkGetPointer(chunk), size); #endif #ifdef RANDOMIZE_ALLOCATED_MEMORY /* fill the allocated space with junk */ - randomize_mem((char *) AllocChunkGetPointer(chunk), size); + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); #endif /* @@ -800,13 +786,13 @@ AllocSetAlloc(MemoryContext context, Size size) } /* Ensure any padding bytes are marked NOACCESS. */ - VALGRIND_MAKE_MEM_NOACCESS((char *) AllocChunkGetPointer(chunk) + size, + VALGRIND_MAKE_MEM_NOACCESS((char *) MemoryChunkGetPointer(chunk) + size, chunk_size - size); - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); - return AllocChunkGetPointer(chunk); + return MemoryChunkGetPointer(chunk); } /* @@ -814,42 +800,54 @@ AllocSetAlloc(MemoryContext context, Size size) * corresponding free list to see if there is a free chunk we could reuse. * If one is found, remove it from the free list, make it again a member * of the alloc set and return its data address. + * + * Note that we don't attempt to ensure there's space for the sentinel + * byte here. We expect a large proportion of allocations to be for sizes + * which are already a power of 2. If we were to always make space for a + * sentinel byte in MEMORY_CONTEXT_CHECKING builds, then we'd end up + * doubling the memory requirements for such allocations. */ fidx = AllocSetFreeIndex(size); chunk = set->freelist[fidx]; if (chunk != NULL) { - Assert(chunk->size >= size); + AllocFreeListLink *link = GetFreeListLink(chunk); + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); - set->freelist[fidx] = (AllocChunk) chunk->aset; + Assert(fidx == MemoryChunkGetValue(chunk)); - chunk->aset = (void *) set; + /* pop this chunk off the freelist */ + VALGRIND_MAKE_MEM_DEFINED(link, sizeof(AllocFreeListLink)); + set->freelist[fidx] = link->next; + VALGRIND_MAKE_MEM_NOACCESS(link, sizeof(AllocFreeListLink)); #ifdef MEMORY_CONTEXT_CHECKING chunk->requested_size = size; /* set mark to catch clobber of "unused" space */ - if (size < chunk->size) - set_sentinel(AllocChunkGetPointer(chunk), size); + if (size < GetChunkSizeFromFreeListIdx(fidx)) + set_sentinel(MemoryChunkGetPointer(chunk), size); #endif #ifdef RANDOMIZE_ALLOCATED_MEMORY /* fill the allocated space with junk */ - randomize_mem((char *) AllocChunkGetPointer(chunk), size); + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); #endif /* Ensure any padding bytes are marked NOACCESS. */ - VALGRIND_MAKE_MEM_NOACCESS((char *) AllocChunkGetPointer(chunk) + size, - chunk->size - size); + VALGRIND_MAKE_MEM_NOACCESS((char *) MemoryChunkGetPointer(chunk) + size, + GetChunkSizeFromFreeListIdx(fidx) - size); - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); - return AllocChunkGetPointer(chunk); + return MemoryChunkGetPointer(chunk); } /* * Choose the actual chunk size to allocate. */ - chunk_size = (1 << ALLOC_MINBITS) << fidx; + chunk_size = GetChunkSizeFromFreeListIdx(fidx); Assert(chunk_size >= size); /* @@ -876,6 +874,7 @@ AllocSetAlloc(MemoryContext context, Size size) */ while (availspace >= ((1 << ALLOC_MINBITS) + ALLOC_CHUNKHDRSZ)) { + AllocFreeListLink *link; Size availchunk = availspace - ALLOC_CHUNKHDRSZ; int a_fidx = AllocSetFreeIndex(availchunk); @@ -884,29 +883,34 @@ AllocSetAlloc(MemoryContext context, Size size) * freelist than the one we need to put this chunk on. The * exception is when availchunk is exactly a power of 2. */ - if (availchunk != ((Size) 1 << (a_fidx + ALLOC_MINBITS))) + if (availchunk != GetChunkSizeFromFreeListIdx(a_fidx)) { a_fidx--; Assert(a_fidx >= 0); - availchunk = ((Size) 1 << (a_fidx + ALLOC_MINBITS)); + availchunk = GetChunkSizeFromFreeListIdx(a_fidx); } - chunk = (AllocChunk) (block->freeptr); + chunk = (MemoryChunk *) (block->freeptr); /* Prepare to initialize the chunk header. */ VALGRIND_MAKE_MEM_UNDEFINED(chunk, ALLOC_CHUNKHDRSZ); - block->freeptr += (availchunk + ALLOC_CHUNKHDRSZ); availspace -= (availchunk + ALLOC_CHUNKHDRSZ); - chunk->size = availchunk; + /* store the freelist index in the value field */ + MemoryChunkSetHdrMask(chunk, block, a_fidx, MCTX_ASET_ID); #ifdef MEMORY_CONTEXT_CHECKING - chunk->requested_size = 0; /* mark it free */ + chunk->requested_size = InvalidAllocSize; /* mark it free */ #endif - chunk->aset = (void *) set->freelist[a_fidx]; + /* push this chunk onto the free list */ + link = GetFreeListLink(chunk); + + VALGRIND_MAKE_MEM_DEFINED(link, sizeof(AllocFreeListLink)); + link->next = set->freelist[a_fidx]; + VALGRIND_MAKE_MEM_NOACCESS(link, sizeof(AllocFreeListLink)); + set->freelist[a_fidx] = chunk; } - /* Mark that we need to create a new block */ block = NULL; } @@ -974,7 +978,7 @@ AllocSetAlloc(MemoryContext context, Size size) /* * OK, do the allocation */ - chunk = (AllocChunk) (block->freeptr); + chunk = (MemoryChunk *) (block->freeptr); /* Prepare to initialize the chunk header. */ VALGRIND_MAKE_MEM_UNDEFINED(chunk, ALLOC_CHUNKHDRSZ); @@ -982,69 +986,67 @@ AllocSetAlloc(MemoryContext context, Size size) block->freeptr += (chunk_size + ALLOC_CHUNKHDRSZ); Assert(block->freeptr <= block->endptr); - chunk->aset = (void *) set; - chunk->size = chunk_size; + /* store the free list index in the value field */ + MemoryChunkSetHdrMask(chunk, block, fidx, MCTX_ASET_ID); + #ifdef MEMORY_CONTEXT_CHECKING chunk->requested_size = size; /* set mark to catch clobber of "unused" space */ - if (size < chunk->size) - set_sentinel(AllocChunkGetPointer(chunk), size); + if (size < chunk_size) + set_sentinel(MemoryChunkGetPointer(chunk), size); #endif #ifdef RANDOMIZE_ALLOCATED_MEMORY /* fill the allocated space with junk */ - randomize_mem((char *) AllocChunkGetPointer(chunk), size); + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); #endif /* Ensure any padding bytes are marked NOACCESS. */ - VALGRIND_MAKE_MEM_NOACCESS((char *) AllocChunkGetPointer(chunk) + size, + VALGRIND_MAKE_MEM_NOACCESS((char *) MemoryChunkGetPointer(chunk) + size, chunk_size - size); - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); - return AllocChunkGetPointer(chunk); + return MemoryChunkGetPointer(chunk); } /* * AllocSetFree * Frees allocated memory; memory is removed from the set. */ -static void -AllocSetFree(MemoryContext context, void *pointer) +void +AllocSetFree(void *pointer) { - AllocSet set = (AllocSet) context; - AllocChunk chunk = AllocPointerGetChunk(pointer); - - /* Allow access to private part of chunk header. */ - VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOCCHUNK_PRIVATE_LEN); + AllocSet set; + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); -#ifdef MEMORY_CONTEXT_CHECKING - /* Test for someone scribbling on unused space in chunk */ - if (chunk->requested_size < chunk->size) - if (!sentinel_ok(pointer, chunk->requested_size)) - elog(WARNING, "detected write past chunk end in %s %p", - set->header.name, chunk); -#endif + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); - if (chunk->size > set->allocChunkLimit) + if (MemoryChunkIsExternal(chunk)) { - /* - * Big chunks are certain to have been allocated as single-chunk - * blocks. Just unlink that block and return it to malloc(). - */ - AllocBlock block = (AllocBlock) (((char *) chunk) - ALLOC_BLOCKHDRSZ); + /* Release single-chunk block. */ + AllocBlock block = ExternalChunkGetBlock(chunk); /* - * Try to verify that we have a sane block pointer: it should - * reference the correct aset, and freeptr and endptr should point - * just past the chunk. + * Try to verify that we have a sane block pointer: the block header + * should reference an aset and the freeptr should match the endptr. */ - if (block->aset != set || - block->freeptr != block->endptr || - block->freeptr != ((char *) block) + - (chunk->size + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ)) + if (!AllocBlockIsValid(block) || block->freeptr != block->endptr) elog(ERROR, "could not find block containing chunk %p", chunk); + set = block->aset; + +#ifdef MEMORY_CONTEXT_CHECKING + { + /* Test for someone scribbling on unused space in chunk */ + Assert(chunk->requested_size < (block->endptr - (char *) pointer)); + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + set->header.name, chunk); + } +#endif + /* OK, remove block from aset's list and free it */ if (block->prev) block->prev->next = block->next; @@ -1053,7 +1055,7 @@ AllocSetFree(MemoryContext context, void *pointer) if (block->next) block->next->prev = block->prev; - context->mem_allocated -= block->endptr - ((char *) block); + set->header.mem_allocated -= block->endptr - ((char *) block); #ifdef CLOBBER_FREED_MEMORY wipe_mem(block, block->freeptr - ((char *) block)); @@ -1062,20 +1064,48 @@ AllocSetFree(MemoryContext context, void *pointer) } else { - /* Normal case, put the chunk into appropriate freelist */ - int fidx = AllocSetFreeIndex(chunk->size); + AllocBlock block = MemoryChunkGetBlock(chunk); + int fidx; + AllocFreeListLink *link; + + /* + * In this path, for speed reasons we just Assert that the referenced + * block is good. We can also Assert that the value field is sane. + * Future field experience may show that these Asserts had better + * become regular runtime test-and-elog checks. + */ + Assert(AllocBlockIsValid(block)); + set = block->aset; - chunk->aset = (void *) set->freelist[fidx]; + fidx = MemoryChunkGetValue(chunk); + Assert(FreeListIdxIsValid(fidx)); + link = GetFreeListLink(chunk); + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + if (chunk->requested_size < GetChunkSizeFromFreeListIdx(fidx)) + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + set->header.name, chunk); +#endif #ifdef CLOBBER_FREED_MEMORY - wipe_mem(pointer, chunk->size); + wipe_mem(pointer, GetChunkSizeFromFreeListIdx(fidx)); #endif + /* push this chunk onto the top of the free list */ + VALGRIND_MAKE_MEM_DEFINED(link, sizeof(AllocFreeListLink)); + link->next = set->freelist[fidx]; + VALGRIND_MAKE_MEM_NOACCESS(link, sizeof(AllocFreeListLink)); + set->freelist[fidx] = chunk; #ifdef MEMORY_CONTEXT_CHECKING - /* Reset requested_size to 0 in chunks that are on freelist */ - chunk->requested_size = 0; + + /* + * Reset requested_size to InvalidAllocSize in chunks that are on free + * list. + */ + chunk->requested_size = InvalidAllocSize; #endif - set->freelist[fidx] = chunk; } } @@ -1091,57 +1121,56 @@ AllocSetFree(MemoryContext context, void *pointer) * (In principle, we could use VALGRIND_GET_VBITS() to rediscover the old * request size.) */ -static void * -AllocSetRealloc(MemoryContext context, void *pointer, Size size) +void * +AllocSetRealloc(void *pointer, Size size) { - AllocSet set = (AllocSet) context; - AllocChunk chunk = AllocPointerGetChunk(pointer); - Size oldsize; - - /* Allow access to private part of chunk header. */ - VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOCCHUNK_PRIVATE_LEN); - - oldsize = chunk->size; + AllocBlock block; + AllocSet set; + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + Size oldchksize; + int fidx; -#ifdef MEMORY_CONTEXT_CHECKING - /* Test for someone scribbling on unused space in chunk */ - if (chunk->requested_size < oldsize) - if (!sentinel_ok(pointer, chunk->requested_size)) - elog(WARNING, "detected write past chunk end in %s %p", - set->header.name, chunk); -#endif + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); - if (oldsize > set->allocChunkLimit) + if (MemoryChunkIsExternal(chunk)) { /* * The chunk must have been allocated as a single-chunk block. Use * realloc() to make the containing block bigger, or smaller, with * minimum space wastage. */ - AllocBlock block = (AllocBlock) (((char *) chunk) - ALLOC_BLOCKHDRSZ); Size chksize; Size blksize; Size oldblksize; + block = ExternalChunkGetBlock(chunk); + /* - * Try to verify that we have a sane block pointer: it should - * reference the correct aset, and freeptr and endptr should point - * just past the chunk. + * Try to verify that we have a sane block pointer: the block header + * should reference an aset and the freeptr should match the endptr. */ - if (block->aset != set || - block->freeptr != block->endptr || - block->freeptr != ((char *) block) + - (oldsize + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ)) + if (!AllocBlockIsValid(block) || block->freeptr != block->endptr) elog(ERROR, "could not find block containing chunk %p", chunk); - /* - * Even if the new request is less than set->allocChunkLimit, we stick - * with the single-chunk block approach. Therefore we need - * chunk->size to be bigger than set->allocChunkLimit, so we don't get - * confused about the chunk's status in future calls. - */ - chksize = Max(size, set->allocChunkLimit + 1); - chksize = MAXALIGN(chksize); + set = block->aset; + + oldchksize = block->endptr - (char *) pointer; + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + Assert(chunk->requested_size < oldchksize); + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + set->header.name, chunk); +#endif + +#ifdef MEMORY_CONTEXT_CHECKING + /* ensure there's always space for the sentinel byte */ + chksize = MAXALIGN(size + 1); +#else + chksize = MAXALIGN(size); +#endif /* Do the realloc */ blksize = chksize + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ; @@ -1150,77 +1179,109 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) block = (AllocBlock) realloc(block, blksize); if (block == NULL) { - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return NULL; } /* updated separately, not to underflow when (oldblksize > blksize) */ - context->mem_allocated -= oldblksize; - context->mem_allocated += blksize; + set->header.mem_allocated -= oldblksize; + set->header.mem_allocated += blksize; block->freeptr = block->endptr = ((char *) block) + blksize; /* Update pointers since block has likely been moved */ - chunk = (AllocChunk) (((char *) block) + ALLOC_BLOCKHDRSZ); - pointer = AllocChunkGetPointer(chunk); + chunk = (MemoryChunk *) (((char *) block) + ALLOC_BLOCKHDRSZ); + pointer = MemoryChunkGetPointer(chunk); if (block->prev) block->prev->next = block; else set->blocks = block; if (block->next) block->next->prev = block; - chunk->size = chksize; #ifdef MEMORY_CONTEXT_CHECKING #ifdef RANDOMIZE_ALLOCATED_MEMORY - /* We can only fill the extra space if we know the prior request */ + + /* + * We can only randomize the extra space if we know the prior request. + * When using Valgrind, randomize_mem() also marks memory UNDEFINED. + */ if (size > chunk->requested_size) randomize_mem((char *) pointer + chunk->requested_size, size - chunk->requested_size); -#endif +#else /* - * realloc() (or randomize_mem()) will have left any newly-allocated - * part UNDEFINED, but we may need to adjust trailing bytes from the - * old allocation. + * If this is an increase, realloc() will have marked any + * newly-allocated part (from oldchksize to chksize) UNDEFINED, but we + * also need to adjust trailing bytes from the old allocation (from + * chunk->requested_size to oldchksize) as they are marked NOACCESS. + * Make sure not to mark too many bytes in case chunk->requested_size + * < size < oldchksize. */ #ifdef USE_VALGRIND - if (oldsize > chunk->requested_size) + if (Min(size, oldchksize) > chunk->requested_size) VALGRIND_MAKE_MEM_UNDEFINED((char *) pointer + chunk->requested_size, - oldsize - chunk->requested_size); + Min(size, oldchksize) - chunk->requested_size); +#endif #endif chunk->requested_size = size; - /* set mark to catch clobber of "unused" space */ - if (size < chunk->size) - set_sentinel(pointer, size); + Assert(size < chksize); + set_sentinel(pointer, size); #else /* !MEMORY_CONTEXT_CHECKING */ /* - * We don't know how much of the old chunk size was the actual - * allocation; it could have been as small as one byte. We have to be - * conservative and just mark the entire old portion DEFINED. + * We may need to adjust marking of bytes from the old allocation as + * some of them may be marked NOACCESS. We don't know how much of the + * old chunk size was the requested size; it could have been as small + * as one byte. We have to be conservative and just mark the entire + * old portion DEFINED. Make sure not to mark memory beyond the new + * allocation in case it's smaller than the old one. */ - VALGRIND_MAKE_MEM_DEFINED(pointer, oldsize); + VALGRIND_MAKE_MEM_DEFINED(pointer, Min(size, oldchksize)); #endif /* Ensure any padding bytes are marked NOACCESS. */ VALGRIND_MAKE_MEM_NOACCESS((char *) pointer + size, chksize - size); - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header . */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return pointer; } + block = MemoryChunkGetBlock(chunk); + + /* + * In this path, for speed reasons we just Assert that the referenced + * block is good. We can also Assert that the value field is sane. Future + * field experience may show that these Asserts had better become regular + * runtime test-and-elog checks. + */ + Assert(AllocBlockIsValid(block)); + set = block->aset; + + fidx = MemoryChunkGetValue(chunk); + Assert(FreeListIdxIsValid(fidx)); + oldchksize = GetChunkSizeFromFreeListIdx(fidx); + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + if (chunk->requested_size < oldchksize) + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + set->header.name, chunk); +#endif + /* * Chunk sizes are aligned to power of 2 in AllocSetAlloc(). Maybe the * allocated area already is >= the new size. (In particular, we will * fall out here if the requested size is a decrease.) */ - else if (oldsize >= size) + if (oldchksize >= size) { #ifdef MEMORY_CONTEXT_CHECKING Size oldrequest = chunk->requested_size; @@ -1243,10 +1304,10 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) size - oldrequest); else VALGRIND_MAKE_MEM_NOACCESS((char *) pointer + size, - oldsize - size); + oldchksize - size); /* set mark to catch clobber of "unused" space */ - if (size < oldsize) + if (size < oldchksize) set_sentinel(pointer, size); #else /* !MEMORY_CONTEXT_CHECKING */ @@ -1255,12 +1316,12 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) * the old request or shrinking it, so we conservatively mark the * entire new allocation DEFINED. */ - VALGRIND_MAKE_MEM_NOACCESS(pointer, oldsize); + VALGRIND_MAKE_MEM_NOACCESS(pointer, oldchksize); VALGRIND_MAKE_MEM_DEFINED(pointer, size); #endif - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return pointer; } @@ -1278,6 +1339,7 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) * memory indefinitely. See pgsql-hackers archives for 2007-08-11.) */ AllocPointer newPointer; + Size oldsize; /* allocate new chunk */ newPointer = AllocSetAlloc((MemoryContext) set, size); @@ -1285,8 +1347,8 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) /* leave immediately if request was not completed */ if (newPointer == NULL) { - /* Disallow external access to private part of chunk header. */ - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); return NULL; } @@ -1302,6 +1364,7 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) #ifdef MEMORY_CONTEXT_CHECKING oldsize = chunk->requested_size; #else + oldsize = oldchksize; VALGRIND_MAKE_MEM_DEFINED(pointer, oldsize); #endif @@ -1309,36 +1372,84 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) memcpy(newPointer, pointer, oldsize); /* free old chunk */ - AllocSetFree((MemoryContext) set, pointer); + AllocSetFree(pointer); return newPointer; } } +/* + * AllocSetGetChunkContext + * Return the MemoryContext that 'pointer' belongs to. + */ +MemoryContext +AllocSetGetChunkContext(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + AllocBlock block; + AllocSet set; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + block = ExternalChunkGetBlock(chunk); + else + block = (AllocBlock) MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); + + Assert(AllocBlockIsValid(block)); + set = block->aset; + + return &set->header; +} + /* * AllocSetGetChunkSpace * Given a currently-allocated chunk, determine the total space * it occupies (including all memory-allocation overhead). */ -static Size -AllocSetGetChunkSpace(MemoryContext context, void *pointer) +Size +AllocSetGetChunkSpace(void *pointer) { - AllocChunk chunk = AllocPointerGetChunk(pointer); - Size result; + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + int fidx; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + AllocBlock block = ExternalChunkGetBlock(chunk); - VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOCCHUNK_PRIVATE_LEN); - result = chunk->size + ALLOC_CHUNKHDRSZ; - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); - return result; + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); + + Assert(AllocBlockIsValid(block)); + + return block->endptr - (char *) chunk; + } + + fidx = MemoryChunkGetValue(chunk); + Assert(FreeListIdxIsValid(fidx)); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); + + return GetChunkSizeFromFreeListIdx(fidx) + ALLOC_CHUNKHDRSZ; } /* * AllocSetIsEmpty * Is an allocset empty of any allocated space? */ -static bool +bool AllocSetIsEmpty(MemoryContext context) { + Assert(AllocSetIsValid(context)); + /* * For now, we say "empty" only if the context is new or just reset. We * could examine the freelists to determine if all space has been freed, @@ -1359,7 +1470,7 @@ AllocSetIsEmpty(MemoryContext context) * totals: if not NULL, add stats about this context into *totals. * print_to_stderr: print stats to stderr if true, elog otherwise. */ -static void +void AllocSetStats(MemoryContext context, MemoryStatsPrintFunc printfunc, void *passthru, MemoryContextCounters *totals, bool print_to_stderr) @@ -1372,6 +1483,8 @@ AllocSetStats(MemoryContext context, AllocBlock block; int fidx; + Assert(AllocSetIsValid(set)); + /* Include context header in totalspace */ totalspace = MAXALIGN(sizeof(AllocSetContext)); @@ -1383,13 +1496,24 @@ AllocSetStats(MemoryContext context, } for (fidx = 0; fidx < ALLOCSET_NUM_FREELISTS; fidx++) { - AllocChunk chunk; + Size chksz = GetChunkSizeFromFreeListIdx(fidx); + MemoryChunk *chunk = set->freelist[fidx]; - for (chunk = set->freelist[fidx]; chunk != NULL; - chunk = (AllocChunk) chunk->aset) + while (chunk != NULL) { + AllocFreeListLink *link = GetFreeListLink(chunk); + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); + Assert(MemoryChunkGetValue(chunk) == fidx); + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); + freechunks++; - freespace += chunk->size + ALLOC_CHUNKHDRSZ; + freespace += chksz + ALLOC_CHUNKHDRSZ; + + VALGRIND_MAKE_MEM_DEFINED(link, sizeof(AllocFreeListLink)); + chunk = link->next; + VALGRIND_MAKE_MEM_NOACCESS(link, sizeof(AllocFreeListLink)); } } @@ -1424,7 +1548,7 @@ AllocSetStats(MemoryContext context, * find yourself in an infinite loop when trouble occurs, because this * routine will be entered again when elog cleanup tries to release memory! */ -static void +void AllocSetCheck(MemoryContext context) { AllocSet set = (AllocSet) context; @@ -1441,6 +1565,7 @@ AllocSetCheck(MemoryContext context) long blk_used = block->freeptr - bpoz; long blk_data = 0; long nchunks = 0; + bool has_external_chunk = false; if (set->keeper == block) total_allocated += block->endptr - ((char *) set); @@ -1472,56 +1597,64 @@ AllocSetCheck(MemoryContext context) */ while (bpoz < block->freeptr) { - AllocChunk chunk = (AllocChunk) bpoz; + MemoryChunk *chunk = (MemoryChunk *) bpoz; Size chsize, dsize; - /* Allow access to private part of chunk header. */ - VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, ALLOC_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + chsize = block->endptr - (char *) MemoryChunkGetPointer(chunk); /* aligned chunk size */ + has_external_chunk = true; + + /* make sure this chunk consumes the entire block */ + if (chsize + ALLOC_CHUNKHDRSZ != blk_used) + elog(WARNING, "problem in alloc set %s: bad single-chunk %p in block %p", + name, chunk, block); + } + else + { + int fidx = MemoryChunkGetValue(chunk); + + if (!FreeListIdxIsValid(fidx)) + elog(WARNING, "problem in alloc set %s: bad chunk size for chunk %p in block %p", + name, chunk, block); + + chsize = GetChunkSizeFromFreeListIdx(fidx); /* aligned chunk size */ - chsize = chunk->size; /* aligned chunk size */ + /* + * Check the stored block offset correctly references this + * block. + */ + if (block != MemoryChunkGetBlock(chunk)) + elog(WARNING, "problem in alloc set %s: bad block offset for chunk %p in block %p", + name, chunk, block); + } dsize = chunk->requested_size; /* real data */ - /* - * Check chunk size - */ - if (dsize > chsize) + /* an allocated chunk's requested size must be <= the chsize */ + if (dsize != InvalidAllocSize && dsize > chsize) elog(WARNING, "problem in alloc set %s: req size > alloc size for chunk %p in block %p", name, chunk, block); + + /* chsize must not be smaller than the first freelist's size */ if (chsize < (1 << ALLOC_MINBITS)) elog(WARNING, "problem in alloc set %s: bad size %zu for chunk %p in block %p", name, chsize, chunk, block); - /* single-chunk block? */ - if (chsize > set->allocChunkLimit && - chsize + ALLOC_CHUNKHDRSZ != blk_used) - elog(WARNING, "problem in alloc set %s: bad single-chunk %p in block %p", - name, chunk, block); - - /* - * If chunk is allocated, check for correct aset pointer. (If it's - * free, the aset is the freelist pointer, which we can't check as - * easily...) Note this is an incomplete test, since palloc(0) - * produces an allocated chunk with requested_size == 0. - */ - if (dsize > 0 && chunk->aset != (void *) set) - elog(WARNING, "problem in alloc set %s: bogus aset link in block %p, chunk %p", - name, block, chunk); - /* * Check for overwrite of padding space in an allocated chunk. */ - if (chunk->aset == (void *) set && dsize < chsize && + if (dsize != InvalidAllocSize && dsize < chsize && !sentinel_ok(chunk, ALLOC_CHUNKHDRSZ + dsize)) elog(WARNING, "problem in alloc set %s: detected write past chunk end in block %p, chunk %p", name, block, chunk); - /* - * If chunk is allocated, disallow external access to private part - * of chunk header. - */ - if (chunk->aset == (void *) set) - VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOCCHUNK_PRIVATE_LEN); + /* if chunk is allocated, disallow access to the chunk header */ + if (dsize != InvalidAllocSize) + VALGRIND_MAKE_MEM_NOACCESS(chunk, ALLOC_CHUNKHDRSZ); blk_data += chsize; nchunks++; @@ -1532,6 +1665,10 @@ AllocSetCheck(MemoryContext context) if ((blk_data + (nchunks * ALLOC_CHUNKHDRSZ)) != blk_used) elog(WARNING, "problem in alloc set %s: found inconsistent memory block %p", name, block); + + if (has_external_chunk && nchunks > 1) + elog(WARNING, "problem in alloc set %s: external chunk on non-dedicated block %p", + name, block); } Assert(total_allocated == context->mem_allocated); diff --git a/src/postgres/src_backend_utils_mmgr_generation.c b/src/postgres/src_backend_utils_mmgr_generation.c new file mode 100644 index 00000000..e2182c4d --- /dev/null +++ b/src/postgres/src_backend_utils_mmgr_generation.c @@ -0,0 +1,1039 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - GenerationAlloc + * - GenerationBlockFreeBytes + * - GenerationBlockIsEmpty + * - GenerationBlockInit + * - GenerationFree + * - GenerationBlockMarkEmpty + * - GenerationRealloc + * - GenerationReset + * - GenerationBlockFree + * - GenerationDelete + * - GenerationGetChunkContext + * - GenerationGetChunkSpace + * - GenerationIsEmpty + * - GenerationStats + * - GenerationCheck + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * generation.c + * Generational allocator definitions. + * + * Generation is a custom MemoryContext implementation designed for cases of + * chunks with similar lifespan. + * + * Portions Copyright (c) 2017-2023, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/backend/utils/mmgr/generation.c + * + * + * This memory context is based on the assumption that the chunks are freed + * roughly in the same order as they were allocated (FIFO), or in groups with + * similar lifespan (generations - hence the name of the context). This is + * typical for various queue-like use cases, i.e. when tuples are constructed, + * processed and then thrown away. + * + * The memory context uses a very simple approach to free space management. + * Instead of a complex global freelist, each block tracks a number + * of allocated and freed chunks. The block is classed as empty when the + * number of free chunks is equal to the number of allocated chunks. When + * this occurs, instead of freeing the block, we try to "recycle" it, i.e. + * reuse it for new allocations. This is done by setting the block in the + * context's 'freeblock' field. If the freeblock field is already occupied + * by another free block we simply return the newly empty block to malloc. + * + * This approach to free blocks requires fewer malloc/free calls for truly + * first allocated, first free'd allocation patterns. + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "lib/ilist.h" +#include "port/pg_bitutils.h" +#include "utils/memdebug.h" +#include "utils/memutils.h" +#include "utils/memutils_memorychunk.h" +#include "utils/memutils_internal.h" + + +#define Generation_BLOCKHDRSZ MAXALIGN(sizeof(GenerationBlock)) +#define Generation_CHUNKHDRSZ sizeof(MemoryChunk) + +#define Generation_CHUNK_FRACTION 8 + +typedef struct GenerationBlock GenerationBlock; /* forward reference */ + +typedef void *GenerationPointer; + +/* + * GenerationContext is a simple memory context not reusing allocated chunks, + * and freeing blocks once all chunks are freed. + */ +typedef struct GenerationContext +{ + MemoryContextData header; /* Standard memory-context fields */ + + /* Generational context parameters */ + Size initBlockSize; /* initial block size */ + Size maxBlockSize; /* maximum block size */ + Size nextBlockSize; /* next block size to allocate */ + Size allocChunkLimit; /* effective chunk size limit */ + + GenerationBlock *block; /* current (most recently allocated) block, or + * NULL if we've just freed the most recent + * block */ + GenerationBlock *freeblock; /* pointer to a block that's being recycled, + * or NULL if there's no such block. */ + GenerationBlock *keeper; /* keep this block over resets */ + dlist_head blocks; /* list of blocks */ +} GenerationContext; + +/* + * GenerationBlock + * GenerationBlock is the unit of memory that is obtained by generation.c + * from malloc(). It contains zero or more MemoryChunks, which are the + * units requested by palloc() and freed by pfree(). MemoryChunks cannot + * be returned to malloc() individually, instead pfree() updates the free + * counter of the block and when all chunks in a block are free the whole + * block can be returned to malloc(). + * + * GenerationBlock is the header data for a block --- the usable space + * within the block begins at the next alignment boundary. + */ +struct GenerationBlock +{ + dlist_node node; /* doubly-linked list of blocks */ + GenerationContext *context; /* pointer back to the owning context */ + Size blksize; /* allocated size of this block */ + int nchunks; /* number of chunks in the block */ + int nfree; /* number of free chunks */ + char *freeptr; /* start of free space in this block */ + char *endptr; /* end of space in this block */ +}; + +/* + * GenerationIsValid + * True iff set is valid generation set. + */ +#define GenerationIsValid(set) \ + (PointerIsValid(set) && IsA(set, GenerationContext)) + +/* + * GenerationBlockIsValid + * True iff block is valid block of generation set. + */ +#define GenerationBlockIsValid(block) \ + (PointerIsValid(block) && GenerationIsValid((block)->context)) + +/* + * We always store external chunks on a dedicated block. This makes fetching + * the block from an external chunk easy since it's always the first and only + * chunk on the block. + */ +#define ExternalChunkGetBlock(chunk) \ + (GenerationBlock *) ((char *) chunk - Generation_BLOCKHDRSZ) + +/* Inlined helper functions */ +static inline void GenerationBlockInit(GenerationContext *context, + GenerationBlock *block, + Size blksize); +static inline bool GenerationBlockIsEmpty(GenerationBlock *block); +static inline void GenerationBlockMarkEmpty(GenerationBlock *block); +static inline Size GenerationBlockFreeBytes(GenerationBlock *block); +static inline void GenerationBlockFree(GenerationContext *set, + GenerationBlock *block); + + +/* + * Public routines + */ + + +/* + * GenerationContextCreate + * Create a new Generation context. + * + * parent: parent context, or NULL if top-level context + * name: name of context (must be statically allocated) + * minContextSize: minimum context size + * initBlockSize: initial allocation block size + * maxBlockSize: maximum allocation block size + */ + + +/* + * GenerationReset + * Frees all memory which is allocated in the given set. + * + * The code simply frees all the blocks in the context - we don't keep any + * keeper blocks or anything like that. + */ +void +GenerationReset(MemoryContext context) +{ + GenerationContext *set = (GenerationContext *) context; + dlist_mutable_iter miter; + + Assert(GenerationIsValid(set)); + +#ifdef MEMORY_CONTEXT_CHECKING + /* Check for corruption and leaks before freeing */ + GenerationCheck(context); +#endif + + /* + * NULLify the free block pointer. We must do this before calling + * GenerationBlockFree as that function never expects to free the + * freeblock. + */ + set->freeblock = NULL; + + dlist_foreach_modify(miter, &set->blocks) + { + GenerationBlock *block = dlist_container(GenerationBlock, node, miter.cur); + + if (block == set->keeper) + GenerationBlockMarkEmpty(block); + else + GenerationBlockFree(set, block); + } + + /* set it so new allocations to make use of the keeper block */ + set->block = set->keeper; + + /* Reset block size allocation sequence, too */ + set->nextBlockSize = set->initBlockSize; + + /* Ensure there is only 1 item in the dlist */ + Assert(!dlist_is_empty(&set->blocks)); + Assert(!dlist_has_next(&set->blocks, dlist_head_node(&set->blocks))); +} + +/* + * GenerationDelete + * Free all memory which is allocated in the given context. + */ +void +GenerationDelete(MemoryContext context) +{ + /* Reset to release all releasable GenerationBlocks */ + GenerationReset(context); + /* And free the context header and keeper block */ + free(context); +} + +/* + * GenerationAlloc + * Returns pointer to allocated memory of given size or NULL if + * request could not be completed; memory is added to the set. + * + * No request may exceed: + * MAXALIGN_DOWN(SIZE_MAX) - Generation_BLOCKHDRSZ - Generation_CHUNKHDRSZ + * All callers use a much-lower limit. + * + * Note: when using valgrind, it doesn't matter how the returned allocation + * is marked, as mcxt.c will set it to UNDEFINED. In some paths we will + * return space that is marked NOACCESS - GenerationRealloc has to beware! + */ +void * +GenerationAlloc(MemoryContext context, Size size) +{ + GenerationContext *set = (GenerationContext *) context; + GenerationBlock *block; + MemoryChunk *chunk; + Size chunk_size; + Size required_size; + + Assert(GenerationIsValid(set)); + +#ifdef MEMORY_CONTEXT_CHECKING + /* ensure there's always space for the sentinel byte */ + chunk_size = MAXALIGN(size + 1); +#else + chunk_size = MAXALIGN(size); +#endif + required_size = chunk_size + Generation_CHUNKHDRSZ; + + /* is it an over-sized chunk? if yes, allocate special block */ + if (chunk_size > set->allocChunkLimit) + { + Size blksize = required_size + Generation_BLOCKHDRSZ; + + block = (GenerationBlock *) malloc(blksize); + if (block == NULL) + return NULL; + + context->mem_allocated += blksize; + + /* block with a single (used) chunk */ + block->context = set; + block->blksize = blksize; + block->nchunks = 1; + block->nfree = 0; + + /* the block is completely full */ + block->freeptr = block->endptr = ((char *) block) + blksize; + + chunk = (MemoryChunk *) (((char *) block) + Generation_BLOCKHDRSZ); + + /* mark the MemoryChunk as externally managed */ + MemoryChunkSetHdrMaskExternal(chunk, MCTX_GENERATION_ID); + +#ifdef MEMORY_CONTEXT_CHECKING + chunk->requested_size = size; + /* set mark to catch clobber of "unused" space */ + Assert(size < chunk_size); + set_sentinel(MemoryChunkGetPointer(chunk), size); +#endif +#ifdef RANDOMIZE_ALLOCATED_MEMORY + /* fill the allocated space with junk */ + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); +#endif + + /* add the block to the list of allocated blocks */ + dlist_push_head(&set->blocks, &block->node); + + /* Ensure any padding bytes are marked NOACCESS. */ + VALGRIND_MAKE_MEM_NOACCESS((char *) MemoryChunkGetPointer(chunk) + size, + chunk_size - size); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + + return MemoryChunkGetPointer(chunk); + } + + /* + * Not an oversized chunk. We try to first make use of the current block, + * but if there's not enough space in it, instead of allocating a new + * block, we look to see if the freeblock is empty and has enough space. + * If not, we'll also try the same using the keeper block. The keeper + * block may have become empty and we have no other way to reuse it again + * if we don't try to use it explicitly here. + * + * We don't want to start filling the freeblock before the current block + * is full, otherwise we may cause fragmentation in FIFO type workloads. + * We only switch to using the freeblock or keeper block if those blocks + * are completely empty. If we didn't do that we could end up fragmenting + * consecutive allocations over multiple blocks which would be a problem + * that would compound over time. + */ + block = set->block; + + if (block == NULL || + GenerationBlockFreeBytes(block) < required_size) + { + Size blksize; + GenerationBlock *freeblock = set->freeblock; + + if (freeblock != NULL && + GenerationBlockIsEmpty(freeblock) && + GenerationBlockFreeBytes(freeblock) >= required_size) + { + block = freeblock; + + /* + * Zero out the freeblock as we'll set this to the current block + * below + */ + set->freeblock = NULL; + } + else if (GenerationBlockIsEmpty(set->keeper) && + GenerationBlockFreeBytes(set->keeper) >= required_size) + { + block = set->keeper; + } + else + { + /* + * The first such block has size initBlockSize, and we double the + * space in each succeeding block, but not more than maxBlockSize. + */ + blksize = set->nextBlockSize; + set->nextBlockSize <<= 1; + if (set->nextBlockSize > set->maxBlockSize) + set->nextBlockSize = set->maxBlockSize; + + /* we'll need a block hdr too, so add that to the required size */ + required_size += Generation_BLOCKHDRSZ; + + /* round the size up to the next power of 2 */ + if (blksize < required_size) + blksize = pg_nextpower2_size_t(required_size); + + block = (GenerationBlock *) malloc(blksize); + + if (block == NULL) + return NULL; + + context->mem_allocated += blksize; + + /* initialize the new block */ + GenerationBlockInit(set, block, blksize); + + /* add it to the doubly-linked list of blocks */ + dlist_push_head(&set->blocks, &block->node); + + /* Zero out the freeblock in case it's become full */ + set->freeblock = NULL; + } + + /* and also use it as the current allocation block */ + set->block = block; + } + + /* we're supposed to have a block with enough free space now */ + Assert(block != NULL); + Assert((block->endptr - block->freeptr) >= Generation_CHUNKHDRSZ + chunk_size); + + chunk = (MemoryChunk *) block->freeptr; + + /* Prepare to initialize the chunk header. */ + VALGRIND_MAKE_MEM_UNDEFINED(chunk, Generation_CHUNKHDRSZ); + + block->nchunks += 1; + block->freeptr += (Generation_CHUNKHDRSZ + chunk_size); + + Assert(block->freeptr <= block->endptr); + + MemoryChunkSetHdrMask(chunk, block, chunk_size, MCTX_GENERATION_ID); +#ifdef MEMORY_CONTEXT_CHECKING + chunk->requested_size = size; + /* set mark to catch clobber of "unused" space */ + Assert(size < chunk_size); + set_sentinel(MemoryChunkGetPointer(chunk), size); +#endif +#ifdef RANDOMIZE_ALLOCATED_MEMORY + /* fill the allocated space with junk */ + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); +#endif + + /* Ensure any padding bytes are marked NOACCESS. */ + VALGRIND_MAKE_MEM_NOACCESS((char *) MemoryChunkGetPointer(chunk) + size, + chunk_size - size); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + + return MemoryChunkGetPointer(chunk); +} + +/* + * GenerationBlockInit + * Initializes 'block' assuming 'blksize'. Does not update the context's + * mem_allocated field. + */ +static inline void +GenerationBlockInit(GenerationContext *context, GenerationBlock *block, + Size blksize) +{ + block->context = context; + block->blksize = blksize; + block->nchunks = 0; + block->nfree = 0; + + block->freeptr = ((char *) block) + Generation_BLOCKHDRSZ; + block->endptr = ((char *) block) + blksize; + + /* Mark unallocated space NOACCESS. */ + VALGRIND_MAKE_MEM_NOACCESS(block->freeptr, + blksize - Generation_BLOCKHDRSZ); +} + +/* + * GenerationBlockIsEmpty + * Returns true iff 'block' contains no chunks + */ +static inline bool +GenerationBlockIsEmpty(GenerationBlock *block) +{ + return (block->nchunks == 0); +} + +/* + * GenerationBlockMarkEmpty + * Set a block as empty. Does not free the block. + */ +static inline void +GenerationBlockMarkEmpty(GenerationBlock *block) +{ +#if defined(USE_VALGRIND) || defined(CLOBBER_FREED_MEMORY) + char *datastart = ((char *) block) + Generation_BLOCKHDRSZ; +#endif + +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(datastart, block->freeptr - datastart); +#else + /* wipe_mem() would have done this */ + VALGRIND_MAKE_MEM_NOACCESS(datastart, block->freeptr - datastart); +#endif + + /* Reset the block, but don't return it to malloc */ + block->nchunks = 0; + block->nfree = 0; + block->freeptr = ((char *) block) + Generation_BLOCKHDRSZ; +} + +/* + * GenerationBlockFreeBytes + * Returns the number of bytes free in 'block' + */ +static inline Size +GenerationBlockFreeBytes(GenerationBlock *block) +{ + return (block->endptr - block->freeptr); +} + +/* + * GenerationBlockFree + * Remove 'block' from 'set' and release the memory consumed by it. + */ +static inline void +GenerationBlockFree(GenerationContext *set, GenerationBlock *block) +{ + /* Make sure nobody tries to free the keeper block */ + Assert(block != set->keeper); + /* We shouldn't be freeing the freeblock either */ + Assert(block != set->freeblock); + + /* release the block from the list of blocks */ + dlist_delete(&block->node); + + ((MemoryContext) set)->mem_allocated -= block->blksize; + +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(block, block->blksize); +#endif + + free(block); +} + +/* + * GenerationFree + * Update number of chunks in the block, and if all chunks in the block + * are now free then discard the block. + */ +void +GenerationFree(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + GenerationBlock *block; + GenerationContext *set; +#if (defined(MEMORY_CONTEXT_CHECKING) && defined(USE_ASSERT_CHECKING)) \ + || defined(CLOBBER_FREED_MEMORY) + Size chunksize; +#endif + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Generation_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + block = ExternalChunkGetBlock(chunk); + + /* + * Try to verify that we have a sane block pointer: the block header + * should reference a generation context. + */ + if (!GenerationBlockIsValid(block)) + elog(ERROR, "could not find block containing chunk %p", chunk); + +#if (defined(MEMORY_CONTEXT_CHECKING) && defined(USE_ASSERT_CHECKING)) \ + || defined(CLOBBER_FREED_MEMORY) + chunksize = block->endptr - (char *) pointer; +#endif + } + else + { + block = MemoryChunkGetBlock(chunk); + + /* + * In this path, for speed reasons we just Assert that the referenced + * block is good. Future field experience may show that this Assert + * had better become a regular runtime test-and-elog check. + */ + Assert(GenerationBlockIsValid(block)); + +#if (defined(MEMORY_CONTEXT_CHECKING) && defined(USE_ASSERT_CHECKING)) \ + || defined(CLOBBER_FREED_MEMORY) + chunksize = MemoryChunkGetValue(chunk); +#endif + } + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + Assert(chunk->requested_size < chunksize); + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + ((MemoryContext) block->context)->name, chunk); +#endif + +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(pointer, chunksize); +#endif + +#ifdef MEMORY_CONTEXT_CHECKING + /* Reset requested_size to InvalidAllocSize in freed chunks */ + chunk->requested_size = InvalidAllocSize; +#endif + + block->nfree += 1; + + Assert(block->nchunks > 0); + Assert(block->nfree <= block->nchunks); + + /* If there are still allocated chunks in the block, we're done. */ + if (block->nfree < block->nchunks) + return; + + set = block->context; + + /* Don't try to free the keeper block, just mark it empty */ + if (block == set->keeper) + { + GenerationBlockMarkEmpty(block); + return; + } + + /* + * If there is no freeblock set or if this is the freeblock then instead + * of freeing this memory, we keep it around so that new allocations have + * the option of recycling it. + */ + if (set->freeblock == NULL || set->freeblock == block) + { + /* XXX should we only recycle maxBlockSize sized blocks? */ + set->freeblock = block; + GenerationBlockMarkEmpty(block); + return; + } + + /* Also make sure the block is not marked as the current block. */ + if (set->block == block) + set->block = NULL; + + /* + * The block is empty, so let's get rid of it. First remove it from the + * list of blocks, then return it to malloc(). + */ + dlist_delete(&block->node); + + set->header.mem_allocated -= block->blksize; + free(block); +} + +/* + * GenerationRealloc + * When handling repalloc, we simply allocate a new chunk, copy the data + * and discard the old one. The only exception is when the new size fits + * into the old chunk - in that case we just update chunk header. + */ +void * +GenerationRealloc(void *pointer, Size size) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + GenerationContext *set; + GenerationBlock *block; + GenerationPointer newPointer; + Size oldsize; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Generation_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + block = ExternalChunkGetBlock(chunk); + + /* + * Try to verify that we have a sane block pointer: the block header + * should reference a generation context. + */ + if (!GenerationBlockIsValid(block)) + elog(ERROR, "could not find block containing chunk %p", chunk); + + oldsize = block->endptr - (char *) pointer; + } + else + { + block = MemoryChunkGetBlock(chunk); + + /* + * In this path, for speed reasons we just Assert that the referenced + * block is good. Future field experience may show that this Assert + * had better become a regular runtime test-and-elog check. + */ + Assert(GenerationBlockIsValid(block)); + + oldsize = MemoryChunkGetValue(chunk); + } + + set = block->context; + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + Assert(chunk->requested_size < oldsize); + if (!sentinel_ok(pointer, chunk->requested_size)) + elog(WARNING, "detected write past chunk end in %s %p", + ((MemoryContext) set)->name, chunk); +#endif + + /* + * Maybe the allocated area already is >= the new size. (In particular, + * we always fall out here if the requested size is a decrease.) + * + * This memory context does not use power-of-2 chunk sizing and instead + * carves the chunks to be as small as possible, so most repalloc() calls + * will end up in the palloc/memcpy/pfree branch. + * + * XXX Perhaps we should annotate this condition with unlikely()? + */ + if (oldsize >= size) + { +#ifdef MEMORY_CONTEXT_CHECKING + Size oldrequest = chunk->requested_size; + +#ifdef RANDOMIZE_ALLOCATED_MEMORY + /* We can only fill the extra space if we know the prior request */ + if (size > oldrequest) + randomize_mem((char *) pointer + oldrequest, + size - oldrequest); +#endif + + chunk->requested_size = size; + + /* + * If this is an increase, mark any newly-available part UNDEFINED. + * Otherwise, mark the obsolete part NOACCESS. + */ + if (size > oldrequest) + VALGRIND_MAKE_MEM_UNDEFINED((char *) pointer + oldrequest, + size - oldrequest); + else + VALGRIND_MAKE_MEM_NOACCESS((char *) pointer + size, + oldsize - size); + + /* set mark to catch clobber of "unused" space */ + set_sentinel(pointer, size); +#else /* !MEMORY_CONTEXT_CHECKING */ + + /* + * We don't have the information to determine whether we're growing + * the old request or shrinking it, so we conservatively mark the + * entire new allocation DEFINED. + */ + VALGRIND_MAKE_MEM_NOACCESS(pointer, oldsize); + VALGRIND_MAKE_MEM_DEFINED(pointer, size); +#endif + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + + return pointer; + } + + /* allocate new chunk */ + newPointer = GenerationAlloc((MemoryContext) set, size); + + /* leave immediately if request was not completed */ + if (newPointer == NULL) + { + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + return NULL; + } + + /* + * GenerationAlloc() may have returned a region that is still NOACCESS. + * Change it to UNDEFINED for the moment; memcpy() will then transfer + * definedness from the old allocation to the new. If we know the old + * allocation, copy just that much. Otherwise, make the entire old chunk + * defined to avoid errors as we copy the currently-NOACCESS trailing + * bytes. + */ + VALGRIND_MAKE_MEM_UNDEFINED(newPointer, size); +#ifdef MEMORY_CONTEXT_CHECKING + oldsize = chunk->requested_size; +#else + VALGRIND_MAKE_MEM_DEFINED(pointer, oldsize); +#endif + + /* transfer existing data (certain to fit) */ + memcpy(newPointer, pointer, oldsize); + + /* free old chunk */ + GenerationFree(pointer); + + return newPointer; +} + +/* + * GenerationGetChunkContext + * Return the MemoryContext that 'pointer' belongs to. + */ +MemoryContext +GenerationGetChunkContext(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + GenerationBlock *block; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Generation_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + block = ExternalChunkGetBlock(chunk); + else + block = (GenerationBlock *) MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + + Assert(GenerationBlockIsValid(block)); + return &block->context->header; +} + +/* + * GenerationGetChunkSpace + * Given a currently-allocated chunk, determine the total space + * it occupies (including all memory-allocation overhead). + */ +Size +GenerationGetChunkSpace(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + Size chunksize; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Generation_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + GenerationBlock *block = ExternalChunkGetBlock(chunk); + + Assert(GenerationBlockIsValid(block)); + chunksize = block->endptr - (char *) pointer; + } + else + chunksize = MemoryChunkGetValue(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + + return Generation_CHUNKHDRSZ + chunksize; +} + +/* + * GenerationIsEmpty + * Is a GenerationContext empty of any allocated space? + */ +bool +GenerationIsEmpty(MemoryContext context) +{ + GenerationContext *set = (GenerationContext *) context; + dlist_iter iter; + + Assert(GenerationIsValid(set)); + + dlist_foreach(iter, &set->blocks) + { + GenerationBlock *block = dlist_container(GenerationBlock, node, iter.cur); + + if (block->nchunks > 0) + return false; + } + + return true; +} + +/* + * GenerationStats + * Compute stats about memory consumption of a Generation context. + * + * printfunc: if not NULL, pass a human-readable stats string to this. + * passthru: pass this pointer through to printfunc. + * totals: if not NULL, add stats about this context into *totals. + * print_to_stderr: print stats to stderr if true, elog otherwise. + * + * XXX freespace only accounts for empty space at the end of the block, not + * space of freed chunks (which is unknown). + */ +void +GenerationStats(MemoryContext context, + MemoryStatsPrintFunc printfunc, void *passthru, + MemoryContextCounters *totals, bool print_to_stderr) +{ + GenerationContext *set = (GenerationContext *) context; + Size nblocks = 0; + Size nchunks = 0; + Size nfreechunks = 0; + Size totalspace; + Size freespace = 0; + dlist_iter iter; + + Assert(GenerationIsValid(set)); + + /* Include context header in totalspace */ + totalspace = MAXALIGN(sizeof(GenerationContext)); + + dlist_foreach(iter, &set->blocks) + { + GenerationBlock *block = dlist_container(GenerationBlock, node, iter.cur); + + nblocks++; + nchunks += block->nchunks; + nfreechunks += block->nfree; + totalspace += block->blksize; + freespace += (block->endptr - block->freeptr); + } + + if (printfunc) + { + char stats_string[200]; + + snprintf(stats_string, sizeof(stats_string), + "%zu total in %zu blocks (%zu chunks); %zu free (%zu chunks); %zu used", + totalspace, nblocks, nchunks, freespace, + nfreechunks, totalspace - freespace); + printfunc(context, passthru, stats_string, print_to_stderr); + } + + if (totals) + { + totals->nblocks += nblocks; + totals->freechunks += nfreechunks; + totals->totalspace += totalspace; + totals->freespace += freespace; + } +} + + +#ifdef MEMORY_CONTEXT_CHECKING + +/* + * GenerationCheck + * Walk through chunks and check consistency of memory. + * + * NOTE: report errors as WARNING, *not* ERROR or FATAL. Otherwise you'll + * find yourself in an infinite loop when trouble occurs, because this + * routine will be entered again when elog cleanup tries to release memory! + */ +void +GenerationCheck(MemoryContext context) +{ + GenerationContext *gen = (GenerationContext *) context; + const char *name = context->name; + dlist_iter iter; + Size total_allocated = 0; + + /* walk all blocks in this context */ + dlist_foreach(iter, &gen->blocks) + { + GenerationBlock *block = dlist_container(GenerationBlock, node, iter.cur); + int nfree, + nchunks; + char *ptr; + bool has_external_chunk = false; + + total_allocated += block->blksize; + + /* + * nfree > nchunks is surely wrong. Equality is allowed as the block + * might completely empty if it's the freeblock. + */ + if (block->nfree > block->nchunks) + elog(WARNING, "problem in Generation %s: number of free chunks %d in block %p exceeds %d allocated", + name, block->nfree, block, block->nchunks); + + /* check block belongs to the correct context */ + if (block->context != gen) + elog(WARNING, "problem in Generation %s: bogus context link in block %p", + name, block); + + /* Now walk through the chunks and count them. */ + nfree = 0; + nchunks = 0; + ptr = ((char *) block) + Generation_BLOCKHDRSZ; + + while (ptr < block->freeptr) + { + MemoryChunk *chunk = (MemoryChunk *) ptr; + GenerationBlock *chunkblock; + Size chunksize; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Generation_CHUNKHDRSZ); + + if (MemoryChunkIsExternal(chunk)) + { + chunkblock = ExternalChunkGetBlock(chunk); + chunksize = block->endptr - (char *) MemoryChunkGetPointer(chunk); + has_external_chunk = true; + } + else + { + chunkblock = MemoryChunkGetBlock(chunk); + chunksize = MemoryChunkGetValue(chunk); + } + + /* move to the next chunk */ + ptr += (chunksize + Generation_CHUNKHDRSZ); + + nchunks += 1; + + /* chunks have both block and context pointers, so check both */ + if (chunkblock != block) + elog(WARNING, "problem in Generation %s: bogus block link in block %p, chunk %p", + name, block, chunk); + + + /* is chunk allocated? */ + if (chunk->requested_size != InvalidAllocSize) + { + /* now make sure the chunk size is correct */ + if (chunksize < chunk->requested_size || + chunksize != MAXALIGN(chunksize)) + elog(WARNING, "problem in Generation %s: bogus chunk size in block %p, chunk %p", + name, block, chunk); + + /* check sentinel */ + Assert(chunk->requested_size < chunksize); + if (!sentinel_ok(chunk, Generation_CHUNKHDRSZ + chunk->requested_size)) + elog(WARNING, "problem in Generation %s: detected write past chunk end in block %p, chunk %p", + name, block, chunk); + } + else + nfree += 1; + + /* if chunk is allocated, disallow access to the chunk header */ + if (chunk->requested_size != InvalidAllocSize) + VALGRIND_MAKE_MEM_NOACCESS(chunk, Generation_CHUNKHDRSZ); + } + + /* + * Make sure we got the expected number of allocated and free chunks + * (as tracked in the block header). + */ + if (nchunks != block->nchunks) + elog(WARNING, "problem in Generation %s: number of allocated chunks %d in block %p does not match header %d", + name, nchunks, block, block->nchunks); + + if (nfree != block->nfree) + elog(WARNING, "problem in Generation %s: number of free chunks %d in block %p does not match header %d", + name, nfree, block, block->nfree); + + if (has_external_chunk && nchunks > 1) + elog(WARNING, "problem in Generation %s: external chunk on non-dedicated block %p", + name, block); + + } + + Assert(total_allocated == context->mem_allocated); +} + +#endif /* MEMORY_CONTEXT_CHECKING */ diff --git a/src/postgres/src_backend_utils_mmgr_mcxt.c b/src/postgres/src_backend_utils_mmgr_mcxt.c index b1120883..847473d0 100644 --- a/src/postgres/src_backend_utils_mmgr_mcxt.c +++ b/src/postgres/src_backend_utils_mmgr_mcxt.c @@ -10,10 +10,21 @@ * - MemoryContextCallResetCallbacks * - MemoryContextResetOnly * - repalloc + * - GetMemoryChunkContext * - MemoryContextStats * - MemoryContextStatsDetail * - MemoryContextStatsInternal * - MemoryContextStatsPrint + * - mcxt_methods + * - GetMemoryChunkSpace + * - MemoryContextAllocAligned + * - MemoryContextAllocExtended + * - BogusFree + * - GetMemoryChunkHeader + * - BogusRealloc + * - BogusGetChunkContext + * - BogusGetChunkSpace + * - GetMemoryChunkMethodID * - pfree * - pstrdup * - MemoryContextStrdup @@ -43,7 +54,7 @@ * context's MemoryContextMethods struct. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -63,12 +74,105 @@ #include "utils/fmgrprotos.h" #include "utils/memdebug.h" #include "utils/memutils.h" +#include "utils/memutils_internal.h" +#include "utils/memutils_memorychunk.h" + +static void BogusFree(void *pointer); +static void *BogusRealloc(void *pointer, Size size); +static MemoryContext BogusGetChunkContext(void *pointer); +static Size BogusGetChunkSpace(void *pointer); /***************************************************************************** * GLOBAL MEMORY * *****************************************************************************/ +static const MemoryContextMethods mcxt_methods[] = { + /* aset.c */ + [MCTX_ASET_ID].alloc = AllocSetAlloc, + [MCTX_ASET_ID].free_p = AllocSetFree, + [MCTX_ASET_ID].realloc = AllocSetRealloc, + [MCTX_ASET_ID].reset = AllocSetReset, + [MCTX_ASET_ID].delete_context = AllocSetDelete, + [MCTX_ASET_ID].get_chunk_context = AllocSetGetChunkContext, + [MCTX_ASET_ID].get_chunk_space = AllocSetGetChunkSpace, + [MCTX_ASET_ID].is_empty = AllocSetIsEmpty, + [MCTX_ASET_ID].stats = AllocSetStats, +#ifdef MEMORY_CONTEXT_CHECKING + [MCTX_ASET_ID].check = AllocSetCheck, +#endif + + /* generation.c */ + [MCTX_GENERATION_ID].alloc = GenerationAlloc, + [MCTX_GENERATION_ID].free_p = GenerationFree, + [MCTX_GENERATION_ID].realloc = GenerationRealloc, + [MCTX_GENERATION_ID].reset = GenerationReset, + [MCTX_GENERATION_ID].delete_context = GenerationDelete, + [MCTX_GENERATION_ID].get_chunk_context = GenerationGetChunkContext, + [MCTX_GENERATION_ID].get_chunk_space = GenerationGetChunkSpace, + [MCTX_GENERATION_ID].is_empty = GenerationIsEmpty, + [MCTX_GENERATION_ID].stats = GenerationStats, +#ifdef MEMORY_CONTEXT_CHECKING + [MCTX_GENERATION_ID].check = GenerationCheck, +#endif + + /* slab.c */ + [MCTX_SLAB_ID].alloc = SlabAlloc, + [MCTX_SLAB_ID].free_p = SlabFree, + [MCTX_SLAB_ID].realloc = SlabRealloc, + [MCTX_SLAB_ID].reset = SlabReset, + [MCTX_SLAB_ID].delete_context = SlabDelete, + [MCTX_SLAB_ID].get_chunk_context = SlabGetChunkContext, + [MCTX_SLAB_ID].get_chunk_space = SlabGetChunkSpace, + [MCTX_SLAB_ID].is_empty = SlabIsEmpty, + [MCTX_SLAB_ID].stats = SlabStats, +#ifdef MEMORY_CONTEXT_CHECKING + [MCTX_SLAB_ID].check = SlabCheck, +#endif + + /* alignedalloc.c */ + [MCTX_ALIGNED_REDIRECT_ID].alloc = NULL, /* not required */ + [MCTX_ALIGNED_REDIRECT_ID].free_p = AlignedAllocFree, + [MCTX_ALIGNED_REDIRECT_ID].realloc = AlignedAllocRealloc, + [MCTX_ALIGNED_REDIRECT_ID].reset = NULL, /* not required */ + [MCTX_ALIGNED_REDIRECT_ID].delete_context = NULL, /* not required */ + [MCTX_ALIGNED_REDIRECT_ID].get_chunk_context = AlignedAllocGetChunkContext, + [MCTX_ALIGNED_REDIRECT_ID].get_chunk_space = AlignedAllocGetChunkSpace, + [MCTX_ALIGNED_REDIRECT_ID].is_empty = NULL, /* not required */ + [MCTX_ALIGNED_REDIRECT_ID].stats = NULL, /* not required */ +#ifdef MEMORY_CONTEXT_CHECKING + [MCTX_ALIGNED_REDIRECT_ID].check = NULL, /* not required */ +#endif + + + /* + * Unused (as yet) IDs should have dummy entries here. This allows us to + * fail cleanly if a bogus pointer is passed to pfree or the like. It + * seems sufficient to provide routines for the methods that might get + * invoked from inspection of a chunk (see MCXT_METHOD calls below). + */ + + [MCTX_UNUSED1_ID].free_p = BogusFree, + [MCTX_UNUSED1_ID].realloc = BogusRealloc, + [MCTX_UNUSED1_ID].get_chunk_context = BogusGetChunkContext, + [MCTX_UNUSED1_ID].get_chunk_space = BogusGetChunkSpace, + + [MCTX_UNUSED2_ID].free_p = BogusFree, + [MCTX_UNUSED2_ID].realloc = BogusRealloc, + [MCTX_UNUSED2_ID].get_chunk_context = BogusGetChunkContext, + [MCTX_UNUSED2_ID].get_chunk_space = BogusGetChunkSpace, + + [MCTX_UNUSED3_ID].free_p = BogusFree, + [MCTX_UNUSED3_ID].realloc = BogusRealloc, + [MCTX_UNUSED3_ID].get_chunk_context = BogusGetChunkContext, + [MCTX_UNUSED3_ID].get_chunk_space = BogusGetChunkSpace, + + [MCTX_UNUSED4_ID].free_p = BogusFree, + [MCTX_UNUSED4_ID].realloc = BogusRealloc, + [MCTX_UNUSED4_ID].get_chunk_context = BogusGetChunkContext, + [MCTX_UNUSED4_ID].get_chunk_space = BogusGetChunkSpace, +}; + /* * CurrentMemoryContext * Default memory context for allocations. @@ -110,6 +214,100 @@ static void MemoryContextStatsPrint(MemoryContext context, void *passthru, #define AssertNotInCriticalSection(context) \ Assert(CritSectionCount == 0 || (context)->allowInCritSection) +/* + * Call the given function in the MemoryContextMethods for the memory context + * type that 'pointer' belongs to. + */ +#define MCXT_METHOD(pointer, method) \ + mcxt_methods[GetMemoryChunkMethodID(pointer)].method + +/* + * GetMemoryChunkMethodID + * Return the MemoryContextMethodID from the uint64 chunk header which + * directly precedes 'pointer'. + */ +static inline MemoryContextMethodID +GetMemoryChunkMethodID(const void *pointer) +{ + uint64 header; + + /* + * Try to detect bogus pointers handed to us, poorly though we can. + * Presumably, a pointer that isn't MAXALIGNED isn't pointing at an + * allocated chunk. + */ + Assert(pointer == (const void *) MAXALIGN(pointer)); + + /* Allow access to the uint64 header */ + VALGRIND_MAKE_MEM_DEFINED((char *) pointer - sizeof(uint64), sizeof(uint64)); + + header = *((const uint64 *) ((const char *) pointer - sizeof(uint64))); + + /* Disallow access to the uint64 header */ + VALGRIND_MAKE_MEM_NOACCESS((char *) pointer - sizeof(uint64), sizeof(uint64)); + + return (MemoryContextMethodID) (header & MEMORY_CONTEXT_METHODID_MASK); +} + +/* + * GetMemoryChunkHeader + * Return the uint64 chunk header which directly precedes 'pointer'. + * + * This is only used after GetMemoryChunkMethodID, so no need for error checks. + */ +static inline uint64 +GetMemoryChunkHeader(const void *pointer) +{ + uint64 header; + + /* Allow access to the uint64 header */ + VALGRIND_MAKE_MEM_DEFINED((char *) pointer - sizeof(uint64), sizeof(uint64)); + + header = *((const uint64 *) ((const char *) pointer - sizeof(uint64))); + + /* Disallow access to the uint64 header */ + VALGRIND_MAKE_MEM_NOACCESS((char *) pointer - sizeof(uint64), sizeof(uint64)); + + return header; +} + +/* + * Support routines to trap use of invalid memory context method IDs + * (from calling pfree or the like on a bogus pointer). As a possible + * aid in debugging, we report the header word along with the pointer + * address (if we got here, there must be an accessible header word). + */ +static void +BogusFree(void *pointer) +{ + elog(ERROR, "pfree called with invalid pointer %p (header 0x%016llx)", + pointer, (unsigned long long) GetMemoryChunkHeader(pointer)); +} + +static void * +BogusRealloc(void *pointer, Size size) +{ + elog(ERROR, "repalloc called with invalid pointer %p (header 0x%016llx)", + pointer, (unsigned long long) GetMemoryChunkHeader(pointer)); + return NULL; /* keep compiler quiet */ +} + +static MemoryContext +BogusGetChunkContext(void *pointer) +{ + elog(ERROR, "GetMemoryChunkContext called with invalid pointer %p (header 0x%016llx)", + pointer, (unsigned long long) GetMemoryChunkHeader(pointer)); + return NULL; /* keep compiler quiet */ +} + +static Size +BogusGetChunkSpace(void *pointer) +{ + elog(ERROR, "GetMemoryChunkSpace called with invalid pointer %p (header 0x%016llx)", + pointer, (unsigned long long) GetMemoryChunkHeader(pointer)); + return 0; /* keep compiler quiet */ +} + /***************************************************************************** * EXPORTED ROUTINES * @@ -135,7 +333,7 @@ static void MemoryContextStatsPrint(MemoryContext context, void *passthru, void MemoryContextInit(void) { - AssertState(TopMemoryContext == NULL); + Assert(TopMemoryContext == NULL); /* * First, initialize TopMemoryContext, which is the parent of all others. @@ -179,7 +377,7 @@ MemoryContextInit(void) void MemoryContextReset(MemoryContext context) { - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); /* save a function call in common case where there are no children */ if (context->firstchild != NULL) @@ -198,7 +396,7 @@ MemoryContextReset(MemoryContext context) void MemoryContextResetOnly(MemoryContext context) { - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); /* Nothing to do if no pallocs since startup or last reset */ if (!context->isReset) @@ -209,10 +407,8 @@ MemoryContextResetOnly(MemoryContext context) * If context->ident points into the context's memory, it will become * a dangling pointer. We could prevent that by setting it to NULL * here, but that would break valid coding patterns that keep the - * ident elsewhere, e.g. in a parent context. Another idea is to use - * MemoryContextContains(), but we don't require ident strings to be - * in separately-palloc'd chunks, so that risks false positives. So - * for now we assume the programmer got it right. + * ident elsewhere, e.g. in a parent context. So for now we assume + * the programmer got it right. */ context->methods->reset(context); @@ -242,7 +438,7 @@ MemoryContextResetOnly(MemoryContext context) void MemoryContextDelete(MemoryContext context) { - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); /* We had better not be deleting TopMemoryContext ... */ Assert(context != TopMemoryContext); /* And not CurrentMemoryContext, either */ @@ -287,7 +483,7 @@ MemoryContextDelete(MemoryContext context) void MemoryContextDeleteChildren(MemoryContext context) { - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); /* * MemoryContextDelete will delink the child from me, so just iterate as @@ -369,8 +565,8 @@ MemoryContextCallResetCallbacks(MemoryContext context) void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent) { - AssertArg(MemoryContextIsValid(context)); - AssertArg(context != new_parent); + Assert(MemoryContextIsValid(context)); + Assert(context != new_parent); /* Fast path if it's got correct parent already */ if (new_parent == context->parent) @@ -396,7 +592,7 @@ MemoryContextSetParent(MemoryContext context, MemoryContext new_parent) /* And relink */ if (new_parent) { - AssertArg(MemoryContextIsValid(new_parent)); + Assert(MemoryContextIsValid(new_parent)); context->parent = new_parent; context->prevchild = NULL; context->nextchild = new_parent->firstchild; @@ -426,11 +622,22 @@ MemoryContextSetParent(MemoryContext context, MemoryContext new_parent) void MemoryContextAllowInCriticalSection(MemoryContext context, bool allow) { - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); context->allowInCritSection = allow; } +/* + * GetMemoryChunkContext + * Given a currently-allocated chunk, determine the MemoryContext that + * the chunk belongs to. + */ +MemoryContext +GetMemoryChunkContext(void *pointer) +{ + return MCXT_METHOD(pointer, get_chunk_context) (pointer); +} + /* * GetMemoryChunkSpace * Given a currently-allocated chunk, determine the total space @@ -439,7 +646,11 @@ MemoryContextAllowInCriticalSection(MemoryContext context, bool allow) * This is useful for measuring the total space occupied by a set of * allocated chunks. */ - +Size +GetMemoryChunkSpace(void *pointer) +{ + return MCXT_METHOD(pointer, get_chunk_space) (pointer); +} /* * MemoryContextGetParent @@ -505,10 +716,10 @@ MemoryContextStatsDetail(MemoryContext context, int max_children, * to the connected client. * * We don't buffer the information about all memory contexts in a - * backend into StringInfo and log it as one message. Otherwise which - * may require the buffer to be enlarged very much and lead to OOM - * error since there can be a large number of memory contexts in a - * backend. Instead, we log one message per memory context. + * backend into StringInfo and log it as one message. That would + * require the buffer to be enlarged, risking an OOM as there could be + * a large number of memory contexts in a backend. Instead, we log + * one message per memory context. */ ereport(LOG_SERVER_ONLY, (errhidestmt(true), @@ -536,7 +747,7 @@ MemoryContextStatsInternal(MemoryContext context, int level, MemoryContext child; int ichild; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); /* Examine the context itself */ context->methods->stats(context, @@ -699,19 +910,6 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru, #endif -/* - * MemoryContextContains - * Detect whether an allocated chunk of memory belongs to a given - * context or not. - * - * Caution: this test is reliable as long as 'pointer' does point to - * a chunk of memory allocated from *some* context. If 'pointer' points - * at memory obtained in some other way, there is a small chance of a - * false-positive result, since the bits right before it might look like - * a valid chunk header by chance. - */ - - /* * MemoryContextCreate * Context-type-independent part of context creation. @@ -737,7 +935,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru, * * node: the as-yet-uninitialized common part of the context header node. * tag: NodeTag code identifying the memory context type. - * methods: context-type-specific methods (usually statically allocated). + * method_id: MemoryContextMethodID of the context-type being created. * parent: parent context, or NULL if this will be a top-level context. * name: name of context (must be statically allocated). * @@ -747,7 +945,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru, void MemoryContextCreate(MemoryContext node, NodeTag tag, - const MemoryContextMethods *methods, + MemoryContextMethodID method_id, MemoryContext parent, const char *name) { @@ -757,7 +955,7 @@ MemoryContextCreate(MemoryContext node, /* Initialize all standard fields of memory context header */ node->type = tag; node->isReset = true; - node->methods = methods; + node->methods = &mcxt_methods[method_id]; node->parent = parent; node->firstchild = NULL; node->mem_allocated = 0; @@ -797,7 +995,7 @@ MemoryContextAlloc(MemoryContext context, Size size) { void *ret; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); if (!AllocSizeIsValid(size)) @@ -840,7 +1038,7 @@ MemoryContextAllocZero(MemoryContext context, Size size) { void *ret; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); if (!AllocSizeIsValid(size)) @@ -878,7 +1076,7 @@ MemoryContextAllocZeroAligned(MemoryContext context, Size size) { void *ret; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); if (!AllocSizeIsValid(size)) @@ -913,11 +1111,11 @@ MemoryContextAllocExtended(MemoryContext context, Size size, int flags) { void *ret; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); - if (((flags & MCXT_ALLOC_HUGE) != 0 && !AllocHugeSizeIsValid(size)) || - ((flags & MCXT_ALLOC_HUGE) == 0 && !AllocSizeIsValid(size))) + if (!((flags & MCXT_ALLOC_HUGE) != 0 ? AllocHugeSizeIsValid(size) : + AllocSizeIsValid(size))) elog(ERROR, "invalid memory alloc request size %zu", size); context->isReset = false; @@ -973,7 +1171,7 @@ palloc(Size size) void *ret; MemoryContext context = CurrentMemoryContext; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); if (!AllocSizeIsValid(size)) @@ -1004,7 +1202,7 @@ palloc0(Size size) void *ret; MemoryContext context = CurrentMemoryContext; - AssertArg(MemoryContextIsValid(context)); + Assert(MemoryContextIsValid(context)); AssertNotInCriticalSection(context); if (!AllocSizeIsValid(size)) @@ -1032,6 +1230,125 @@ palloc0(Size size) +/* + * MemoryContextAllocAligned + * Allocate 'size' bytes of memory in 'context' aligned to 'alignto' + * bytes. + * + * Currently, we align addresses by requesting additional bytes from the + * MemoryContext's standard allocator function and then aligning the returned + * address by the required alignment. This means that the given MemoryContext + * must support providing us with a chunk of memory that's larger than 'size'. + * For allocators such as Slab, that's not going to work, as slab only allows + * chunks of the size that's specified when the context is created. + * + * 'alignto' must be a power of 2. + * 'flags' may be 0 or set the same as MemoryContextAllocExtended(). + */ +void * +MemoryContextAllocAligned(MemoryContext context, + Size size, Size alignto, int flags) +{ + MemoryChunk *alignedchunk; + Size alloc_size; + void *unaligned; + void *aligned; + + /* wouldn't make much sense to waste that much space */ + Assert(alignto < (128 * 1024 * 1024)); + + /* ensure alignto is a power of 2 */ + Assert((alignto & (alignto - 1)) == 0); + + /* + * If the alignment requirements are less than what we already guarantee + * then just use the standard allocation function. + */ + if (unlikely(alignto <= MAXIMUM_ALIGNOF)) + return MemoryContextAllocExtended(context, size, flags); + + /* + * We implement aligned pointers by simply allocating enough memory for + * the requested size plus the alignment and an additional "redirection" + * MemoryChunk. This additional MemoryChunk is required for operations + * such as pfree when used on the pointer returned by this function. We + * use this redirection MemoryChunk in order to find the pointer to the + * memory that was returned by the MemoryContextAllocExtended call below. + * We do that by "borrowing" the block offset field and instead of using + * that to find the offset into the owning block, we use it to find the + * original allocated address. + * + * Here we must allocate enough extra memory so that we can still align + * the pointer returned by MemoryContextAllocExtended and also have enough + * space for the redirection MemoryChunk. Since allocations will already + * be at least aligned by MAXIMUM_ALIGNOF, we can subtract that amount + * from the allocation size to save a little memory. + */ + alloc_size = size + PallocAlignedExtraBytes(alignto); + +#ifdef MEMORY_CONTEXT_CHECKING + /* ensure there's space for a sentinel byte */ + alloc_size += 1; +#endif + + /* perform the actual allocation */ + unaligned = MemoryContextAllocExtended(context, alloc_size, flags); + + /* set the aligned pointer */ + aligned = (void *) TYPEALIGN(alignto, (char *) unaligned + + sizeof(MemoryChunk)); + + alignedchunk = PointerGetMemoryChunk(aligned); + + /* + * We set the redirect MemoryChunk so that the block offset calculation is + * used to point back to the 'unaligned' allocated chunk. This allows us + * to use MemoryChunkGetBlock() to find the unaligned chunk when we need + * to perform operations such as pfree() and repalloc(). + * + * We store 'alignto' in the MemoryChunk's 'value' so that we know what + * the alignment was set to should we ever be asked to realloc this + * pointer. + */ + MemoryChunkSetHdrMask(alignedchunk, unaligned, alignto, + MCTX_ALIGNED_REDIRECT_ID); + + /* double check we produced a correctly aligned pointer */ + Assert((void *) TYPEALIGN(alignto, aligned) == aligned); + +#ifdef MEMORY_CONTEXT_CHECKING + alignedchunk->requested_size = size; + /* set mark to catch clobber of "unused" space */ + set_sentinel(aligned, size); +#endif + + /* Mark the bytes before the redirection header as noaccess */ + VALGRIND_MAKE_MEM_NOACCESS(unaligned, + (char *) alignedchunk - (char *) unaligned); + + /* Disallow access to the redirection chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(alignedchunk, sizeof(MemoryChunk)); + + return aligned; +} + +/* + * palloc_aligned + * Allocate 'size' bytes returning a pointer that's aligned to the + * 'alignto' boundary. + * + * Currently, we align addresses by requesting additional bytes from the + * MemoryContext's standard allocator function and then aligning the returned + * address by the required alignment. This means that the given MemoryContext + * must support providing us with a chunk of memory that's larger than 'size'. + * For allocators such as Slab, that's not going to work, as slab only allows + * chunks of the size that's specified when the context is created. + * + * 'alignto' must be a power of 2. + * 'flags' may be 0 or set the same as MemoryContextAllocExtended(). + */ + + /* * pfree * Release an allocated chunk. @@ -1039,10 +1356,17 @@ palloc0(Size size) void pfree(void *pointer) { +#ifdef USE_VALGRIND + MemoryContextMethodID method = GetMemoryChunkMethodID(pointer); MemoryContext context = GetMemoryChunkContext(pointer); +#endif + + MCXT_METHOD(pointer, free_p) (pointer); - context->methods->free_p(context, pointer); - VALGRIND_MEMPOOL_FREE(context, pointer); +#ifdef USE_VALGRIND + if (method != MCTX_ALIGNED_REDIRECT_ID) + VALGRIND_MEMPOOL_FREE(context, pointer); +#endif } /* @@ -1052,7 +1376,12 @@ pfree(void *pointer) void * repalloc(void *pointer, Size size) { +#ifdef USE_VALGRIND + MemoryContextMethodID method = GetMemoryChunkMethodID(pointer); +#endif +#if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND) MemoryContext context = GetMemoryChunkContext(pointer); +#endif void *ret; if (!AllocSizeIsValid(size)) @@ -1063,22 +1392,42 @@ repalloc(void *pointer, Size size) /* isReset must be false already */ Assert(!context->isReset); - ret = context->methods->realloc(context, pointer, size); + ret = MCXT_METHOD(pointer, realloc) (pointer, size); if (unlikely(ret == NULL)) { + MemoryContext cxt = GetMemoryChunkContext(pointer); + MemoryContextStats(TopMemoryContext); ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory"), errdetail("Failed on request of size %zu in memory context \"%s\".", - size, context->name))); + size, cxt->name))); } - VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size); +#ifdef USE_VALGRIND + if (method != MCTX_ALIGNED_REDIRECT_ID) + VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size); +#endif return ret; } +/* + * repalloc_extended + * Adjust the size of a previously allocated chunk, + * with HUGE and NO_OOM options. + */ +#if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND) +#endif + +/* + * repalloc0 + * Adjust the size of a previously allocated chunk and zero out the added + * space. + */ + + /* * MemoryContextAllocHuge * Allocate (possibly-expansive) space within the specified context. diff --git a/src/postgres/src_backend_utils_mmgr_slab.c b/src/postgres/src_backend_utils_mmgr_slab.c new file mode 100644 index 00000000..e961f78d --- /dev/null +++ b/src/postgres/src_backend_utils_mmgr_slab.c @@ -0,0 +1,1021 @@ +/*-------------------------------------------------------------------- + * Symbols referenced in this file: + * - SlabAlloc + * - SlabBlocklistIndex + * - SlabGetNextFreeChunk + * - SlabFindNextBlockListIndex + * - SlabFree + * - SlabRealloc + * - SlabReset + * - SlabDelete + * - SlabGetChunkContext + * - SlabGetChunkSpace + * - SlabIsEmpty + * - SlabStats + * - SlabCheck + *-------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * + * slab.c + * SLAB allocator definitions. + * + * SLAB is a MemoryContext implementation designed for cases where large + * numbers of equally-sized objects can be allocated and freed efficiently + * with minimal memory wastage and fragmentation. + * + * + * Portions Copyright (c) 2017-2023, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/backend/utils/mmgr/slab.c + * + * + * NOTE: + * The constant allocation size allows significant simplification and various + * optimizations over more general purpose allocators. The blocks are carved + * into chunks of exactly the right size, wasting only the space required to + * MAXALIGN the allocated chunks. + * + * Slab can also help reduce memory fragmentation in cases where longer-lived + * chunks remain stored on blocks while most of the other chunks have already + * been pfree'd. We give priority to putting new allocations into the + * "fullest" block. This help avoid having too many sparsely used blocks + * around and allows blocks to more easily become completely unused which + * allows them to be eventually free'd. + * + * We identify the "fullest" block to put new allocations on by using a block + * from the lowest populated element of the context's "blocklist" array. + * This is an array of dlists containing blocks which we partition by the + * number of free chunks which block has. Blocks with fewer free chunks are + * stored in a lower indexed dlist array slot. Full blocks go on the 0th + * element of the blocklist array. So that we don't have to have too many + * elements in the array, each dlist in the array is responsible for a range + * of free chunks. When a chunk is palloc'd or pfree'd we may need to move + * the block onto another dlist if the number of free chunks crosses the + * range boundary that the current list is responsible for. Having just a + * few blocklist elements reduces the number of times we must move the block + * onto another dlist element. + * + * We keep track of free chunks within each block by using a block-level free + * list. We consult this list when we allocate a new chunk in the block. + * The free list is a linked list, the head of which is pointed to with + * SlabBlock's freehead field. Each subsequent list item is stored in the + * free chunk's memory. We ensure chunks are large enough to store this + * address. + * + * When we allocate a new block, technically all chunks are free, however, to + * avoid having to write out the entire block to set the linked list for the + * free chunks for every chunk in the block, we instead store a pointer to + * the next "unused" chunk on the block and keep track of how many of these + * unused chunks there are. When a new block is malloc'd, all chunks are + * unused. The unused pointer starts with the first chunk on the block and + * as chunks are allocated, the unused pointer is incremented. As chunks are + * pfree'd, the unused pointer never goes backwards. The unused pointer can + * be thought of as a high watermark for the maximum number of chunks in the + * block which have been in use concurrently. When a chunk is pfree'd the + * chunk is put onto the head of the free list and the unused pointer is not + * changed. We only consume more unused chunks if we run out of free chunks + * on the free list. This method effectively gives priority to using + * previously used chunks over previously unused chunks, which should perform + * better due to CPU caching effects. + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "lib/ilist.h" +#include "utils/memdebug.h" +#include "utils/memutils.h" +#include "utils/memutils_memorychunk.h" +#include "utils/memutils_internal.h" + +#define Slab_BLOCKHDRSZ MAXALIGN(sizeof(SlabBlock)) + +#ifdef MEMORY_CONTEXT_CHECKING +/* + * Size of the memory required to store the SlabContext. + * MEMORY_CONTEXT_CHECKING builds need some extra memory for the isChunkFree + * array. + */ +#define Slab_CONTEXT_HDRSZ(chunksPerBlock) \ + (sizeof(SlabContext) + ((chunksPerBlock) * sizeof(bool))) +#else +#define Slab_CONTEXT_HDRSZ(chunksPerBlock) sizeof(SlabContext) +#endif + +/* + * The number of partitions to divide the blocklist into based their number of + * free chunks. There must be at least 2. + */ +#define SLAB_BLOCKLIST_COUNT 3 + +/* The maximum number of completely empty blocks to keep around for reuse. */ +#define SLAB_MAXIMUM_EMPTY_BLOCKS 10 + +/* + * SlabContext is a specialized implementation of MemoryContext. + */ +typedef struct SlabContext +{ + MemoryContextData header; /* Standard memory-context fields */ + /* Allocation parameters for this context: */ + Size chunkSize; /* the requested (non-aligned) chunk size */ + Size fullChunkSize; /* chunk size with chunk header and alignment */ + Size blockSize; /* the size to make each block of chunks */ + int32 chunksPerBlock; /* number of chunks that fit in 1 block */ + int32 curBlocklistIndex; /* index into the blocklist[] element + * containing the fullest, blocks */ +#ifdef MEMORY_CONTEXT_CHECKING + bool *isChunkFree; /* array to mark free chunks in a block during + * SlabCheck */ +#endif + + int32 blocklist_shift; /* number of bits to shift the nfree count + * by to get the index into blocklist[] */ + dclist_head emptyblocks; /* empty blocks to use up first instead of + * mallocing new blocks */ + + /* + * Blocks with free space, grouped by the number of free chunks they + * contain. Completely full blocks are stored in the 0th element. + * Completely empty blocks are stored in emptyblocks or free'd if we have + * enough empty blocks already. + */ + dlist_head blocklist[SLAB_BLOCKLIST_COUNT]; +} SlabContext; + +/* + * SlabBlock + * Structure of a single slab block. + * + * slab: pointer back to the owning MemoryContext + * nfree: number of chunks on the block which are unallocated + * nunused: number of chunks on the block unallocated and not on the block's + * freelist. + * freehead: linked-list header storing a pointer to the first free chunk on + * the block. Subsequent pointers are stored in the chunk's memory. NULL + * indicates the end of the list. + * unused: pointer to the next chunk which has yet to be used. + * node: doubly-linked list node for the context's blocklist + */ +typedef struct SlabBlock +{ + SlabContext *slab; /* owning context */ + int32 nfree; /* number of chunks on free + unused chunks */ + int32 nunused; /* number of unused chunks */ + MemoryChunk *freehead; /* pointer to the first free chunk */ + MemoryChunk *unused; /* pointer to the next unused chunk */ + dlist_node node; /* doubly-linked list for blocklist[] */ +} SlabBlock; + + +#define Slab_CHUNKHDRSZ sizeof(MemoryChunk) +#define SlabChunkGetPointer(chk) \ + ((void *) (((char *) (chk)) + sizeof(MemoryChunk))) + +/* + * SlabBlockGetChunk + * Obtain a pointer to the nth (0-based) chunk in the block + */ +#define SlabBlockGetChunk(slab, block, n) \ + ((MemoryChunk *) ((char *) (block) + Slab_BLOCKHDRSZ \ + + ((n) * (slab)->fullChunkSize))) + +#if defined(MEMORY_CONTEXT_CHECKING) || defined(USE_ASSERT_CHECKING) + +/* + * SlabChunkIndex + * Get the 0-based index of how many chunks into the block the given + * chunk is. +*/ +#define SlabChunkIndex(slab, block, chunk) \ + (((char *) (chunk) - (char *) SlabBlockGetChunk(slab, block, 0)) / \ + (slab)->fullChunkSize) + +/* + * SlabChunkMod + * A MemoryChunk should always be at an address which is a multiple of + * fullChunkSize starting from the 0th chunk position. This will return + * non-zero if it's not. + */ +#define SlabChunkMod(slab, block, chunk) \ + (((char *) (chunk) - (char *) SlabBlockGetChunk(slab, block, 0)) % \ + (slab)->fullChunkSize) + +#endif + +/* + * SlabIsValid + * True iff set is a valid slab allocation set. + */ +#define SlabIsValid(set) (PointerIsValid(set) && IsA(set, SlabContext)) + +/* + * SlabBlockIsValid + * True iff block is a valid block of slab allocation set. + */ +#define SlabBlockIsValid(block) \ + (PointerIsValid(block) && SlabIsValid((block)->slab)) + +/* + * SlabBlocklistIndex + * Determine the blocklist index that a block should be in for the given + * number of free chunks. + */ +static inline int32 +SlabBlocklistIndex(SlabContext *slab, int nfree) +{ + int32 index; + int32 blocklist_shift = slab->blocklist_shift; + + Assert(nfree >= 0 && nfree <= slab->chunksPerBlock); + + /* + * Determine the blocklist index based on the number of free chunks. We + * must ensure that 0 free chunks is dedicated to index 0. Everything + * else must be >= 1 and < SLAB_BLOCKLIST_COUNT. + * + * To make this as efficient as possible, we exploit some two's complement + * arithmetic where we reverse the sign before bit shifting. This results + * in an nfree of 0 using index 0 and anything non-zero staying non-zero. + * This is exploiting 0 and -0 being the same in two's complement. When + * we're done, we just need to flip the sign back over again for a + * positive index. + */ + index = -((-nfree) >> blocklist_shift); + + if (nfree == 0) + Assert(index == 0); + else + Assert(index >= 1 && index < SLAB_BLOCKLIST_COUNT); + + return index; +} + +/* + * SlabFindNextBlockListIndex + * Search blocklist for blocks which have free chunks and return the + * index of the blocklist found containing at least 1 block with free + * chunks. If no block can be found we return 0. + * + * Note: We give priority to fuller blocks so that these are filled before + * emptier blocks. This is done to increase the chances that mostly-empty + * blocks will eventually become completely empty so they can be free'd. + */ +static int32 +SlabFindNextBlockListIndex(SlabContext *slab) +{ + /* start at 1 as blocklist[0] is for full blocks. */ + for (int i = 1; i < SLAB_BLOCKLIST_COUNT; i++) + { + /* return the first found non-empty index */ + if (!dlist_is_empty(&slab->blocklist[i])) + return i; + } + + /* no blocks with free space */ + return 0; +} + +/* + * SlabGetNextFreeChunk + * Return the next free chunk in block and update the block to account + * for the returned chunk now being used. + */ +static inline MemoryChunk * +SlabGetNextFreeChunk(SlabContext *slab, SlabBlock *block) +{ + MemoryChunk *chunk; + + Assert(block->nfree > 0); + + if (block->freehead != NULL) + { + chunk = block->freehead; + + /* + * Pop the chunk from the linked list of free chunks. The pointer to + * the next free chunk is stored in the chunk itself. + */ + VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(MemoryChunk *)); + block->freehead = *(MemoryChunk **) SlabChunkGetPointer(chunk); + + /* check nothing stomped on the free chunk's memory */ + Assert(block->freehead == NULL || + (block->freehead >= SlabBlockGetChunk(slab, block, 0) && + block->freehead <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1) && + SlabChunkMod(slab, block, block->freehead) == 0)); + } + else + { + Assert(block->nunused > 0); + + chunk = block->unused; + block->unused = (MemoryChunk *) (((char *) block->unused) + slab->fullChunkSize); + block->nunused--; + } + + block->nfree--; + + return chunk; +} + +/* + * SlabContextCreate + * Create a new Slab context. + * + * parent: parent context, or NULL if top-level context + * name: name of context (must be statically allocated) + * blockSize: allocation block size + * chunkSize: allocation chunk size + * + * The MAXALIGN(chunkSize) may not exceed MEMORYCHUNK_MAX_VALUE + */ +#ifdef MEMORY_CONTEXT_CHECKING +#else +#endif +#ifdef MEMORY_CONTEXT_CHECKING +#endif + +/* + * SlabReset + * Frees all memory which is allocated in the given set. + * + * The code simply frees all the blocks in the context - we don't keep any + * keeper blocks or anything like that. + */ +void +SlabReset(MemoryContext context) +{ + SlabContext *slab = (SlabContext *) context; + dlist_mutable_iter miter; + int i; + + Assert(SlabIsValid(slab)); + +#ifdef MEMORY_CONTEXT_CHECKING + /* Check for corruption and leaks before freeing */ + SlabCheck(context); +#endif + + /* release any retained empty blocks */ + dclist_foreach_modify(miter, &slab->emptyblocks) + { + SlabBlock *block = dlist_container(SlabBlock, node, miter.cur); + + dclist_delete_from(&slab->emptyblocks, miter.cur); + +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(block, slab->blockSize); +#endif + free(block); + context->mem_allocated -= slab->blockSize; + } + + /* walk over blocklist and free the blocks */ + for (i = 0; i < SLAB_BLOCKLIST_COUNT; i++) + { + dlist_foreach_modify(miter, &slab->blocklist[i]) + { + SlabBlock *block = dlist_container(SlabBlock, node, miter.cur); + + dlist_delete(miter.cur); + +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(block, slab->blockSize); +#endif + free(block); + context->mem_allocated -= slab->blockSize; + } + } + + slab->curBlocklistIndex = 0; + + Assert(context->mem_allocated == 0); +} + +/* + * SlabDelete + * Free all memory which is allocated in the given context. + */ +void +SlabDelete(MemoryContext context) +{ + /* Reset to release all the SlabBlocks */ + SlabReset(context); + /* And free the context header */ + free(context); +} + +/* + * SlabAlloc + * Returns a pointer to allocated memory of given size or NULL if + * request could not be completed; memory is added to the slab. + */ +void * +SlabAlloc(MemoryContext context, Size size) +{ + SlabContext *slab = (SlabContext *) context; + SlabBlock *block; + MemoryChunk *chunk; + + Assert(SlabIsValid(slab)); + + /* sanity check that this is pointing to a valid blocklist */ + Assert(slab->curBlocklistIndex >= 0); + Assert(slab->curBlocklistIndex <= SlabBlocklistIndex(slab, slab->chunksPerBlock)); + + /* make sure we only allow correct request size */ + if (unlikely(size != slab->chunkSize)) + elog(ERROR, "unexpected alloc chunk size %zu (expected %zu)", + size, slab->chunkSize); + + /* + * Handle the case when there are no partially filled blocks available. + * SlabFree() will have updated the curBlocklistIndex setting it to zero + * to indicate that it has freed the final block. Also later in + * SlabAlloc() we will set the curBlocklistIndex to zero if we end up + * filling the final block. + */ + if (unlikely(slab->curBlocklistIndex == 0)) + { + dlist_head *blocklist; + int blocklist_idx; + + /* to save allocating a new one, first check the empty blocks list */ + if (dclist_count(&slab->emptyblocks) > 0) + { + dlist_node *node = dclist_pop_head_node(&slab->emptyblocks); + + block = dlist_container(SlabBlock, node, node); + + /* + * SlabFree() should have left this block in a valid state with + * all chunks free. Ensure that's the case. + */ + Assert(block->nfree == slab->chunksPerBlock); + + /* fetch the next chunk from this block */ + chunk = SlabGetNextFreeChunk(slab, block); + } + else + { + block = (SlabBlock *) malloc(slab->blockSize); + + if (unlikely(block == NULL)) + return NULL; + + block->slab = slab; + context->mem_allocated += slab->blockSize; + + /* use the first chunk in the new block */ + chunk = SlabBlockGetChunk(slab, block, 0); + + block->nfree = slab->chunksPerBlock - 1; + block->unused = SlabBlockGetChunk(slab, block, 1); + block->freehead = NULL; + block->nunused = slab->chunksPerBlock - 1; + } + + /* find the blocklist element for storing blocks with 1 used chunk */ + blocklist_idx = SlabBlocklistIndex(slab, block->nfree); + blocklist = &slab->blocklist[blocklist_idx]; + + /* this better be empty. We just added a block thinking it was */ + Assert(dlist_is_empty(blocklist)); + + dlist_push_head(blocklist, &block->node); + + slab->curBlocklistIndex = blocklist_idx; + } + else + { + dlist_head *blocklist = &slab->blocklist[slab->curBlocklistIndex]; + int new_blocklist_idx; + + Assert(!dlist_is_empty(blocklist)); + + /* grab the block from the blocklist */ + block = dlist_head_element(SlabBlock, node, blocklist); + + /* make sure we actually got a valid block, with matching nfree */ + Assert(block != NULL); + Assert(slab->curBlocklistIndex == SlabBlocklistIndex(slab, block->nfree)); + Assert(block->nfree > 0); + + /* fetch the next chunk from this block */ + chunk = SlabGetNextFreeChunk(slab, block); + + /* get the new blocklist index based on the new free chunk count */ + new_blocklist_idx = SlabBlocklistIndex(slab, block->nfree); + + /* + * Handle the case where the blocklist index changes. This also deals + * with blocks becoming full as only full blocks go at index 0. + */ + if (unlikely(slab->curBlocklistIndex != new_blocklist_idx)) + { + dlist_delete_from(blocklist, &block->node); + dlist_push_head(&slab->blocklist[new_blocklist_idx], &block->node); + + if (dlist_is_empty(blocklist)) + slab->curBlocklistIndex = SlabFindNextBlockListIndex(slab); + } + } + + /* + * Check that the chunk pointer is actually somewhere on the block and is + * aligned as expected. + */ + Assert(chunk >= SlabBlockGetChunk(slab, block, 0)); + Assert(chunk <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1)); + Assert(SlabChunkMod(slab, block, chunk) == 0); + + /* Prepare to initialize the chunk header. */ + VALGRIND_MAKE_MEM_UNDEFINED(chunk, Slab_CHUNKHDRSZ); + + MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize), + MCTX_SLAB_ID); +#ifdef MEMORY_CONTEXT_CHECKING + /* slab mark to catch clobber of "unused" space */ + Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ)); + set_sentinel(MemoryChunkGetPointer(chunk), size); + VALGRIND_MAKE_MEM_NOACCESS(((char *) chunk) + + Slab_CHUNKHDRSZ + slab->chunkSize, + slab->fullChunkSize - + (slab->chunkSize + Slab_CHUNKHDRSZ)); +#endif + +#ifdef RANDOMIZE_ALLOCATED_MEMORY + /* fill the allocated space with junk */ + randomize_mem((char *) MemoryChunkGetPointer(chunk), size); +#endif + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ); + + return MemoryChunkGetPointer(chunk); +} + +/* + * SlabFree + * Frees allocated memory; memory is removed from the slab. + */ +void +SlabFree(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + SlabBlock *block; + SlabContext *slab; + int curBlocklistIdx; + int newBlocklistIdx; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Slab_CHUNKHDRSZ); + + block = MemoryChunkGetBlock(chunk); + + /* + * For speed reasons we just Assert that the referenced block is good. + * Future field experience may show that this Assert had better become a + * regular runtime test-and-elog check. + */ + Assert(SlabBlockIsValid(block)); + slab = block->slab; + +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for someone scribbling on unused space in chunk */ + Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ)); + if (!sentinel_ok(pointer, slab->chunkSize)) + elog(WARNING, "detected write past chunk end in %s %p", + slab->header.name, chunk); +#endif + + /* push this chunk onto the head of the block's free list */ + *(MemoryChunk **) pointer = block->freehead; + block->freehead = chunk; + + block->nfree++; + + Assert(block->nfree > 0); + Assert(block->nfree <= slab->chunksPerBlock); + +#ifdef CLOBBER_FREED_MEMORY + /* don't wipe the free list MemoryChunk pointer stored in the chunk */ + wipe_mem((char *) pointer + sizeof(MemoryChunk *), + slab->chunkSize - sizeof(MemoryChunk *)); +#endif + + curBlocklistIdx = SlabBlocklistIndex(slab, block->nfree - 1); + newBlocklistIdx = SlabBlocklistIndex(slab, block->nfree); + + /* + * Check if the block needs to be moved to another element on the + * blocklist based on it now having 1 more free chunk. + */ + if (unlikely(curBlocklistIdx != newBlocklistIdx)) + { + /* do the move */ + dlist_delete_from(&slab->blocklist[curBlocklistIdx], &block->node); + dlist_push_head(&slab->blocklist[newBlocklistIdx], &block->node); + + /* + * The blocklist[curBlocklistIdx] may now be empty or we may now be + * able to use a lower-element blocklist. We'll need to redetermine + * what the slab->curBlocklistIndex is if the current blocklist was + * changed or if a lower element one was changed. We must ensure we + * use the list with the fullest block(s). + */ + if (slab->curBlocklistIndex >= curBlocklistIdx) + { + slab->curBlocklistIndex = SlabFindNextBlockListIndex(slab); + + /* + * We know there must be a block with at least 1 unused chunk as + * we just pfree'd one. Ensure curBlocklistIndex reflects this. + */ + Assert(slab->curBlocklistIndex > 0); + } + } + + /* Handle when a block becomes completely empty */ + if (unlikely(block->nfree == slab->chunksPerBlock)) + { + /* remove the block */ + dlist_delete_from(&slab->blocklist[newBlocklistIdx], &block->node); + + /* + * To avoid thrashing malloc/free, we keep a list of empty blocks that + * we can reuse again instead of having to malloc a new one. + */ + if (dclist_count(&slab->emptyblocks) < SLAB_MAXIMUM_EMPTY_BLOCKS) + dclist_push_head(&slab->emptyblocks, &block->node); + else + { + /* + * When we have enough empty blocks stored already, we actually + * free the block. + */ +#ifdef CLOBBER_FREED_MEMORY + wipe_mem(block, slab->blockSize); +#endif + free(block); + slab->header.mem_allocated -= slab->blockSize; + } + + /* + * Check if we need to reset the blocklist index. This is required + * when the blocklist this block is on has become completely empty. + */ + if (slab->curBlocklistIndex == newBlocklistIdx && + dlist_is_empty(&slab->blocklist[newBlocklistIdx])) + slab->curBlocklistIndex = SlabFindNextBlockListIndex(slab); + } +} + +/* + * SlabRealloc + * Change the allocated size of a chunk. + * + * As Slab is designed for allocating equally-sized chunks of memory, it can't + * do an actual chunk size change. We try to be gentle and allow calls with + * exactly the same size, as in that case we can simply return the same + * chunk. When the size differs, we throw an error. + * + * We could also allow requests with size < chunkSize. That however seems + * rather pointless - Slab is meant for chunks of constant size, and moreover + * realloc is usually used to enlarge the chunk. + */ +void * +SlabRealloc(void *pointer, Size size) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + SlabBlock *block; + SlabContext *slab; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Slab_CHUNKHDRSZ); + + block = MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ); + + /* + * Try to verify that we have a sane block pointer: the block header + * should reference a slab context. (We use a test-and-elog, not just + * Assert, because it seems highly likely that we're here in error in the + * first place.) + */ + if (!SlabBlockIsValid(block)) + elog(ERROR, "could not find block containing chunk %p", chunk); + slab = block->slab; + + /* can't do actual realloc with slab, but let's try to be gentle */ + if (size == slab->chunkSize) + return pointer; + + elog(ERROR, "slab allocator does not support realloc()"); + return NULL; /* keep compiler quiet */ +} + +/* + * SlabGetChunkContext + * Return the MemoryContext that 'pointer' belongs to. + */ +MemoryContext +SlabGetChunkContext(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + SlabBlock *block; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Slab_CHUNKHDRSZ); + + block = MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ); + + Assert(SlabBlockIsValid(block)); + + return &block->slab->header; +} + +/* + * SlabGetChunkSpace + * Given a currently-allocated chunk, determine the total space + * it occupies (including all memory-allocation overhead). + */ +Size +SlabGetChunkSpace(void *pointer) +{ + MemoryChunk *chunk = PointerGetMemoryChunk(pointer); + SlabBlock *block; + SlabContext *slab; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Slab_CHUNKHDRSZ); + + block = MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ); + + Assert(SlabBlockIsValid(block)); + slab = block->slab; + + return slab->fullChunkSize; +} + +/* + * SlabIsEmpty + * Is the slab empty of any allocated space? + */ +bool +SlabIsEmpty(MemoryContext context) +{ + Assert(SlabIsValid((SlabContext *) context)); + + return (context->mem_allocated == 0); +} + +/* + * SlabStats + * Compute stats about memory consumption of a Slab context. + * + * printfunc: if not NULL, pass a human-readable stats string to this. + * passthru: pass this pointer through to printfunc. + * totals: if not NULL, add stats about this context into *totals. + * print_to_stderr: print stats to stderr if true, elog otherwise. + */ +void +SlabStats(MemoryContext context, + MemoryStatsPrintFunc printfunc, void *passthru, + MemoryContextCounters *totals, + bool print_to_stderr) +{ + SlabContext *slab = (SlabContext *) context; + Size nblocks = 0; + Size freechunks = 0; + Size totalspace; + Size freespace = 0; + int i; + + Assert(SlabIsValid(slab)); + + /* Include context header in totalspace */ + totalspace = Slab_CONTEXT_HDRSZ(slab->chunksPerBlock); + + /* Add the space consumed by blocks in the emptyblocks list */ + totalspace += dclist_count(&slab->emptyblocks) * slab->blockSize; + + for (i = 0; i < SLAB_BLOCKLIST_COUNT; i++) + { + dlist_iter iter; + + dlist_foreach(iter, &slab->blocklist[i]) + { + SlabBlock *block = dlist_container(SlabBlock, node, iter.cur); + + nblocks++; + totalspace += slab->blockSize; + freespace += slab->fullChunkSize * block->nfree; + freechunks += block->nfree; + } + } + + if (printfunc) + { + char stats_string[200]; + + /* XXX should we include free chunks on empty blocks? */ + snprintf(stats_string, sizeof(stats_string), + "%zu total in %zu blocks; %u empty blocks; %zu free (%zu chunks); %zu used", + totalspace, nblocks, dclist_count(&slab->emptyblocks), + freespace, freechunks, totalspace - freespace); + printfunc(context, passthru, stats_string, print_to_stderr); + } + + if (totals) + { + totals->nblocks += nblocks; + totals->freechunks += freechunks; + totals->totalspace += totalspace; + totals->freespace += freespace; + } +} + + +#ifdef MEMORY_CONTEXT_CHECKING + +/* + * SlabCheck + * Walk through all blocks looking for inconsistencies. + * + * NOTE: report errors as WARNING, *not* ERROR or FATAL. Otherwise you'll + * find yourself in an infinite loop when trouble occurs, because this + * routine will be entered again when elog cleanup tries to release memory! + */ +void +SlabCheck(MemoryContext context) +{ + SlabContext *slab = (SlabContext *) context; + int i; + int nblocks = 0; + const char *name = slab->header.name; + dlist_iter iter; + + Assert(SlabIsValid(slab)); + Assert(slab->chunksPerBlock > 0); + + /* + * Have a look at the empty blocks. These should have all their chunks + * marked as free. Ensure that's the case. + */ + dclist_foreach(iter, &slab->emptyblocks) + { + SlabBlock *block = dlist_container(SlabBlock, node, iter.cur); + + if (block->nfree != slab->chunksPerBlock) + elog(WARNING, "problem in slab %s: empty block %p should have %d free chunks but has %d chunks free", + name, block, slab->chunksPerBlock, block->nfree); + } + + /* walk the non-empty block lists */ + for (i = 0; i < SLAB_BLOCKLIST_COUNT; i++) + { + int j, + nfree; + + /* walk all blocks on this blocklist */ + dlist_foreach(iter, &slab->blocklist[i]) + { + SlabBlock *block = dlist_container(SlabBlock, node, iter.cur); + MemoryChunk *cur_chunk; + + /* + * Make sure the number of free chunks (in the block header) + * matches the position in the blocklist. + */ + if (SlabBlocklistIndex(slab, block->nfree) != i) + elog(WARNING, "problem in slab %s: block %p is on blocklist %d but should be on blocklist %d", + name, block, i, SlabBlocklistIndex(slab, block->nfree)); + + /* make sure the block is not empty */ + if (block->nfree >= slab->chunksPerBlock) + elog(WARNING, "problem in slab %s: empty block %p incorrectly stored on blocklist element %d", + name, block, i); + + /* make sure the slab pointer correctly points to this context */ + if (block->slab != slab) + elog(WARNING, "problem in slab %s: bogus slab link in block %p", + name, block); + + /* reset the array of free chunks for this block */ + memset(slab->isChunkFree, 0, (slab->chunksPerBlock * sizeof(bool))); + nfree = 0; + + /* walk through the block's free list chunks */ + cur_chunk = block->freehead; + while (cur_chunk != NULL) + { + int chunkidx = SlabChunkIndex(slab, block, cur_chunk); + + /* + * Ensure the free list link points to something on the block + * at an address aligned according to the full chunk size. + */ + if (cur_chunk < SlabBlockGetChunk(slab, block, 0) || + cur_chunk > SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1) || + SlabChunkMod(slab, block, cur_chunk) != 0) + elog(WARNING, "problem in slab %s: bogus free list link %p in block %p", + name, cur_chunk, block); + + /* count the chunk and mark it free on the free chunk array */ + nfree++; + slab->isChunkFree[chunkidx] = true; + + /* read pointer of the next free chunk */ + VALGRIND_MAKE_MEM_DEFINED(MemoryChunkGetPointer(cur_chunk), sizeof(MemoryChunk *)); + cur_chunk = *(MemoryChunk **) SlabChunkGetPointer(cur_chunk); + } + + /* check that the unused pointer matches what nunused claims */ + if (SlabBlockGetChunk(slab, block, slab->chunksPerBlock - block->nunused) != + block->unused) + elog(WARNING, "problem in slab %s: mismatch detected between nunused chunks and unused pointer in block %p", + name, block); + + /* + * count the remaining free chunks that have yet to make it onto + * the block's free list. + */ + cur_chunk = block->unused; + for (j = 0; j < block->nunused; j++) + { + int chunkidx = SlabChunkIndex(slab, block, cur_chunk); + + + /* count the chunk as free and mark it as so in the array */ + nfree++; + if (chunkidx < slab->chunksPerBlock) + slab->isChunkFree[chunkidx] = true; + + /* move forward 1 chunk */ + cur_chunk = (MemoryChunk *) (((char *) cur_chunk) + slab->fullChunkSize); + } + + for (j = 0; j < slab->chunksPerBlock; j++) + { + if (!slab->isChunkFree[j]) + { + MemoryChunk *chunk = SlabBlockGetChunk(slab, block, j); + SlabBlock *chunkblock; + + /* Allow access to the chunk header. */ + VALGRIND_MAKE_MEM_DEFINED(chunk, Slab_CHUNKHDRSZ); + + chunkblock = (SlabBlock *) MemoryChunkGetBlock(chunk); + + /* Disallow access to the chunk header. */ + VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ); + + /* + * check the chunk's blockoffset correctly points back to + * the block + */ + if (chunkblock != block) + elog(WARNING, "problem in slab %s: bogus block link in block %p, chunk %p", + name, block, chunk); + + /* check the sentinel byte is intact */ + Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ)); + if (!sentinel_ok(chunk, Slab_CHUNKHDRSZ + slab->chunkSize)) + elog(WARNING, "problem in slab %s: detected write past chunk end in block %p, chunk %p", + name, block, chunk); + } + } + + /* + * Make sure we got the expected number of free chunks (as tracked + * in the block header). + */ + if (nfree != block->nfree) + elog(WARNING, "problem in slab %s: nfree in block %p is %d but %d chunk were found as free", + name, block, block->nfree, nfree); + + nblocks++; + } + } + + /* the stored empty blocks are tracked in mem_allocated too */ + nblocks += dclist_count(&slab->emptyblocks); + + Assert(nblocks * slab->blockSize == context->mem_allocated); +} + +#endif /* MEMORY_CONTEXT_CHECKING */ diff --git a/src/postgres/src_common_encnames.c b/src/postgres/src_common_encnames.c index faf70ff1..1f7bfb2e 100644 --- a/src/postgres/src_common_encnames.c +++ b/src/postgres/src_common_encnames.c @@ -9,7 +9,7 @@ * encnames.c * Encoding names and routines for working with them. * - * Portions Copyright (c) 2001-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 2001-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/common/encnames.c @@ -119,6 +119,9 @@ const pg_enc2name pg_enc2name_tbl[] = */ +StaticAssertDecl(lengthof(pg_enc2icu_tbl) == PG_ENCODING_BE_LAST + 1, + "pg_enc2icu_tbl incomplete"); + /* * Is this encoding supported by ICU? diff --git a/src/postgres/src_common_hashfn.c b/src/postgres/src_common_hashfn.c index 6c84e913..d084cf62 100644 --- a/src/postgres/src_common_hashfn.c +++ b/src/postgres/src_common_hashfn.c @@ -11,7 +11,7 @@ * hashtables * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_common_keywords.c b/src/postgres/src_common_keywords.c index 4d8d827a..2c7eb3f8 100644 --- a/src/postgres/src_common_keywords.c +++ b/src/postgres/src_common_keywords.c @@ -10,7 +10,7 @@ * PostgreSQL's list of SQL keywords * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_common_kwlist_d.h b/src/postgres/src_common_kwlist_d.h index dcb783fb..399c66db 100644 --- a/src/postgres/src_common_kwlist_d.h +++ b/src/postgres/src_common_kwlist_d.h @@ -12,7 +12,7 @@ * kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -32,6 +32,7 @@ static const char ScanKeywords_kw_string[] = "abort\0" + "absent\0" "absolute\0" "access\0" "action\0" @@ -181,6 +182,7 @@ static const char ScanKeywords_kw_string[] = "for\0" "force\0" "foreign\0" + "format\0" "forward\0" "freeze\0" "from\0" @@ -211,6 +213,7 @@ static const char ScanKeywords_kw_string[] = "include\0" "including\0" "increment\0" + "indent\0" "index\0" "indexes\0" "inherit\0" @@ -233,7 +236,13 @@ static const char ScanKeywords_kw_string[] = "isnull\0" "isolation\0" "join\0" + "json\0" + "json_array\0" + "json_arrayagg\0" + "json_object\0" + "json_objectagg\0" "key\0" + "keys\0" "label\0" "language\0" "large\0" @@ -373,6 +382,7 @@ static const char ScanKeywords_kw_string[] = "rows\0" "rule\0" "savepoint\0" + "scalar\0" "schema\0" "schemas\0" "scroll\0" @@ -415,6 +425,7 @@ static const char ScanKeywords_kw_string[] = "symmetric\0" "sysid\0" "system\0" + "system_user\0" "table\0" "tables\0" "tablesample\0" @@ -495,588 +506,601 @@ static const char ScanKeywords_kw_string[] = static const uint16 ScanKeywords_kw_offsets[] = { 0, 6, - 15, + 13, 22, 29, - 33, - 39, - 45, - 55, - 59, - 64, - 70, + 36, + 40, + 46, + 52, + 62, + 66, + 71, 77, - 85, - 93, - 97, - 101, - 107, - 110, + 84, + 92, + 100, + 104, + 108, 114, - 125, - 135, - 146, - 157, - 160, + 117, + 121, + 132, + 142, + 153, + 164, 167, 174, - 184, - 198, - 207, + 181, + 191, + 205, 214, - 220, - 228, + 221, + 227, 235, 242, - 246, - 254, - 259, - 267, - 270, - 276, - 281, + 249, + 253, + 261, + 266, + 274, + 277, + 283, 288, - 296, - 305, - 310, - 315, - 323, - 329, - 334, - 344, - 360, - 366, - 377, - 383, - 389, - 397, - 406, - 414, - 424, + 295, + 303, + 312, + 317, + 322, + 330, + 336, + 341, + 351, + 367, + 373, + 384, + 390, + 396, + 404, + 413, + 421, 431, - 439, - 447, - 456, + 438, + 446, + 454, 463, - 473, - 485, - 498, - 512, - 521, - 532, - 543, - 555, - 563, - 572, - 583, - 588, - 593, + 470, + 480, + 492, + 505, + 519, + 528, + 539, + 550, + 562, + 570, + 579, + 590, + 595, 600, - 606, - 610, - 615, - 623, - 639, - 652, - 665, - 680, - 693, - 711, - 724, + 607, + 613, + 617, + 622, + 630, + 646, + 659, + 672, + 687, + 700, + 718, 731, - 737, - 742, - 751, - 755, - 766, - 770, - 778, - 786, - 794, - 803, - 814, - 823, - 831, + 738, + 744, + 749, + 758, + 762, + 773, + 777, + 785, + 793, + 801, + 810, + 821, + 830, 838, - 848, - 859, - 867, - 873, - 878, + 845, + 855, + 866, + 874, + 880, 885, - 896, - 904, - 912, - 921, - 924, - 933, + 892, + 903, + 911, + 919, + 928, + 931, 940, 947, - 952, - 957, - 962, + 954, + 959, + 964, 969, - 978, - 988, - 992, - 997, + 976, + 985, + 995, + 999, 1004, - 1010, + 1011, 1017, - 1025, - 1035, - 1045, - 1053, + 1024, + 1032, + 1042, + 1052, 1060, - 1068, - 1079, - 1089, - 1098, - 1106, - 1112, + 1067, + 1075, + 1086, + 1096, + 1105, + 1113, 1119, - 1125, + 1126, 1132, - 1141, - 1147, - 1153, - 1163, - 1167, - 1173, - 1181, - 1189, - 1196, - 1201, - 1206, + 1139, + 1148, + 1154, + 1160, + 1170, + 1174, + 1180, + 1188, + 1195, + 1203, + 1210, 1215, - 1225, - 1235, - 1242, - 1248, + 1220, + 1229, + 1239, + 1249, 1256, - 1265, - 1271, - 1280, - 1287, - 1295, - 1302, + 1262, + 1270, + 1279, + 1285, + 1294, + 1301, 1309, - 1314, - 1319, + 1316, + 1323, 1328, - 1331, - 1337, - 1347, - 1357, - 1366, - 1373, - 1376, - 1384, - 1394, - 1404, - 1410, + 1333, + 1342, + 1345, + 1351, + 1361, + 1371, + 1380, + 1387, + 1390, + 1398, + 1408, 1418, - 1426, - 1435, - 1445, - 1452, - 1458, - 1464, - 1470, - 1482, - 1489, - 1497, - 1501, - 1509, - 1519, - 1528, - 1533, - 1541, - 1544, - 1551, - 1561, - 1566, - 1570, - 1576, - 1585, - 1591, - 1596, - 1604, - 1612, - 1622, - 1628, - 1633, - 1639, + 1425, + 1431, + 1439, + 1447, + 1456, + 1466, + 1473, + 1479, + 1485, + 1491, + 1503, + 1510, + 1518, + 1522, + 1530, + 1540, + 1549, + 1554, + 1562, + 1565, + 1572, + 1582, + 1587, + 1592, + 1603, + 1617, + 1629, 1644, - 1650, - 1657, - 1662, + 1648, + 1653, + 1659, 1668, - 1678, - 1693, - 1702, - 1707, - 1714, - 1721, - 1729, - 1735, - 1743, - 1756, - 1765, - 1771, - 1778, + 1674, + 1679, + 1687, + 1695, + 1705, + 1711, + 1716, + 1722, + 1727, + 1733, + 1740, + 1745, + 1751, + 1761, + 1776, 1785, - 1794, - 1799, - 1805, - 1810, - 1815, - 1821, - 1830, - 1838, - 1844, + 1790, + 1797, + 1804, + 1812, + 1818, + 1826, + 1839, 1848, - 1853, - 1857, + 1854, 1861, - 1866, - 1871, - 1874, - 1879, - 1889, - 1900, + 1868, + 1877, + 1882, + 1888, + 1893, + 1898, 1904, - 1912, - 1919, + 1913, + 1921, 1927, - 1934, - 1939, - 1946, - 1952, - 1960, - 1967, - 1970, - 1974, - 1981, - 1986, - 1990, - 1993, - 1998, - 2007, - 2014, + 1931, + 1936, + 1940, + 1944, + 1949, + 1954, + 1957, + 1962, + 1972, + 1983, + 1987, + 1995, + 2002, + 2010, + 2017, 2022, - 2025, - 2031, - 2042, - 2049, + 2029, + 2035, + 2043, + 2050, 2053, - 2059, + 2057, 2064, + 2069, 2073, + 2076, 2081, - 2092, - 2098, - 2104, - 2113, - 2123, - 2130, - 2138, - 2148, + 2090, + 2097, + 2105, + 2108, + 2114, + 2125, + 2132, + 2136, + 2142, + 2147, 2156, - 2165, - 2173, - 2179, - 2186, - 2195, - 2205, - 2215, - 2223, - 2232, - 2241, - 2249, - 2255, - 2266, - 2277, - 2287, + 2164, + 2175, + 2181, + 2187, + 2196, + 2206, + 2213, + 2221, + 2231, + 2239, + 2248, + 2256, + 2262, + 2269, + 2278, + 2288, 2298, 2306, - 2318, + 2315, 2324, - 2330, - 2335, - 2340, + 2332, + 2338, 2349, - 2357, - 2367, - 2371, - 2382, - 2394, - 2402, - 2410, - 2419, - 2427, - 2434, - 2445, - 2453, - 2461, - 2467, - 2475, - 2484, - 2491, - 2501, - 2509, - 2516, - 2522, - 2527, + 2360, + 2370, + 2381, + 2389, + 2401, + 2407, + 2413, + 2418, + 2423, + 2432, + 2440, + 2450, + 2454, + 2465, + 2477, + 2485, + 2493, + 2502, + 2510, + 2517, + 2528, 2536, - 2543, - 2551, - 2560, - 2564, - 2569, + 2544, + 2550, + 2558, + 2567, 2574, 2584, - 2591, + 2592, 2599, - 2606, - 2613, - 2620, - 2629, - 2636, - 2645, - 2655, - 2668, - 2675, - 2683, + 2605, + 2610, + 2619, + 2626, + 2634, + 2643, + 2647, + 2652, + 2657, + 2667, + 2674, + 2681, + 2689, 2696, - 2700, - 2706, - 2711, - 2717, - 2722, - 2730, - 2737, - 2742, - 2751, - 2760, + 2703, + 2710, + 2719, + 2726, + 2735, + 2745, + 2758, 2765, - 2769, - 2776, - 2787, - 2793, - 2803, - 2814, + 2773, + 2786, + 2790, + 2796, + 2801, + 2807, + 2812, 2820, 2827, - 2835, - 2842, - 2849, + 2832, + 2841, + 2850, 2855, - 2868, - 2878, - 2886, - 2896, - 2902, - 2909, - 2915, - 2922, - 2934, + 2859, + 2866, + 2877, + 2883, + 2893, + 2904, + 2910, + 2917, + 2925, + 2932, + 2939, 2945, - 2950, - 2959, - 2969, - 2974, - 2979, - 2984, - 2989, + 2958, + 2968, + 2976, + 2986, + 2992, 2999, - 3002, 3011, - 3023, - 3033, - 3039, + 3017, + 3024, + 3036, 3047, 3052, - 3057, - 3066, - 3074, - 3079, - 3085, - 3093, - 3103, - 3115, - 3127, - 3133, - 3140, - 3148, - 3157, - 3166, - 3172, - 3179, - 3184, - 3190, - 3197, - 3203, - 3212, - 3222, - 3228, + 3061, + 3071, + 3076, + 3081, + 3086, + 3091, + 3101, + 3104, + 3113, + 3125, + 3135, + 3141, + 3149, + 3154, + 3159, + 3168, + 3176, + 3181, + 3187, + 3195, + 3205, + 3217, + 3229, 3235, - 3243, - 3252, - 3260, + 3242, + 3250, + 3259, 3268, - 3276, + 3274, 3281, - 3287, - 3296, - 3301, - 3307, - 3318, - 3325, + 3286, + 3292, + 3299, + 3305, + 3314, + 3324, 3330, 3337, 3345, - 3350, - 3358, - 3364, - 3368, - 3382, - 3392, + 3354, + 3362, + 3370, + 3378, + 3383, + 3389, + 3398, 3403, - 3413, - 3423, - 3437, - 3446, + 3409, + 3420, + 3427, + 3432, + 3439, + 3447, 3452, 3460, - 3473, - 3482, - 3487, - 3491, + 3466, + 3470, + 3484, + 3494, + 3505, + 3515, + 3525, + 3539, + 3548, + 3554, + 3562, + 3575, + 3584, + 3589, + 3593, }; -#define SCANKEYWORDS_NUM_KEYWORDS 460 +#define SCANKEYWORDS_NUM_KEYWORDS 471 static int ScanKeywords_hash_func(const void *key, size_t keylen) { - static const int16 h[921] = { - 207, -201, 0, 223, -255, 28, 32767, -86, - 32767, 0, -35, -938, 32767, 32767, -13, 32767, - 450, 62, 42, 327, 309, -13, 0, 114, - 32767, -230, 135, -12, 424, 191, -114, 32767, - 45, 440, 673, 0, 0, 224, 286, 32767, - 32767, 16, 5, 0, 32767, 32767, -349, 32767, - -43, 32767, 32767, 32767, 32767, 32767, 0, 32767, - 32767, 262, 573, -75, 32767, 32767, 1113, 88, - 111, 32767, 7, -41, 223, 32767, 478, 275, - 32767, 0, 245, 1004, 59, 32767, 322, 256, - -130, 32767, 0, 378, 606, 994, -59, 32767, - -219, 32767, 489, 32767, -328, 32767, 88, 32767, - -228, 0, 1181, -705, 32767, 32767, 149, 32767, - 32767, 177, 0, 0, 32767, 32767, 32767, 473, - 142, 167, 130, 345, 461, 50, 426, 32767, - 32767, -104, 333, 32767, 5, 32767, 32767, 115, - 0, 34, 32767, -178, 32767, 32767, 0, 32767, - 32767, 32767, 429, 573, 32767, 3, 32767, 0, - 237, 32767, 324, 379, 32767, 409, 32767, 32767, - 362, -707, 638, 32767, 32767, -18, 23, 127, - 32767, 32767, -55, 0, 254, 32767, 0, 32767, - -16, 389, 32767, -287, 0, -43, 32767, 0, - 32767, 157, 23, 438, 907, 0, 32767, -213, - 299, 32767, 0, 32767, 32767, 229, 32767, 32767, - 32767, 32767, 186, 32767, 81, 32767, -707, 525, - 732, 515, 32767, 32767, 0, 32767, 32767, 126, - 32767, 32767, 0, 443, 32767, 102, -148, 188, - 393, 32767, 383, 32767, 212, 247, 32767, 389, - 54, -258, 0, 6, -32, 32767, 261, -190, - 112, 32767, 32767, 32767, 0, 32767, 0, 32767, - 32767, 215, 32767, 196, 32767, 445, 32767, 32767, - -456, -66, 161, 32767, 617, -484, 230, 32767, - 1078, 77, 124, 32767, 32767, -44, 32767, -271, - 148, 20, 344, 83, 32767, 32767, 32767, 108, - -768, 269, 32767, 32767, -66, 0, 32767, 32767, - 524, 433, 32767, 32767, 0, 32767, -564, -138, - 0, 4, 463, 354, 32767, 57, 0, 32767, - 552, 351, 32767, 32767, 0, 32767, 32767, 32767, - 65, 32767, 32767, 285, 158, 32767, 32767, -931, - 281, 32767, 32767, 32767, 32767, -357, -115, 32767, - 294, 435, 2, 32767, 305, 32767, 35, 434, - 32767, 172, 0, 32767, 326, -597, 263, 2, - 32767, -111, -79, 32767, 32767, -717, 198, 32767, - -715, 407, 32767, 32767, 159, 214, -135, 379, - 672, 656, 278, 0, 32767, 32767, 32767, 1109, - 830, -173, 32767, 32767, 334, 32767, 32767, 32767, - 32767, -447, 270, 61, 281, 32767, 0, 116, - 32767, 99, -302, 32767, 32767, 0, 39, 32767, - -61, 276, -45, 144, -121, 32767, 0, 198, - 325, 72, 294, -174, -218, 73, -489, 32767, - -372, 32767, 32767, 360, 345, 283, -453, 32767, - 32767, 32767, 283, 806, 0, 32767, 32767, 32767, - -65, 0, 32767, 8, 32767, 150, 32767, -251, - 132, 0, 32767, 32767, 272, 32767, 15, -417, - 889, -77, 0, 0, 16, 32767, 32767, 32767, - 94, 32767, 32767, 32767, 32767, 219, 32767, -416, - 391, 31, 208, 396, 0, 143, -37, 32767, - 252, 0, 32767, 185, 32767, -140, 0, 32767, - 456, -258, 32767, 381, 32767, 393, 32767, 32767, - 32767, 32767, 1160, 32767, 32767, 384, 201, 197, - 32767, 0, 131, 469, 89, 32767, 397, 0, - 32767, 211, 32767, 102, 138, 32767, -379, 264, - 32767, 386, 6, 32767, 32767, 162, 53, -81, - -135, 59, 338, 230, 0, 0, 19, 8, - 32767, 785, 423, 0, 257, 301, 523, -398, - 421, 0, 32767, 0, 32767, 32767, 0, -758, - 0, 562, 32767, 0, 32767, 32767, -213, 32767, - 28, 32767, -696, 173, -413, 352, -223, 472, - 275, 316, 32767, -186, 323, 32767, -163, 221, - 246, 29, 222, -1042, 0, 33, 184, 32767, - 32767, 0, 32767, 32767, 805, 32767, 305, 8, - 226, 84, 32767, 379, 0, 32767, 134, 82, - 32767, 399, 32767, 0, 0, 617, 32767, 32767, - 31, 0, 256, 0, 32767, 103, 302, 32767, - 208, 32767, -56, 0, -146, 32767, 243, 32767, - 0, 32767, 32767, 32767, 32767, 784, 32767, 32767, - 0, 197, 32767, 32767, 914, 155, -50, 32767, - 32767, 32767, 292, 1122, 32767, 0, 32767, -167, - 32767, 139, 113, 113, 32767, 410, 32767, 459, - 331, 0, 295, 0, 0, 483, -345, 32767, - 32767, -456, 32767, 32767, 0, 32767, 304, 32767, - 138, 32767, 520, 326, 412, -237, 453, 32767, - 50, 328, 32767, 32767, 0, -116, 0, -754, - 0, -149, 32767, 32767, 28, -398, 0, 32767, - 32767, -89, 353, -64, 51, 139, 32767, 32767, - 66, 32767, 314, 209, 1218, 32767, 32767, 325, - 0, 268, 32767, 32767, 446, 32767, 0, 32767, - -115, 32767, 32767, 32767, 239, 344, 32767, 5, - 32767, 0, -314, 0, -327, 32767, 181, 32767, - 107, 393, 0, 32767, 12, 582, 119, 32767, - -751, 32767, -578, 0, 349, 0, 32767, 404, - 307, 85, 32767, 452, 53, -307, 0, 0, - 32767, 32767, 664, 32767, 32767, 32767, -44, 32767, - 0, 259, 366, 32767, 0, 0, 32767, -97, - -131, 0, 32767, 178, 32767, 779, -231, -73, - 0, 0, 145, 487, 223, 0, 0, 86, - 32767, 0, 32767, 192, 321, 32767, 32767, 32767, - -360, -140, 32767, 32767, 32767, 507, 32767, 247, - 416, 32767, 0, 32767, 68, 98, 32767, 0, - -268, 0, 32767, 204, 32767, 0, 739, 112, - -283, 1180, 193, 32767, 32767, 220, 0, 0, - 0, 0, 0, 32767, 0, 32767, 32767, 32767, - 32767, 206, -374, 0, 315, 32767, 0, 0, - -37, -363, 32767, 32767, 258, 32767, 459, 32767, - 128, -1018, 374, 32767, 0, 32767, 0, -602, - 32767, 346, 76, 363, 387, 296, -186, 32, - 21, 32767, 32767, 32767, 32767, 32767, 32767, 32767, - 0, 32767, 0, 165, 32767, 32767, 32767, 0, - 790, -10, 32767, 32767, 32767, 32767, 0, 32767, - 0, 228, 32767, -993, 32, -878, -154, 32767, - 72, 369, 411, 585, 32767, 32767, 124, 32767, - -253, -177, 294, 32767, 335, 0, 9, 0, - 32767, 442, 0, 0, 32767, 449, 448, 0, - 0, 32767, 0, 593, 0, 32767, 242, 432, - 0, 32767, 0, 32767, 32767, 1360, 0, 32767, - 238 + static const int16 h[943] = { + 543, -186, 201, 0, 32767, 32767, 32767, 32767, + 221, -207, 32767, 0, 135, 283, 32767, 454, + 14, 79, 32767, 32767, 77, 32767, 102, 160, + 0, 32767, 151, 32767, 30, 392, -322, 452, + 32767, 0, 32767, 0, 0, 32767, 32767, 32767, + 234, 32767, 0, 32767, 0, 631, 32767, 368, + 80, 0, 0, -115, 32767, 285, 32767, 423, + 0, 32767, 155, 229, 32767, 126, 291, 165, + -22, 400, 327, 32767, 32767, 32767, 32767, -399, + 0, 406, 32767, 210, 1102, -203, 32767, 32767, + 32767, -944, 0, -188, 32767, 32767, 0, 347, + 32767, 0, 559, 316, 133, 32767, 202, 32767, + 305, 0, 32767, -94, 32767, 0, 32767, -222, + 32767, 138, 32767, -52, 32767, 32767, 279, 69, + -136, 0, 32767, 32767, 189, 32767, 32767, 88, + 0, 32767, 32767, 274, 32767, 514, 769, 248, + 32767, 32767, 32767, 32767, 32767, 32767, 0, 81, + 8, -29, 32767, 32767, 32767, -174, 258, 0, + 465, 211, 32767, 0, -229, 32767, -191, 32767, + 1263, 48, 32767, 343, 0, 58, 0, 32767, + 32767, 855, 0, 415, 0, -217, 32767, 1195, + 32767, 32767, 166, 32767, 42, 262, -736, 0, + 32767, 32767, 418, 178, 122, 32767, 46, 32767, + 32767, 32767, 229, 443, 32767, 32767, 250, 32767, + -300, 0, 32767, 1153, 32767, 108, 32767, -462, + 266, 32767, 478, -220, 235, 32767, 32767, -127, + 32767, 32767, 32767, 427, -231, 156, 32767, 0, + 0, 148, -218, 142, 73, 420, 32767, 32767, + 523, 32767, -36, 32767, 32767, 467, 844, -415, + 32767, 32767, -148, 179, 361, 32767, 151, 0, + 0, 32767, 145, 32767, 248, 110, 29, 125, + 282, 32767, -36, 43, 32767, 1125, 32767, 530, + 251, 519, 191, 0, 32767, -34, -502, 313, + 462, 845, 32767, 32767, -255, 412, 32767, 78, + 0, 32767, 444, 161, 0, 32767, 308, 32767, + -273, 400, 32767, 296, 32767, 32767, 72, 32767, + 32767, 34, 32767, 364, 151, -63, 4, 229, + 0, -276, 32767, 32767, 32767, 32767, -406, 32767, + 203, 32767, 140, 187, 160, 32767, 286, 0, + 32767, 32767, -88, 0, 100, -361, 32767, 9, + 0, -456, 32767, -37, -404, 32767, -969, 32767, + 371, 95, 0, 703, -31, 263, 373, -745, + 507, 14, 32767, -159, 0, 32767, 47, 299, + -126, 0, 32767, 83, 32767, 32767, 420, 236, + 32767, 32767, 0, 310, 89, 233, 32767, 93, + 32767, 0, 816, 60, 301, 211, 193, 0, + 452, -107, -403, -242, 353, 18, 32767, 32767, + 32767, 243, 104, 32767, 32767, 32767, -305, 32767, + -1048, 54, 0, 383, 32767, 32767, 32767, 226, + 319, 0, 32767, 32767, 32767, -130, 537, 32767, + 0, -206, 240, 696, 121, 32767, 180, 164, + 32767, 390, 185, 32767, 220, 545, 29, 32767, + 0, 32767, 32767, 1120, -163, 32767, 32767, 32767, + -368, 136, 445, 171, 233, 32767, 73, 32767, + 92, 32767, 0, 32767, 0, 208, 354, 32767, + 54, 32767, 32767, -246, -93, 389, 32767, 32767, + 32767, 32767, 50, 32767, 32767, 308, 32767, -278, + 0, 32767, 32767, -1172, 32767, 8, 32767, 0, + 32767, 341, 304, 242, -174, -92, 76, 419, + 32767, 87, 32767, -262, 32767, 32767, 32767, 109, + 200, 0, 32767, 0, 85, 530, 32767, -316, + 32767, 0, -286, 32767, 193, 268, 32767, 32767, + 278, 32767, 32767, 155, 445, 95, -310, 32767, + 207, -56, 32767, 32767, 0, -127, 232, -283, + 103, 32767, 1, 0, 32767, 32767, -485, 350, + 79, -56, -354, 32767, 121, 24, 81, 20, + 325, 40, 248, 32767, 32767, 32767, 358, 32767, + -56, 32767, 0, 174, -28, -301, -92, 32767, + 114, 295, 32767, 363, -355, 32767, 290, 0, + 32767, 32767, 32767, 122, 55, -142, 32767, 50, + 32767, 32767, 152, 571, 1397, 0, 472, -448, + 185, 140, 228, 435, 0, 32767, 32767, 414, + 32767, 379, 92, 185, 23, 299, 32767, 32767, + 0, 32767, 32767, 32767, 306, 439, -198, 219, + 340, 32767, 416, 0, -123, 377, 32767, 32767, + 0, 32767, 670, -670, 339, 32767, 32767, 32767, + 0, -256, 70, 514, 331, 0, 302, 469, + 0, 370, 32767, 32767, 42, 255, 212, 0, + 322, 277, 32767, -163, 32767, 216, 32767, 32767, + 0, 32767, 190, 32767, 32767, 0, 32767, 0, + -409, 1366, 32767, 32767, 32767, 193, 32767, 325, + 32767, 0, 142, 466, 32767, 32767, 32767, 113, + 32767, 32767, 62, 0, -62, 113, -90, 34, + -256, 32767, 32767, -936, 32767, 32767, 32767, 0, + -64, 0, -34, 451, 290, 108, 32767, 276, + 842, 0, 556, -153, 32767, 412, -168, 32767, + 32767, 1331, 407, 234, -60, 115, 457, -73, + 502, 772, 32767, 33, 404, -925, 32767, 32767, + 421, -123, 32767, 32767, 32767, 0, 0, 32767, + 32767, 32767, 429, 0, 3, 769, -81, 306, + 64, 32767, 192, 96, 0, 63, 44, 32767, + 32767, 32767, 32767, 0, 284, 32767, 575, 32767, + 32767, 12, 32767, 516, 116, 32767, 32767, 150, + 442, 134, 32767, 198, -45, 249, 40, 373, + 32767, 0, 32767, 32767, 0, 0, 352, 32767, + 117, 32767, 426, 0, 0, 32767, 32767, 32767, + 32767, -92, 32767, -442, 32767, 269, 32767, 32767, + 32767, 429, 32767, 0, 32767, 0, 143, 32767, + 508, -66, 32767, 280, 32767, 39, 162, 32767, + 32767, 0, 32767, 31, 32767, 32767, 32767, 0, + 32767, 257, -90, -249, 224, 272, 32767, 32767, + 313, -467, 214, 0, -85, 32767, 48, 0, + 32767, -336, 202, 0, 447, 90, 264, 32767, + 32767, 0, 101, 32767, 32767, 32767, 0, 32767, + 32767, 227, -1093, 32767, 0, 32767, 27, 174, + 32767, 7, 32767, -621, 146, 32767, 32767, 32767, + 854, 0, 32767, 161, 0, 137, 32767, 32767, + 32767, 32767, 0, 391, 219, 276, 32767, 168, + 32767, 32767, 0, 32767, 32767, 32767, 1, -4, + 32767, 0, 293, 0, 374, 256, 0, 0, + 32767, 355, 212, 404, 0, 186, 32767, 0, + 359, 32767, 32767, 172, 32767, 32767, -131, 0, + 402, 0, 56, 32767, 462, 389, 82, 0, + 32767, 0, 32767, 0, 32767, 32767, 32767, 32767, + 106, 425, -160, 31, 32767, 55, 0, 0, + 32767, 32767, 430, 1224, 179, -179, 0, 397, + 32767, 0, 0, 0, -60, 47, 32767, 396, + 32767, 326, 383, 369, 32767, 368, 32767 }; const unsigned char *k = (const unsigned char *) key; @@ -1088,9 +1112,9 @@ ScanKeywords_hash_func(const void *key, size_t keylen) unsigned char c = *k++ | 0x20; a = a * 257 + c; - b = b * 127 + c; + b = b * 31 + c; } - return h[a % 921] + h[b % 921]; + return h[a % 943] + h[b % 943]; } const ScanKeywordList ScanKeywords = { diff --git a/src/postgres/src_common_kwlookup.c b/src/postgres/src_common_kwlookup.c index 9fcad3ad..7b74f1de 100644 --- a/src/postgres/src_common_kwlookup.c +++ b/src/postgres/src_common_kwlookup.c @@ -10,7 +10,7 @@ * Key word lookup for PostgreSQL * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_common_pg_prng.c b/src/postgres/src_common_pg_prng.c deleted file mode 100644 index 318f5310..00000000 --- a/src/postgres/src_common_pg_prng.c +++ /dev/null @@ -1,152 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - pg_prng_double - * - xoroshiro128ss - * - rotl - * - pg_global_prng_state - *-------------------------------------------------------------------- - */ - -/*------------------------------------------------------------------------- - * - * Pseudo-Random Number Generator - * - * We use Blackman and Vigna's xoroshiro128** 1.0 algorithm - * to have a small, fast PRNG suitable for generating reasonably - * good-quality 64-bit data. This should not be considered - * cryptographically strong, however. - * - * About these generators: https://prng.di.unimi.it/ - * See also https://en.wikipedia.org/wiki/List_of_random_number_generators - * - * Copyright (c) 2021-2022, PostgreSQL Global Development Group - * - * src/common/pg_prng.c - * - *------------------------------------------------------------------------- - */ - -#include "c.h" - -#include /* for ldexp() */ - -#include "common/pg_prng.h" -#include "port/pg_bitutils.h" - -/* process-wide state vector */ -__thread pg_prng_state pg_global_prng_state; - - - -/* - * 64-bit rotate left - */ -static inline uint64 -rotl(uint64 x, int bits) -{ - return (x << bits) | (x >> (64 - bits)); -} - -/* - * The basic xoroshiro128** algorithm. - * Generates and returns a 64-bit uniformly distributed number, - * updating the state vector for next time. - * - * Note: the state vector must not be all-zeroes, as that is a fixed point. - */ -static uint64 -xoroshiro128ss(pg_prng_state *state) -{ - uint64 s0 = state->s0, - sx = state->s1 ^ s0, - val = rotl(s0 * 5, 7) * 9; - - /* update state */ - state->s0 = rotl(s0, 24) ^ sx ^ (sx << 16); - state->s1 = rotl(sx, 37); - - return val; -} - -/* - * We use this generator just to fill the xoroshiro128** state vector - * from a 64-bit seed. - */ - - -/* - * Initialize the PRNG state from a 64-bit integer, - * taking care that we don't produce all-zeroes. - */ - - -/* - * Initialize the PRNG state from a double in the range [-1.0, 1.0], - * taking care that we don't produce all-zeroes. - */ - - -/* - * Validate a PRNG seed value. - */ - - -/* - * Select a random uint64 uniformly from the range [0, PG_UINT64_MAX]. - */ - - -/* - * Select a random uint64 uniformly from the range [rmin, rmax]. - * If the range is empty, rmin is always produced. - */ - - -/* - * Select a random int64 uniformly from the range [PG_INT64_MIN, PG_INT64_MAX]. - */ - - -/* - * Select a random int64 uniformly from the range [0, PG_INT64_MAX]. - */ - - -/* - * Select a random uint32 uniformly from the range [0, PG_UINT32_MAX]. - */ - - -/* - * Select a random int32 uniformly from the range [PG_INT32_MIN, PG_INT32_MAX]. - */ - - -/* - * Select a random int32 uniformly from the range [0, PG_INT32_MAX]. - */ - - -/* - * Select a random double uniformly from the range [0.0, 1.0). - * - * Note: if you want a result in the range (0.0, 1.0], the standard way - * to get that is "1.0 - pg_prng_double(state)". - */ -double -pg_prng_double(pg_prng_state *state) -{ - uint64 v = xoroshiro128ss(state); - - /* - * As above, assume there's 52 mantissa bits in a double. This result - * could round to 1.0 if double's precision is less than that; but we - * assume IEEE float arithmetic elsewhere in Postgres, so this seems OK. - */ - return ldexp((double) (v >> (64 - 52)), -52); -} - -/* - * Select a random boolean value. - */ - diff --git a/src/postgres/src_common_psprintf.c b/src/postgres/src_common_psprintf.c index 4425ac72..c7507097 100644 --- a/src/postgres/src_common_psprintf.c +++ b/src/postgres/src_common_psprintf.c @@ -11,7 +11,7 @@ * sprintf into an allocated-on-demand buffer * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_common_string.c b/src/postgres/src_common_string.c deleted file mode 100644 index 7af813c0..00000000 --- a/src/postgres/src_common_string.c +++ /dev/null @@ -1,92 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - strtoint - *-------------------------------------------------------------------- - */ - -/*------------------------------------------------------------------------- - * - * string.c - * string handling helpers - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/common/string.c - * - *------------------------------------------------------------------------- - */ - - -#ifndef FRONTEND -#include "postgres.h" -#else -#include "postgres_fe.h" -#endif - -#include "common/string.h" - - -/* - * Returns whether the string `str' has the postfix `end'. - */ - - - -/* - * strtoint --- just like strtol, but returns int not long - */ -int -strtoint(const char *pg_restrict str, char **pg_restrict endptr, int base) -{ - long val; - - val = strtol(str, endptr, base); - if (val != (int) val) - errno = ERANGE; - return (int) val; -} - - -/* - * pg_clean_ascii -- Replace any non-ASCII chars with a '?' char - * - * Modifies the string passed in which must be '\0'-terminated. - * - * This function exists specifically to deal with filtering out - * non-ASCII characters in a few places where the client can provide an almost - * arbitrary string (and it isn't checked to ensure it's a valid username or - * database name or similar) and we don't want to have control characters or other - * things ending up in the log file where server admins might end up with a - * messed up terminal when looking at them. - * - * In general, this function should NOT be used- instead, consider how to handle - * the string without needing to filter out the non-ASCII characters. - * - * Ultimately, we'd like to improve the situation to not require stripping out - * all non-ASCII but perform more intelligent filtering which would allow UTF or - * similar, but it's unclear exactly what we should allow, so stick to ASCII only - * for now. - */ - - - -/* - * pg_is_ascii -- Check if string is made only of ASCII characters - */ - - - -/* - * pg_strip_crlf -- Remove any trailing newline and carriage return - * - * Removes any trailing newline and carriage return characters (\r on - * Windows) in the input string, zero-terminating it. - * - * The passed in string must be zero-terminated. This function returns - * the new length of the string. - */ - diff --git a/src/postgres/src_common_stringinfo.c b/src/postgres/src_common_stringinfo.c index 3d9f85eb..2361e11f 100644 --- a/src/postgres/src_common_stringinfo.c +++ b/src/postgres/src_common_stringinfo.c @@ -21,7 +21,7 @@ * (null-terminated text) or arbitrary binary data. All storage is allocated * with palloc() (falling back to malloc in frontend code). * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/common/stringinfo.c @@ -215,8 +215,8 @@ appendStringInfoSpaces(StringInfo str, int count) enlargeStringInfo(str, count); /* OK, append the spaces */ - while (--count >= 0) - str->data[str->len++] = ' '; + memset(&str->data[str->len], ' ', count); + str->len += count; str->data[str->len] = '\0'; } } @@ -228,7 +228,7 @@ appendStringInfoSpaces(StringInfo str, int count) * if necessary. Ensures that a trailing null byte is present. */ void -appendBinaryStringInfo(StringInfo str, const char *data, int datalen) +appendBinaryStringInfo(StringInfo str, const void *data, int datalen) { Assert(str != NULL); diff --git a/src/postgres/src_common_wchar.c b/src/postgres/src_common_wchar.c index 14a832e2..653b2151 100644 --- a/src/postgres/src_common_wchar.c +++ b/src/postgres/src_common_wchar.c @@ -87,7 +87,7 @@ * wchar.c * Functions for working with multibyte characters in various encodings. * - * Portions Copyright (c) 1998-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1998-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/common/wchar.c @@ -704,7 +704,7 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max) * value of -1. * * - Non-spacing and enclosing combining characters (general - * category code Mn or Me in the Unicode database) have a + * category code Mn, Me or Cf in the Unicode database) have a * column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian @@ -722,7 +722,7 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max) static int ucs_wcwidth(pg_wchar ucs) { -#include "common/unicode_combining_table.h" +#include "common/unicode_nonspacing_table.h" #include "common/unicode_east_asian_fw_table.h" /* test for 8-bit control characters */ @@ -741,8 +741,8 @@ ucs_wcwidth(pg_wchar ucs) * factor for display width leads to the correct behavior, so do that * search first. */ - if (mbbisearch(ucs, combining, - sizeof(combining) / sizeof(struct mbinterval) - 1)) + if (mbbisearch(ucs, nonspacing, + sizeof(nonspacing) / sizeof(struct mbinterval) - 1)) return 0; /* binary search in table of wide characters */ @@ -2003,10 +2003,11 @@ pg_utf8_verifystr(const unsigned char *s, int len) uint32 state = BGN; /* - * Sixteen seems to give the best balance of performance across different - * byte distributions. + * With a stride of two vector widths, gcc will unroll the loop. Even if + * the compiler can unroll a longer loop, it's not worth it because we + * must fall back to the byte-wise algorithm if we find any non-ASCII. */ -#define STRIDE_LENGTH 16 +#define STRIDE_LENGTH (2 * sizeof(Vector8)) if (len >= STRIDE_LENGTH) { diff --git a/src/postgres/src_pl_plpgsql_src_pl_comp.c b/src/postgres/src_pl_plpgsql_src_pl_comp.c index 51cadcc2..a79cbd49 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_comp.c +++ b/src/postgres/src_pl_plpgsql_src_pl_comp.c @@ -39,7 +39,7 @@ * pl_comp.c - Compiler part of the PL/pgSQL * procedural language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_pl_plpgsql_src_pl_funcs.c b/src/postgres/src_pl_plpgsql_src_pl_funcs.c index 41d19162..a99944f1 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_funcs.c +++ b/src/postgres/src_pl_plpgsql_src_pl_funcs.c @@ -49,7 +49,7 @@ * pl_funcs.c - Misc functions for the PL/pgSQL * procedural language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -287,6 +287,8 @@ plpgsql_getdiag_kindname(PLpgSQL_getdiag_kind kind) { case PLPGSQL_GETDIAG_ROW_COUNT: return "ROW_COUNT"; + case PLPGSQL_GETDIAG_ROUTINE_OID: + return "PG_ROUTINE_OID"; case PLPGSQL_GETDIAG_CONTEXT: return "PG_CONTEXT"; case PLPGSQL_GETDIAG_ERROR_CONTEXT: diff --git a/src/postgres/src_pl_plpgsql_src_pl_gram.c b/src/postgres/src_pl_plpgsql_src_pl_gram.c index b0c1917e..0920316e 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_gram.c +++ b/src/postgres/src_pl_plpgsql_src_pl_gram.c @@ -222,36 +222,37 @@ K_PG_EXCEPTION_CONTEXT = 354, K_PG_EXCEPTION_DETAIL = 355, K_PG_EXCEPTION_HINT = 356, - K_PRINT_STRICT_PARAMS = 357, - K_PRIOR = 358, - K_QUERY = 359, - K_RAISE = 360, - K_RELATIVE = 361, - K_RETURN = 362, - K_RETURNED_SQLSTATE = 363, - K_REVERSE = 364, - K_ROLLBACK = 365, - K_ROW_COUNT = 366, - K_ROWTYPE = 367, - K_SCHEMA = 368, - K_SCHEMA_NAME = 369, - K_SCROLL = 370, - K_SLICE = 371, - K_SQLSTATE = 372, - K_STACKED = 373, - K_STRICT = 374, - K_TABLE = 375, - K_TABLE_NAME = 376, - K_THEN = 377, - K_TO = 378, - K_TYPE = 379, - K_USE_COLUMN = 380, - K_USE_VARIABLE = 381, - K_USING = 382, - K_VARIABLE_CONFLICT = 383, - K_WARNING = 384, - K_WHEN = 385, - K_WHILE = 386 + K_PG_ROUTINE_OID = 357, + K_PRINT_STRICT_PARAMS = 358, + K_PRIOR = 359, + K_QUERY = 360, + K_RAISE = 361, + K_RELATIVE = 362, + K_RETURN = 363, + K_RETURNED_SQLSTATE = 364, + K_REVERSE = 365, + K_ROLLBACK = 366, + K_ROW_COUNT = 367, + K_ROWTYPE = 368, + K_SCHEMA = 369, + K_SCHEMA_NAME = 370, + K_SCROLL = 371, + K_SLICE = 372, + K_SQLSTATE = 373, + K_STACKED = 374, + K_STRICT = 375, + K_TABLE = 376, + K_TABLE_NAME = 377, + K_THEN = 378, + K_TO = 379, + K_TYPE = 380, + K_USE_COLUMN = 381, + K_USE_VARIABLE = 382, + K_USING = 383, + K_VARIABLE_CONFLICT = 384, + K_WARNING = 385, + K_WHEN = 386, + K_WHILE = 387 }; #endif /* Tokens. */ @@ -354,36 +355,37 @@ #define K_PG_EXCEPTION_CONTEXT 354 #define K_PG_EXCEPTION_DETAIL 355 #define K_PG_EXCEPTION_HINT 356 -#define K_PRINT_STRICT_PARAMS 357 -#define K_PRIOR 358 -#define K_QUERY 359 -#define K_RAISE 360 -#define K_RELATIVE 361 -#define K_RETURN 362 -#define K_RETURNED_SQLSTATE 363 -#define K_REVERSE 364 -#define K_ROLLBACK 365 -#define K_ROW_COUNT 366 -#define K_ROWTYPE 367 -#define K_SCHEMA 368 -#define K_SCHEMA_NAME 369 -#define K_SCROLL 370 -#define K_SLICE 371 -#define K_SQLSTATE 372 -#define K_STACKED 373 -#define K_STRICT 374 -#define K_TABLE 375 -#define K_TABLE_NAME 376 -#define K_THEN 377 -#define K_TO 378 -#define K_TYPE 379 -#define K_USE_COLUMN 380 -#define K_USE_VARIABLE 381 -#define K_USING 382 -#define K_VARIABLE_CONFLICT 383 -#define K_WARNING 384 -#define K_WHEN 385 -#define K_WHILE 386 +#define K_PG_ROUTINE_OID 357 +#define K_PRINT_STRICT_PARAMS 358 +#define K_PRIOR 359 +#define K_QUERY 360 +#define K_RAISE 361 +#define K_RELATIVE 362 +#define K_RETURN 363 +#define K_RETURNED_SQLSTATE 364 +#define K_REVERSE 365 +#define K_ROLLBACK 366 +#define K_ROW_COUNT 367 +#define K_ROWTYPE 368 +#define K_SCHEMA 369 +#define K_SCHEMA_NAME 370 +#define K_SCROLL 371 +#define K_SLICE 372 +#define K_SQLSTATE 373 +#define K_STACKED 374 +#define K_STRICT 375 +#define K_TABLE 376 +#define K_TABLE_NAME 377 +#define K_THEN 378 +#define K_TO 379 +#define K_TYPE 380 +#define K_USE_COLUMN 381 +#define K_USE_VARIABLE 382 +#define K_USING 383 +#define K_VARIABLE_CONFLICT 384 +#define K_WARNING 385 +#define K_WHEN 386 +#define K_WHILE 387 @@ -395,7 +397,7 @@ * * pl_gram.y - Parser for the PL/pgSQL procedural language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -431,10 +433,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree @@ -524,7 +523,7 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 120 "pl_gram.y" +#line 117 "pl_gram.y" { core_YYSTYPE core_yystype; /* these fields must match core_YYSTYPE: */ @@ -576,7 +575,7 @@ typedef union YYSTYPE PLpgSQL_case_when *casewhen; } /* Line 193 of yacc.c. */ -#line 531 "pl_gram.c" +#line 530 "pl_gram.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -601,7 +600,7 @@ typedef struct YYLTYPE /* Line 216 of yacc.c. */ -#line 556 "pl_gram.c" +#line 555 "pl_gram.c" #ifdef short # undef short @@ -818,20 +817,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1382 +#define YYLAST 1335 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 138 +#define YYNTOKENS 139 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 87 /* YYNRULES -- Number of rules. */ -#define YYNRULES 252 +#define YYNRULES 253 /* YYNRULES -- Number of states. */ -#define YYNSTATES 333 +#define YYNSTATES 334 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 386 +#define YYMAXUTOK 387 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -842,10 +841,10 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 132, 2, 2, 2, 2, - 134, 135, 2, 2, 136, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 133, - 2, 137, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 133, 2, 2, 2, 2, + 135, 136, 2, 2, 137, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 134, + 2, 138, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -877,7 +876,7 @@ static const yytype_uint8 yytranslate[] = 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 + 125, 126, 127, 128, 129, 130, 131, 132 }; #if YYDEBUG @@ -910,57 +909,57 @@ static const yytype_uint16 yyprhs[] = 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, - 604, 606, 608 + 604, 606, 608, 610 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 139, 0, -1, 140, 144, 143, -1, -1, 140, 141, - -1, 132, 94, 57, -1, 132, 102, 142, -1, 132, - 128, 62, -1, 132, 128, 126, -1, 132, 128, 125, - -1, 22, -1, 224, -1, -1, 133, -1, 145, 34, - 166, 210, 60, 221, -1, 219, -1, 219, 146, -1, - 219, 146, 147, -1, 52, -1, 147, 148, -1, 148, - -1, 149, -1, 52, -1, 25, 223, 26, -1, 158, - 159, 160, 161, 162, 163, -1, 158, 28, 68, 157, - 133, -1, -1, 158, 151, 49, 150, 153, 156, 152, - -1, -1, 89, 115, -1, 115, -1, -1, -1, 134, - 154, 135, -1, 155, -1, 154, 136, 155, -1, 158, - 160, -1, 80, -1, 68, -1, 22, -1, 224, -1, - 23, -1, 22, -1, 224, -1, -1, 44, -1, -1, - -1, 40, 22, -1, 40, 224, -1, 40, 23, -1, - -1, 90, 92, -1, 133, -1, 164, -1, 165, -1, - 53, -1, 137, -1, 15, -1, -1, 166, 167, -1, - 144, 133, -1, 170, -1, 177, -1, 180, -1, 185, - -1, 186, -1, 187, -1, 190, -1, 192, -1, 194, - -1, 195, -1, 196, -1, 198, -1, 199, -1, 168, - -1, 169, -1, 171, -1, 200, -1, 201, -1, 202, - -1, 204, -1, 205, -1, 206, -1, 207, -1, 96, - -1, 36, -1, 56, -1, 24, -1, 72, 172, 55, - 173, 133, -1, -1, 48, -1, 118, -1, 173, 136, - 174, -1, 174, -1, 176, 165, 175, -1, -1, 24, - -1, 22, -1, 23, -1, 74, 217, 166, 178, 179, - 60, 74, 133, -1, -1, 178, 59, 217, 166, -1, - -1, 58, 166, -1, 37, 181, 182, 184, 60, 37, - 133, -1, -1, 182, 183, -1, 183, -1, 130, 217, - 166, -1, -1, 58, 166, -1, 220, 83, 197, -1, - 220, 131, 218, 197, -1, 220, 68, 188, 197, -1, - 189, 76, -1, 24, -1, 22, -1, 23, -1, 220, - 69, 189, 191, 76, 31, 218, 197, -1, -1, 116, - 11, -1, 193, 221, 222, -1, 65, -1, 47, -1, - 107, -1, 105, -1, 32, -1, 166, 60, 83, 221, - 133, -1, 75, -1, 78, -1, 84, -1, 22, -1, - 23, -1, 64, -1, 93, 209, -1, 66, 203, 209, - 79, -1, 87, 203, 209, 133, -1, -1, 39, 209, - 133, -1, 92, 133, -1, 43, 208, 133, -1, 110, - 208, 133, -1, 30, 38, -1, 30, 89, 38, -1, + 140, 0, -1, 141, 145, 144, -1, -1, 141, 142, + -1, 133, 94, 57, -1, 133, 103, 143, -1, 133, + 129, 62, -1, 133, 129, 127, -1, 133, 129, 126, + -1, 22, -1, 225, -1, -1, 134, -1, 146, 34, + 167, 211, 60, 222, -1, 220, -1, 220, 147, -1, + 220, 147, 148, -1, 52, -1, 148, 149, -1, 149, + -1, 150, -1, 52, -1, 25, 224, 26, -1, 159, + 160, 161, 162, 163, 164, -1, 159, 28, 68, 158, + 134, -1, -1, 159, 152, 49, 151, 154, 157, 153, + -1, -1, 89, 116, -1, 116, -1, -1, -1, 135, + 155, 136, -1, 156, -1, 155, 137, 156, -1, 159, + 161, -1, 80, -1, 68, -1, 22, -1, 225, -1, + 23, -1, 22, -1, 225, -1, -1, 44, -1, -1, + -1, 40, 22, -1, 40, 225, -1, 40, 23, -1, + -1, 90, 92, -1, 134, -1, 165, -1, 166, -1, + 53, -1, 138, -1, 15, -1, -1, 167, 168, -1, + 145, 134, -1, 171, -1, 178, -1, 181, -1, 186, + -1, 187, -1, 188, -1, 191, -1, 193, -1, 195, + -1, 196, -1, 197, -1, 199, -1, 200, -1, 169, + -1, 170, -1, 172, -1, 201, -1, 202, -1, 203, + -1, 205, -1, 206, -1, 207, -1, 208, -1, 96, + -1, 36, -1, 56, -1, 24, -1, 72, 173, 55, + 174, 134, -1, -1, 48, -1, 119, -1, 174, 137, + 175, -1, 175, -1, 177, 166, 176, -1, -1, 24, + -1, 22, -1, 23, -1, 74, 218, 167, 179, 180, + 60, 74, 134, -1, -1, 179, 59, 218, 167, -1, + -1, 58, 167, -1, 37, 182, 183, 185, 60, 37, + 134, -1, -1, 183, 184, -1, 184, -1, 131, 218, + 167, -1, -1, 58, 167, -1, 221, 83, 198, -1, + 221, 132, 219, 198, -1, 221, 68, 189, 198, -1, + 190, 76, -1, 24, -1, 22, -1, 23, -1, 221, + 69, 190, 192, 76, 31, 219, 198, -1, -1, 117, + 11, -1, 194, 222, 223, -1, 65, -1, 47, -1, + 108, -1, 106, -1, 32, -1, 167, 60, 83, 222, + 134, -1, 75, -1, 78, -1, 84, -1, 22, -1, + 23, -1, 64, -1, 93, 210, -1, 66, 204, 210, + 79, -1, 87, 204, 210, 134, -1, -1, 39, 210, + 134, -1, 92, 134, -1, 43, 209, 134, -1, 111, + 209, 134, -1, 30, 38, -1, 30, 89, 38, -1, -1, 24, -1, 22, -1, 23, -1, -1, -1, 63, - 211, 212, -1, 212, 213, -1, 213, -1, 130, 214, - 122, 166, -1, 214, 95, 215, -1, 215, -1, 223, - -1, -1, -1, -1, -1, 25, 223, 26, -1, -1, - 25, 223, 26, -1, -1, 223, -1, 133, -1, 130, - 216, -1, 22, -1, 224, -1, 24, -1, 27, -1, + 212, 213, -1, 213, 214, -1, 214, -1, 131, 215, + 123, 167, -1, 215, 95, 216, -1, 216, -1, 224, + -1, -1, -1, -1, -1, 25, 224, 26, -1, -1, + 25, 224, 26, -1, -1, 224, -1, 134, -1, 131, + 217, -1, 22, -1, 225, -1, 24, -1, 27, -1, 28, -1, 30, -1, 31, -1, 32, -1, 33, -1, 36, -1, 38, -1, 39, -1, 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, @@ -975,39 +974,40 @@ static const yytype_int16 yyrhs[] = 101, -1, 102, -1, 103, -1, 104, -1, 105, -1, 106, -1, 107, -1, 108, -1, 109, -1, 110, -1, 111, -1, 112, -1, 113, -1, 114, -1, 115, -1, - 116, -1, 117, -1, 118, -1, 120, -1, 121, -1, - 124, -1, 125, -1, 126, -1, 128, -1, 129, -1 + 116, -1, 117, -1, 118, -1, 119, -1, 121, -1, + 122, -1, 125, -1, 126, -1, 127, -1, 129, -1, + 130, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 362, 362, 368, 369, 372, 376, 385, 389, 393, - 399, 403, 408, 409, 412, 435, 443, 450, 459, 471, - 472, 475, 476, 480, 493, 531, 537, 536, 590, 593, - 597, 604, 610, 613, 644, 648, 654, 662, 663, 665, - 680, 695, 723, 751, 782, 783, 788, 799, 800, 805, - 810, 817, 818, 822, 824, 830, 831, 839, 840, 844, - 845, 855, 857, 859, 861, 863, 865, 867, 869, 871, - 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, - 893, 895, 897, 899, 901, 905, 941, 959, 980, 1019, - 1082, 1085, 1089, 1095, 1099, 1105, 1118, 1162, 1180, 1185, - 1192, 1210, 1213, 1227, 1230, 1236, 1243, 1257, 1261, 1267, - 1279, 1282, 1297, 1315, 1334, 1368, 1627, 1653, 1667, 1674, - 1713, 1716, 1722, 1775, 1779, 1785, 1811, 1956, 1980, 1998, - 2002, 2006, 2010, 2021, 2034, 2098, 2176, 2206, 2219, 2224, - 2238, 2245, 2259, 2274, 2275, 2276, 2280, 2302, 2307, 2315, - 2317, 2316, 2358, 2362, 2368, 2381, 2390, 2396, 2433, 2437, - 2441, 2445, 2449, 2457, 2461, 2469, 2472, 2479, 2481, 2488, - 2492, 2496, 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, 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, 2559, 2560, 2561, 2562, - 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, - 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, - 2583, 2584, 2585 + 0, 360, 360, 366, 367, 370, 374, 383, 387, 391, + 397, 401, 406, 407, 410, 433, 441, 448, 457, 469, + 470, 473, 474, 478, 491, 529, 535, 534, 561, 564, + 568, 575, 581, 584, 615, 619, 625, 633, 634, 636, + 651, 666, 694, 722, 753, 754, 759, 770, 771, 776, + 781, 788, 789, 793, 795, 801, 802, 810, 811, 815, + 816, 826, 828, 830, 832, 834, 836, 838, 840, 842, + 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, + 864, 866, 868, 870, 872, 876, 912, 930, 951, 990, + 1054, 1057, 1061, 1067, 1071, 1077, 1090, 1137, 1155, 1160, + 1167, 1185, 1188, 1202, 1205, 1211, 1218, 1232, 1236, 1242, + 1254, 1257, 1272, 1290, 1309, 1343, 1602, 1628, 1642, 1649, + 1688, 1691, 1697, 1750, 1754, 1760, 1786, 1931, 1955, 1973, + 1977, 1981, 1985, 1996, 2009, 2073, 2151, 2181, 2194, 2199, + 2213, 2220, 2234, 2249, 2250, 2251, 2255, 2277, 2282, 2290, + 2292, 2291, 2333, 2337, 2343, 2356, 2365, 2371, 2408, 2412, + 2416, 2420, 2424, 2432, 2436, 2444, 2447, 2454, 2456, 2463, + 2467, 2471, 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, 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, 2547, + 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, + 2558, 2559, 2560, 2561 }; #endif @@ -1034,10 +1034,10 @@ static const char *const yytname[] = "K_NEXT", "K_NO", "K_NOT", "K_NOTICE", "K_NULL", "K_OPEN", "K_OPTION", "K_OR", "K_PERFORM", "K_PG_CONTEXT", "K_PG_DATATYPE_NAME", "K_PG_EXCEPTION_CONTEXT", "K_PG_EXCEPTION_DETAIL", "K_PG_EXCEPTION_HINT", - "K_PRINT_STRICT_PARAMS", "K_PRIOR", "K_QUERY", "K_RAISE", "K_RELATIVE", - "K_RETURN", "K_RETURNED_SQLSTATE", "K_REVERSE", "K_ROLLBACK", - "K_ROW_COUNT", "K_ROWTYPE", "K_SCHEMA", "K_SCHEMA_NAME", "K_SCROLL", - "K_SLICE", "K_SQLSTATE", "K_STACKED", "K_STRICT", "K_TABLE", + "K_PG_ROUTINE_OID", "K_PRINT_STRICT_PARAMS", "K_PRIOR", "K_QUERY", + "K_RAISE", "K_RELATIVE", "K_RETURN", "K_RETURNED_SQLSTATE", "K_REVERSE", + "K_ROLLBACK", "K_ROW_COUNT", "K_ROWTYPE", "K_SCHEMA", "K_SCHEMA_NAME", + "K_SCROLL", "K_SLICE", "K_SQLSTATE", "K_STACKED", "K_STRICT", "K_TABLE", "K_TABLE_NAME", "K_THEN", "K_TO", "K_TYPE", "K_USE_COLUMN", "K_USE_VARIABLE", "K_USING", "K_VARIABLE_CONFLICT", "K_WARNING", "K_WHEN", "K_WHILE", "'#'", "';'", "'('", "')'", "','", "'='", "$accept", @@ -1084,39 +1084,39 @@ static const yytype_uint16 yytoknum[] = 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, 35, 59, 40, 41, 44, 61 + 385, 386, 387, 35, 59, 40, 41, 44, 61 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 138, 139, 140, 140, 141, 141, 141, 141, 141, - 142, 142, 143, 143, 144, 145, 145, 145, 146, 147, - 147, 148, 148, 148, 149, 149, 150, 149, 151, 151, - 151, 152, 153, 153, 154, 154, 155, 156, 156, 157, - 157, 157, 158, 158, 159, 159, 160, 161, 161, 161, - 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, - 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 168, 169, 169, 170, 171, - 172, 172, 172, 173, 173, 174, 175, 176, 176, 176, - 177, 178, 178, 179, 179, 180, 181, 182, 182, 183, - 184, 184, 185, 186, 187, 188, 189, 189, 189, 190, - 191, 191, 192, 193, 193, 194, 195, 196, 197, 198, - 198, 198, 198, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 208, 208, 209, 209, 209, 210, - 211, 210, 212, 212, 213, 214, 214, 215, 216, 217, - 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, - 223, 223, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224 + 0, 139, 140, 141, 141, 142, 142, 142, 142, 142, + 143, 143, 144, 144, 145, 146, 146, 146, 147, 148, + 148, 149, 149, 149, 150, 150, 151, 150, 152, 152, + 152, 153, 154, 154, 155, 155, 156, 157, 157, 158, + 158, 158, 159, 159, 160, 160, 161, 162, 162, 162, + 162, 163, 163, 164, 164, 165, 165, 166, 166, 167, + 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 169, 170, 170, 171, 172, + 173, 173, 173, 174, 174, 175, 176, 177, 177, 177, + 178, 179, 179, 180, 180, 181, 182, 183, 183, 184, + 185, 185, 186, 187, 188, 189, 190, 190, 190, 191, + 192, 192, 193, 194, 194, 195, 196, 197, 198, 199, + 199, 199, 199, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 209, 209, 210, 210, 210, 211, + 212, 211, 213, 213, 214, 215, 215, 216, 217, 218, + 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, + 224, 224, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1147,7 +1147,7 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1 + 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1164,100 +1164,100 @@ static const yytype_uint8 yydefact[] = 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, 0, 170, 0, 0, 0, 13, 2, - 59, 18, 16, 162, 5, 10, 6, 11, 7, 9, - 8, 163, 42, 0, 22, 17, 20, 21, 44, 43, - 132, 133, 88, 0, 127, 86, 106, 0, 145, 124, - 87, 150, 134, 123, 138, 90, 159, 129, 130, 131, - 138, 0, 0, 85, 126, 125, 145, 0, 60, 75, - 76, 62, 77, 63, 64, 65, 66, 67, 68, 69, - 165, 70, 71, 72, 73, 74, 78, 79, 80, 81, - 82, 83, 84, 0, 0, 0, 19, 0, 45, 0, - 30, 0, 46, 0, 0, 147, 148, 146, 0, 0, - 0, 0, 0, 91, 92, 0, 59, 0, 140, 135, - 0, 61, 0, 166, 165, 0, 0, 59, 160, 23, - 0, 29, 26, 47, 164, 159, 110, 108, 139, 143, - 0, 141, 0, 151, 153, 0, 0, 163, 0, 142, - 158, 167, 122, 14, 117, 118, 116, 59, 0, 120, - 163, 112, 59, 39, 41, 0, 40, 32, 0, 51, - 59, 59, 107, 0, 144, 0, 156, 157, 152, 136, - 98, 99, 97, 0, 94, 0, 103, 137, 168, 114, - 115, 0, 0, 0, 113, 25, 0, 0, 48, 50, - 49, 0, 0, 163, 163, 0, 0, 59, 89, 0, - 58, 57, 96, 59, 159, 0, 121, 0, 165, 0, - 34, 46, 38, 37, 31, 52, 56, 53, 24, 54, - 55, 0, 155, 163, 93, 95, 163, 59, 0, 160, - 0, 33, 0, 36, 27, 105, 163, 0, 59, 128, - 35, 100, 119 + 250, 251, 252, 253, 0, 170, 0, 0, 0, 13, + 2, 59, 18, 16, 162, 5, 10, 6, 11, 7, + 9, 8, 163, 42, 0, 22, 17, 20, 21, 44, + 43, 132, 133, 88, 0, 127, 86, 106, 0, 145, + 124, 87, 150, 134, 123, 138, 90, 159, 129, 130, + 131, 138, 0, 0, 85, 126, 125, 145, 0, 60, + 75, 76, 62, 77, 63, 64, 65, 66, 67, 68, + 69, 165, 70, 71, 72, 73, 74, 78, 79, 80, + 81, 82, 83, 84, 0, 0, 0, 19, 0, 45, + 0, 30, 0, 46, 0, 0, 147, 148, 146, 0, + 0, 0, 0, 0, 91, 92, 0, 59, 0, 140, + 135, 0, 61, 0, 166, 165, 0, 0, 59, 160, + 23, 0, 29, 26, 47, 164, 159, 110, 108, 139, + 143, 0, 141, 0, 151, 153, 0, 0, 163, 0, + 142, 158, 167, 122, 14, 117, 118, 116, 59, 0, + 120, 163, 112, 59, 39, 41, 0, 40, 32, 0, + 51, 59, 59, 107, 0, 144, 0, 156, 157, 152, + 136, 98, 99, 97, 0, 94, 0, 103, 137, 168, + 114, 115, 0, 0, 0, 113, 25, 0, 0, 48, + 50, 49, 0, 0, 163, 163, 0, 0, 59, 89, + 0, 58, 57, 96, 59, 159, 0, 121, 0, 165, + 0, 34, 46, 38, 37, 31, 52, 56, 53, 24, + 54, 55, 0, 155, 163, 93, 95, 163, 59, 0, + 160, 0, 33, 0, 36, 27, 105, 163, 0, 59, + 128, 35, 100, 119 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 6, 106, 99, 147, 8, 102, 115, - 116, 117, 247, 181, 324, 277, 299, 300, 304, 245, - 118, 182, 213, 249, 282, 308, 309, 292, 240, 148, - 149, 150, 151, 152, 195, 263, 264, 315, 265, 153, - 266, 295, 154, 184, 216, 217, 253, 155, 156, 157, - 237, 238, 158, 272, 159, 160, 161, 162, 163, 241, - 164, 165, 166, 167, 168, 192, 169, 170, 171, 172, - 190, 188, 173, 191, 223, 224, 255, 256, 268, 196, - 242, 9, 174, 202, 232, 203, 94 + -1, 1, 2, 6, 107, 100, 148, 8, 103, 116, + 117, 118, 248, 182, 325, 278, 300, 301, 305, 246, + 119, 183, 214, 250, 283, 309, 310, 293, 241, 149, + 150, 151, 152, 153, 196, 264, 265, 316, 266, 154, + 267, 296, 155, 185, 217, 218, 254, 156, 157, 158, + 238, 239, 159, 273, 160, 161, 162, 163, 164, 242, + 165, 166, 167, 168, 169, 193, 170, 171, 172, 173, + 191, 189, 174, 192, 224, 225, 256, 257, 269, 197, + 243, 9, 175, 203, 233, 204, 95 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -253 +#define YYPACT_NINF -260 static const yytype_int16 yypact[] = { - -253, 36, -20, -253, 353, -49, -253, -87, 14, -2, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, 26, -253, -3, 674, -40, -253, -253, - -253, -253, 245, -253, -253, -253, -253, -253, -253, -253, - -253, 1041, -253, 353, -253, 245, -253, -253, -7, -253, - -253, -253, -253, 353, -253, -253, -253, 49, 38, -253, - -253, -253, -253, -253, -253, -38, -253, -253, -253, -253, - -253, -59, 49, -253, -253, -253, 38, -34, -253, -253, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - 353, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, 34, -50, 80, -253, 27, -253, -5, - -253, 58, -253, 85, -17, -253, -253, -253, -19, 1, - -16, -14, 49, -253, -253, 63, -253, 49, -253, -253, - -11, -253, -98, -253, 353, 69, 69, -253, -253, -253, - 461, -253, -253, 83, -8, -253, -41, -253, -253, -253, - 88, -253, 353, -14, -253, 48, 81, 887, -1, -253, - -253, -253, -253, -253, -253, -253, -253, -253, 52, 13, - 1118, -253, -253, -253, -253, 0, -253, 2, 569, 40, - -253, -253, -253, 71, -253, -64, -253, -253, -253, -253, - -253, -253, -253, -72, -253, -12, 18, -253, -253, -253, - -253, 123, 59, 54, -253, -253, 779, -39, -253, -253, - -253, 46, -13, -9, 1195, 102, 353, -253, -253, 81, - -253, -253, -253, -253, -253, 82, -253, 109, 353, -76, - -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, 8, -253, 124, -253, -253, 1272, -253, 70, -253, - 10, -253, 779, -253, -253, -253, 964, 12, -253, -253, - -253, -253, -253 + -260, 21, -20, -260, 355, -61, -260, -99, 3, 7, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, 22, -260, 23, 679, -38, -260, + -260, -260, -260, 246, -260, -260, -260, -260, -260, -260, + -260, -260, 1026, -260, 355, -260, 246, -260, -260, -18, + -260, -260, -260, -260, 355, -260, -260, -260, 30, 49, + -260, -260, -260, -260, -260, -260, -37, -260, -260, -260, + -260, -260, -48, 30, -260, -260, -260, 49, -33, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, 355, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, 36, -23, 78, -260, 37, -260, + -10, -260, 58, -260, 85, -17, -260, -260, -260, -22, + -19, -16, -15, 30, -260, -260, 62, -260, 30, -260, + -260, -11, -260, -95, -260, 355, 68, 68, -260, -260, + -260, 464, -260, -260, 79, -2, -260, -50, -260, -260, + -260, 86, -260, 355, -15, -260, 48, 71, 894, -6, + -260, -260, -260, -260, -260, -260, -260, -260, -260, 53, + 13, 1092, -260, -260, -260, -260, -3, -260, -1, 573, + 42, -260, -260, -260, 73, -260, -51, -260, -260, -260, + -260, -260, -260, -260, -76, -260, -12, 15, -260, -260, + -260, -260, 125, 59, 54, -260, -260, 785, -39, -260, + -260, -260, 46, -13, -9, 1158, 102, 355, -260, -260, + 71, -260, -260, -260, -260, -260, 80, -260, 110, 355, + -60, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, 8, -260, 124, -260, -260, 1224, -260, 69, + -260, 10, -260, 785, -260, -260, -260, 960, 11, -260, + -260, -260, -260, -260 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -253, -253, -253, -253, -253, -253, 148, -253, -253, -253, - 37, -253, -253, -253, -253, -253, -253, -171, -253, -253, - -252, -253, -144, -253, -253, -253, -253, -123, -96, -253, - -253, -253, -253, -253, -253, -253, -127, -253, -253, -253, - -253, -253, -253, -253, -253, -52, -253, -253, -253, -253, - -253, -37, -253, -253, -253, -253, -253, -253, -253, -231, - -253, -253, -253, -253, -253, 25, -253, -253, -253, -253, - 20, -130, -253, -253, -253, -55, -253, -116, -253, -206, - -147, -253, -253, -196, -253, -4, -95 + -260, -260, -260, -260, -260, -260, 148, -260, -260, -260, + 35, -260, -260, -260, -260, -260, -260, -171, -260, -260, + -259, -260, -145, -260, -260, -260, -260, -124, -97, -260, + -260, -260, -260, -260, -260, -260, -128, -260, -260, -260, + -260, -260, -260, -260, -260, -53, -260, -260, -260, -260, + -260, -42, -260, -260, -260, -260, -260, -260, -260, -221, + -260, -260, -260, -260, -260, 25, -260, -260, -260, -260, + 26, -131, -260, -260, -260, -56, -260, -118, -260, -210, + -150, -260, -260, -196, -260, -4, -96 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1267,76 +1267,55 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -163 static const yytype_int16 yytable[] = { - 93, 107, 290, 290, 111, 4, 269, 119, 233, 250, - 193, 274, 199, 120, 121, 122, 123, 251, 205, 206, - 119, 177, 108, 124, 301, -161, -162, 125, 126, 302, - 127, 286, 230, 207, 128, 231, 3, 178, 129, 219, - 306, 303, -28, -161, -162, 95, 98, 130, 100, -109, - 101, -109, 103, 96, 104, 132, 133, 134, 287, 321, - 322, 288, 225, 135, 289, 136, 137, 228, 189, 138, - 301, 185, 186, 187, 198, 139, 293, 294, 140, 97, - 194, 208, 179, 141, 142, 109, 110, 143, 317, 215, - 220, 234, 235, 236, 204, 210, 144, 332, 145, 201, - 227, 146, 320, 260, 261, 262, 209, 212, 180, 175, - 211, 214, 5, 215, 218, 246, 222, 221, 226, 183, - 307, -109, 229, 248, 291, 291, 254, 259, 270, 271, - 281, 285, 267, 275, 296, 297, 276, 298, 305, 311, - 319, 325, 318, 329, 327, 331, 120, 121, 122, 123, - 7, 330, 176, 280, 283, 284, 124, 323, -161, 310, - 125, 126, 314, 127, 252, 197, 200, 128, 258, 239, - 312, 129, 328, 0, 0, 0, -161, 0, 0, 0, - 130, 119, 0, 0, -154, 0, 0, 0, 132, 133, - 134, 313, 0, 0, 0, 0, 135, 316, 136, 137, - 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, - 0, 140, 0, 0, 0, 0, 141, 142, 257, 0, - 143, 326, 0, 0, 0, 0, 0, 119, 0, 144, - 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, + 94, 108, 291, 291, 112, 4, 251, 120, 252, 234, + 178, 194, 200, 121, 122, 123, 124, 270, 302, 220, + 120, 3, 275, 125, 109, -161, 179, 126, 127, 303, + 128, -28, -162, 96, 129, 99, 231, 101, 130, 232, + 307, 304, 97, -161, 287, 206, 207, 131, 104, -109, + -162, -109, 186, 187, 188, 133, 134, 135, 289, 102, + 208, 290, 226, 136, 302, 137, 138, 229, 98, 139, + 221, 180, 288, 294, 295, 140, 322, 323, 141, 190, + 105, 216, 195, 142, 143, 318, 199, 144, 110, 111, + 235, 236, 237, 261, 262, 263, 205, 145, 181, 146, + 228, 202, 147, 321, 210, 211, 212, 213, 333, 209, + 176, 215, 219, 5, 216, 247, 223, 227, 222, 249, + 184, 308, -109, 230, 255, 292, 292, 260, 268, 271, + 272, 276, 282, 286, 277, 298, 297, 299, 306, 312, + 319, 320, 326, 328, 330, 332, 121, 122, 123, 124, + 7, 177, 331, 281, 284, 285, 125, 324, -161, 311, + 126, 127, 315, 128, 253, 240, 198, 129, 259, 313, + 329, 130, 0, 201, 0, 0, -161, 0, 0, 0, + 131, 120, 0, 0, -154, 0, 0, 0, 133, 134, + 135, 314, 0, 0, 0, 0, 136, 317, 137, 138, + 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, + 0, 141, 0, 0, 0, 0, 142, 143, 0, 258, + 144, 327, 0, 0, 0, 0, 0, 120, 0, 0, + 145, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, - 113, 0, 12, 13, 0, 14, 15, 16, 17, 0, - 0, 18, 257, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 114, 33, 34, + 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, + 0, 114, 0, 12, 13, 0, 14, 15, 16, 17, + 0, 0, 18, 258, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 115, 33, + 34, 35, 36, 37, 0, 38, 0, 39, 40, 41, + 0, 42, 43, 44, 0, 0, 45, 0, 46, 47, + 0, 48, 0, 49, 50, 0, 51, 52, 53, 0, + 54, 55, 56, 57, 58, 59, 0, 60, 0, 61, + 62, 0, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 0, 87, 88, 0, + 0, 89, 90, 91, 0, 92, 93, 10, 0, 11, + 0, 0, 12, 13, 0, 14, 15, 16, 17, 0, + 0, 18, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 38, 0, 39, 40, 41, 0, 42, 43, 44, 0, 0, 45, 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 0, 60, 0, 61, 62, 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 0, 86, 87, 0, 0, 88, - 89, 90, 0, 91, 92, 10, 0, 11, 0, 0, - 12, 13, 0, 14, 15, 16, 17, 0, 0, 18, - 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, - 37, 0, 38, 0, 39, 40, 41, 0, 42, 43, - 44, 0, 0, 45, 0, 46, 47, 0, 48, 0, - 49, 50, 0, 51, 52, 53, 0, 54, 55, 56, - 57, 58, 59, 0, 60, 0, 61, 62, 0, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 0, 86, 87, 0, 0, 88, 89, 90, - 0, 91, 92, 243, 244, 0, 0, 0, 12, 13, - 0, 14, 15, 16, 17, 0, 0, 18, 0, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, - 38, 0, 39, 40, 41, 0, 42, 43, 44, 0, - 0, 45, 0, 46, 47, 0, 48, 0, 49, 50, - 0, 51, 52, 53, 0, 54, 55, 56, 57, 58, - 59, 0, 60, 0, 61, 62, 0, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 0, 86, 87, 0, 0, 88, 89, 90, 0, 91, - 92, 278, 279, 0, 0, 0, 12, 13, 0, 14, - 15, 16, 17, 0, 0, 18, 0, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 38, 0, - 39, 40, 41, 0, 42, 43, 44, 0, 0, 45, - 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, - 52, 53, 0, 54, 55, 56, 57, 58, 59, 0, - 60, 0, 61, 62, 0, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 0, 86, - 87, 0, 0, 88, 89, 90, 105, 91, 92, 0, + 82, 83, 84, 85, 86, 0, 87, 88, 0, 0, + 89, 90, 91, 0, 92, 93, 244, 245, 0, 0, 0, 12, 13, 0, 14, 15, 16, 17, 0, 0, 18, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, @@ -1346,8 +1325,19 @@ static const yytype_int16 yytable[] = 56, 57, 58, 59, 0, 60, 0, 61, 62, 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 0, 86, 87, 0, 0, 88, 89, - 90, 112, 91, 92, 0, 0, 12, 13, 0, 14, + 83, 84, 85, 86, 0, 87, 88, 0, 0, 89, + 90, 91, 0, 92, 93, 279, 280, 0, 0, 0, + 12, 13, 0, 14, 15, 16, 17, 0, 0, 18, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 0, 38, 0, 39, 40, 41, 0, 42, 43, + 44, 0, 0, 45, 0, 46, 47, 0, 48, 0, + 49, 50, 0, 51, 52, 53, 0, 54, 55, 56, + 57, 58, 59, 0, 60, 0, 61, 62, 0, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 0, 87, 88, 0, 0, 89, 90, + 91, 106, 92, 93, 0, 0, 12, 13, 0, 14, 15, 16, 17, 0, 0, 18, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 38, 0, @@ -1356,130 +1346,114 @@ static const yytype_int16 yytable[] = 52, 53, 0, 54, 55, 56, 57, 58, 59, 0, 60, 0, 61, 62, 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 0, 86, - 87, 0, 0, 88, 89, 90, 0, 91, 92, 120, - 121, 122, 123, 0, 0, 0, 0, 0, 0, 124, - 0, -161, 0, 125, 126, 0, 127, 0, 0, 0, - 128, 0, 0, 0, 129, 0, 0, 0, 0, -161, - 0, 0, 0, 130, 0, -101, -101, -101, 0, 0, - 0, 132, 133, 134, 0, 0, 0, 0, 0, 135, - 0, 136, 137, 0, 0, 138, 0, 0, 0, 0, - 0, 139, 0, 0, 140, 0, 0, 0, 0, 141, - 142, 0, 0, 143, 0, 0, 120, 121, 122, 123, - 0, 0, 144, 0, 145, 0, 124, 146, -161, 0, - 125, 126, 0, 127, 0, 0, 0, 128, 0, 0, - 0, 129, 0, 0, 0, 0, -161, 0, 0, 0, - 130, 0, -102, -102, -102, 0, 0, 0, 132, 133, - 134, 0, 0, 0, 0, 0, 135, 0, 136, 137, - 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, - 0, 140, 0, 0, 0, 0, 141, 142, 0, 0, - 143, 0, 0, 120, 121, 122, 123, 0, 0, 144, - 0, 145, 0, 124, 146, -161, 0, 125, 126, 0, - 127, 0, 0, 0, 128, 0, 0, 0, 129, 0, - 0, 0, 0, -161, 0, 0, 0, 130, 0, 0, - 0, -149, 0, 0, 131, 132, 133, 134, 0, 0, - 0, 0, 0, 135, 0, 136, 137, 0, 0, 138, - 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, - 0, 0, 0, 141, 142, 0, 0, 143, 0, 0, - 120, 121, 122, 123, 0, 0, 144, 0, 145, 0, - 124, 146, -161, 0, 125, 126, 0, 127, 0, 0, - 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, - -161, 0, 0, 0, 130, 0, 0, 0, 273, 0, - 0, 0, 132, 133, 134, 0, 0, 0, 0, 0, - 135, 0, 136, 137, 0, 0, 138, 0, 0, 0, - 0, 0, 139, 0, 0, 140, 0, 0, 0, 0, - 141, 142, 0, 0, 143, 0, 0, 120, 121, 122, - 123, 0, 0, 144, 0, 145, 0, 124, 146, -161, - 0, 125, 126, 0, 127, 0, 0, 0, 128, 0, - 0, 0, 129, 0, 0, 0, 0, -161, 0, 0, - 0, 130, 0, 0, 0, -111, 0, 0, 0, 132, - 133, 134, 0, 0, 0, 0, 0, 135, 0, 136, - 137, 0, 0, 138, 0, 0, 0, 0, 0, 139, - 0, 0, 140, 0, 0, 0, 0, 141, 142, 0, - 0, 143, 0, 0, 120, 121, 122, 123, 0, 0, - 144, 0, 145, 0, 124, 146, -161, 0, 125, 126, - 0, 127, 0, 0, 0, 128, 0, 0, 0, 129, - 0, 0, 0, 0, -161, 0, 0, 0, 130, 0, - 0, 0, -104, 0, 0, 0, 132, 133, 134, 0, - 0, 0, 0, 0, 135, 0, 136, 137, 0, 0, - 138, 0, 0, 0, 0, 0, 139, 0, 0, 140, - 0, 0, 0, 0, 141, 142, 0, 0, 143, 0, - 0, 0, 0, 0, 0, 0, 0, 144, 0, 145, - 0, 0, 146 + 78, 79, 80, 81, 82, 83, 84, 85, 86, 0, + 87, 88, 0, 0, 89, 90, 91, 113, 92, 93, + 0, 0, 12, 13, 0, 14, 15, 16, 17, 0, + 0, 18, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, + 35, 36, 37, 0, 38, 0, 39, 40, 41, 0, + 42, 43, 44, 0, 0, 45, 0, 46, 47, 0, + 48, 0, 49, 50, 0, 51, 52, 53, 0, 54, + 55, 56, 57, 58, 59, 0, 60, 0, 61, 62, + 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 0, 87, 88, 0, 0, + 89, 90, 91, 0, 92, 93, 121, 122, 123, 124, + 0, 0, 0, 0, 0, 0, 125, 0, -161, 0, + 126, 127, 0, 128, 0, 0, 0, 129, 0, 0, + 0, 130, 0, 0, 0, 0, -161, 0, 0, 0, + 131, 0, -101, -101, -101, 0, 0, 0, 133, 134, + 135, 0, 0, 0, 0, 0, 136, 0, 137, 138, + 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, + 0, 141, 121, 122, 123, 124, 142, 143, 0, 0, + 144, 0, 125, 0, -161, 0, 126, 127, 0, 128, + 145, 0, 146, 129, 0, 147, 0, 130, 0, 0, + 0, 0, -161, 0, 0, 0, 131, 0, -102, -102, + -102, 0, 0, 0, 133, 134, 135, 0, 0, 0, + 0, 0, 136, 0, 137, 138, 0, 0, 139, 0, + 0, 0, 0, 0, 140, 0, 0, 141, 121, 122, + 123, 124, 142, 143, 0, 0, 144, 0, 125, 0, + -161, 0, 126, 127, 0, 128, 145, 0, 146, 129, + 0, 147, 0, 130, 0, 0, 0, 0, -161, 0, + 0, 0, 131, 0, 0, 0, -149, 0, 0, 132, + 133, 134, 135, 0, 0, 0, 0, 0, 136, 0, + 137, 138, 0, 0, 139, 0, 0, 0, 0, 0, + 140, 0, 0, 141, 121, 122, 123, 124, 142, 143, + 0, 0, 144, 0, 125, 0, -161, 0, 126, 127, + 0, 128, 145, 0, 146, 129, 0, 147, 0, 130, + 0, 0, 0, 0, -161, 0, 0, 0, 131, 0, + 0, 0, 274, 0, 0, 0, 133, 134, 135, 0, + 0, 0, 0, 0, 136, 0, 137, 138, 0, 0, + 139, 0, 0, 0, 0, 0, 140, 0, 0, 141, + 121, 122, 123, 124, 142, 143, 0, 0, 144, 0, + 125, 0, -161, 0, 126, 127, 0, 128, 145, 0, + 146, 129, 0, 147, 0, 130, 0, 0, 0, 0, + -161, 0, 0, 0, 131, 0, 0, 0, -111, 0, + 0, 0, 133, 134, 135, 0, 0, 0, 0, 0, + 136, 0, 137, 138, 0, 0, 139, 0, 0, 0, + 0, 0, 140, 0, 0, 141, 121, 122, 123, 124, + 142, 143, 0, 0, 144, 0, 125, 0, -161, 0, + 126, 127, 0, 128, 145, 0, 146, 129, 0, 147, + 0, 130, 0, 0, 0, 0, -161, 0, 0, 0, + 131, 0, 0, 0, -104, 0, 0, 0, 133, 134, + 135, 0, 0, 0, 0, 0, 136, 0, 137, 138, + 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, + 0, 141, 0, 0, 0, 0, 142, 143, 0, 0, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 145, 0, 146, 0, 0, 147 }; static const yytype_int16 yycheck[] = { - 4, 96, 15, 15, 100, 25, 237, 102, 204, 215, - 48, 242, 142, 22, 23, 24, 25, 58, 68, 69, - 115, 28, 62, 32, 276, 34, 34, 36, 37, 68, - 39, 95, 130, 83, 43, 133, 0, 44, 47, 38, - 53, 80, 49, 52, 52, 94, 133, 56, 34, 58, - 52, 60, 26, 102, 57, 64, 65, 66, 122, 135, - 136, 133, 192, 72, 136, 74, 75, 197, 30, 78, - 322, 22, 23, 24, 133, 84, 58, 59, 87, 128, - 118, 131, 89, 92, 93, 125, 126, 96, 294, 130, - 89, 22, 23, 24, 60, 68, 105, 328, 107, 133, - 196, 110, 298, 22, 23, 24, 26, 49, 115, 113, - 115, 26, 132, 130, 133, 210, 130, 133, 55, 123, - 133, 130, 133, 40, 137, 137, 38, 79, 76, 116, - 90, 60, 133, 133, 11, 76, 134, 83, 92, 37, - 31, 133, 60, 133, 74, 133, 22, 23, 24, 25, - 2, 322, 115, 248, 250, 251, 32, 301, 34, 282, - 36, 37, 289, 39, 216, 140, 146, 43, 223, 206, - 286, 47, 319, -1, -1, -1, 52, -1, -1, -1, - 56, 276, -1, -1, 60, -1, -1, -1, 64, 65, - 66, 287, -1, -1, -1, -1, 72, 293, 74, 75, + 4, 97, 15, 15, 101, 25, 216, 103, 58, 205, + 28, 48, 143, 22, 23, 24, 25, 238, 277, 38, + 116, 0, 243, 32, 62, 34, 44, 36, 37, 68, + 39, 49, 34, 94, 43, 134, 131, 34, 47, 134, + 53, 80, 103, 52, 95, 68, 69, 56, 26, 58, + 52, 60, 22, 23, 24, 64, 65, 66, 134, 52, + 83, 137, 193, 72, 323, 74, 75, 198, 129, 78, + 89, 89, 123, 58, 59, 84, 136, 137, 87, 30, + 57, 131, 119, 92, 93, 295, 134, 96, 126, 127, + 22, 23, 24, 22, 23, 24, 60, 106, 116, 108, + 197, 134, 111, 299, 26, 68, 116, 49, 329, 132, + 114, 26, 134, 133, 131, 211, 131, 55, 134, 40, + 124, 134, 131, 134, 38, 138, 138, 79, 134, 76, + 117, 134, 90, 60, 135, 76, 11, 83, 92, 37, + 60, 31, 134, 74, 134, 134, 22, 23, 24, 25, + 2, 116, 323, 249, 251, 252, 32, 302, 34, 283, + 36, 37, 290, 39, 217, 207, 141, 43, 224, 287, + 320, 47, -1, 147, -1, -1, 52, -1, -1, -1, + 56, 277, -1, -1, 60, -1, -1, -1, 64, 65, + 66, 288, -1, -1, -1, -1, 72, 294, 74, 75, -1, -1, 78, -1, -1, -1, -1, -1, 84, -1, - -1, 87, -1, -1, -1, -1, 92, 93, 222, -1, - 96, 317, -1, -1, -1, -1, -1, 322, -1, 105, - -1, 107, -1, -1, 110, -1, -1, -1, -1, -1, + -1, 87, -1, -1, -1, -1, 92, 93, -1, 223, + 96, 318, -1, -1, -1, -1, -1, 323, -1, -1, + 106, -1, 108, -1, -1, 111, -1, -1, -1, -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, -1, 22, -1, -1, - 25, -1, 27, 28, -1, 30, 31, 32, 33, -1, - -1, 36, 286, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + -1, -1, -1, -1, -1, 131, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, 25, -1, 27, 28, -1, 30, 31, 32, 33, + -1, -1, 36, 287, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, -1, 61, 62, 63, + -1, 65, 66, 67, -1, -1, 70, -1, 72, 73, + -1, 75, -1, 77, 78, -1, 80, 81, 82, -1, + 84, 85, 86, 87, 88, 89, -1, 91, -1, 93, + 94, -1, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, -1, 121, 122, -1, + -1, 125, 126, 127, -1, 129, 130, 22, -1, 24, + -1, -1, 27, 28, -1, 30, 31, 32, 33, -1, + -1, 36, -1, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, -1, 53, 54, 55, 56, 57, -1, 59, -1, 61, 62, 63, -1, 65, 66, 67, -1, -1, 70, -1, 72, 73, -1, 75, -1, 77, 78, -1, 80, 81, 82, -1, 84, 85, 86, 87, 88, 89, -1, 91, -1, 93, 94, -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, -1, -1, 124, - 125, 126, -1, 128, 129, 22, -1, 24, -1, -1, - 27, 28, -1, 30, 31, 32, 33, -1, -1, 36, - -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, -1, 53, 54, 55, 56, - 57, -1, 59, -1, 61, 62, 63, -1, 65, 66, - 67, -1, -1, 70, -1, 72, 73, -1, 75, -1, - 77, 78, -1, 80, 81, 82, -1, 84, 85, 86, - 87, 88, 89, -1, 91, -1, 93, 94, -1, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, -1, 120, 121, -1, -1, 124, 125, 126, - -1, 128, 129, 22, 23, -1, -1, -1, 27, 28, - -1, 30, 31, 32, 33, -1, -1, 36, -1, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, -1, 53, 54, 55, 56, 57, -1, - 59, -1, 61, 62, 63, -1, 65, 66, 67, -1, - -1, 70, -1, 72, 73, -1, 75, -1, 77, 78, - -1, 80, 81, 82, -1, 84, 85, 86, 87, 88, - 89, -1, 91, -1, 93, 94, -1, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - -1, 120, 121, -1, -1, 124, 125, 126, -1, 128, - 129, 22, 23, -1, -1, -1, 27, 28, -1, 30, - 31, 32, 33, -1, -1, 36, -1, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, -1, 53, 54, 55, 56, 57, -1, 59, -1, - 61, 62, 63, -1, 65, 66, 67, -1, -1, 70, - -1, 72, 73, -1, 75, -1, 77, 78, -1, 80, - 81, 82, -1, 84, 85, 86, 87, 88, 89, -1, - 91, -1, 93, 94, -1, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, - 121, -1, -1, 124, 125, 126, 22, 128, 129, -1, + 115, 116, 117, 118, 119, -1, 121, 122, -1, -1, + 125, 126, 127, -1, 129, 130, 22, 23, -1, -1, -1, 27, 28, -1, 30, 31, 32, 33, -1, -1, 36, -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, 53, 54, 55, @@ -1489,8 +1463,19 @@ static const yytype_int16 yycheck[] = 86, 87, 88, 89, -1, 91, -1, 93, 94, -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 120, 121, -1, -1, 124, 125, - 126, 22, 128, 129, -1, -1, 27, 28, -1, 30, + 116, 117, 118, 119, -1, 121, 122, -1, -1, 125, + 126, 127, -1, 129, 130, 22, 23, -1, -1, -1, + 27, 28, -1, 30, 31, 32, 33, -1, -1, 36, + -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, -1, 53, 54, 55, 56, + 57, -1, 59, -1, 61, 62, 63, -1, 65, 66, + 67, -1, -1, 70, -1, 72, 73, -1, 75, -1, + 77, 78, -1, 80, 81, 82, -1, 84, 85, 86, + 87, 88, 89, -1, 91, -1, 93, 94, -1, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, -1, 121, 122, -1, -1, 125, 126, + 127, 22, 129, 130, -1, -1, 27, 28, -1, 30, 31, 32, 33, -1, -1, 36, -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, 53, 54, 55, 56, 57, -1, 59, -1, @@ -1499,63 +1484,68 @@ static const yytype_int16 yycheck[] = 81, 82, -1, 84, 85, 86, 87, 88, 89, -1, 91, -1, 93, 94, -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, - 121, -1, -1, 124, 125, 126, -1, 128, 129, 22, - 23, 24, 25, -1, -1, -1, -1, -1, -1, 32, - -1, 34, -1, 36, 37, -1, 39, -1, -1, -1, - 43, -1, -1, -1, 47, -1, -1, -1, -1, 52, - -1, -1, -1, 56, -1, 58, 59, 60, -1, -1, - -1, 64, 65, 66, -1, -1, -1, -1, -1, 72, - -1, 74, 75, -1, -1, 78, -1, -1, -1, -1, - -1, 84, -1, -1, 87, -1, -1, -1, -1, 92, - 93, -1, -1, 96, -1, -1, 22, 23, 24, 25, - -1, -1, 105, -1, 107, -1, 32, 110, 34, -1, + 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, + 121, 122, -1, -1, 125, 126, 127, 22, 129, 130, + -1, -1, 27, 28, -1, 30, 31, 32, 33, -1, + -1, 36, -1, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, -1, 53, 54, + 55, 56, 57, -1, 59, -1, 61, 62, 63, -1, + 65, 66, 67, -1, -1, 70, -1, 72, 73, -1, + 75, -1, 77, 78, -1, 80, 81, 82, -1, 84, + 85, 86, 87, 88, 89, -1, 91, -1, 93, 94, + -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, -1, 121, 122, -1, -1, + 125, 126, 127, -1, 129, 130, 22, 23, 24, 25, + -1, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, -1, 39, -1, -1, -1, 43, -1, -1, -1, 47, -1, -1, -1, -1, 52, -1, -1, -1, 56, -1, 58, 59, 60, -1, -1, -1, 64, 65, 66, -1, -1, -1, -1, -1, 72, -1, 74, 75, -1, -1, 78, -1, -1, -1, -1, -1, 84, -1, - -1, 87, -1, -1, -1, -1, 92, 93, -1, -1, - 96, -1, -1, 22, 23, 24, 25, -1, -1, 105, - -1, 107, -1, 32, 110, 34, -1, 36, 37, -1, - 39, -1, -1, -1, 43, -1, -1, -1, 47, -1, - -1, -1, -1, 52, -1, -1, -1, 56, -1, -1, - -1, 60, -1, -1, 63, 64, 65, 66, -1, -1, - -1, -1, -1, 72, -1, 74, 75, -1, -1, 78, - -1, -1, -1, -1, -1, 84, -1, -1, 87, -1, - -1, -1, -1, 92, 93, -1, -1, 96, -1, -1, - 22, 23, 24, 25, -1, -1, 105, -1, 107, -1, - 32, 110, 34, -1, 36, 37, -1, 39, -1, -1, - -1, 43, -1, -1, -1, 47, -1, -1, -1, -1, - 52, -1, -1, -1, 56, -1, -1, -1, 60, -1, - -1, -1, 64, 65, 66, -1, -1, -1, -1, -1, - 72, -1, 74, 75, -1, -1, 78, -1, -1, -1, - -1, -1, 84, -1, -1, 87, -1, -1, -1, -1, - 92, 93, -1, -1, 96, -1, -1, 22, 23, 24, - 25, -1, -1, 105, -1, 107, -1, 32, 110, 34, - -1, 36, 37, -1, 39, -1, -1, -1, 43, -1, - -1, -1, 47, -1, -1, -1, -1, 52, -1, -1, - -1, 56, -1, -1, -1, 60, -1, -1, -1, 64, - 65, 66, -1, -1, -1, -1, -1, 72, -1, 74, - 75, -1, -1, 78, -1, -1, -1, -1, -1, 84, - -1, -1, 87, -1, -1, -1, -1, 92, 93, -1, - -1, 96, -1, -1, 22, 23, 24, 25, -1, -1, - 105, -1, 107, -1, 32, 110, 34, -1, 36, 37, - -1, 39, -1, -1, -1, 43, -1, -1, -1, 47, + -1, 87, 22, 23, 24, 25, 92, 93, -1, -1, + 96, -1, 32, -1, 34, -1, 36, 37, -1, 39, + 106, -1, 108, 43, -1, 111, -1, 47, -1, -1, + -1, -1, 52, -1, -1, -1, 56, -1, 58, 59, + 60, -1, -1, -1, 64, 65, 66, -1, -1, -1, + -1, -1, 72, -1, 74, 75, -1, -1, 78, -1, + -1, -1, -1, -1, 84, -1, -1, 87, 22, 23, + 24, 25, 92, 93, -1, -1, 96, -1, 32, -1, + 34, -1, 36, 37, -1, 39, 106, -1, 108, 43, + -1, 111, -1, 47, -1, -1, -1, -1, 52, -1, + -1, -1, 56, -1, -1, -1, 60, -1, -1, 63, + 64, 65, 66, -1, -1, -1, -1, -1, 72, -1, + 74, 75, -1, -1, 78, -1, -1, -1, -1, -1, + 84, -1, -1, 87, 22, 23, 24, 25, 92, 93, + -1, -1, 96, -1, 32, -1, 34, -1, 36, 37, + -1, 39, 106, -1, 108, 43, -1, 111, -1, 47, -1, -1, -1, -1, 52, -1, -1, -1, 56, -1, -1, -1, 60, -1, -1, -1, 64, 65, 66, -1, -1, -1, -1, -1, 72, -1, 74, 75, -1, -1, 78, -1, -1, -1, -1, -1, 84, -1, -1, 87, - -1, -1, -1, -1, 92, 93, -1, -1, 96, -1, - -1, -1, -1, -1, -1, -1, -1, 105, -1, 107, - -1, -1, 110 + 22, 23, 24, 25, 92, 93, -1, -1, 96, -1, + 32, -1, 34, -1, 36, 37, -1, 39, 106, -1, + 108, 43, -1, 111, -1, 47, -1, -1, -1, -1, + 52, -1, -1, -1, 56, -1, -1, -1, 60, -1, + -1, -1, 64, 65, 66, -1, -1, -1, -1, -1, + 72, -1, 74, 75, -1, -1, 78, -1, -1, -1, + -1, -1, 84, -1, -1, 87, 22, 23, 24, 25, + 92, 93, -1, -1, 96, -1, 32, -1, 34, -1, + 36, 37, -1, 39, 106, -1, 108, 43, -1, 111, + -1, 47, -1, -1, -1, -1, 52, -1, -1, -1, + 56, -1, -1, -1, 60, -1, -1, -1, 64, 65, + 66, -1, -1, -1, -1, -1, 72, -1, 74, 75, + -1, -1, 78, -1, -1, -1, -1, -1, 84, -1, + -1, 87, -1, -1, -1, -1, 92, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 106, -1, 108, -1, -1, 111 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 139, 140, 0, 25, 132, 141, 144, 145, 219, + 0, 140, 141, 0, 25, 133, 142, 145, 146, 220, 22, 24, 27, 28, 30, 31, 32, 33, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 59, 61, @@ -1563,32 +1553,32 @@ static const yytype_uint8 yystos[] = 78, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 93, 94, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 120, 121, 124, 125, - 126, 128, 129, 223, 224, 94, 102, 128, 133, 143, - 34, 52, 146, 26, 57, 22, 142, 224, 62, 125, - 126, 166, 22, 25, 52, 147, 148, 149, 158, 224, - 22, 23, 24, 25, 32, 36, 37, 39, 43, 47, - 56, 63, 64, 65, 66, 72, 74, 75, 78, 84, - 87, 92, 93, 96, 105, 107, 110, 144, 167, 168, - 169, 170, 171, 177, 180, 185, 186, 187, 190, 192, - 193, 194, 195, 196, 198, 199, 200, 201, 202, 204, - 205, 206, 207, 210, 220, 223, 148, 28, 44, 89, - 115, 151, 159, 223, 181, 22, 23, 24, 209, 30, - 208, 211, 203, 48, 118, 172, 217, 203, 133, 209, - 208, 133, 221, 223, 60, 68, 69, 83, 131, 26, - 68, 115, 49, 160, 26, 130, 182, 183, 133, 38, - 89, 133, 130, 212, 213, 209, 55, 166, 209, 133, - 130, 133, 222, 221, 22, 23, 24, 188, 189, 189, - 166, 197, 218, 22, 23, 157, 224, 150, 40, 161, - 217, 58, 183, 184, 38, 214, 215, 223, 213, 79, - 22, 23, 24, 173, 174, 176, 178, 133, 216, 197, - 76, 116, 191, 60, 197, 133, 134, 153, 22, 23, - 224, 90, 162, 166, 166, 60, 95, 122, 133, 136, - 15, 137, 165, 58, 59, 179, 11, 76, 83, 154, - 155, 158, 68, 80, 156, 92, 53, 133, 163, 164, - 165, 37, 215, 166, 174, 175, 166, 217, 60, 31, - 221, 135, 136, 160, 152, 133, 166, 74, 218, 133, - 155, 133, 197 + 113, 114, 115, 116, 117, 118, 119, 121, 122, 125, + 126, 127, 129, 130, 224, 225, 94, 103, 129, 134, + 144, 34, 52, 147, 26, 57, 22, 143, 225, 62, + 126, 127, 167, 22, 25, 52, 148, 149, 150, 159, + 225, 22, 23, 24, 25, 32, 36, 37, 39, 43, + 47, 56, 63, 64, 65, 66, 72, 74, 75, 78, + 84, 87, 92, 93, 96, 106, 108, 111, 145, 168, + 169, 170, 171, 172, 178, 181, 186, 187, 188, 191, + 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, + 205, 206, 207, 208, 211, 221, 224, 149, 28, 44, + 89, 116, 152, 160, 224, 182, 22, 23, 24, 210, + 30, 209, 212, 204, 48, 119, 173, 218, 204, 134, + 210, 209, 134, 222, 224, 60, 68, 69, 83, 132, + 26, 68, 116, 49, 161, 26, 131, 183, 184, 134, + 38, 89, 134, 131, 213, 214, 210, 55, 167, 210, + 134, 131, 134, 223, 222, 22, 23, 24, 189, 190, + 190, 167, 198, 219, 22, 23, 158, 225, 151, 40, + 162, 218, 58, 184, 185, 38, 215, 216, 224, 214, + 79, 22, 23, 24, 174, 175, 177, 179, 134, 217, + 198, 76, 117, 192, 60, 198, 134, 135, 154, 22, + 23, 225, 90, 163, 167, 167, 60, 95, 123, 134, + 137, 15, 138, 166, 58, 59, 180, 11, 76, 83, + 155, 156, 159, 68, 80, 157, 92, 53, 134, 164, + 165, 166, 37, 216, 167, 175, 176, 167, 218, 60, + 31, 222, 136, 137, 161, 153, 134, 167, 74, 219, + 134, 156, 134, 198 }; #define yyerrok (yyerrstatus = 0) @@ -2429,21 +2419,21 @@ yyparse () switch (yyn) { case 2: -#line 363 "pl_gram.y" +#line 361 "pl_gram.y" { plpgsql_parse_result = (PLpgSQL_stmt_block *) (yyvsp[(2) - (3)].stmt); ;} break; case 5: -#line 373 "pl_gram.y" +#line 371 "pl_gram.y" { plpgsql_DumpExecTree = true; ;} break; case 6: -#line 377 "pl_gram.y" +#line 375 "pl_gram.y" { if (strcmp((yyvsp[(3) - (3)].str), "on") == 0) plpgsql_curr_compile->print_strict_params = true; @@ -2455,42 +2445,42 @@ yyparse () break; case 7: -#line 386 "pl_gram.y" +#line 384 "pl_gram.y" { plpgsql_curr_compile->resolve_option = PLPGSQL_RESOLVE_ERROR; ;} break; case 8: -#line 390 "pl_gram.y" +#line 388 "pl_gram.y" { plpgsql_curr_compile->resolve_option = PLPGSQL_RESOLVE_VARIABLE; ;} break; case 9: -#line 394 "pl_gram.y" +#line 392 "pl_gram.y" { plpgsql_curr_compile->resolve_option = PLPGSQL_RESOLVE_COLUMN; ;} break; case 10: -#line 400 "pl_gram.y" +#line 398 "pl_gram.y" { (yyval.str) = (yyvsp[(1) - (1)].word).ident; ;} break; case 11: -#line 404 "pl_gram.y" +#line 402 "pl_gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; case 14: -#line 413 "pl_gram.y" +#line 411 "pl_gram.y" { PLpgSQL_stmt_block *new; @@ -2513,7 +2503,7 @@ yyparse () break; case 15: -#line 436 "pl_gram.y" +#line 434 "pl_gram.y" { /* done with decls, so resume identifier lookup */ plpgsql_IdentifierLookup = IDENTIFIER_LOOKUP_NORMAL; @@ -2524,7 +2514,7 @@ yyparse () break; case 16: -#line 444 "pl_gram.y" +#line 442 "pl_gram.y" { plpgsql_IdentifierLookup = IDENTIFIER_LOOKUP_NORMAL; (yyval.declhdr).label = (yyvsp[(1) - (2)].str); @@ -2534,7 +2524,7 @@ yyparse () break; case 17: -#line 451 "pl_gram.y" +#line 449 "pl_gram.y" { plpgsql_IdentifierLookup = IDENTIFIER_LOOKUP_NORMAL; (yyval.declhdr).label = (yyvsp[(1) - (3)].str); @@ -2544,7 +2534,7 @@ yyparse () break; case 18: -#line 460 "pl_gram.y" +#line 458 "pl_gram.y" { /* Forget any variables created before block */ plpgsql_add_initdatums(NULL); @@ -2557,14 +2547,14 @@ yyparse () break; case 22: -#line 477 "pl_gram.y" +#line 475 "pl_gram.y" { /* We allow useless extra DECLAREs */ ;} break; case 23: -#line 481 "pl_gram.y" +#line 479 "pl_gram.y" { /* * Throw a helpful error if user tries to put block @@ -2578,7 +2568,7 @@ yyparse () break; case 24: -#line 494 "pl_gram.y" +#line 492 "pl_gram.y" { PLpgSQL_variable *var; @@ -2619,7 +2609,7 @@ yyparse () break; case 25: -#line 532 "pl_gram.y" +#line 530 "pl_gram.y" { plpgsql_ns_additem((yyvsp[(4) - (5)].nsitem)->itemtype, (yyvsp[(4) - (5)].nsitem)->itemno, (yyvsp[(1) - (5)].varname).name); @@ -2627,18 +2617,14 @@ yyparse () break; case 26: -#line 537 "pl_gram.y" +#line 535 "pl_gram.y" { plpgsql_ns_push((yyvsp[(1) - (3)].varname).name, PLPGSQL_LABEL_OTHER); ;} break; case 27: -#line 539 "pl_gram.y" +#line 537 "pl_gram.y" { PLpgSQL_var *new; - PLpgSQL_expr *curname_def; - char buf[NAMEDATALEN * 2 + 64]; - char *cp1; - char *cp2; /* pop local namespace for cursor args */ plpgsql_ns_pop(); @@ -2651,29 +2637,6 @@ yyparse () NULL), true); - curname_def = palloc0(sizeof(PLpgSQL_expr)); - - /* Note: refname has been truncated to NAMEDATALEN */ - cp1 = new->refname; - cp2 = buf; - /* - * Don't trust standard_conforming_strings here; - * it might change before we use the string. - */ - if (strchr(cp1, '\\') != NULL) - *cp2++ = ESCAPE_STRING_SYNTAX; - *cp2++ = '\''; - while (*cp1) - { - if (SQL_STR_DOUBLE(*cp1, true)) - *cp2++ = *cp1; - *cp2++ = *cp1++; - } - strcpy(cp2, "'::pg_catalog.refcursor"); - curname_def->query = pstrdup(buf); - curname_def->parseMode = RAW_PARSE_PLPGSQL_EXPR; - new->default_val = curname_def; - new->cursor_explicit_expr = (yyvsp[(7) - (7)].expr); if ((yyvsp[(5) - (7)].datum) == NULL) new->cursor_explicit_argrow = -1; @@ -2684,42 +2647,42 @@ yyparse () break; case 28: -#line 590 "pl_gram.y" +#line 561 "pl_gram.y" { (yyval.ival) = 0; ;} break; case 29: -#line 594 "pl_gram.y" +#line 565 "pl_gram.y" { (yyval.ival) = CURSOR_OPT_NO_SCROLL; ;} break; case 30: -#line 598 "pl_gram.y" +#line 569 "pl_gram.y" { (yyval.ival) = CURSOR_OPT_SCROLL; ;} break; case 31: -#line 604 "pl_gram.y" +#line 575 "pl_gram.y" { (yyval.expr) = read_sql_stmt(); ;} break; case 32: -#line 610 "pl_gram.y" +#line 581 "pl_gram.y" { (yyval.datum) = NULL; ;} break; case 33: -#line 614 "pl_gram.y" +#line 585 "pl_gram.y" { PLpgSQL_row *new; int i; @@ -2751,21 +2714,21 @@ yyparse () break; case 34: -#line 645 "pl_gram.y" +#line 616 "pl_gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].datum)); ;} break; case 35: -#line 649 "pl_gram.y" +#line 620 "pl_gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].datum)); ;} break; case 36: -#line 655 "pl_gram.y" +#line 626 "pl_gram.y" { (yyval.datum) = (PLpgSQL_datum *) plpgsql_build_variable((yyvsp[(1) - (2)].varname).name, (yyvsp[(1) - (2)].varname).lineno, @@ -2774,7 +2737,7 @@ yyparse () break; case 39: -#line 666 "pl_gram.y" +#line 637 "pl_gram.y" { PLpgSQL_nsitem *nsi; @@ -2792,7 +2755,7 @@ yyparse () break; case 40: -#line 681 "pl_gram.y" +#line 652 "pl_gram.y" { PLpgSQL_nsitem *nsi; @@ -2810,7 +2773,7 @@ yyparse () break; case 41: -#line 696 "pl_gram.y" +#line 667 "pl_gram.y" { PLpgSQL_nsitem *nsi; @@ -2839,7 +2802,7 @@ yyparse () break; case 42: -#line 724 "pl_gram.y" +#line 695 "pl_gram.y" { (yyval.varname).name = (yyvsp[(1) - (1)].word).ident; (yyval.varname).lineno = plpgsql_location_to_lineno((yylsp[(1) - (1)])); @@ -2870,7 +2833,7 @@ yyparse () break; case 43: -#line 752 "pl_gram.y" +#line 723 "pl_gram.y" { (yyval.varname).name = pstrdup((yyvsp[(1) - (1)].keyword)); (yyval.varname).lineno = plpgsql_location_to_lineno((yylsp[(1) - (1)])); @@ -2901,17 +2864,17 @@ yyparse () break; case 44: -#line 782 "pl_gram.y" +#line 753 "pl_gram.y" { (yyval.boolean) = false; ;} break; case 45: -#line 784 "pl_gram.y" +#line 755 "pl_gram.y" { (yyval.boolean) = true; ;} break; case 46: -#line 788 "pl_gram.y" +#line 759 "pl_gram.y" { /* * If there's a lookahead token, read_datatype @@ -2923,12 +2886,12 @@ yyparse () break; case 47: -#line 799 "pl_gram.y" +#line 770 "pl_gram.y" { (yyval.oid) = InvalidOid; ;} break; case 48: -#line 801 "pl_gram.y" +#line 772 "pl_gram.y" { (yyval.oid) = get_collation_oid(list_make1(makeString((yyvsp[(2) - (2)].word).ident)), false); @@ -2936,7 +2899,7 @@ yyparse () break; case 49: -#line 806 "pl_gram.y" +#line 777 "pl_gram.y" { (yyval.oid) = get_collation_oid(list_make1(makeString(pstrdup((yyvsp[(2) - (2)].keyword)))), false); @@ -2944,41 +2907,41 @@ yyparse () break; case 50: -#line 811 "pl_gram.y" +#line 782 "pl_gram.y" { (yyval.oid) = get_collation_oid((yyvsp[(2) - (2)].cword).idents, false); ;} break; case 51: -#line 817 "pl_gram.y" +#line 788 "pl_gram.y" { (yyval.boolean) = false; ;} break; case 52: -#line 819 "pl_gram.y" +#line 790 "pl_gram.y" { (yyval.boolean) = true; ;} break; case 53: -#line 823 "pl_gram.y" +#line 794 "pl_gram.y" { (yyval.expr) = NULL; ;} break; case 54: -#line 825 "pl_gram.y" +#line 796 "pl_gram.y" { (yyval.expr) = read_sql_expression(';', ";"); ;} break; case 59: -#line 844 "pl_gram.y" +#line 815 "pl_gram.y" { (yyval.list) = NIL; ;} break; case 60: -#line 846 "pl_gram.y" +#line 817 "pl_gram.y" { /* don't bother linking null statements into list */ if ((yyvsp[(2) - (2)].stmt) == NULL) @@ -2989,127 +2952,127 @@ yyparse () break; case 61: -#line 856 "pl_gram.y" +#line 827 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (2)].stmt); ;} break; case 62: -#line 858 "pl_gram.y" +#line 829 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 63: -#line 860 "pl_gram.y" +#line 831 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 64: -#line 862 "pl_gram.y" +#line 833 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 65: -#line 864 "pl_gram.y" +#line 835 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 66: -#line 866 "pl_gram.y" +#line 837 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 67: -#line 868 "pl_gram.y" +#line 839 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 68: -#line 870 "pl_gram.y" +#line 841 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 69: -#line 872 "pl_gram.y" +#line 843 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 70: -#line 874 "pl_gram.y" +#line 845 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 71: -#line 876 "pl_gram.y" +#line 847 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 72: -#line 878 "pl_gram.y" +#line 849 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 73: -#line 880 "pl_gram.y" +#line 851 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 74: -#line 882 "pl_gram.y" +#line 853 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 75: -#line 884 "pl_gram.y" +#line 855 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 76: -#line 886 "pl_gram.y" +#line 857 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 77: -#line 888 "pl_gram.y" +#line 859 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 78: -#line 890 "pl_gram.y" +#line 861 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 79: -#line 892 "pl_gram.y" +#line 863 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 80: -#line 894 "pl_gram.y" +#line 865 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 81: -#line 896 "pl_gram.y" +#line 867 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 82: -#line 898 "pl_gram.y" +#line 869 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 83: -#line 900 "pl_gram.y" +#line 871 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 84: -#line 902 "pl_gram.y" +#line 873 "pl_gram.y" { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); ;} break; case 85: -#line 906 "pl_gram.y" +#line 877 "pl_gram.y" { PLpgSQL_stmt_perform *new; int startloc; @@ -3146,7 +3109,7 @@ yyparse () break; case 86: -#line 942 "pl_gram.y" +#line 913 "pl_gram.y" { PLpgSQL_stmt_call *new; @@ -3167,7 +3130,7 @@ yyparse () break; case 87: -#line 960 "pl_gram.y" +#line 931 "pl_gram.y" { /* use the same structures as for CALL, for simplicity */ PLpgSQL_stmt_call *new; @@ -3189,7 +3152,7 @@ yyparse () break; case 88: -#line 981 "pl_gram.y" +#line 952 "pl_gram.y" { PLpgSQL_stmt_assign *new; RawParseMode pmode; @@ -3229,7 +3192,7 @@ yyparse () break; case 89: -#line 1020 "pl_gram.y" +#line 991 "pl_gram.y" { PLpgSQL_stmt_getdiag *new; ListCell *lc; @@ -3252,6 +3215,7 @@ yyparse () { /* these fields are disallowed in stacked case */ case PLPGSQL_GETDIAG_ROW_COUNT: + case PLPGSQL_GETDIAG_ROUTINE_OID: if (new->is_stacked) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), @@ -3292,42 +3256,42 @@ yyparse () break; case 90: -#line 1082 "pl_gram.y" +#line 1054 "pl_gram.y" { (yyval.boolean) = false; ;} break; case 91: -#line 1086 "pl_gram.y" +#line 1058 "pl_gram.y" { (yyval.boolean) = false; ;} break; case 92: -#line 1090 "pl_gram.y" +#line 1062 "pl_gram.y" { (yyval.boolean) = true; ;} break; case 93: -#line 1096 "pl_gram.y" +#line 1068 "pl_gram.y" { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].diagitem)); ;} break; case 94: -#line 1100 "pl_gram.y" +#line 1072 "pl_gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].diagitem)); ;} break; case 95: -#line 1106 "pl_gram.y" +#line 1078 "pl_gram.y" { PLpgSQL_diag_item *new; @@ -3340,13 +3304,16 @@ yyparse () break; case 96: -#line 1118 "pl_gram.y" +#line 1090 "pl_gram.y" { int tok = yylex(); if (tok_is_keyword(tok, &yylval, K_ROW_COUNT, "row_count")) (yyval.ival) = PLPGSQL_GETDIAG_ROW_COUNT; + else if (tok_is_keyword(tok, &yylval, + K_PG_ROUTINE_OID, "pg_routine_oid")) + (yyval.ival) = PLPGSQL_GETDIAG_ROUTINE_OID; else if (tok_is_keyword(tok, &yylval, K_PG_CONTEXT, "pg_context")) (yyval.ival) = PLPGSQL_GETDIAG_CONTEXT; @@ -3386,7 +3353,7 @@ yyparse () break; case 97: -#line 1163 "pl_gram.y" +#line 1138 "pl_gram.y" { /* * In principle we should support a getdiag_target @@ -3407,7 +3374,7 @@ yyparse () break; case 98: -#line 1181 "pl_gram.y" +#line 1156 "pl_gram.y" { /* just to give a better message than "syntax error" */ word_is_not_variable(&((yyvsp[(1) - (1)].word)), (yylsp[(1) - (1)])); @@ -3415,7 +3382,7 @@ yyparse () break; case 99: -#line 1186 "pl_gram.y" +#line 1161 "pl_gram.y" { /* just to give a better message than "syntax error" */ cword_is_not_variable(&((yyvsp[(1) - (1)].cword)), (yylsp[(1) - (1)])); @@ -3423,7 +3390,7 @@ yyparse () break; case 100: -#line 1193 "pl_gram.y" +#line 1168 "pl_gram.y" { PLpgSQL_stmt_if *new; @@ -3441,14 +3408,14 @@ yyparse () break; case 101: -#line 1210 "pl_gram.y" +#line 1185 "pl_gram.y" { (yyval.list) = NIL; ;} break; case 102: -#line 1214 "pl_gram.y" +#line 1189 "pl_gram.y" { PLpgSQL_if_elsif *new; @@ -3462,28 +3429,28 @@ yyparse () break; case 103: -#line 1227 "pl_gram.y" +#line 1202 "pl_gram.y" { (yyval.list) = NIL; ;} break; case 104: -#line 1231 "pl_gram.y" +#line 1206 "pl_gram.y" { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; case 105: -#line 1237 "pl_gram.y" +#line 1212 "pl_gram.y" { (yyval.stmt) = make_case((yylsp[(1) - (7)]), (yyvsp[(2) - (7)].expr), (yyvsp[(3) - (7)].list), (yyvsp[(4) - (7)].list)); ;} break; case 106: -#line 1243 "pl_gram.y" +#line 1218 "pl_gram.y" { PLpgSQL_expr *expr = NULL; int tok = yylex(); @@ -3499,21 +3466,21 @@ yyparse () break; case 107: -#line 1258 "pl_gram.y" +#line 1233 "pl_gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].casewhen)); ;} break; case 108: -#line 1262 "pl_gram.y" +#line 1237 "pl_gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].casewhen)); ;} break; case 109: -#line 1268 "pl_gram.y" +#line 1243 "pl_gram.y" { PLpgSQL_case_when *new = palloc(sizeof(PLpgSQL_case_when)); @@ -3525,14 +3492,14 @@ yyparse () break; case 110: -#line 1279 "pl_gram.y" +#line 1254 "pl_gram.y" { (yyval.list) = NIL; ;} break; case 111: -#line 1283 "pl_gram.y" +#line 1258 "pl_gram.y" { /* * proc_sect could return an empty list, but we @@ -3548,7 +3515,7 @@ yyparse () break; case 112: -#line 1298 "pl_gram.y" +#line 1273 "pl_gram.y" { PLpgSQL_stmt_loop *new; @@ -3567,7 +3534,7 @@ yyparse () break; case 113: -#line 1316 "pl_gram.y" +#line 1291 "pl_gram.y" { PLpgSQL_stmt_while *new; @@ -3587,7 +3554,7 @@ yyparse () break; case 114: -#line 1335 "pl_gram.y" +#line 1310 "pl_gram.y" { /* This runs after we've scanned the loop body */ if ((yyvsp[(3) - (4)].stmt)->cmd_type == PLPGSQL_STMT_FORI) @@ -3622,7 +3589,7 @@ yyparse () break; case 115: -#line 1369 "pl_gram.y" +#line 1344 "pl_gram.y" { int tok = yylex(); int tokloc = yylloc; @@ -3864,7 +3831,7 @@ yyparse () break; case 116: -#line 1628 "pl_gram.y" +#line 1603 "pl_gram.y" { (yyval.forvariable).name = NameOfDatum(&((yyvsp[(1) - (1)].wdatum))); (yyval.forvariable).lineno = plpgsql_location_to_lineno((yylsp[(1) - (1)])); @@ -3893,7 +3860,7 @@ yyparse () break; case 117: -#line 1654 "pl_gram.y" +#line 1629 "pl_gram.y" { int tok; @@ -3910,7 +3877,7 @@ yyparse () break; case 118: -#line 1668 "pl_gram.y" +#line 1643 "pl_gram.y" { /* just to give a better message than "syntax error" */ cword_is_not_variable(&((yyvsp[(1) - (1)].cword)), (yylsp[(1) - (1)])); @@ -3918,7 +3885,7 @@ yyparse () break; case 119: -#line 1675 "pl_gram.y" +#line 1650 "pl_gram.y" { PLpgSQL_stmt_foreach_a *new; @@ -3957,21 +3924,21 @@ yyparse () break; case 120: -#line 1713 "pl_gram.y" +#line 1688 "pl_gram.y" { (yyval.ival) = 0; ;} break; case 121: -#line 1717 "pl_gram.y" +#line 1692 "pl_gram.y" { (yyval.ival) = (yyvsp[(2) - (2)].ival); ;} break; case 122: -#line 1723 "pl_gram.y" +#line 1698 "pl_gram.y" { PLpgSQL_stmt_exit *new; @@ -4025,21 +3992,21 @@ yyparse () break; case 123: -#line 1776 "pl_gram.y" +#line 1751 "pl_gram.y" { (yyval.boolean) = true; ;} break; case 124: -#line 1780 "pl_gram.y" +#line 1755 "pl_gram.y" { (yyval.boolean) = false; ;} break; case 125: -#line 1786 "pl_gram.y" +#line 1761 "pl_gram.y" { int tok; @@ -4066,7 +4033,7 @@ yyparse () break; case 126: -#line 1812 "pl_gram.y" +#line 1787 "pl_gram.y" { PLpgSQL_stmt_raise *new; int tok; @@ -4212,7 +4179,7 @@ yyparse () break; case 127: -#line 1957 "pl_gram.y" +#line 1932 "pl_gram.y" { PLpgSQL_stmt_assert *new; int tok; @@ -4237,7 +4204,7 @@ yyparse () break; case 128: -#line 1981 "pl_gram.y" +#line 1956 "pl_gram.y" { (yyval.loop_body).stmts = (yyvsp[(1) - (5)].list); (yyval.loop_body).end_label = (yyvsp[(4) - (5)].str); @@ -4246,28 +4213,28 @@ yyparse () break; case 129: -#line 1999 "pl_gram.y" +#line 1974 "pl_gram.y" { (yyval.stmt) = make_execsql_stmt(K_IMPORT, (yylsp[(1) - (1)])); ;} break; case 130: -#line 2003 "pl_gram.y" +#line 1978 "pl_gram.y" { (yyval.stmt) = make_execsql_stmt(K_INSERT, (yylsp[(1) - (1)])); ;} break; case 131: -#line 2007 "pl_gram.y" +#line 1982 "pl_gram.y" { (yyval.stmt) = make_execsql_stmt(K_MERGE, (yylsp[(1) - (1)])); ;} break; case 132: -#line 2011 "pl_gram.y" +#line 1986 "pl_gram.y" { int tok; @@ -4281,7 +4248,7 @@ yyparse () break; case 133: -#line 2022 "pl_gram.y" +#line 1997 "pl_gram.y" { int tok; @@ -4295,7 +4262,7 @@ yyparse () break; case 134: -#line 2035 "pl_gram.y" +#line 2010 "pl_gram.y" { PLpgSQL_stmt_dynexecute *new; PLpgSQL_expr *expr; @@ -4359,7 +4326,7 @@ yyparse () break; case 135: -#line 2099 "pl_gram.y" +#line 2074 "pl_gram.y" { PLpgSQL_stmt_open *new; int tok; @@ -4438,7 +4405,7 @@ yyparse () break; case 136: -#line 2177 "pl_gram.y" +#line 2152 "pl_gram.y" { PLpgSQL_stmt_fetch *fetch = (yyvsp[(2) - (4)].fetch); PLpgSQL_variable *target; @@ -4469,7 +4436,7 @@ yyparse () break; case 137: -#line 2207 "pl_gram.y" +#line 2182 "pl_gram.y" { PLpgSQL_stmt_fetch *fetch = (yyvsp[(2) - (4)].fetch); @@ -4482,14 +4449,14 @@ yyparse () break; case 138: -#line 2219 "pl_gram.y" +#line 2194 "pl_gram.y" { (yyval.fetch) = read_fetch_direction(); ;} break; case 139: -#line 2225 "pl_gram.y" +#line 2200 "pl_gram.y" { PLpgSQL_stmt_close *new; @@ -4504,7 +4471,7 @@ yyparse () break; case 140: -#line 2239 "pl_gram.y" +#line 2214 "pl_gram.y" { /* We do not bother building a node for NULL */ (yyval.stmt) = NULL; @@ -4512,7 +4479,7 @@ yyparse () break; case 141: -#line 2246 "pl_gram.y" +#line 2221 "pl_gram.y" { PLpgSQL_stmt_commit *new; @@ -4527,7 +4494,7 @@ yyparse () break; case 142: -#line 2260 "pl_gram.y" +#line 2235 "pl_gram.y" { PLpgSQL_stmt_rollback *new; @@ -4542,22 +4509,22 @@ yyparse () break; case 143: -#line 2274 "pl_gram.y" +#line 2249 "pl_gram.y" { (yyval.ival) = true; ;} break; case 144: -#line 2275 "pl_gram.y" +#line 2250 "pl_gram.y" { (yyval.ival) = false; ;} break; case 145: -#line 2276 "pl_gram.y" +#line 2251 "pl_gram.y" { (yyval.ival) = false; ;} break; case 146: -#line 2281 "pl_gram.y" +#line 2256 "pl_gram.y" { /* * In principle we should support a cursor_variable @@ -4582,7 +4549,7 @@ yyparse () break; case 147: -#line 2303 "pl_gram.y" +#line 2278 "pl_gram.y" { /* just to give a better message than "syntax error" */ word_is_not_variable(&((yyvsp[(1) - (1)].word)), (yylsp[(1) - (1)])); @@ -4590,7 +4557,7 @@ yyparse () break; case 148: -#line 2308 "pl_gram.y" +#line 2283 "pl_gram.y" { /* just to give a better message than "syntax error" */ cword_is_not_variable(&((yyvsp[(1) - (1)].cword)), (yylsp[(1) - (1)])); @@ -4598,12 +4565,12 @@ yyparse () break; case 149: -#line 2315 "pl_gram.y" +#line 2290 "pl_gram.y" { (yyval.exception_block) = NULL; ;} break; case 150: -#line 2317 "pl_gram.y" +#line 2292 "pl_gram.y" { /* * We use a mid-rule action to add these @@ -4639,7 +4606,7 @@ yyparse () break; case 151: -#line 2350 "pl_gram.y" +#line 2325 "pl_gram.y" { PLpgSQL_exception_block *new = (yyvsp[(2) - (3)].exception_block); new->exc_list = (yyvsp[(3) - (3)].list); @@ -4649,21 +4616,21 @@ yyparse () break; case 152: -#line 2359 "pl_gram.y" +#line 2334 "pl_gram.y" { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].exception)); ;} break; case 153: -#line 2363 "pl_gram.y" +#line 2338 "pl_gram.y" { (yyval.list) = list_make1((yyvsp[(1) - (1)].exception)); ;} break; case 154: -#line 2369 "pl_gram.y" +#line 2344 "pl_gram.y" { PLpgSQL_exception *new; @@ -4677,7 +4644,7 @@ yyparse () break; case 155: -#line 2382 "pl_gram.y" +#line 2357 "pl_gram.y" { PLpgSQL_condition *old; @@ -4689,14 +4656,14 @@ yyparse () break; case 156: -#line 2391 "pl_gram.y" +#line 2366 "pl_gram.y" { (yyval.condition) = (yyvsp[(1) - (1)].condition); ;} break; case 157: -#line 2397 "pl_gram.y" +#line 2372 "pl_gram.y" { if (strcmp((yyvsp[(1) - (1)].str), "sqlstate") != 0) { @@ -4733,22 +4700,22 @@ yyparse () break; case 158: -#line 2433 "pl_gram.y" +#line 2408 "pl_gram.y" { (yyval.expr) = read_sql_expression(';', ";"); ;} break; case 159: -#line 2437 "pl_gram.y" +#line 2412 "pl_gram.y" { (yyval.expr) = read_sql_expression(K_THEN, "THEN"); ;} break; case 160: -#line 2441 "pl_gram.y" +#line 2416 "pl_gram.y" { (yyval.expr) = read_sql_expression(K_LOOP, "LOOP"); ;} break; case 161: -#line 2445 "pl_gram.y" +#line 2420 "pl_gram.y" { plpgsql_ns_push(NULL, PLPGSQL_LABEL_BLOCK); (yyval.str) = NULL; @@ -4756,7 +4723,7 @@ yyparse () break; case 162: -#line 2450 "pl_gram.y" +#line 2425 "pl_gram.y" { plpgsql_ns_push((yyvsp[(2) - (3)].str), PLPGSQL_LABEL_BLOCK); (yyval.str) = (yyvsp[(2) - (3)].str); @@ -4764,7 +4731,7 @@ yyparse () break; case 163: -#line 2457 "pl_gram.y" +#line 2432 "pl_gram.y" { plpgsql_ns_push(NULL, PLPGSQL_LABEL_LOOP); (yyval.str) = NULL; @@ -4772,7 +4739,7 @@ yyparse () break; case 164: -#line 2462 "pl_gram.y" +#line 2437 "pl_gram.y" { plpgsql_ns_push((yyvsp[(2) - (3)].str), PLPGSQL_LABEL_LOOP); (yyval.str) = (yyvsp[(2) - (3)].str); @@ -4780,14 +4747,14 @@ yyparse () break; case 165: -#line 2469 "pl_gram.y" +#line 2444 "pl_gram.y" { (yyval.str) = NULL; ;} break; case 166: -#line 2473 "pl_gram.y" +#line 2448 "pl_gram.y" { /* label validity will be checked by outer production */ (yyval.str) = (yyvsp[(1) - (1)].str); @@ -4795,31 +4762,31 @@ yyparse () break; case 167: -#line 2480 "pl_gram.y" +#line 2455 "pl_gram.y" { (yyval.expr) = NULL; ;} break; case 168: -#line 2482 "pl_gram.y" +#line 2457 "pl_gram.y" { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;} break; case 169: -#line 2489 "pl_gram.y" +#line 2464 "pl_gram.y" { (yyval.str) = (yyvsp[(1) - (1)].word).ident; ;} break; case 170: -#line 2493 "pl_gram.y" +#line 2468 "pl_gram.y" { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; case 171: -#line 2497 "pl_gram.y" +#line 2472 "pl_gram.y" { if ((yyvsp[(1) - (1)].wdatum).ident == NULL) /* composite name not OK */ yyerror("syntax error"); @@ -4829,7 +4796,7 @@ yyparse () /* Line 1267 of yacc.c. */ -#line 4780 "pl_gram.c" +#line 4747 "pl_gram.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5049,7 +5016,7 @@ yyparse () } -#line 2588 "pl_gram.y" +#line 2564 "pl_gram.y" /* diff --git a/src/postgres/src_pl_plpgsql_src_pl_handler.c b/src/postgres/src_pl_plpgsql_src_pl_handler.c index 26aa5912..873a9303 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_handler.c +++ b/src/postgres/src_pl_plpgsql_src_pl_handler.c @@ -10,7 +10,7 @@ * pl_handler.c - Handler for the PL/pgSQL * procedural language * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_pl_plpgsql_src_pl_reserved_kwlist_d.h b/src/postgres/src_pl_plpgsql_src_pl_reserved_kwlist_d.h index 5051c0a8..94e473e9 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +++ b/src/postgres/src_pl_plpgsql_src_pl_reserved_kwlist_d.h @@ -12,7 +12,7 @@ * pl_reserved_kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES diff --git a/src/postgres/src_pl_plpgsql_src_pl_scanner.c b/src/postgres/src_pl_plpgsql_src_pl_scanner.c index ca623332..29a5c8ea 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_scanner.c +++ b/src/postgres/src_pl_plpgsql_src_pl_scanner.c @@ -38,7 +38,7 @@ * lexical scanning for PL/pgSQL * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h b/src/postgres/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h index 9e88f136..4ff19629 100644 --- a/src/postgres/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +++ b/src/postgres/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h @@ -12,7 +12,7 @@ * pl_unreserved_kwlist_d.h * List of keywords represented as a ScanKeywordList. * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * NOTES @@ -89,6 +89,7 @@ static const char UnreservedPLKeywords_kw_string[] = "pg_exception_context\0" "pg_exception_detail\0" "pg_exception_hint\0" + "pg_routine_oid\0" "print_strict_params\0" "prior\0" "query\0" @@ -174,63 +175,64 @@ static const uint16 UnreservedPLKeywords_kw_offsets[] = { 420, 440, 458, - 478, - 484, - 490, - 496, + 473, + 493, + 499, 505, - 512, - 530, - 538, - 547, - 557, - 565, + 511, + 520, + 527, + 545, + 553, + 562, 572, - 584, - 591, - 597, + 580, + 587, + 599, 606, - 614, - 620, - 631, - 636, - 647, - 660, - 678, + 612, + 621, + 629, + 635, + 646, + 651, + 662, + 675, + 693, }; -#define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 82 +#define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 83 static int UnreservedPLKeywords_hash_func(const void *key, size_t keylen) { - static const int16 h[165] = { - 58, 0, 26, 32767, 0, 0, 9, 32767, - 0, 32767, 37, 74, 32767, -7, 32767, 39, - 58, -5, 32767, 31, 32767, 32767, 75, -23, - 32767, 0, 32767, 32767, 32767, -14, 32767, 81, - 32767, 32767, 32767, -36, -9, 32767, 32767, 32767, - 40, 32767, 54, 10, 11, 43, 32767, 0, - 52, 105, -22, 15, 32767, -33, 49, -65, - 48, 32767, 32767, 32767, 25, 49, -47, 37, - 21, 32767, 32767, -15, 70, 32767, 32767, 64, - -10, 126, 32767, 51, 0, 36, 32767, -55, - -22, 32767, 32767, 32767, 32767, 32767, -26, -35, - 32767, 61, 32767, 32767, 32767, -23, 98, 48, - 23, 19, 32767, 7, 35, 5, -18, 71, - 28, 5, 32767, 32767, 32767, 74, 32767, 82, - 32767, 0, 32767, 32767, 66, 0, 0, 50, - 32767, 32767, 5, 2, 0, 32767, 55, 32767, - 32767, 45, 79, 32767, 32767, 73, 22, 0, - 103, 32767, -20, 72, 32767, 0, 29, 32767, - 0, 32767, 32767, 0, 50, 28, 32767, -40, - 32767, 32767, 34, 56, 32767, 32767, 32767, 17, - -36, 32767, 67, 32767, 0 + static const int16 h[167] = { + 0, -26, 32767, 0, 74, -36, 32767, 32767, + 93, 0, 35, 14, 34, -65, -42, 78, + -22, 8, 10, 0, 5, 32767, 10, 26, + 32767, 4, 32767, 32767, -81, -9, -25, 32767, + -17, 11, 0, -43, 11, 8, 45, 0, + 32767, 32767, 32767, 12, 0, 32767, 32, 32767, + 0, 32767, -18, 64, 32767, -2, 31, 32767, + 50, 80, -75, 32767, 32767, 32767, 0, 32767, + 32767, 0, 54, 82, 32767, 32767, 69, 60, + 43, 32767, 0, 95, 21, 1, 27, 0, + 120, 32767, -46, 32767, -57, 32767, 32767, 55, + 70, 32767, 28, 32767, 0, -14, -38, 32767, + 57, 0, 32767, 19, 98, 0, 32767, 68, + 32767, 32767, 32767, 32767, -26, 13, 27, 35, + 37, 32767, 49, -44, 65, -35, 0, 32767, + 32767, 32767, 30, 0, 0, 32767, 26, 42, + 7, 32767, 72, -43, 32767, 0, 32767, 89, + 36, 48, 32767, 32, 38, 3, 32767, 49, + 32767, 0, 51, 0, 32767, 73, 32767, 32767, + 79, 32767, 30, 32767, 0, 0, 50, 32767, + 0, 32767, 32767, 32767, 0, 32767, 32767 }; const unsigned char *k = (const unsigned char *) key; uint32 a = 0; - uint32 b = 0; + uint32 b = 1; while (keylen--) { @@ -239,7 +241,7 @@ UnreservedPLKeywords_hash_func(const void *key, size_t keylen) a = a * 257 + c; b = b * 8191 + c; } - return h[a % 165] + h[b % 165]; + return h[a % 167] + h[b % 167]; } static const ScanKeywordList UnreservedPLKeywords = { diff --git a/src/postgres/src_port_pg_bitutils.c b/src/postgres/src_port_pg_bitutils.c index 6889b8a7..aa6514ad 100644 --- a/src/postgres/src_port_pg_bitutils.c +++ b/src/postgres/src_port_pg_bitutils.c @@ -10,7 +10,7 @@ * pg_bitutils.c * Miscellaneous functions for bit-wise operations. * - * Copyright (c) 2019-2022, PostgreSQL Global Development Group + * Copyright (c) 2019-2023, PostgreSQL Global Development Group * * IDENTIFICATION * src/port/pg_bitutils.c diff --git a/src/postgres/src_port_pgsleep.c b/src/postgres/src_port_pgsleep.c deleted file mode 100644 index e1e87c16..00000000 --- a/src/postgres/src_port_pgsleep.c +++ /dev/null @@ -1,69 +0,0 @@ -/*-------------------------------------------------------------------- - * Symbols referenced in this file: - * - pg_usleep - *-------------------------------------------------------------------- - */ - -/*------------------------------------------------------------------------- - * - * pgsleep.c - * Portable delay handling. - * - * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group - * - * src/port/pgsleep.c - * - *------------------------------------------------------------------------- - */ -#include "c.h" - -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif - -/* - * In a Windows backend, we don't use this implementation, but rather - * the signal-aware version in src/backend/port/win32/signal.c. - */ -#if defined(FRONTEND) || !defined(WIN32) - -/* - * pg_usleep --- delay the specified number of microseconds. - * - * NOTE: although the delay is specified in microseconds, the effective - * resolution is only 1/HZ, or 10 milliseconds, on most Unixen. Expect - * the requested delay to be rounded up to the next resolution boundary. - * - * On machines where "long" is 32 bits, the maximum delay is ~2000 seconds. - * - * CAUTION: the behavior when a signal arrives during the sleep is platform - * dependent. On most Unix-ish platforms, a signal does not terminate the - * sleep; but on some, it will (the Windows implementation also allows signals - * to terminate pg_usleep). And there are platforms where not only does a - * signal not terminate the sleep, but it actually resets the timeout counter - * so that the sleep effectively starts over! It is therefore rather hazardous - * to use this for long sleeps; a continuing stream of signal events could - * prevent the sleep from ever terminating. Better practice for long sleeps - * is to use WaitLatch() with a timeout. - */ -void -pg_usleep(long microsec) -{ - if (microsec > 0) - { -#ifndef WIN32 - struct timeval delay; - - delay.tv_sec = microsec / 1000000L; - delay.tv_usec = microsec % 1000000L; - (void) select(0, NULL, NULL, NULL, &delay); -#else - SleepEx((microsec < 500 ? 1 : (microsec + 500) / 1000), FALSE); -#endif - } -} - -#endif /* defined(FRONTEND) || !defined(WIN32) */ diff --git a/src/postgres/src_port_pgstrcasecmp.c b/src/postgres/src_port_pgstrcasecmp.c index efa35edd..eb607083 100644 --- a/src/postgres/src_port_pgstrcasecmp.c +++ b/src/postgres/src_port_pgstrcasecmp.c @@ -1,5 +1,6 @@ /*-------------------------------------------------------------------- * Symbols referenced in this file: + * - pg_strcasecmp * - pg_toupper *-------------------------------------------------------------------- */ @@ -24,7 +25,7 @@ * C library thinks the locale is. * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/port/pgstrcasecmp.c * @@ -38,7 +39,34 @@ /* * Case-independent comparison of two null-terminated strings. */ +int +pg_strcasecmp(const char *s1, const char *s2) +{ + for (;;) + { + unsigned char ch1 = (unsigned char) *s1++; + unsigned char ch2 = (unsigned char) *s2++; + + if (ch1 != ch2) + { + if (ch1 >= 'A' && ch1 <= 'Z') + ch1 += 'a' - 'A'; + else if (IS_HIGHBIT_SET(ch1) && isupper(ch1)) + ch1 = tolower(ch1); + if (ch2 >= 'A' && ch2 <= 'Z') + ch2 += 'a' - 'A'; + else if (IS_HIGHBIT_SET(ch2) && isupper(ch2)) + ch2 = tolower(ch2); + + if (ch1 != ch2) + return (int) ch1 - (int) ch2; + } + if (ch1 == 0) + break; + } + return 0; +} /* * Case-independent comparison of two not-necessarily-null-terminated strings. diff --git a/src/postgres/src_port_snprintf.c b/src/postgres/src_port_snprintf.c index 37cb3581..d119ca05 100644 --- a/src/postgres/src_port_snprintf.c +++ b/src/postgres/src_port_snprintf.c @@ -30,7 +30,7 @@ * Copyright (c) 1983, 1995, 1996 Eric P. Allman * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -780,12 +780,8 @@ find_arguments(const char *format, va_list args, int longflag; int fmtpos; int i; - int last_dollar; - PrintfArgType argtypes[PG_NL_ARGMAX + 1]; - - /* Initialize to "no dollar arguments known" */ - last_dollar = 0; - MemSet(argtypes, 0, sizeof(argtypes)); + int last_dollar = 0; /* Init to "no dollar arguments known" */ + PrintfArgType argtypes[PG_NL_ARGMAX + 1] = {0}; /* * This loop must accept the same format strings as the one in dopr(). diff --git a/src/postgres/src_port_strerror.c b/src/postgres/src_port_strerror.c index 45686d38..5ce298f3 100644 --- a/src/postgres/src_port_strerror.c +++ b/src/postgres/src_port_strerror.c @@ -11,7 +11,7 @@ * strerror.c * Replacements for standard strerror() and strerror_r() functions * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/postgres/src_port_strnlen.c b/src/postgres/src_port_strnlen.c index 91e640f4..477436af 100644 --- a/src/postgres/src_port_strnlen.c +++ b/src/postgres/src_port_strnlen.c @@ -10,7 +10,7 @@ * Fallback implementation of strnlen(). * * - * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/test/sql/postgres_regress/advisory_lock.sql b/test/sql/postgres_regress/advisory_lock.sql index 57c47c0f..8513ab8e 100644 --- a/test/sql/postgres_regress/advisory_lock.sql +++ b/test/sql/postgres_regress/advisory_lock.sql @@ -2,6 +2,8 @@ -- ADVISORY LOCKS -- +SELECT oid AS datoid FROM pg_database WHERE datname = current_database() \gset + BEGIN; SELECT @@ -9,14 +11,14 @@ SELECT pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; -- pg_advisory_unlock_all() shouldn't release xact locks SELECT pg_advisory_unlock_all(); -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; -- can't unlock xact locks @@ -28,7 +30,7 @@ SELECT -- automatically release xact locks at commit COMMIT; -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; BEGIN; @@ -39,7 +41,7 @@ SELECT pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; SELECT @@ -49,7 +51,7 @@ SELECT ROLLBACK; SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; @@ -60,7 +62,7 @@ SELECT pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2); -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; BEGIN; @@ -71,7 +73,7 @@ SELECT pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; SELECT @@ -81,14 +83,14 @@ SELECT ROLLBACK; SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; -- releasing all session locks SELECT pg_advisory_unlock_all(); -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; BEGIN; @@ -102,12 +104,12 @@ SELECT pg_advisory_xact_lock_shared(2, 2), pg_advisory_xact_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; COMMIT; -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; -- grabbing session locks multiple times @@ -118,7 +120,7 @@ SELECT pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; SELECT @@ -127,7 +129,7 @@ SELECT pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2); -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; -- .. and releasing them all at once @@ -138,9 +140,9 @@ SELECT pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2); SELECT locktype, classid, objid, objsubid, mode, granted - FROM pg_locks WHERE locktype = 'advisory' + FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid ORDER BY classid, objid, objsubid; SELECT pg_advisory_unlock_all(); -SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; +SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid; diff --git a/test/sql/postgres_regress/aggregates.sql b/test/sql/postgres_regress/aggregates.sql index 2f5d0e00..75c78be6 100644 --- a/test/sql/postgres_regress/aggregates.sql +++ b/test/sql/postgres_regress/aggregates.sql @@ -24,6 +24,11 @@ SELECT avg(four) AS avg_1 FROM onek; SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100; +SELECT any_value(v) FROM (VALUES (1), (2), (3)) AS v (v); +SELECT any_value(v) FROM (VALUES (NULL)) AS v (v); +SELECT any_value(v) FROM (VALUES (NULL), (1), (2)) AS v (v); +SELECT any_value(v) FROM (VALUES (array['hello', 'world'])) AS v (v); + -- In 7.1, avg(float4) is computed using float8 arithmetic. -- Round the result to 3 digits to avoid platform-specific results. @@ -434,6 +439,9 @@ drop table minmaxtest cascade; -- check for correct detection of nested-aggregate errors select max(min(unique1)) from tenk1; select (select max(min(unique1)) from int8_tbl) from tenk1; +select avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3)) + from tenk1 a1(col1))) +from tenk1 a2(col2); -- -- Test removal of redundant GROUP BY columns @@ -492,8 +500,8 @@ drop table p_t1; -- Test GROUP BY matching of join columns that are type-coerced due to USING -- -create temp table t1(f1 int, f2 bigint); -create temp table t2(f1 bigint, f22 bigint); +create temp table t1(f1 int, f2 int); +create temp table t2(f1 bigint, f2 oid); select f1 from t1 left join t2 using (f1) group by f1; select f1 from t1 left join t2 using (f1) group by t1.f1; @@ -501,8 +509,82 @@ select t1.f1 from t1 left join t2 using (f1) group by t1.f1; -- only this one should fail: select t1.f1 from t1 left join t2 using (f1) group by f1; +-- check case where we have to inject nullingrels into coerced join alias +select f1, count(*) from +t1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0) +group by f1; + +-- same, for a RelabelType coercion +select f2, count(*) from +t1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0) +group by f2; + drop table t1, t2; +-- +-- Test planner's selection of pathkeys for ORDER BY aggregates +-- + +-- Ensure we order by four. This suits the most aggregate functions. +explain (costs off) +select sum(two order by two),max(four order by four), min(four order by four) +from tenk1; + +-- Ensure we order by two. It's a tie between ordering by two and four but +-- we tiebreak on the aggregate's position. +explain (costs off) +select + sum(two order by two), max(four order by four), + min(four order by four), max(two order by two) +from tenk1; + +-- Similar to above, but tiebreak on ordering by four +explain (costs off) +select + max(four order by four), sum(two order by two), + min(four order by four), max(two order by two) +from tenk1; + +-- Ensure this one orders by ten since there are 3 aggregates that require ten +-- vs two that suit two and four. +explain (costs off) +select + max(four order by four), sum(two order by two), + min(four order by four), max(two order by two), + sum(ten order by ten), min(ten order by ten), max(ten order by ten) +from tenk1; + +-- Try a case involving a GROUP BY clause where the GROUP BY column is also +-- part of an aggregate's ORDER BY clause. We want a sort order that works +-- for the GROUP BY along with the first and the last aggregate. +explain (costs off) +select + sum(unique1 order by ten, two), sum(unique1 order by four), + sum(unique1 order by two, four) +from tenk1 +group by ten; + +-- Ensure that we never choose to provide presorted input to an Aggref with +-- a volatile function in the ORDER BY / DISTINCT clause. We want to ensure +-- these sorts are performed individually rather than at the query level. +explain (costs off) +select + sum(unique1 order by two), sum(unique1 order by four), + sum(unique1 order by four, two), sum(unique1 order by two, random()), + sum(unique1 order by two, random(), random() + 1) +from tenk1 +group by ten; + +-- Ensure consecutive NULLs are properly treated as distinct from each other +select array_agg(distinct val) +from (select null as val from generate_series(1, 2)); + +-- Ensure no ordering is requested when enable_presorted_aggregate is off +set enable_presorted_aggregate to off; +explain (costs off) +select sum(two order by two) from tenk1; +reset enable_presorted_aggregate; + -- -- Test combinations of DISTINCT and/or ORDER BY -- @@ -657,6 +739,69 @@ select string_agg(v, decode('ee', 'hex')) from bytea_test_table; drop table bytea_test_table; +-- Test parallel string_agg and array_agg +create table pagg_test (x int, y int); +insert into pagg_test +select (case x % 4 when 1 then null else x end), x % 10 +from generate_series(1,5000) x; + +set parallel_setup_cost TO 0; +set parallel_tuple_cost TO 0; +set parallel_leader_participation TO 0; +set min_parallel_table_scan_size = 0; +set bytea_output = 'escape'; +set max_parallel_workers_per_gather = 2; + +-- create a view as we otherwise have to repeat this query a few times. +create view v_pagg_test AS +select + y, + min(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct, + min(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct, + min(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct, + min(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct +from ( + select + y, + unnest(regexp_split_to_array(a1.t, ','))::int AS t, + unnest(regexp_split_to_array(a1.b::text, ',')) AS b, + unnest(a1.a) AS a, + unnest(a1.aa) AS aa + from ( + select + y, + string_agg(x::text, ',') AS t, + string_agg(x::text::bytea, ',') AS b, + array_agg(x) AS a, + array_agg(ARRAY[x]) AS aa + from pagg_test + group by y + ) a1 +) a2 +group by y; + +-- Ensure results are correct. +select * from v_pagg_test order by y; + +-- Ensure parallel aggregation is actually being used. +explain (costs off) select * from v_pagg_test order by y; + +set max_parallel_workers_per_gather = 0; + +-- Ensure results are the same without parallel aggregation. +select * from v_pagg_test order by y; + +-- Clean up +reset max_parallel_workers_per_gather; +reset bytea_output; +reset min_parallel_table_scan_size; +reset parallel_leader_participation; +reset parallel_tuple_cost; +reset parallel_setup_cost; + +drop view v_pagg_test; +drop table pagg_test; + -- FILTER tests select min(unique1) filter (where unique1 > 100) from tenk1; @@ -673,6 +818,8 @@ having exists (select 1 from onek b where sum(distinct a.four) = b.four); select max(foo COLLATE "C") filter (where (bar collate "POSIX") > '0') from (values ('a', 'b')) AS v(foo,bar); +select any_value(v) filter (where v > 2) from (values (1), (2), (3)) as v (v); + -- outer reference in FILTER (PostgreSQL extension) select (select count(*) from (values (1)) t0(inner_c)) @@ -1060,6 +1207,45 @@ SELECT balk(hundred) FROM tenk1; ROLLBACK; +-- test multiple usage of an aggregate whose finalfn returns a R/W datum +BEGIN; + +CREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray +LANGUAGE plpgsql IMMUTABLE AS $$ +BEGIN + RETURN array_fill(y[1], ARRAY[4]); +END; +$$; + +CREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray +LANGUAGE plpgsql STRICT IMMUTABLE AS $$ +DECLARE + res x%TYPE; +BEGIN + -- assignment is essential for this test, it expands the array to R/W + res := array_fill(x[1], ARRAY[4]); + RETURN res; +END; +$$; + +CREATE AGGREGATE rwagg(anyarray) ( + STYPE = anyarray, + SFUNC = rwagg_sfunc, + FINALFUNC = rwagg_finalfunc +); + +CREATE FUNCTION eatarray(x real[]) RETURNS real[] +LANGUAGE plpgsql STRICT IMMUTABLE AS $$ +BEGIN + x[1] := x[1] + 1; + RETURN x; +END; +$$; + +SELECT eatarray(rwagg(ARRAY[1.0::real])), eatarray(rwagg(ARRAY[1.0::real])); + +ROLLBACK; + -- test coverage for aggregate combine/serial/deserial functions BEGIN; diff --git a/test/sql/postgres_regress/alter_table.sql b/test/sql/postgres_regress/alter_table.sql index b83b12dd..58ea20ac 100644 --- a/test/sql/postgres_regress/alter_table.sql +++ b/test/sql/postgres_regress/alter_table.sql @@ -1527,14 +1527,20 @@ alter table recur1 add column f2 int; alter table recur1 alter column f2 type recur2; -- fails -- SET STORAGE may need to add a TOAST table -create table test_storage (a text); +create table test_storage (a text, c text storage plain); +select reltoastrelid <> 0 as has_toast_table + from pg_class where oid = 'test_storage'::regclass; alter table test_storage alter a set storage plain; -alter table test_storage add b int default 0; -- rewrite table to remove its TOAST table -alter table test_storage alter a set storage extended; -- re-add TOAST table - +-- rewrite table to remove its TOAST table; need a non-constant column default +alter table test_storage add b int default random()::int; select reltoastrelid <> 0 as has_toast_table -from pg_class -where oid = 'test_storage'::regclass; + from pg_class where oid = 'test_storage'::regclass; +alter table test_storage alter a set storage default; -- re-add TOAST table +select reltoastrelid <> 0 as has_toast_table + from pg_class where oid = 'test_storage'::regclass; + +-- check STORAGE correctness +create table test_storage_failed (a text, b int storage extended); -- test that SET STORAGE propagates to index correctly create index test_storage_idx on test_storage (b, a); @@ -1629,7 +1635,25 @@ drop view at_view_2; drop view at_view_1; drop table at_base_table; --- check adding a column not iself requiring a rewrite, together with +-- related case (bug #17811) +begin; +create temp table t1 as select * from int8_tbl; +create temp view v1 as select 1::int8 as q1; +create temp view v2 as select * from v1; +create or replace temp view v1 with (security_barrier = true) + as select * from t1; + +create temp table log (q1 int8, q2 int8); +create rule v1_upd_rule as on update to v1 + do also insert into log values (new.*); + +update v2 set q1 = q1 + 1 where q1 = 123; + +select * from t1; +select * from log; +rollback; + +-- check adding a column not itself requiring a rewrite, together with -- a column requiring a default (bug #16038) -- ensure that rewrites aren't silently optimized away, removing the @@ -1959,6 +1983,14 @@ CREATE TYPE test_type1 AS (a int, b text); CREATE TABLE test_tbl1 (x int, y test_type1); ALTER TYPE test_type1 ALTER ATTRIBUTE b TYPE varchar; -- fails +DROP TABLE test_tbl1; +CREATE TABLE test_tbl1 (x int, y text); +CREATE INDEX test_tbl1_idx ON test_tbl1((row(x,y)::test_type1)); +ALTER TYPE test_type1 ALTER ATTRIBUTE b TYPE varchar; -- fails + +DROP TABLE test_tbl1; +DROP TYPE test_type1; + CREATE TYPE test_type2 AS (a int, b text); CREATE TABLE test_tbl2 OF test_type2; CREATE TABLE test_tbl2_subclass () INHERITS (test_tbl2); @@ -1986,7 +2018,8 @@ ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa CASCADE; \d test_tbl2 \d test_tbl2_subclass -DROP TABLE test_tbl2_subclass; +DROP TABLE test_tbl2_subclass, test_tbl2; +DROP TYPE test_type2; CREATE TYPE test_typex AS (a int, b text); CREATE TABLE test_tblx (x int, y test_typex check ((y).a > 0)); @@ -2322,6 +2355,9 @@ ALTER TABLE partitioned ALTER COLUMN a TYPE char(5); ALTER TABLE partitioned DROP COLUMN b; ALTER TABLE partitioned ALTER COLUMN b TYPE char(5); +-- specifying storage parameters for partitioned tables is not supported +ALTER TABLE partitioned SET (fillfactor=100); + -- partitioned table cannot participate in regular inheritance CREATE TABLE nonpartitioned ( a int, diff --git a/test/sql/postgres_regress/arrays.sql b/test/sql/postgres_regress/arrays.sql index 791af5c0..daf805c3 100644 --- a/test/sql/postgres_regress/arrays.sql +++ b/test/sql/postgres_regress/arrays.sql @@ -113,6 +113,12 @@ SELECT a FROM arrtest WHERE a[2] IS NULL; DELETE FROM arrtest WHERE a[2] IS NULL AND b IS NULL; SELECT a,b,c FROM arrtest; +-- test non-error-throwing API +SELECT pg_input_is_valid('{1,2,3}', 'integer[]'); +SELECT pg_input_is_valid('{1,2', 'integer[]'); +SELECT pg_input_is_valid('{1,zed}', 'integer[]'); +SELECT * FROM pg_input_error_info('{1,zed}', 'integer[]'); + -- test mixed slice/scalar subscripting select '{{1,2,3},{4,5,6},{7,8,9}}'::int[]; select ('{{1,2,3},{4,5,6},{7,8,9}}'::int[])[1:2][2]; @@ -432,6 +438,25 @@ insert into arr_pk_tbl(pk, f1[1:2]) values (1, '{6,7,8}') on conflict (pk) reset enable_seqscan; reset enable_bitmapscan; +-- test subscript overflow detection + +-- The normal error message includes a platform-dependent limit, +-- so suppress it to avoid needing multiple expected-files. +\set VERBOSITY sqlstate + +insert into arr_pk_tbl values(10, '[-2147483648:-2147483647]={1,2}'); +update arr_pk_tbl set f1[2147483647] = 42 where pk = 10; +update arr_pk_tbl set f1[2147483646:2147483647] = array[4,2] where pk = 10; + +-- also exercise the expanded-array case +do $$ declare a int[]; +begin + a := '[-2147483648:-2147483647]={1,2}'::int[]; + a[2147483647] := 42; +end $$; + +\set VERBOSITY default + -- test [not] (like|ilike) (any|all) (...) select 'foo' like any (array['%a', '%o']); -- t select 'foo' like any (array['%a', '%b']); -- f @@ -671,12 +696,12 @@ insert into src create type textandtext as (c1 text, c2 text); create temp table dest (f1 textandtext[]); insert into dest select array[row(f1,f1)::textandtext] from src; -select length(md5((f1[1]).c2)) from dest; +select length(fipshash((f1[1]).c2)) from dest; delete from src; -select length(md5((f1[1]).c2)) from dest; +select length(fipshash((f1[1]).c2)) from dest; truncate table src; drop table src; -select length(md5((f1[1]).c2)) from dest; +select length(fipshash((f1[1]).c2)) from dest; drop table dest; drop type textandtext; @@ -755,3 +780,17 @@ FROM SELECT trim_array(ARRAY[1, 2, 3], -1); -- fail SELECT trim_array(ARRAY[1, 2, 3], 10); -- fail SELECT trim_array(ARRAY[]::int[], 1); -- fail + +-- array_shuffle +SELECT array_shuffle('{1,2,3,4,5,6}'::int[]) <@ '{1,2,3,4,5,6}'; +SELECT array_shuffle('{1,2,3,4,5,6}'::int[]) @> '{1,2,3,4,5,6}'; +SELECT array_dims(array_shuffle('[-1:2][2:3]={{1,2},{3,NULL},{5,6},{7,8}}'::int[])); +SELECT array_dims(array_shuffle('{{{1,2},{3,NULL}},{{5,6},{7,8}},{{9,10},{11,12}}}'::int[])); + +-- array_sample +SELECT array_sample('{1,2,3,4,5,6}'::int[], 3) <@ '{1,2,3,4,5,6}'; +SELECT array_length(array_sample('{1,2,3,4,5,6}'::int[], 3), 1); +SELECT array_dims(array_sample('[-1:2][2:3]={{1,2},{3,NULL},{5,6},{7,8}}'::int[], 3)); +SELECT array_dims(array_sample('{{{1,2},{3,NULL}},{{5,6},{7,8}},{{9,10},{11,12}}}'::int[], 2)); +SELECT array_sample('{1,2,3,4,5,6}'::int[], -1); -- fail +SELECT array_sample('{1,2,3,4,5,6}'::int[], 7); --fail diff --git a/test/sql/postgres_regress/bit.sql b/test/sql/postgres_regress/bit.sql index 0a424e79..2cd550d2 100644 --- a/test/sql/postgres_regress/bit.sql +++ b/test/sql/postgres_regress/bit.sql @@ -229,3 +229,16 @@ CREATE TABLE bit_defaults( \d bit_defaults INSERT INTO bit_defaults DEFAULT VALUES; TABLE bit_defaults; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('01010001', 'bit(10)'); +SELECT * FROM pg_input_error_info('01010001', 'bit(10)'); +SELECT pg_input_is_valid('01010Z01', 'bit(8)'); +SELECT * FROM pg_input_error_info('01010Z01', 'bit(8)'); +SELECT pg_input_is_valid('x01010Z01', 'bit(32)'); +SELECT * FROM pg_input_error_info('x01010Z01', 'bit(32)'); + +SELECT pg_input_is_valid('01010Z01', 'varbit'); +SELECT * FROM pg_input_error_info('01010Z01', 'varbit'); +SELECT pg_input_is_valid('x01010Z01', 'varbit'); +SELECT * FROM pg_input_error_info('x01010Z01', 'varbit'); diff --git a/test/sql/postgres_regress/boolean.sql b/test/sql/postgres_regress/boolean.sql index 4dd47aaf..bc9937d6 100644 --- a/test/sql/postgres_regress/boolean.sql +++ b/test/sql/postgres_regress/boolean.sql @@ -62,6 +62,11 @@ SELECT bool '000' AS error; SELECT bool '' AS error; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('true', 'bool'); +SELECT pg_input_is_valid('asdf', 'bool'); +SELECT * FROM pg_input_error_info('junk', 'bool'); + -- and, or, not in qualifications SELECT bool 't' or bool 'f' AS true; diff --git a/test/sql/postgres_regress/box.sql b/test/sql/postgres_regress/box.sql index ceae58fc..2d0868e8 100644 --- a/test/sql/postgres_regress/box.sql +++ b/test/sql/postgres_regress/box.sql @@ -281,3 +281,9 @@ WHERE seq.id IS NULL OR idx.id IS NULL; RESET enable_seqscan; RESET enable_indexscan; RESET enable_bitmapscan; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('200', 'box'); +SELECT * FROM pg_input_error_info('200', 'box'); +SELECT pg_input_is_valid('((200,300),(500, xyz))', 'box'); +SELECT * FROM pg_input_error_info('((200,300),(500, xyz))', 'box'); diff --git a/test/sql/postgres_regress/brin.sql b/test/sql/postgres_regress/brin.sql index e68e9e18..929a087a 100644 --- a/test/sql/postgres_regress/brin.sql +++ b/test/sql/postgres_regress/brin.sql @@ -476,7 +476,7 @@ CREATE TABLE brintest_3 (a text, b text, c text, d text); -- long random strings (~2000 chars each, so ~6kB for min/max on two -- columns) to trigger toasting -WITH rand_value AS (SELECT string_agg(md5(i::text),'') AS val FROM generate_series(1,60) s(i)) +WITH rand_value AS (SELECT string_agg(fipshash(i::text),'') AS val FROM generate_series(1,60) s(i)) INSERT INTO brintest_3 SELECT val, val, val, val FROM rand_value; @@ -495,7 +495,7 @@ VACUUM brintest_3; -- retry insert with a different random-looking (but deterministic) value -- the value is different, and so should replace either min or max in the -- brin summary -WITH rand_value AS (SELECT string_agg(md5((-i)::text),'') AS val FROM generate_series(1,60) s(i)) +WITH rand_value AS (SELECT string_agg(fipshash((-i)::text),'') AS val FROM generate_series(1,60) s(i)) INSERT INTO brintest_3 SELECT val, val, val, val FROM rand_value; diff --git a/test/sql/postgres_regress/brin_multi.sql b/test/sql/postgres_regress/brin_multi.sql index 2189b6cc..81a4b959 100644 --- a/test/sql/postgres_regress/brin_multi.sql +++ b/test/sql/postgres_regress/brin_multi.sql @@ -30,7 +30,7 @@ INSERT INTO brintest_multi SELECT (four + 1.0)/(hundred+1), odd::float8 / (tenthous + 1), format('%s:00:%s:00:%s:00', to_hex(odd), to_hex(even), to_hex(hundred))::macaddr, - substr(md5(unique1::text), 1, 16)::macaddr8, + substr(fipshash(unique1::text), 1, 16)::macaddr8, inet '10.2.3.4/24' + tenthous, cidr '10.2.3/24' + tenthous, date '1995-08-15' + tenthous, @@ -183,7 +183,7 @@ INSERT INTO brinopers_multi VALUES ('macaddr8col', 'macaddr8', '{>, >=, =, <=, <}', '{b1:d1:0e:7b:af:a4:42:12, d9:35:91:bd:f7:86:0e:1e, 72:8f:20:6c:2a:01:bf:57, 23:e8:46:63:86:07:ad:cb, 13:16:8e:6a:2e:6c:84:b4}', - '{33, 15, 1, 13, 6}'), + '{31, 17, 1, 11, 4}'), ('inetcol', 'inet', '{=, <, <=, >, >=}', '{10.2.14.231/24, 255.255.255.255, 255.255.255.255, 0.0.0.0, 0.0.0.0}', @@ -334,7 +334,7 @@ INSERT INTO brintest_multi SELECT (four + 1.0)/(hundred+1), odd::float8 / (tenthous + 1), format('%s:00:%s:00:%s:00', to_hex(odd), to_hex(even), to_hex(hundred))::macaddr, - substr(md5(unique1::text), 1, 16)::macaddr8, + substr(fipshash(unique1::text), 1, 16)::macaddr8, inet '10.2.3.4' + tenthous, cidr '10.2.3/24' + tenthous, date '1995-08-15' + tenthous, @@ -357,6 +357,13 @@ insert into public.brintest_multi (float8col) values (real 'nan'); UPDATE brintest_multi SET int8col = int8col * int4col; +-- Test handling of inet netmasks with inet_minmax_multi_ops +CREATE TABLE brin_test_inet (a inet); +CREATE INDEX ON brin_test_inet USING brin (a inet_minmax_multi_ops); +INSERT INTO brin_test_inet VALUES ('127.0.0.1/0'); +INSERT INTO brin_test_inet VALUES ('0.0.0.0/12'); +DROP TABLE brin_test_inet; + -- Tests for brin_summarize_new_values SELECT brin_summarize_new_values('brintest_multi'); -- error, not an index SELECT brin_summarize_new_values('tenk1_unique1'); -- error, not a BRIN index @@ -414,3 +421,102 @@ VACUUM ANALYZE brin_test_multi; EXPLAIN (COSTS OFF) SELECT * FROM brin_test_multi WHERE a = 1; -- Ensure brin index is not used when values are not correlated EXPLAIN (COSTS OFF) SELECT * FROM brin_test_multi WHERE b = 1; + +-- test overflows during CREATE INDEX with extreme timestamp values +CREATE TABLE brin_timestamp_test(a TIMESTAMPTZ); + +SET datestyle TO iso; + +-- values close to timetamp minimum +INSERT INTO brin_timestamp_test +SELECT '4713-01-01 00:00:01 BC'::timestamptz + (i || ' seconds')::interval + FROM generate_series(1,30) s(i); + +-- values close to timetamp maximum +INSERT INTO brin_timestamp_test +SELECT '294276-12-01 00:00:01'::timestamptz + (i || ' seconds')::interval + FROM generate_series(1,30) s(i); + +CREATE INDEX ON brin_timestamp_test USING brin (a timestamptz_minmax_multi_ops) WITH (pages_per_range=1); +DROP TABLE brin_timestamp_test; + +-- test overflows during CREATE INDEX with extreme date values +CREATE TABLE brin_date_test(a DATE); + +-- insert values close to date minimum +INSERT INTO brin_date_test SELECT '4713-01-01 BC'::date + i FROM generate_series(1, 30) s(i); + +-- insert values close to date minimum +INSERT INTO brin_date_test SELECT '5874897-12-01'::date + i FROM generate_series(1, 30) s(i); + +CREATE INDEX ON brin_date_test USING brin (a date_minmax_multi_ops) WITH (pages_per_range=1); + +SET enable_seqscan = off; + +-- make sure the ranges were built correctly and 2023-01-01 eliminates all +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_date_test WHERE a = '2023-01-01'::date; + +DROP TABLE brin_date_test; +RESET enable_seqscan; + +-- test handling of infinite timestamp values +CREATE TABLE brin_timestamp_test(a TIMESTAMP); + +INSERT INTO brin_timestamp_test VALUES ('-infinity'), ('infinity'); +INSERT INTO brin_timestamp_test +SELECT i FROM generate_series('2000-01-01'::timestamp, '2000-02-09'::timestamp, '1 day'::interval) s(i); + +CREATE INDEX ON brin_timestamp_test USING brin (a timestamp_minmax_multi_ops) WITH (pages_per_range=1); + +SET enable_seqscan = off; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_timestamp_test WHERE a = '2023-01-01'::timestamp; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_timestamp_test WHERE a = '1900-01-01'::timestamp; + +DROP TABLE brin_timestamp_test; +RESET enable_seqscan; + +-- test handling of infinite date values +CREATE TABLE brin_date_test(a DATE); + +INSERT INTO brin_date_test VALUES ('-infinity'), ('infinity'); +INSERT INTO brin_date_test SELECT '2000-01-01'::date + i FROM generate_series(1, 40) s(i); + +CREATE INDEX ON brin_date_test USING brin (a date_minmax_multi_ops) WITH (pages_per_range=1); + +SET enable_seqscan = off; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_date_test WHERE a = '2023-01-01'::date; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_date_test WHERE a = '1900-01-01'::date; + +DROP TABLE brin_date_test; +RESET enable_seqscan; +RESET datestyle; + +-- test handling of overflow for interval values +CREATE TABLE brin_interval_test(a INTERVAL); + +INSERT INTO brin_interval_test SELECT (i || ' years')::interval FROM generate_series(-178000000, -177999980) s(i); + +INSERT INTO brin_interval_test SELECT (i || ' years')::interval FROM generate_series( 177999980, 178000000) s(i); + +CREATE INDEX ON brin_interval_test USING brin (a interval_minmax_multi_ops) WITH (pages_per_range=1); + +SET enable_seqscan = off; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_interval_test WHERE a = '-30 years'::interval; + +EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) +SELECT * FROM brin_interval_test WHERE a = '30 years'::interval; + +DROP TABLE brin_interval_test; +RESET enable_seqscan; +RESET datestyle; diff --git a/test/sql/postgres_regress/char.sql b/test/sql/postgres_regress/char.sql index 120fed53..fdda9d19 100644 --- a/test/sql/postgres_regress/char.sql +++ b/test/sql/postgres_regress/char.sql @@ -72,6 +72,11 @@ INSERT INTO CHAR_TBL (f1) VALUES ('abcde'); SELECT * FROM CHAR_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('abcd ', 'char(4)'); +SELECT pg_input_is_valid('abcde', 'char(4)'); +SELECT * FROM pg_input_error_info('abcde', 'char(4)'); + -- -- Also test "char", which is an ad-hoc one-byte type. It can only -- really store ASCII characters, but we allow high-bit-set characters diff --git a/test/sql/postgres_regress/collate.icu.utf8.sql b/test/sql/postgres_regress/collate.icu.utf8.sql index b0ddc7db..3db9e259 100644 --- a/test/sql/postgres_regress/collate.icu.utf8.sql +++ b/test/sql/postgres_regress/collate.icu.utf8.sql @@ -4,7 +4,7 @@ /* skip test if not UTF8 server encoding or no ICU collations installed */ SELECT getdatabaseencoding() <> 'UTF8' OR - (SELECT count(*) FROM pg_collation WHERE collprovider = 'i') = 0 + (SELECT count(*) FROM pg_collation WHERE collprovider = 'i' AND collname <> 'unicode') = 0 AS skip_test \gset \if :skip_test \quit @@ -357,21 +357,33 @@ CREATE ROLE regress_test_role; CREATE SCHEMA test_schema; -- We need to do this this way to cope with varying names for encodings: +SET client_min_messages TO WARNING; +SET icu_validation_level = disabled; + do $$ BEGIN EXECUTE 'CREATE COLLATION test0 (provider = icu, locale = ' || - quote_literal(current_setting('lc_collate')) || ');'; + quote_literal((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) || ');'; END $$; CREATE COLLATION test0 FROM "C"; -- fail, duplicate name do $$ BEGIN EXECUTE 'CREATE COLLATION test1 (provider = icu, locale = ' || - quote_literal(current_setting('lc_collate')) || ');'; + quote_literal((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) || ');'; END $$; + +RESET icu_validation_level; +RESET client_min_messages; + CREATE COLLATION test3 (provider = icu, lc_collate = 'en_US.utf8'); -- fail, needs "locale" -CREATE COLLATION testx (provider = icu, locale = 'nonsense'); /* never fails with ICU */ DROP COLLATION testx; +SET icu_validation_level = ERROR; +CREATE COLLATION testx (provider = icu, locale = 'nonsense-nowhere'); -- fails +CREATE COLLATION testx (provider = icu, locale = '@colStrength=primary;nonsense=yes'); -- fails +RESET icu_validation_level; +CREATE COLLATION testx (provider = icu, locale = '@colStrength=primary;nonsense=yes'); DROP COLLATION testx; +CREATE COLLATION testx (provider = icu, locale = 'nonsense-nowhere'); DROP COLLATION testx; CREATE COLLATION test4 FROM nonsense; CREATE COLLATION test5 FROM test0; @@ -444,14 +456,24 @@ drop type textrange_c; drop type textrange_en_us; +-- standard collations + +SELECT * FROM collate_test2 ORDER BY b COLLATE UCS_BASIC; +SELECT * FROM collate_test2 ORDER BY b COLLATE UNICODE; + + -- test ICU collation customization -- test the attributes handled by icu_set_collation_attributes() +SET client_min_messages=WARNING; CREATE COLLATION testcoll_ignore_accents (provider = icu, locale = '@colStrength=primary;colCaseLevel=yes'); +RESET client_min_messages; SELECT 'aaá' > 'AAA' COLLATE "und-x-icu", 'aaá' < 'AAA' COLLATE testcoll_ignore_accents; +SET client_min_messages=WARNING; CREATE COLLATION testcoll_backwards (provider = icu, locale = '@colBackwards=yes'); +RESET client_min_messages; SELECT 'coté' < 'côte' COLLATE "und-x-icu", 'coté' > 'côte' COLLATE testcoll_backwards; CREATE COLLATION testcoll_lower_first (provider = icu, locale = '@colCaseFirst=lower'); @@ -461,7 +483,9 @@ SELECT 'aaa' < 'AAA' COLLATE testcoll_lower_first, 'aaa' > 'AAA' COLLATE testcol CREATE COLLATION testcoll_shifted (provider = icu, locale = '@colAlternate=shifted'); SELECT 'de-luge' < 'deanza' COLLATE "und-x-icu", 'de-luge' > 'deanza' COLLATE testcoll_shifted; +SET client_min_messages=WARNING; CREATE COLLATION testcoll_numeric (provider = icu, locale = '@colNumeric=yes'); +RESET client_min_messages; SELECT 'A-21' > 'A-123' COLLATE "und-x-icu", 'A-21' < 'A-123' COLLATE testcoll_numeric; CREATE COLLATION testcoll_error1 (provider = icu, locale = '@colNumeric=lower'); @@ -472,6 +496,19 @@ CREATE COLLATION testcoll_de_phonebook (provider = icu, locale = 'de@collation=p SELECT 'Goldmann' < 'Götz' COLLATE "de-x-icu", 'Goldmann' > 'Götz' COLLATE testcoll_de_phonebook; +-- rules + +CREATE COLLATION testcoll_rules1 (provider = icu, locale = '', rules = '&a < g'); +CREATE TABLE test7 (a text); +-- example from https://unicode-org.github.io/icu/userguide/collation/customization/#syntax +INSERT INTO test7 VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green'); +SELECT * FROM test7 ORDER BY a COLLATE "en-x-icu"; +SELECT * FROM test7 ORDER BY a COLLATE testcoll_rules1; +DROP TABLE test7; + +CREATE COLLATION testcoll_rulesx (provider = icu, locale = '', rules = '!!wrong!!'); + + -- nondeterministic collations CREATE COLLATION ctest_det (provider = icu, locale = '', deterministic = true); @@ -499,6 +536,12 @@ CREATE COLLATION case_insensitive (provider = icu, locale = '@colStrength=second SELECT 'abc' <= 'ABC' COLLATE case_sensitive, 'abc' >= 'ABC' COLLATE case_sensitive; SELECT 'abc' <= 'ABC' COLLATE case_insensitive, 'abc' >= 'ABC' COLLATE case_insensitive; +-- test language tags +CREATE COLLATION lt_insensitive (provider = icu, locale = 'en-u-ks-level1', deterministic = false); +SELECT 'aBcD' COLLATE lt_insensitive = 'AbCd' COLLATE lt_insensitive; +CREATE COLLATION lt_upperfirst (provider = icu, locale = 'und-u-kf-upper'); +SELECT 'Z' COLLATE lt_upperfirst < 'z' COLLATE lt_upperfirst; + CREATE TABLE test1cs (x text COLLATE case_sensitive); CREATE TABLE test2cs (x text COLLATE case_sensitive); CREATE TABLE test3cs (x text COLLATE case_sensitive); @@ -631,7 +674,9 @@ INSERT INTO inner_text VALUES ('a', NULL); SELECT * FROM outer_text WHERE (f1, f2) NOT IN (SELECT * FROM inner_text); -- accents +SET client_min_messages=WARNING; CREATE COLLATION ignore_accents (provider = icu, locale = '@colStrength=primary;colCaseLevel=yes', deterministic = false); +RESET client_min_messages; CREATE TABLE test4 (a int, b text); INSERT INTO test4 VALUES (1, 'cote'), (2, 'côte'), (3, 'coté'), (4, 'côté'); diff --git a/test/sql/postgres_regress/collate.linux.utf8.sql b/test/sql/postgres_regress/collate.linux.utf8.sql index 0f6dd1b0..132d13af 100644 --- a/test/sql/postgres_regress/collate.linux.utf8.sql +++ b/test/sql/postgres_regress/collate.linux.utf8.sql @@ -359,7 +359,7 @@ CREATE SCHEMA test_schema; do $$ BEGIN EXECUTE 'CREATE COLLATION test0 (locale = ' || - quote_literal(current_setting('lc_collate')) || ');'; + quote_literal((SELECT datcollate FROM pg_database WHERE datname = current_database())) || ');'; END $$; CREATE COLLATION test0 FROM "C"; -- fail, duplicate name @@ -368,9 +368,9 @@ CREATE COLLATION IF NOT EXISTS test0 (locale = 'foo'); -- ok, skipped do $$ BEGIN EXECUTE 'CREATE COLLATION test1 (lc_collate = ' || - quote_literal(current_setting('lc_collate')) || + quote_literal((SELECT datcollate FROM pg_database WHERE datname = current_database())) || ', lc_ctype = ' || - quote_literal(current_setting('lc_ctype')) || ');'; + quote_literal((SELECT datctype FROM pg_database WHERE datname = current_database())) || ');'; END $$; CREATE COLLATION test3 (lc_collate = 'en_US.utf8'); -- fail, need lc_ctype @@ -447,6 +447,11 @@ drop type textrange_c; drop type textrange_en_us; +-- standard collations + +SELECT * FROM collate_test2 ORDER BY b COLLATE UCS_BASIC; + + -- nondeterministic collations -- (not supported with libc provider) diff --git a/test/sql/postgres_regress/collate.windows.win1252.sql b/test/sql/postgres_regress/collate.windows.win1252.sql new file mode 100644 index 00000000..353d769a --- /dev/null +++ b/test/sql/postgres_regress/collate.windows.win1252.sql @@ -0,0 +1,410 @@ +/* + * This test is meant to run on Windows systems that has successfully + * run pg_import_system_collations(). Also, the database must have + * WIN1252 encoding, because of the locales' own encodings. Because + * of this, some test are lost from UTF-8 version, such as Turkish + * dotted and undotted 'i'. + */ +SELECT getdatabaseencoding() <> 'WIN1252' OR + (SELECT count(*) FROM pg_collation WHERE collname IN ('de_DE', 'en_US', 'sv_SE') AND collencoding = pg_char_to_encoding('WIN1252')) <> 3 OR + (version() !~ 'Visual C\+\+' AND version() !~ 'mingw32' AND version() !~ 'windows') + AS skip_test \gset +\if :skip_test +\quit +\endif + +SET client_encoding TO WIN1252; + +CREATE SCHEMA collate_tests; +SET search_path = collate_tests; + + +CREATE TABLE collate_test1 ( + a int, + b text COLLATE "en_US" NOT NULL +); + +\d collate_test1 + +CREATE TABLE collate_test_fail ( + a int, + b text COLLATE "ja_JP.eucjp" +); + +CREATE TABLE collate_test_fail ( + a int, + b text COLLATE "foo" +); + +CREATE TABLE collate_test_fail ( + a int COLLATE "en_US", + b text +); + +CREATE TABLE collate_test_like ( + LIKE collate_test1 +); + +\d collate_test_like + +CREATE TABLE collate_test2 ( + a int, + b text COLLATE "sv_SE" +); + +CREATE TABLE collate_test3 ( + a int, + b text COLLATE "C" +); + +INSERT INTO collate_test1 VALUES (1, 'abc'), (2, 'äbc'), (3, 'bbc'), (4, 'ABC'); +INSERT INTO collate_test2 SELECT * FROM collate_test1; +INSERT INTO collate_test3 SELECT * FROM collate_test1; + +SELECT * FROM collate_test1 WHERE b >= 'bbc'; +SELECT * FROM collate_test2 WHERE b >= 'bbc'; +SELECT * FROM collate_test3 WHERE b >= 'bbc'; +SELECT * FROM collate_test3 WHERE b >= 'BBC'; + +SELECT * FROM collate_test1 WHERE b COLLATE "C" >= 'bbc'; +SELECT * FROM collate_test1 WHERE b >= 'bbc' COLLATE "C"; +SELECT * FROM collate_test1 WHERE b COLLATE "C" >= 'bbc' COLLATE "C"; +SELECT * FROM collate_test1 WHERE b COLLATE "C" >= 'bbc' COLLATE "en_US"; + + +CREATE DOMAIN testdomain_sv AS text COLLATE "sv_SE"; +CREATE DOMAIN testdomain_i AS int COLLATE "sv_SE"; -- fails +CREATE TABLE collate_test4 ( + a int, + b testdomain_sv +); +INSERT INTO collate_test4 SELECT * FROM collate_test1; +SELECT a, b FROM collate_test4 ORDER BY b; + +CREATE TABLE collate_test5 ( + a int, + b testdomain_sv COLLATE "en_US" +); +INSERT INTO collate_test5 SELECT * FROM collate_test1; +SELECT a, b FROM collate_test5 ORDER BY b; + + +SELECT a, b FROM collate_test1 ORDER BY b; +SELECT a, b FROM collate_test2 ORDER BY b; +SELECT a, b FROM collate_test3 ORDER BY b; + +SELECT a, b FROM collate_test1 ORDER BY b COLLATE "C"; + +-- star expansion +SELECT * FROM collate_test1 ORDER BY b; +SELECT * FROM collate_test2 ORDER BY b; +SELECT * FROM collate_test3 ORDER BY b; + +-- constant expression folding +SELECT 'bbc' COLLATE "en_US" > 'äbc' COLLATE "en_US" AS "true"; +SELECT 'bbc' COLLATE "sv_SE" > 'äbc' COLLATE "sv_SE" AS "false"; + +-- LIKE/ILIKE + +SELECT * FROM collate_test1 WHERE b LIKE 'abc'; +SELECT * FROM collate_test1 WHERE b LIKE 'abc%'; +SELECT * FROM collate_test1 WHERE b LIKE '%bc%'; +SELECT * FROM collate_test1 WHERE b ILIKE 'abc'; +SELECT * FROM collate_test1 WHERE b ILIKE 'abc%'; +SELECT * FROM collate_test1 WHERE b ILIKE '%bc%'; + + +-- The following actually exercises the selectivity estimation for ILIKE. +SELECT relname FROM pg_class WHERE relname ILIKE 'abc%'; + +-- regular expressions + +SELECT * FROM collate_test1 WHERE b ~ '^abc$'; +SELECT * FROM collate_test1 WHERE b ~ '^abc'; +SELECT * FROM collate_test1 WHERE b ~ 'bc'; +SELECT * FROM collate_test1 WHERE b ~* '^abc$'; +SELECT * FROM collate_test1 WHERE b ~* '^abc'; +SELECT * FROM collate_test1 WHERE b ~* 'bc'; + +CREATE TABLE collate_test6 ( + a int, + b text COLLATE "en_US" +); +INSERT INTO collate_test6 VALUES (1, 'abc'), (2, 'ABC'), (3, '123'), (4, 'ab1'), + (5, 'a1!'), (6, 'a c'), (7, '!.;'), (8, ' '), + (9, 'äbç'), (10, 'ÄBÇ'); +SELECT b, + b ~ '^[[:alpha:]]+$' AS is_alpha, + b ~ '^[[:upper:]]+$' AS is_upper, + b ~ '^[[:lower:]]+$' AS is_lower, + b ~ '^[[:digit:]]+$' AS is_digit, + b ~ '^[[:alnum:]]+$' AS is_alnum, + b ~ '^[[:graph:]]+$' AS is_graph, + b ~ '^[[:print:]]+$' AS is_print, + b ~ '^[[:punct:]]+$' AS is_punct, + b ~ '^[[:space:]]+$' AS is_space +FROM collate_test6; + + +-- The following actually exercises the selectivity estimation for ~*. +SELECT relname FROM pg_class WHERE relname ~* '^abc'; + + +-- backwards parsing + +CREATE VIEW collview1 AS SELECT * FROM collate_test1 WHERE b COLLATE "C" >= 'bbc'; +CREATE VIEW collview2 AS SELECT a, b FROM collate_test1 ORDER BY b COLLATE "C"; + +SELECT table_name, view_definition FROM information_schema.views + WHERE table_name LIKE 'collview%' ORDER BY 1; + + +-- collation propagation in various expression types + +SELECT a, coalesce(b, 'foo') FROM collate_test1 ORDER BY 2; +SELECT a, coalesce(b, 'foo') FROM collate_test2 ORDER BY 2; +SELECT a, coalesce(b, 'foo') FROM collate_test3 ORDER BY 2; + +SELECT a, b, greatest(b, 'CCC') FROM collate_test1 ORDER BY 3; +SELECT a, b, greatest(b, 'CCC') FROM collate_test2 ORDER BY 3; +SELECT a, b, greatest(b, 'CCC') FROM collate_test3 ORDER BY 3; + +SELECT a, nullif(b, 'abc') FROM collate_test1 ORDER BY 2; +SELECT a, nullif(b, 'abc') FROM collate_test2 ORDER BY 2; +SELECT a, nullif(b, 'abc') FROM collate_test3 ORDER BY 2; + +SELECT a, CASE b WHEN 'abc' THEN 'abcd' ELSE b END FROM collate_test1 ORDER BY 2; +SELECT a, CASE b WHEN 'abc' THEN 'abcd' ELSE b END FROM collate_test2 ORDER BY 2; +SELECT a, CASE b WHEN 'abc' THEN 'abcd' ELSE b END FROM collate_test3 ORDER BY 2; + +CREATE DOMAIN testdomain AS text; +SELECT a, b::testdomain FROM collate_test1 ORDER BY 2; +SELECT a, b::testdomain FROM collate_test2 ORDER BY 2; +SELECT a, b::testdomain FROM collate_test3 ORDER BY 2; +SELECT a, b::testdomain_sv FROM collate_test3 ORDER BY 2; + +SELECT min(b), max(b) FROM collate_test1; +SELECT min(b), max(b) FROM collate_test2; +SELECT min(b), max(b) FROM collate_test3; + +SELECT array_agg(b ORDER BY b) FROM collate_test1; +SELECT array_agg(b ORDER BY b) FROM collate_test2; +SELECT array_agg(b ORDER BY b) FROM collate_test3; + +SELECT a, b FROM collate_test1 UNION ALL SELECT a, b FROM collate_test1 ORDER BY 2; +SELECT a, b FROM collate_test2 UNION SELECT a, b FROM collate_test2 ORDER BY 2; +SELECT a, b FROM collate_test3 WHERE a < 4 INTERSECT SELECT a, b FROM collate_test3 WHERE a > 1 ORDER BY 2; +SELECT a, b FROM collate_test3 EXCEPT SELECT a, b FROM collate_test3 WHERE a < 2 ORDER BY 2; + +SELECT a, b FROM collate_test1 UNION ALL SELECT a, b FROM collate_test3 ORDER BY 2; -- fail +SELECT a, b FROM collate_test1 UNION ALL SELECT a, b FROM collate_test3; -- ok +SELECT a, b FROM collate_test1 UNION SELECT a, b FROM collate_test3 ORDER BY 2; -- fail +SELECT a, b COLLATE "C" FROM collate_test1 UNION SELECT a, b FROM collate_test3 ORDER BY 2; -- ok +SELECT a, b FROM collate_test1 INTERSECT SELECT a, b FROM collate_test3 ORDER BY 2; -- fail +SELECT a, b FROM collate_test1 EXCEPT SELECT a, b FROM collate_test3 ORDER BY 2; -- fail + +CREATE TABLE test_u AS SELECT a, b FROM collate_test1 UNION ALL SELECT a, b FROM collate_test3; -- fail + +-- collation mismatch between recursive and non-recursive term +WITH RECURSIVE foo(x) AS + (SELECT x FROM (VALUES('a' COLLATE "en_US"),('b')) t(x) + UNION ALL + SELECT (x || 'c') COLLATE "de_DE" FROM foo WHERE length(x) < 10) +SELECT * FROM foo; + + +-- casting + +SELECT CAST('42' AS text COLLATE "C"); + +SELECT a, CAST(b AS varchar) FROM collate_test1 ORDER BY 2; +SELECT a, CAST(b AS varchar) FROM collate_test2 ORDER BY 2; +SELECT a, CAST(b AS varchar) FROM collate_test3 ORDER BY 2; + + +-- propagation of collation in SQL functions (inlined and non-inlined cases) +-- and plpgsql functions too + +CREATE FUNCTION mylt (text, text) RETURNS boolean LANGUAGE sql + AS $$ select $1 < $2 $$; + +CREATE FUNCTION mylt_noninline (text, text) RETURNS boolean LANGUAGE sql + AS $$ select $1 < $2 limit 1 $$; + +CREATE FUNCTION mylt_plpgsql (text, text) RETURNS boolean LANGUAGE plpgsql + AS $$ begin return $1 < $2; end $$; + +SELECT a.b AS a, b.b AS b, a.b < b.b AS lt, + mylt(a.b, b.b), mylt_noninline(a.b, b.b), mylt_plpgsql(a.b, b.b) +FROM collate_test1 a, collate_test1 b +ORDER BY a.b, b.b; + +SELECT a.b AS a, b.b AS b, a.b < b.b COLLATE "C" AS lt, + mylt(a.b, b.b COLLATE "C"), mylt_noninline(a.b, b.b COLLATE "C"), + mylt_plpgsql(a.b, b.b COLLATE "C") +FROM collate_test1 a, collate_test1 b +ORDER BY a.b, b.b; + + +-- collation override in plpgsql + +CREATE FUNCTION mylt2 (x text, y text) RETURNS boolean LANGUAGE plpgsql AS $$ +declare + xx text := x; + yy text := y; +begin + return xx < yy; +end +$$; + +SELECT mylt2('a', 'B' collate "en_US") as t, mylt2('a', 'B' collate "C") as f; + +CREATE OR REPLACE FUNCTION + mylt2 (x text, y text) RETURNS boolean LANGUAGE plpgsql AS $$ +declare + xx text COLLATE "POSIX" := x; + yy text := y; +begin + return xx < yy; +end +$$; + +SELECT mylt2('a', 'B') as f; +SELECT mylt2('a', 'B' collate "C") as fail; -- conflicting collations +SELECT mylt2('a', 'B' collate "POSIX") as f; + + +-- polymorphism + +SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test1)) ORDER BY 1; +SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test2)) ORDER BY 1; +SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test3)) ORDER BY 1; + +CREATE FUNCTION dup (anyelement) RETURNS anyelement + AS 'select $1' LANGUAGE sql; + +SELECT a, dup(b) FROM collate_test1 ORDER BY 2; +SELECT a, dup(b) FROM collate_test2 ORDER BY 2; +SELECT a, dup(b) FROM collate_test3 ORDER BY 2; + + +-- indexes + +CREATE INDEX collate_test1_idx1 ON collate_test1 (b); +CREATE INDEX collate_test1_idx2 ON collate_test1 (b COLLATE "C"); +CREATE INDEX collate_test1_idx3 ON collate_test1 ((b COLLATE "C")); -- this is different grammatically +CREATE INDEX collate_test1_idx4 ON collate_test1 (((b||'foo') COLLATE "POSIX")); + +CREATE INDEX collate_test1_idx5 ON collate_test1 (a COLLATE "C"); -- fail +CREATE INDEX collate_test1_idx6 ON collate_test1 ((a COLLATE "C")); -- fail + +SELECT relname, pg_get_indexdef(oid) FROM pg_class WHERE relname LIKE 'collate_test%_idx%' ORDER BY 1; + + +-- schema manipulation commands + +CREATE ROLE regress_test_role; +CREATE SCHEMA test_schema; + +-- We need to do this this way to cope with varying names for encodings: +do $$ +BEGIN + EXECUTE 'CREATE COLLATION test0 (locale = ' || + quote_literal((SELECT datcollate FROM pg_database WHERE datname = current_database())) || ');'; +END +$$; +CREATE COLLATION test0 FROM "C"; -- fail, duplicate name +CREATE COLLATION IF NOT EXISTS test0 FROM "C"; -- ok, skipped +CREATE COLLATION IF NOT EXISTS test0 (locale = 'foo'); -- ok, skipped +do $$ +BEGIN + EXECUTE 'CREATE COLLATION test1 (lc_collate = ' || + quote_literal((SELECT datcollate FROM pg_database WHERE datname = current_database())) || + ', lc_ctype = ' || + quote_literal((SELECT datctype FROM pg_database WHERE datname = current_database())) || ');'; +END +$$; +CREATE COLLATION test3 (lc_collate = 'en_US.utf8'); -- fail, need lc_ctype +CREATE COLLATION testx (locale = 'nonsense'); -- fail + +CREATE COLLATION test4 FROM nonsense; +CREATE COLLATION test5 FROM test0; + +SELECT collname FROM pg_collation WHERE collname LIKE 'test%' ORDER BY 1; + +ALTER COLLATION test1 RENAME TO test11; +ALTER COLLATION test0 RENAME TO test11; -- fail +ALTER COLLATION test1 RENAME TO test22; -- fail + +ALTER COLLATION test11 OWNER TO regress_test_role; +ALTER COLLATION test11 OWNER TO nonsense; +ALTER COLLATION test11 SET SCHEMA test_schema; + +COMMENT ON COLLATION test0 IS 'US English'; + +SELECT collname, nspname, obj_description(pg_collation.oid, 'pg_collation') + FROM pg_collation JOIN pg_namespace ON (collnamespace = pg_namespace.oid) + WHERE collname LIKE 'test%' + ORDER BY 1; + +DROP COLLATION test0, test_schema.test11, test5; +DROP COLLATION test0; -- fail +DROP COLLATION IF EXISTS test0; + +SELECT collname FROM pg_collation WHERE collname LIKE 'test%'; + +DROP SCHEMA test_schema; +DROP ROLE regress_test_role; + + +-- ALTER + +ALTER COLLATION "en_US" REFRESH VERSION; + +-- also test for database while we are here +SELECT current_database() AS datname \gset +ALTER DATABASE :"datname" REFRESH COLLATION VERSION; + + +-- dependencies + +CREATE COLLATION test0 FROM "C"; + +CREATE TABLE collate_dep_test1 (a int, b text COLLATE test0); +CREATE DOMAIN collate_dep_dom1 AS text COLLATE test0; +CREATE TYPE collate_dep_test2 AS (x int, y text COLLATE test0); +CREATE VIEW collate_dep_test3 AS SELECT text 'foo' COLLATE test0 AS foo; +CREATE TABLE collate_dep_test4t (a int, b text); +CREATE INDEX collate_dep_test4i ON collate_dep_test4t (b COLLATE test0); + +DROP COLLATION test0 RESTRICT; -- fail +DROP COLLATION test0 CASCADE; + +\d collate_dep_test1 +\d collate_dep_test2 + +DROP TABLE collate_dep_test1, collate_dep_test4t; +DROP TYPE collate_dep_test2; + +-- test range types and collations + +create type textrange_c as range(subtype=text, collation="C"); +create type textrange_en_us as range(subtype=text, collation="en_US"); + +select textrange_c('A','Z') @> 'b'::text; +select textrange_en_us('A','Z') @> 'b'::text; + +drop type textrange_c; +drop type textrange_en_us; + + +-- nondeterministic collations +-- (not supported with libc provider) + +CREATE COLLATION ctest_det (locale = 'en_US', deterministic = true); +CREATE COLLATION ctest_nondet (locale = 'en_US', deterministic = false); + + +-- cleanup +SET client_min_messages TO warning; +DROP SCHEMA collate_tests CASCADE; diff --git a/test/sql/postgres_regress/compression.sql b/test/sql/postgres_regress/compression.sql index 86332dcc..7179a500 100644 --- a/test/sql/postgres_regress/compression.sql +++ b/test/sql/postgres_regress/compression.sql @@ -48,7 +48,7 @@ SELECT pg_column_compression(f1) FROM cmmove2; -- test externally stored compressed data CREATE OR REPLACE FUNCTION large_val() RETURNS TEXT LANGUAGE SQL AS -'select array_agg(md5(g::text))::text from generate_series(1, 256) g'; +'select array_agg(fipshash(g::text))::text from generate_series(1, 256) g'; CREATE TABLE cmdata2 (f1 text COMPRESSION pglz); INSERT INTO cmdata2 SELECT large_val() || repeat('a', 4000); SELECT pg_column_compression(f1) FROM cmdata2; @@ -135,7 +135,7 @@ SELECT pg_column_compression(f1) FROM cmdata; DROP TABLE cmdata2; CREATE TABLE cmdata2 (f1 TEXT COMPRESSION pglz, f2 TEXT COMPRESSION lz4); CREATE UNIQUE INDEX idx1 ON cmdata2 ((f1 || f2)); -INSERT INTO cmdata2 VALUES((SELECT array_agg(md5(g::TEXT))::TEXT FROM +INSERT INTO cmdata2 VALUES((SELECT array_agg(fipshash(g::TEXT))::TEXT FROM generate_series(1, 50) g), VERSION()); -- check data is ok diff --git a/test/sql/postgres_regress/copy.sql b/test/sql/postgres_regress/copy.sql index 285022e0..43d2e906 100644 --- a/test/sql/postgres_regress/copy.sql +++ b/test/sql/postgres_regress/copy.sql @@ -204,7 +204,7 @@ create table header_copytest ( b int, c text ); --- Make sure it works with with dropped columns +-- Make sure it works with dropped columns alter table header_copytest drop column c; alter table header_copytest add column c text; copy header_copytest to stdout with (header match); @@ -268,3 +268,55 @@ a c b SELECT * FROM header_copytest ORDER BY a; drop table header_copytest; + +-- test COPY with overlong column defaults +create temp table oversized_column_default ( + col1 varchar(5) DEFAULT 'more than 5 chars', + col2 varchar(5)); +-- normal COPY should work +copy oversized_column_default from stdin; +\. +-- error if the column is excluded +copy oversized_column_default (col2) from stdin; +\. +-- error if the DEFAULT option is given +copy oversized_column_default from stdin (default ''); +\. +drop table oversized_column_default; + + +-- +-- Create partitioned table that does not allow bulk insertions, to test bugs +-- related to the reuse of BulkInsertState across partitions (only done when +-- not using bulk insert). Switching between partitions often makes it more +-- likely to encounter these bugs, so we just switch on roughly every insert +-- by having an even/odd number partition and inserting evenly distributed +-- data. +-- +CREATE TABLE parted_si ( + id int not null, + data text not null, + -- prevent use of bulk insert by having a volatile function + rand float8 not null default random() +) +PARTITION BY LIST((id % 2)); + +CREATE TABLE parted_si_p_even PARTITION OF parted_si FOR VALUES IN (0); +CREATE TABLE parted_si_p_odd PARTITION OF parted_si FOR VALUES IN (1); + +-- Test that bulk relation extension handles reusing a single BulkInsertState +-- across partitions. Without the fix applied, this reliably reproduces +-- #18130 unless shared_buffers is extremely small (preventing any use use of +-- bulk relation extension). See +-- https://postgr.es/m/18130-7a86a7356a75209d%40postgresql.org +-- https://postgr.es/m/257696.1695670946%40sss.pgh.pa.us +\set filename :abs_srcdir '/data/desc.data' +COPY parted_si(id, data) FROM :'filename'; + +-- An earlier bug (see commit b1ecb9b3fcf) could end up using a buffer from +-- the wrong partition. This test is *not* guaranteed to trigger that bug, but +-- does so when shared_buffers is small enough. To test if we encountered the +-- bug, check that the partition condition isn't violated. +SELECT tableoid::regclass, id % 2 = 0 is_even, count(*) from parted_si GROUP BY 1, 2 ORDER BY 1; + +DROP TABLE parted_si; diff --git a/test/sql/postgres_regress/copy2.sql b/test/sql/postgres_regress/copy2.sql index af227009..dce61bec 100644 --- a/test/sql/postgres_regress/copy2.sql +++ b/test/sql/postgres_regress/copy2.sql @@ -67,6 +67,16 @@ COPY x from stdin (force_null (a), force_null (b)); COPY x from stdin (convert_selectively (a), convert_selectively (b)); COPY x from stdin (encoding 'sql_ascii', encoding 'sql_ascii'); +-- incorrect options +COPY x to stdin (format BINARY, delimiter ','); +COPY x to stdin (format BINARY, null 'x'); +COPY x to stdin (format TEXT, force_quote(a)); +COPY x from stdin (format CSV, force_quote(a)); +COPY x to stdout (format TEXT, force_not_null(a)); +COPY x to stdin (format CSV, force_not_null(a)); +COPY x to stdout (format TEXT, force_null(a)); +COPY x to stdin (format CSV, force_null(a)); + -- too many columns in column list: should fail COPY x (a, b, c, d, e, d, c) from stdin; @@ -468,3 +478,104 @@ DROP TABLE instead_of_insert_tbl; DROP VIEW instead_of_insert_tbl_view; DROP VIEW instead_of_insert_tbl_view_2; DROP FUNCTION fun_instead_of_insert_tbl(); + +-- +-- COPY FROM ... DEFAULT +-- + +create temp table copy_default ( + id integer primary key, + text_value text not null default 'test', + ts_value timestamp without time zone not null default '2022-07-05' +); + +-- if DEFAULT is not specified, then the marker will be regular data +copy copy_default from stdin; +1 value '2022-07-04' +2 \D '2022-07-05' +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +copy copy_default from stdin with (format csv); +1,value,2022-07-04 +2,\D,2022-07-05 +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +-- DEFAULT cannot be used in binary mode +copy copy_default from stdin with (format binary, default '\D'); + +-- DEFAULT cannot be new line nor carriage return +copy copy_default from stdin with (default E'\n'); +copy copy_default from stdin with (default E'\r'); + +-- DELIMITER cannot appear in DEFAULT spec +copy copy_default from stdin with (delimiter ';', default 'test;test'); + +-- CSV quote cannot appear in DEFAULT spec +copy copy_default from stdin with (format csv, quote '"', default 'test"test'); + +-- NULL and DEFAULT spec must be different +copy copy_default from stdin with (default '\N'); + +-- cannot use DEFAULT marker in column that has no DEFAULT value +copy copy_default from stdin with (default '\D'); +\D value '2022-07-04' +2 \D '2022-07-05' +\. + +copy copy_default from stdin with (format csv, default '\D'); +\D,value,2022-07-04 +2,\D,2022-07-05 +\. + +-- The DEFAULT marker must be unquoted and unescaped or it's not recognized +copy copy_default from stdin with (default '\D'); +1 \D '2022-07-04' +2 \\D '2022-07-04' +3 "\D" '2022-07-04' +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +copy copy_default from stdin with (format csv, default '\D'); +1,\D,2022-07-04 +2,\\D,2022-07-04 +3,"\D",2022-07-04 +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +-- successful usage of DEFAULT option in COPY +copy copy_default from stdin with (default '\D'); +1 value '2022-07-04' +2 \D '2022-07-03' +3 \D \D +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +copy copy_default from stdin with (format csv, default '\D'); +1,value,2022-07-04 +2,\D,2022-07-03 +3,\D,\D +\. + +select id, text_value, ts_value from copy_default; + +truncate copy_default; + +-- DEFAULT cannot be used in COPY TO +copy (select 1 as test) TO stdout with (default '\D'); diff --git a/test/sql/postgres_regress/create_am.sql b/test/sql/postgres_regress/create_am.sql index 79b38d03..784fef31 100644 --- a/test/sql/postgres_regress/create_am.sql +++ b/test/sql/postgres_regress/create_am.sql @@ -166,6 +166,24 @@ CREATE TABLE heaptable USING heap AS SELECT a, repeat(a::text, 100) FROM generate_series(1,9) AS a; SELECT amname FROM pg_class c, pg_am am WHERE c.relam = am.oid AND c.oid = 'heaptable'::regclass; +-- Switching to heap2 adds new dependency entry to the AM. +ALTER TABLE heaptable SET ACCESS METHOD heap2; +SELECT pg_describe_object(classid, objid, objsubid) as obj, + pg_describe_object(refclassid, refobjid, refobjsubid) as objref, + deptype + FROM pg_depend + WHERE classid = 'pg_class'::regclass AND + objid = 'heaptable'::regclass + ORDER BY 1, 2; +-- Switching to heap should not have a dependency entry to the AM. +ALTER TABLE heaptable SET ACCESS METHOD heap; +SELECT pg_describe_object(classid, objid, objsubid) as obj, + pg_describe_object(refclassid, refobjid, refobjsubid) as objref, + deptype + FROM pg_depend + WHERE classid = 'pg_class'::regclass AND + objid = 'heaptable'::regclass + ORDER BY 1, 2; ALTER TABLE heaptable SET ACCESS METHOD heap2; SELECT amname FROM pg_class c, pg_am am WHERE c.relam = am.oid AND c.oid = 'heaptable'::regclass; diff --git a/test/sql/postgres_regress/create_cast.sql b/test/sql/postgres_regress/create_cast.sql index b11cf88b..32187853 100644 --- a/test/sql/postgres_regress/create_cast.sql +++ b/test/sql/postgres_regress/create_cast.sql @@ -52,3 +52,24 @@ $$ SELECT ('foo'::text || $1::text)::casttesttype; $$; CREATE CAST (int4 AS casttesttype) WITH FUNCTION int4_casttesttype(int4) AS IMPLICIT; SELECT 1234::int4::casttesttype; -- Should work now + +DROP FUNCTION int4_casttesttype(int4) CASCADE; + +-- Try it with a function that requires an implicit cast + +CREATE FUNCTION bar_int4_text(int4) RETURNS text LANGUAGE SQL AS +$$ SELECT ('bar'::text || $1::text); $$; + +CREATE CAST (int4 AS casttesttype) WITH FUNCTION bar_int4_text(int4) AS IMPLICIT; +SELECT 1234::int4::casttesttype; -- Should work now + +-- check dependencies generated for that +SELECT pg_describe_object(classid, objid, objsubid) as obj, + pg_describe_object(refclassid, refobjid, refobjsubid) as objref, + deptype +FROM pg_depend +WHERE classid = 'pg_cast'::regclass AND + objid = (SELECT oid FROM pg_cast + WHERE castsource = 'int4'::regtype + AND casttarget = 'casttesttype'::regtype) +ORDER BY refclassid; diff --git a/test/sql/postgres_regress/create_index.sql b/test/sql/postgres_regress/create_index.sql index d8fded3d..d49ce9f3 100644 --- a/test/sql/postgres_regress/create_index.sql +++ b/test/sql/postgres_regress/create_index.sql @@ -617,6 +617,12 @@ create unique index on cwi_test (a); alter table cwi_test add primary key using index cwi_test_a_idx ; DROP TABLE cwi_test; +-- PRIMARY KEY constraint cannot be backed by a NULLS NOT DISTINCT index +CREATE TABLE cwi_test(a int, b int); +CREATE UNIQUE INDEX cwi_a_nnd ON cwi_test (a) NULLS NOT DISTINCT; +ALTER TABLE cwi_test ADD PRIMARY KEY USING INDEX cwi_a_nnd; +DROP TABLE cwi_test; + -- -- Check handling of indexes on system columns -- @@ -1072,8 +1078,12 @@ REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1260; -- no catalog toast table REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM +REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto +REINDEX (CONCURRENTLY) SYSTEM; -- ditto -- Warns about catalog relations REINDEX SCHEMA CONCURRENTLY pg_catalog; +-- Not the current database +REINDEX DATABASE not_current_database; -- Check the relation status, there should not be invalid indexes \d concur_reindex_tab diff --git a/test/sql/postgres_regress/create_procedure.sql b/test/sql/postgres_regress/create_procedure.sql index 75cc0fcf..35b87277 100644 --- a/test/sql/postgres_regress/create_procedure.sql +++ b/test/sql/postgres_regress/create_procedure.sql @@ -42,7 +42,7 @@ CALL ptest1s('b'); SELECT * FROM cp_test ORDER BY b COLLATE "C"; --- utitlity functions currently not supported here +-- utility functions currently not supported here CREATE PROCEDURE ptestx() LANGUAGE SQL BEGIN ATOMIC diff --git a/test/sql/postgres_regress/create_role.sql b/test/sql/postgres_regress/create_role.sql index 292dc087..12582a3c 100644 --- a/test/sql/postgres_regress/create_role.sql +++ b/test/sql/postgres_regress/create_role.sql @@ -1,17 +1,50 @@ -- ok, superuser can create users with any set of privileges CREATE ROLE regress_role_super SUPERUSER; CREATE ROLE regress_role_admin CREATEDB CREATEROLE REPLICATION BYPASSRLS; +GRANT CREATE ON DATABASE regression TO regress_role_admin WITH GRANT OPTION; +CREATE ROLE regress_role_limited_admin CREATEROLE; +CREATE ROLE regress_role_normal; --- fail, only superusers can create users with these privileges -SET SESSION AUTHORIZATION regress_role_admin; +-- fail, CREATEROLE user can't give away role attributes without having them +SET SESSION AUTHORIZATION regress_role_limited_admin; CREATE ROLE regress_nosuch_superuser SUPERUSER; CREATE ROLE regress_nosuch_replication_bypassrls REPLICATION BYPASSRLS; CREATE ROLE regress_nosuch_replication REPLICATION; CREATE ROLE regress_nosuch_bypassrls BYPASSRLS; +CREATE ROLE regress_nosuch_createdb CREATEDB; --- ok, having CREATEROLE is enough to create users with these privileges +-- ok, can create a role without any special attributes +CREATE ROLE regress_role_limited; + +-- fail, can't give it in any of the restricted attributes +ALTER ROLE regress_role_limited SUPERUSER; +ALTER ROLE regress_role_limited REPLICATION; +ALTER ROLE regress_role_limited CREATEDB; +ALTER ROLE regress_role_limited BYPASSRLS; +DROP ROLE regress_role_limited; + +-- ok, can give away these role attributes if you have them +SET SESSION AUTHORIZATION regress_role_admin; +CREATE ROLE regress_replication_bypassrls REPLICATION BYPASSRLS; +CREATE ROLE regress_replication REPLICATION; +CREATE ROLE regress_bypassrls BYPASSRLS; CREATE ROLE regress_createdb CREATEDB; -CREATE ROLE regress_createrole CREATEROLE; + +-- ok, can toggle these role attributes off and on if you have them +ALTER ROLE regress_replication NOREPLICATION; +ALTER ROLE regress_replication REPLICATION; +ALTER ROLE regress_bypassrls NOBYPASSRLS; +ALTER ROLE regress_bypassrls BYPASSRLS; +ALTER ROLE regress_createdb NOCREATEDB; +ALTER ROLE regress_createdb CREATEDB; + +-- fail, can't toggle SUPERUSER +ALTER ROLE regress_createdb SUPERUSER; +ALTER ROLE regress_createdb NOSUPERUSER; + +-- ok, having CREATEROLE is enough to create users with these privileges +CREATE ROLE regress_createrole CREATEROLE NOINHERIT; +GRANT CREATE ON DATABASE regression TO regress_createrole WITH GRANT OPTION; CREATE ROLE regress_login LOGIN; CREATE ROLE regress_inherit INHERIT; CREATE ROLE regress_connection_limit CONNECTION LIMIT 5; @@ -53,8 +86,19 @@ CREATE ROLE regress_plainrole; -- ok, roles with CREATEROLE can create new roles with it CREATE ROLE regress_rolecreator CREATEROLE; --- ok, roles with CREATEROLE can create new roles with privilege they lack -CREATE ROLE regress_tenant CREATEDB CREATEROLE LOGIN INHERIT CONNECTION LIMIT 5; +-- ok, roles with CREATEROLE can create new roles with different role +-- attributes, including CREATEROLE +CREATE ROLE regress_hasprivs CREATEROLE LOGIN INHERIT CONNECTION LIMIT 5; + +-- ok, we should be able to modify a role we created +COMMENT ON ROLE regress_hasprivs IS 'some comment'; +ALTER ROLE regress_hasprivs RENAME TO regress_tenant; +ALTER ROLE regress_tenant NOINHERIT NOLOGIN CONNECTION LIMIT 7; + +-- fail, we should be unable to modify a role we did not create +COMMENT ON ROLE regress_role_normal IS 'some comment'; +ALTER ROLE regress_role_normal RENAME TO regress_role_abnormal; +ALTER ROLE regress_role_normal NOINHERIT NOLOGIN CONNECTION LIMIT 7; -- ok, regress_tenant can create objects within the database SET SESSION AUTHORIZATION regress_tenant; @@ -71,10 +115,41 @@ DROP TABLE tenant_table; ALTER VIEW tenant_view OWNER TO regress_role_admin; DROP VIEW tenant_view; --- fail, cannot take ownership of these objects from regress_tenant +-- fail, can't create objects owned as regress_tenant +CREATE SCHEMA regress_tenant_schema AUTHORIZATION regress_tenant; + +-- fail, we don't inherit permissions from regress_tenant REASSIGN OWNED BY regress_tenant TO regress_createrole; --- ok, having CREATEROLE is enough to create roles in privileged roles +-- ok, create a role with a value for createrole_self_grant +SET createrole_self_grant = 'set, inherit'; +CREATE ROLE regress_tenant2; +GRANT CREATE ON DATABASE regression TO regress_tenant2; + +-- ok, regress_tenant2 can create objects within the database +SET SESSION AUTHORIZATION regress_tenant2; +CREATE TABLE tenant2_table (i integer); +REVOKE ALL PRIVILEGES ON tenant2_table FROM PUBLIC; + +-- ok, because we have SET and INHERIT on regress_tenant2 +SET SESSION AUTHORIZATION regress_createrole; +CREATE SCHEMA regress_tenant2_schema AUTHORIZATION regress_tenant2; +ALTER SCHEMA regress_tenant2_schema OWNER TO regress_createrole; +ALTER TABLE tenant2_table OWNER TO regress_createrole; +ALTER TABLE tenant2_table OWNER TO regress_tenant2; + +-- with SET but not INHERIT, we can give away objects but not take them +REVOKE INHERIT OPTION FOR regress_tenant2 FROM regress_createrole; +ALTER SCHEMA regress_tenant2_schema OWNER TO regress_tenant2; +ALTER TABLE tenant2_table OWNER TO regress_createrole; + +-- with INHERIT but not SET, we can take objects but not give them away +GRANT regress_tenant2 TO regress_createrole WITH INHERIT TRUE, SET FALSE; +ALTER TABLE tenant2_table OWNER TO regress_createrole; +ALTER TABLE tenant2_table OWNER TO regress_tenant2; +DROP TABLE tenant2_table; + +-- fail, CREATEROLE is not enough to create roles in privileged roles CREATE ROLE regress_read_all_data IN ROLE pg_read_all_data; CREATE ROLE regress_write_all_data IN ROLE pg_write_all_data; CREATE ROLE regress_monitor IN ROLE pg_monitor; @@ -86,6 +161,9 @@ CREATE ROLE regress_write_server_files IN ROLE pg_write_server_files; CREATE ROLE regress_execute_server_program IN ROLE pg_execute_server_program; CREATE ROLE regress_signal_backend IN ROLE pg_signal_backend; +-- fail, role still owns database objects +DROP ROLE regress_tenant; + -- fail, creation of these roles failed above so they do not now exist SET SESSION AUTHORIZATION regress_role_admin; DROP ROLE regress_nosuch_superuser; @@ -98,7 +176,13 @@ DROP ROLE regress_nosuch_recursive; DROP ROLE regress_nosuch_admin_recursive; DROP ROLE regress_plainrole; +-- must revoke privileges before dropping role +REVOKE CREATE ON DATABASE regression FROM regress_createrole CASCADE; + -- ok, should be able to drop non-superuser roles we created +DROP ROLE regress_replication_bypassrls; +DROP ROLE regress_replication; +DROP ROLE regress_bypassrls; DROP ROLE regress_createdb; DROP ROLE regress_createrole; DROP ROLE regress_login; @@ -109,30 +193,23 @@ DROP ROLE regress_password_null; DROP ROLE regress_noiseword; DROP ROLE regress_inroles; DROP ROLE regress_adminroles; -DROP ROLE regress_rolecreator; -DROP ROLE regress_read_all_data; -DROP ROLE regress_write_all_data; -DROP ROLE regress_monitor; -DROP ROLE regress_read_all_settings; -DROP ROLE regress_read_all_stats; -DROP ROLE regress_stat_scan_tables; -DROP ROLE regress_read_server_files; -DROP ROLE regress_write_server_files; -DROP ROLE regress_execute_server_program; -DROP ROLE regress_signal_backend; - --- fail, role still owns database objects -DROP ROLE regress_tenant; --- fail, cannot drop ourself nor superusers +-- fail, cannot drop ourself, nor superusers or roles we lack ADMIN for DROP ROLE regress_role_super; DROP ROLE regress_role_admin; +DROP ROLE regress_rolecreator; -- ok RESET SESSION AUTHORIZATION; +REVOKE CREATE ON DATABASE regression FROM regress_role_admin CASCADE; DROP INDEX tenant_idx; DROP TABLE tenant_table; DROP VIEW tenant_view; +DROP SCHEMA regress_tenant2_schema; DROP ROLE regress_tenant; +DROP ROLE regress_tenant2; +DROP ROLE regress_rolecreator; DROP ROLE regress_role_admin; +DROP ROLE regress_role_limited_admin; DROP ROLE regress_role_super; +DROP ROLE regress_role_normal; diff --git a/test/sql/postgres_regress/create_schema.sql b/test/sql/postgres_regress/create_schema.sql new file mode 100644 index 00000000..1b706424 --- /dev/null +++ b/test/sql/postgres_regress/create_schema.sql @@ -0,0 +1,70 @@ +-- +-- CREATE_SCHEMA +-- + +-- Schema creation with elements. + +CREATE ROLE regress_create_schema_role SUPERUSER; + +-- Cases where schema creation fails as objects are qualified with a schema +-- that does not match with what's expected. +-- This checks all the object types that include schema qualifications. +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE SEQUENCE schema_not_existing.seq; +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE TABLE schema_not_existing.tab (id int); +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE VIEW schema_not_existing.view AS SELECT 1; +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE INDEX ON schema_not_existing.tab (id); +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE TRIGGER schema_trig BEFORE INSERT ON schema_not_existing.tab + EXECUTE FUNCTION schema_trig.no_func(); +-- Again, with a role specification and no schema names. +SET ROLE regress_create_schema_role; +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE SEQUENCE schema_not_existing.seq; +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE TABLE schema_not_existing.tab (id int); +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE VIEW schema_not_existing.view AS SELECT 1; +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE INDEX ON schema_not_existing.tab (id); +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE TRIGGER schema_trig BEFORE INSERT ON schema_not_existing.tab + EXECUTE FUNCTION schema_trig.no_func(); +-- Again, with a schema name and a role specification. +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE SEQUENCE schema_not_existing.seq; +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE TABLE schema_not_existing.tab (id int); +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE VIEW schema_not_existing.view AS SELECT 1; +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE INDEX ON schema_not_existing.tab (id); +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE TRIGGER schema_trig BEFORE INSERT ON schema_not_existing.tab + EXECUTE FUNCTION schema_trig.no_func(); +RESET ROLE; + +-- Cases where the schema creation succeeds. +-- The schema created matches the role name. +CREATE SCHEMA AUTHORIZATION regress_create_schema_role + CREATE TABLE regress_create_schema_role.tab (id int); +\d regress_create_schema_role.tab +DROP SCHEMA regress_create_schema_role CASCADE; +-- Again, with a different role specification and no schema names. +SET ROLE regress_create_schema_role; +CREATE SCHEMA AUTHORIZATION CURRENT_ROLE + CREATE TABLE regress_create_schema_role.tab (id int); +\d regress_create_schema_role.tab +DROP SCHEMA regress_create_schema_role CASCADE; +-- Again, with a schema name and a role specification. +CREATE SCHEMA regress_schema_1 AUTHORIZATION CURRENT_ROLE + CREATE TABLE regress_schema_1.tab (id int); +\d regress_schema_1.tab +DROP SCHEMA regress_schema_1 CASCADE; +RESET ROLE; + +-- Clean up +DROP ROLE regress_create_schema_role; diff --git a/test/sql/postgres_regress/create_table.sql b/test/sql/postgres_regress/create_table.sql index 5175f404..93ccf77d 100644 --- a/test/sql/postgres_regress/create_table.sql +++ b/test/sql/postgres_regress/create_table.sql @@ -652,6 +652,9 @@ SELECT obj_description('parted_col_comment'::regclass); \d+ parted_col_comment DROP TABLE parted_col_comment; +-- specifying storage parameters for partitioned tables is not supported +CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a) WITH (fillfactor=100); + -- list partitioning on array type column CREATE TABLE arrlp (a int[]) PARTITION BY LIST (a); CREATE TABLE arrlp12 PARTITION OF arrlp FOR VALUES IN ('{1}', '{2}'); diff --git a/test/sql/postgres_regress/create_type.sql b/test/sql/postgres_regress/create_type.sql index c6fc4f90..c2501802 100644 --- a/test/sql/postgres_regress/create_type.sql +++ b/test/sql/postgres_regress/create_type.sql @@ -192,6 +192,14 @@ select format_type('bpchar'::regtype, null); -- this behavior difference is intentional select format_type('bpchar'::regtype, -1); +-- Test non-error-throwing APIs using widget, which still throws errors +SELECT pg_input_is_valid('(1,2,3)', 'widget'); +SELECT pg_input_is_valid('(1,2)', 'widget'); -- hard error expected +SELECT pg_input_is_valid('{"(1,2,3)"}', 'widget[]'); +SELECT pg_input_is_valid('{"(1,2)"}', 'widget[]'); -- hard error expected +SELECT pg_input_is_valid('("(1,2,3)")', 'mytab'); +SELECT pg_input_is_valid('("(1,2)")', 'mytab'); -- hard error expected + -- Test creation of an operator over a user-defined type CREATE FUNCTION pt_in_widget(point, widget) diff --git a/test/sql/postgres_regress/create_view.sql b/test/sql/postgres_regress/create_view.sql index 44a6775f..8838a40f 100644 --- a/test/sql/postgres_regress/create_view.sql +++ b/test/sql/postgres_regress/create_view.sql @@ -703,6 +703,7 @@ select pg_get_viewdef('tt20v', true); create view tt201v as select + ('2022-12-01'::date + '1 day'::interval) at time zone 'UTC' as atz, extract(day from now()) as extr, (now(), '1 day'::interval) overlaps (current_timestamp(2), '1 day'::interval) as o, @@ -721,7 +722,39 @@ select trim(trailing ' foo ') as rt, trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) as btb, trim(leading E'\\000'::bytea from E'\\000Tom\\000'::bytea) as ltb, - trim(trailing E'\\000'::bytea from E'\\000Tom\\000'::bytea) as rtb; + trim(trailing E'\\000'::bytea from E'\\000Tom\\000'::bytea) as rtb, + CURRENT_DATE as cd, + (select * from CURRENT_DATE) as cd2, + CURRENT_TIME as ct, + (select * from CURRENT_TIME) as ct2, + CURRENT_TIME (1) as ct3, + (select * from CURRENT_TIME (1)) as ct4, + CURRENT_TIMESTAMP as ct5, + (select * from CURRENT_TIMESTAMP) as ct6, + CURRENT_TIMESTAMP (1) as ct7, + (select * from CURRENT_TIMESTAMP (1)) as ct8, + LOCALTIME as lt1, + (select * from LOCALTIME) as lt2, + LOCALTIME (1) as lt3, + (select * from LOCALTIME (1)) as lt4, + LOCALTIMESTAMP as lt5, + (select * from LOCALTIMESTAMP) as lt6, + LOCALTIMESTAMP (1) as lt7, + (select * from LOCALTIMESTAMP (1)) as lt8, + CURRENT_CATALOG as ca, + (select * from CURRENT_CATALOG) as ca2, + CURRENT_ROLE as cr, + (select * from CURRENT_ROLE) as cr2, + CURRENT_SCHEMA as cs, + (select * from CURRENT_SCHEMA) as cs2, + CURRENT_USER as cu, + (select * from CURRENT_USER) as cu2, + USER as us, + (select * from USER) as us2, + SESSION_USER seu, + (select * from SESSION_USER) as seu2, + SYSTEM_USER as su, + (select * from SYSTEM_USER) as su2; select pg_get_viewdef('tt201v', true); -- corner cases with empty join conditions diff --git a/test/sql/postgres_regress/date.sql b/test/sql/postgres_regress/date.sql index 8f7435b7..1c58ff69 100644 --- a/test/sql/postgres_regress/date.sql +++ b/test/sql/postgres_regress/date.sql @@ -193,6 +193,13 @@ SELECT date '4714-11-23 BC'; -- out of range SELECT date '5874897-12-31'; SELECT date '5874898-01-01'; -- out of range +-- Test non-error-throwing API +SELECT pg_input_is_valid('now', 'date'); +SELECT pg_input_is_valid('garbage', 'date'); +SELECT pg_input_is_valid('6874898-01-01', 'date'); +SELECT * FROM pg_input_error_info('garbage', 'date'); +SELECT * FROM pg_input_error_info('6874898-01-01', 'date'); + RESET datestyle; -- @@ -322,6 +329,8 @@ select 'infinity'::date, '-infinity'::date; select 'infinity'::date > 'today'::date as t; select '-infinity'::date < 'today'::date as t; select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date); +select 'infinity'::date = '+infinity'::date as t; + -- -- oscillating fields from non-finite date: -- diff --git a/test/sql/postgres_regress/dbsize.sql b/test/sql/postgres_regress/dbsize.sql index 7df86527..b34cf333 100644 --- a/test/sql/postgres_regress/dbsize.sql +++ b/test/sql/postgres_regress/dbsize.sql @@ -29,7 +29,7 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM -- pg_size_bytes() tests SELECT size, pg_size_bytes(size) FROM - (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), + (VALUES ('1'), ('123bytes'), ('256 B'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), ('1TB'), ('3000 TB'), ('1e6 MB'), ('99 PB')) x(size); -- case-insensitive units are supported diff --git a/test/sql/postgres_regress/domain.sql b/test/sql/postgres_regress/domain.sql index f2ca1fb6..745f5d5f 100644 --- a/test/sql/postgres_regress/domain.sql +++ b/test/sql/postgres_regress/domain.sql @@ -69,6 +69,25 @@ drop domain domainint4 restrict; drop domain domaintext; +-- Test non-error-throwing input + +create domain positiveint int4 check(value > 0); +create domain weirdfloat float8 check((1 / value) < 10); + +select pg_input_is_valid('1', 'positiveint'); +select pg_input_is_valid('junk', 'positiveint'); +select pg_input_is_valid('-1', 'positiveint'); +select * from pg_input_error_info('junk', 'positiveint'); +select * from pg_input_error_info('-1', 'positiveint'); +select * from pg_input_error_info('junk', 'weirdfloat'); +select * from pg_input_error_info('0.01', 'weirdfloat'); +-- We currently can't trap errors raised in the CHECK expression itself +select * from pg_input_error_info('0', 'weirdfloat'); + +drop domain positiveint; +drop domain weirdfloat; + + -- Test domains over array types create domain domainint4arr int4[1]; @@ -288,6 +307,10 @@ table dcomptable; update dcomptable set f1[1].cf1 = -1; -- fail update dcomptable set f1[1].cf1 = 1; table dcomptable; +-- if there's no constraints, a different code path is taken: +alter domain dcomptype drop constraint dcomptype_check; +update dcomptable set f1[1].cf1 = -1; -- now ok +table dcomptable; drop table dcomptable; drop type comptype cascade; diff --git a/test/sql/postgres_regress/enum.sql b/test/sql/postgres_regress/enum.sql index 6affd0d1..93171379 100644 --- a/test/sql/postgres_regress/enum.sql +++ b/test/sql/postgres_regress/enum.sql @@ -15,6 +15,14 @@ SELECT COUNT(*) FROM pg_enum WHERE enumtypid = 'rainbow'::regtype; SELECT 'red'::rainbow; SELECT 'mauve'::rainbow; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('red', 'rainbow'); +SELECT pg_input_is_valid('mauve', 'rainbow'); +SELECT * FROM pg_input_error_info('mauve', 'rainbow'); +\x +SELECT * FROM pg_input_error_info(repeat('too_long', 32), 'rainbow'); +\x + -- -- adding new values -- diff --git a/test/sql/postgres_regress/explain.sql b/test/sql/postgres_regress/explain.sql index ae3f7a30..b6b7beab 100644 --- a/test/sql/postgres_regress/explain.sql +++ b/test/sql/postgres_regress/explain.sql @@ -88,6 +88,32 @@ select true as "OK" select explain_filter_to_json('explain (settings, format json) select * from int8_tbl i8') #> '{0,Settings,plan_cache_mode}'; rollback; +-- GENERIC_PLAN option + +select explain_filter('explain (generic_plan) select unique1 from tenk1 where thousand = $1'); +-- should fail +select explain_filter('explain (analyze, generic_plan) select unique1 from tenk1 where thousand = $1'); + +-- Test EXPLAIN (GENERIC_PLAN) with partition pruning +-- partitions should be pruned at plan time, based on constants, +-- but there should be no pruning based on parameter placeholders +create table gen_part ( + key1 integer not null, + key2 integer not null +) partition by list (key1); +create table gen_part_1 + partition of gen_part for values in (1) + partition by range (key2); +create table gen_part_1_1 + partition of gen_part_1 for values from (1) to (2); +create table gen_part_1_2 + partition of gen_part_1 for values from (2) to (3); +create table gen_part_2 + partition of gen_part for values in (2); +-- should scan gen_part_1_1 and gen_part_1_2, but not gen_part_2 +select explain_filter('explain (generic_plan) select key1, key2 from gen_part where key1 = 1 and key2 = $1'); +drop table gen_part; + -- -- Test production of per-worker data -- diff --git a/test/sql/postgres_regress/expressions.sql b/test/sql/postgres_regress/expressions.sql index 0e163cc0..e02c21f3 100644 --- a/test/sql/postgres_regress/expressions.sql +++ b/test/sql/postgres_regress/expressions.sql @@ -17,14 +17,19 @@ SELECT now()::timetz(4)::text = current_time(4)::text; SELECT now()::time::text = localtime::text; SELECT now()::time(3)::text = localtime(3)::text; --- current_timestamp / localtimestamp (always matches because of transactional behaviour) +-- current_time[stamp]/ localtime[stamp] (always matches because of transactional behaviour) SELECT current_timestamp = NOW(); -- precision SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text); -- localtimestamp SELECT now()::timestamp::text = localtimestamp::text; +-- precision overflow +SELECT current_time = current_time(7); +SELECT current_timestamp = current_timestamp(7); +SELECT localtime = localtime(7); +SELECT localtimestamp = localtimestamp(7); --- current_role/user/user is tested in rolnames.sql +-- current_role/user/user is tested in rolenames.sql -- current database / catalog SELECT current_catalog = current_database(); diff --git a/test/sql/postgres_regress/float4.sql b/test/sql/postgres_regress/float4.sql index 612486ec..8fb12368 100644 --- a/test/sql/postgres_regress/float4.sql +++ b/test/sql/postgres_regress/float4.sql @@ -36,6 +36,12 @@ INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0'); INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0'); INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5'); +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34.5', 'float4'); +SELECT pg_input_is_valid('xyz', 'float4'); +SELECT pg_input_is_valid('1e400', 'float4'); +SELECT * FROM pg_input_error_info('1e400', 'float4'); + -- special inputs SELECT 'NaN'::float4; SELECT 'nan'::float4; diff --git a/test/sql/postgres_regress/float8.sql b/test/sql/postgres_regress/float8.sql index 03c134b0..98e9926c 100644 --- a/test/sql/postgres_regress/float8.sql +++ b/test/sql/postgres_regress/float8.sql @@ -34,6 +34,12 @@ INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0'); INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3'); INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5'); +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34.5', 'float8'); +SELECT pg_input_is_valid('xyz', 'float8'); +SELECT pg_input_is_valid('1e4000', 'float8'); +SELECT * FROM pg_input_error_info('1e4000', 'float8'); + -- special inputs SELECT 'NaN'::float8; SELECT 'nan'::float8; @@ -223,6 +229,20 @@ SELECT atanh(float8 'infinity'); SELECT atanh(float8 '-infinity'); SELECT atanh(float8 'nan'); +-- error functions +-- we run these with extra_float_digits = -1, to get consistently rounded +-- results on all platforms. +SET extra_float_digits = -1; +SELECT x, + erf(x), + erfc(x) +FROM (VALUES (float8 '-infinity'), + (-28), (-6), (-3.4), (-2.1), (-1.1), (-0.45), + (-1.2e-9), (-2.3e-13), (-1.2e-17), (0), + (1.2e-17), (2.3e-13), (1.2e-9), + (0.45), (1.1), (2.1), (3.4), (6), (28), + (float8 'infinity'), (float8 'nan')) AS t(x); + RESET extra_float_digits; -- test for over- and underflow diff --git a/test/sql/postgres_regress/foreign_key.sql b/test/sql/postgres_regress/foreign_key.sql index 51eee078..22e177f8 100644 --- a/test/sql/postgres_regress/foreign_key.sql +++ b/test/sql/postgres_regress/foreign_key.sql @@ -490,12 +490,13 @@ SELECT * FROM FKTABLE ORDER BY id; DROP TABLE FKTABLE; DROP TABLE PKTABLE; -CREATE TABLE PKTABLE (ptest1 int PRIMARY KEY); +-- Test some invalid FK definitions +CREATE TABLE PKTABLE (ptest1 int PRIMARY KEY, someoid oid); CREATE TABLE FKTABLE_FAIL1 ( ftest1 int, CONSTRAINT fkfail1 FOREIGN KEY (ftest2) REFERENCES PKTABLE); CREATE TABLE FKTABLE_FAIL2 ( ftest1 int, CONSTRAINT fkfail1 FOREIGN KEY (ftest1) REFERENCES PKTABLE(ptest2)); +CREATE TABLE FKTABLE_FAIL3 ( ftest1 int, CONSTRAINT fkfail1 FOREIGN KEY (tableoid) REFERENCES PKTABLE(someoid)); +CREATE TABLE FKTABLE_FAIL4 ( ftest1 oid, CONSTRAINT fkfail1 FOREIGN KEY (ftest1) REFERENCES PKTABLE(tableoid)); -DROP TABLE FKTABLE_FAIL1; -DROP TABLE FKTABLE_FAIL2; DROP TABLE PKTABLE; -- Test for referencing column number smaller than referenced constraint @@ -1797,7 +1798,7 @@ DELETE FROM pt; DELETE FROM ref; ABORT; DROP TABLE pt, ref; --- Multi-level partitioning at at referenced end +-- Multi-level partitioning at referenced end CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)) PARTITION BY LIST(f1); CREATE TABLE pt1_2 PARTITION OF pt FOR VALUES IN (1, 2) PARTITION BY LIST (f1); diff --git a/test/sql/postgres_regress/generated.sql b/test/sql/postgres_regress/generated.sql index 378297e6..8ddecf0c 100644 --- a/test/sql/postgres_regress/generated.sql +++ b/test/sql/postgres_regress/generated.sql @@ -81,6 +81,21 @@ SELECT * FROM gtest1 ORDER BY a; DELETE FROM gtest1 WHERE b = 2; SELECT * FROM gtest1 ORDER BY a; +-- test MERGE +CREATE TABLE gtestm ( + id int PRIMARY KEY, + f1 int, + f2 int, + f3 int GENERATED ALWAYS AS (f1 * 2) STORED, + f4 int GENERATED ALWAYS AS (f2 * 2) STORED +); +INSERT INTO gtestm VALUES (1, 5, 100); +MERGE INTO gtestm t USING (VALUES (1, 10), (2, 20)) v(id, f1) ON t.id = v.id + WHEN MATCHED THEN UPDATE SET f1 = v.f1 + WHEN NOT MATCHED THEN INSERT VALUES (v.id, v.f1, 200); +SELECT * FROM gtestm ORDER BY id; +DROP TABLE gtestm; + -- views CREATE VIEW gtest1v AS SELECT * FROM gtest1; SELECT * FROM gtest1v; @@ -110,44 +125,48 @@ INSERT INTO gtest1_1 VALUES (4); SELECT * FROM gtest1_1; SELECT * FROM gtest1; +-- can't have generated column that is a child of normal column CREATE TABLE gtest_normal (a int, b int); -CREATE TABLE gtest_normal_child (a int, b int GENERATED ALWAYS AS (a * 2) STORED) INHERITS (gtest_normal); -\d gtest_normal_child -INSERT INTO gtest_normal (a) VALUES (1); -INSERT INTO gtest_normal_child (a) VALUES (2); -SELECT * FROM gtest_normal; - -CREATE TABLE gtest_normal_child2 (a int, b int GENERATED ALWAYS AS (a * 3) STORED); -ALTER TABLE gtest_normal_child2 INHERIT gtest_normal; -INSERT INTO gtest_normal_child2 (a) VALUES (3); -SELECT * FROM gtest_normal; +CREATE TABLE gtest_normal_child (a int, b int GENERATED ALWAYS AS (a * 2) STORED) INHERITS (gtest_normal); -- error +CREATE TABLE gtest_normal_child (a int, b int GENERATED ALWAYS AS (a * 2) STORED); +ALTER TABLE gtest_normal_child INHERIT gtest_normal; -- error +DROP TABLE gtest_normal, gtest_normal_child; -- test inheritance mismatches between parent and child -CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS (a * 22) STORED) INHERITS (gtest1); -- error CREATE TABLE gtestx (x int, b int DEFAULT 10) INHERITS (gtest1); -- error CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS IDENTITY) INHERITS (gtest1); -- error +CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS (a * 22) STORED) INHERITS (gtest1); -- ok, overrides parent +\d+ gtestx CREATE TABLE gtestxx_1 (a int NOT NULL, b int); ALTER TABLE gtestxx_1 INHERIT gtest1; -- error -CREATE TABLE gtestxx_2 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 22) STORED); -ALTER TABLE gtestxx_2 INHERIT gtest1; -- error CREATE TABLE gtestxx_3 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 2) STORED); ALTER TABLE gtestxx_3 INHERIT gtest1; -- ok CREATE TABLE gtestxx_4 (b int GENERATED ALWAYS AS (a * 2) STORED, a int NOT NULL); ALTER TABLE gtestxx_4 INHERIT gtest1; -- ok -- test multiple inheritance mismatches -CREATE TABLE gtesty (x int, b int); -CREATE TABLE gtest1_2 () INHERITS (gtest1, gtesty); -- error +CREATE TABLE gtesty (x int, b int DEFAULT 55); +CREATE TABLE gtest1_y () INHERITS (gtest0, gtesty); -- error DROP TABLE gtesty; -CREATE TABLE gtesty (x int, b int GENERATED ALWAYS AS (x * 22) STORED); -CREATE TABLE gtest1_2 () INHERITS (gtest1, gtesty); -- error +CREATE TABLE gtesty (x int, b int); +CREATE TABLE gtest1_y () INHERITS (gtest1, gtesty); -- error DROP TABLE gtesty; -CREATE TABLE gtesty (x int, b int DEFAULT 55); -CREATE TABLE gtest1_2 () INHERITS (gtest0, gtesty); -- error -DROP TABLE gtesty; +CREATE TABLE gtesty (x int, b int GENERATED ALWAYS AS (x * 22) STORED); +CREATE TABLE gtest1_y () INHERITS (gtest1, gtesty); -- error +CREATE TABLE gtest1_y (b int GENERATED ALWAYS AS (x + 1) STORED) INHERITS (gtest1, gtesty); -- ok +\d gtest1_y + +-- test correct handling of GENERATED column that's only in child +CREATE TABLE gtestp (f1 int); +CREATE TABLE gtestc (f2 int GENERATED ALWAYS AS (f1+1) STORED) INHERITS(gtestp); +INSERT INTO gtestc values(42); +TABLE gtestc; +UPDATE gtestp SET f1 = f1 * 10; +TABLE gtestc; +DROP TABLE gtestp CASCADE; -- test stored update CREATE TABLE gtest3 (a int, b int GENERATED ALWAYS AS (a * 3) STORED); @@ -356,24 +375,52 @@ CREATE TYPE gtest_type AS (f1 integer, f2 text, f3 bigint); CREATE TABLE gtest28 OF gtest_type (f1 WITH OPTIONS GENERATED ALWAYS AS (f2 *2) STORED); DROP TYPE gtest_type CASCADE; --- table partitions (currently not supported) -CREATE TABLE gtest_parent (f1 date NOT NULL, f2 text, f3 bigint) PARTITION BY RANGE (f1); +-- partitioning cases +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint) PARTITION BY RANGE (f1); CREATE TABLE gtest_child PARTITION OF gtest_parent ( f3 WITH OPTIONS GENERATED ALWAYS AS (f2 * 2) STORED ) FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); -- error -DROP TABLE gtest_parent; +CREATE TABLE gtest_child (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED); +ALTER TABLE gtest_parent ATTACH PARTITION gtest_child FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); -- error +DROP TABLE gtest_parent, gtest_child; --- partitioned table CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f1); -CREATE TABLE gtest_child PARTITION OF gtest_parent FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); +CREATE TABLE gtest_child PARTITION OF gtest_parent + FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); -- inherits gen expr +CREATE TABLE gtest_child2 PARTITION OF gtest_parent ( + f3 WITH OPTIONS GENERATED ALWAYS AS (f2 * 22) STORED -- overrides gen expr +) FOR VALUES FROM ('2016-08-01') TO ('2016-09-01'); +CREATE TABLE gtest_child3 PARTITION OF gtest_parent ( + f3 DEFAULT 42 -- error +) FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); +CREATE TABLE gtest_child3 PARTITION OF gtest_parent ( + f3 WITH OPTIONS GENERATED ALWAYS AS IDENTITY -- error +) FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); +CREATE TABLE gtest_child3 (f1 date NOT NULL, f2 bigint, f3 bigint); +ALTER TABLE gtest_parent ATTACH PARTITION gtest_child3 FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); -- error +DROP TABLE gtest_child3; +CREATE TABLE gtest_child3 (f1 date NOT NULL, f2 bigint, f3 bigint DEFAULT 42); +ALTER TABLE gtest_parent ATTACH PARTITION gtest_child3 FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); -- error +DROP TABLE gtest_child3; +CREATE TABLE gtest_child3 (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS IDENTITY); +ALTER TABLE gtest_parent ATTACH PARTITION gtest_child3 FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); -- error +DROP TABLE gtest_child3; +CREATE TABLE gtest_child3 (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 33) STORED); +ALTER TABLE gtest_parent ATTACH PARTITION gtest_child3 FOR VALUES FROM ('2016-09-01') TO ('2016-10-01'); +\d gtest_child +\d gtest_child2 +\d gtest_child3 INSERT INTO gtest_parent (f1, f2) VALUES ('2016-07-15', 1); SELECT * FROM gtest_parent; SELECT * FROM gtest_child; -DROP TABLE gtest_parent; +UPDATE gtest_parent SET f1 = f1 + 60; +SELECT * FROM gtest_parent; +SELECT * FROM gtest_child3; +-- we leave these tables around for purposes of testing dump/reload/upgrade -- generated columns in partition key (not allowed) -CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); -CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); +CREATE TABLE gtest_part_key (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); +CREATE TABLE gtest_part_key (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); -- ALTER TABLE ... ADD COLUMN CREATE TABLE gtest25 (a int PRIMARY KEY); diff --git a/test/sql/postgres_regress/geometry.sql b/test/sql/postgres_regress/geometry.sql index 8928d04a..c3ea368d 100644 --- a/test/sql/postgres_regress/geometry.sql +++ b/test/sql/postgres_regress/geometry.sql @@ -523,3 +523,9 @@ SELECT * FROM polygon_tbl WHERE f1 @> '((1,1),(2,2),(2,1))'::polygon ORDER BY (poly_center(f1))[0]; SELECT * FROM polygon_tbl WHERE f1 @> '((1,1),(2,2),(2,1))'::polygon ORDER BY (poly_center(f1))[0]; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('(1', 'circle'); +SELECT * FROM pg_input_error_info('1,', 'circle'); +SELECT pg_input_is_valid('(1,2),-1', 'circle'); +SELECT * FROM pg_input_error_info('(1,2),-1', 'circle'); diff --git a/test/sql/postgres_regress/gist.sql b/test/sql/postgres_regress/gist.sql index 3dd7aa73..6f1fc65f 100644 --- a/test/sql/postgres_regress/gist.sql +++ b/test/sql/postgres_regress/gist.sql @@ -169,6 +169,10 @@ explain (verbose, costs off) select p from gist_tbl order by circle(p,1) <-> point(0,0) limit 1; select p from gist_tbl order by circle(p,1) <-> point(0,0) limit 1; +-- Force an index build using buffering. +create index gist_tbl_box_index_forcing_buffering on gist_tbl using gist (p) + with (buffering=on, fillfactor=50); + -- Clean up reset enable_seqscan; reset enable_bitmapscan; diff --git a/test/sql/postgres_regress/guc.sql b/test/sql/postgres_regress/guc.sql index d5db101e..dc797619 100644 --- a/test/sql/postgres_regress/guc.sql +++ b/test/sql/postgres_regress/guc.sql @@ -324,8 +324,8 @@ SELECT pg_settings_get_flags(NULL); SELECT pg_settings_get_flags('does_not_exist'); CREATE TABLE tab_settings_flags AS SELECT name, category, 'EXPLAIN' = ANY(flags) AS explain, + 'NO_RESET' = ANY(flags) AS no_reset, 'NO_RESET_ALL' = ANY(flags) AS no_reset_all, - 'NO_SHOW_ALL' = ANY(flags) AS no_show_all, 'NOT_IN_SAMPLE' = ANY(flags) AS not_in_sample, 'RUNTIME_COMPUTED' = ANY(flags) AS runtime_computed FROM pg_show_all_settings() AS psas, @@ -348,16 +348,8 @@ SELECT name FROM tab_settings_flags SELECT name FROM tab_settings_flags WHERE category = 'Preset Options' AND NOT not_in_sample ORDER BY 1; --- NO_SHOW_ALL implies NO_RESET_ALL, and vice-versa. +-- NO_RESET implies NO_RESET_ALL. SELECT name FROM tab_settings_flags - WHERE no_show_all AND NOT no_reset_all - ORDER BY 1; --- Exceptions are transaction_*. -SELECT name FROM tab_settings_flags - WHERE NOT no_show_all AND no_reset_all - ORDER BY 1; --- NO_SHOW_ALL implies NOT_IN_SAMPLE. -SELECT name FROM tab_settings_flags - WHERE no_show_all AND NOT not_in_sample + WHERE no_reset AND NOT no_reset_all ORDER BY 1; DROP TABLE tab_settings_flags; diff --git a/test/sql/postgres_regress/horology.sql b/test/sql/postgres_regress/horology.sql index 2724a2bb..f7f8c8d2 100644 --- a/test/sql/postgres_regress/horology.sql +++ b/test/sql/postgres_regress/horology.sql @@ -20,15 +20,13 @@ SELECT timestamp with time zone '2001-12-27 04:05:06.789-08'; SELECT timestamp with time zone '2001.12.27 04:05:06.789-08'; SELECT timestamp with time zone '2001/12/27 04:05:06.789-08'; SELECT timestamp with time zone '12/27/2001 04:05:06.789-08'; +SELECT timestamp with time zone '2001-12-27 04:05:06.789 MET DST'; +SELECT timestamp with time zone '2001-12-27 allballs'; -- should fail in mdy mode: SELECT timestamp with time zone '27/12/2001 04:05:06.789-08'; set datestyle to dmy; SELECT timestamp with time zone '27/12/2001 04:05:06.789-08'; reset datestyle; -SELECT timestamp with time zone 'Y2001M12D27H04M05S06.789+08'; -SELECT timestamp with time zone 'Y2001M12D27H04M05S06.789-08'; -SELECT timestamp with time zone 'Y2001M12D27H04MM05S06.789+08'; -SELECT timestamp with time zone 'Y2001M12D27H04MM05S06.789-08'; SELECT timestamp with time zone 'J2452271+08'; SELECT timestamp with time zone 'J2452271-08'; SELECT timestamp with time zone 'J2452271.5+08'; @@ -57,11 +55,47 @@ SELECT time with time zone 'T040506.789+08'; SELECT time with time zone 'T040506.789-08'; SELECT time with time zone 'T040506.789 +08'; SELECT time with time zone 'T040506.789 -08'; +-- time with time zone should accept a date for DST resolution purposes +SELECT time with time zone 'T040506.789 America/Los_Angeles'; +SELECT time with time zone '2001-12-27 T040506.789 America/Los_Angeles'; +SELECT time with time zone 'J2452271 T040506.789 America/Los_Angeles'; SET DateStyle = 'Postgres, MDY'; -- Check Julian dates BC SELECT date 'J1520447' AS "Confucius' Birthday"; SELECT date 'J0' AS "Julian Epoch"; +-- test error on dangling Julian units +SELECT date '1995-08-06 J J J'; +SELECT date 'J J 1520447'; + +-- We used to accept this input style, but it was based on a misreading +-- of ISO8601, and it was never documented anyway +SELECT timestamp with time zone 'Y2001M12D27H04M05S06.789+08'; +SELECT timestamp with time zone 'Y2001M12D27H04MM05S06.789-08'; + +-- conflicting fields should throw errors +SELECT date '1995-08-06 epoch'; +SELECT date '1995-08-06 infinity'; +SELECT date '1995-08-06 -infinity'; +SELECT date 'today infinity'; +SELECT date '-infinity infinity'; +SELECT timestamp '1995-08-06 epoch'; +SELECT timestamp '1995-08-06 infinity'; +SELECT timestamp '1995-08-06 -infinity'; +SELECT timestamp 'epoch 01:01:01'; +SELECT timestamp 'infinity 01:01:01'; +SELECT timestamp '-infinity 01:01:01'; +SELECT timestamp 'now epoch'; +SELECT timestamp '-infinity infinity'; +SELECT timestamptz '1995-08-06 epoch'; +SELECT timestamptz '1995-08-06 infinity'; +SELECT timestamptz '1995-08-06 -infinity'; +SELECT timestamptz 'epoch 01:01:01'; +SELECT timestamptz 'infinity 01:01:01'; +SELECT timestamptz '-infinity 01:01:01'; +SELECT timestamptz 'now epoch'; +SELECT timestamptz '-infinity infinity'; + -- -- date, time arithmetic -- diff --git a/test/sql/postgres_regress/incremental_sort.sql b/test/sql/postgres_regress/incremental_sort.sql index 284a354d..071f8a52 100644 --- a/test/sql/postgres_regress/incremental_sort.sql +++ b/test/sql/postgres_regress/incremental_sort.sql @@ -1,8 +1,3 @@ --- When we have to sort the entire table, incremental sort will --- be slower than plain sort, so it should not be used. -explain (costs off) -select * from (select * from tenk1 order by four) t order by four, ten; - -- When there is a LIMIT clause, incremental sort is beneficial because -- it only has to sort some of the groups, and not the entire table. explain (costs off) diff --git a/test/sql/postgres_regress/indexing.sql b/test/sql/postgres_regress/indexing.sql index 429120e7..6f60d1dc 100644 --- a/test/sql/postgres_regress/indexing.sql +++ b/test/sql/postgres_regress/indexing.sql @@ -760,3 +760,94 @@ alter table parted_index_col_drop drop column c; \d parted_index_col_drop2 \d parted_index_col_drop11 drop table parted_index_col_drop; + +-- Check that invalid indexes are not selected when attaching a partition. +create table parted_inval_tab (a int) partition by range (a); +create index parted_inval_idx on parted_inval_tab (a); +create table parted_inval_tab_1 (a int) partition by range (a); +create table parted_inval_tab_1_1 partition of parted_inval_tab_1 + for values from (0) to (10); +create table parted_inval_tab_1_2 partition of parted_inval_tab_1 + for values from (10) to (20); +-- this creates an invalid index. +create index parted_inval_ixd_1 on only parted_inval_tab_1 (a); +-- this creates new indexes for all the partitions of parted_inval_tab_1, +-- discarding the invalid index created previously as what is chosen. +alter table parted_inval_tab attach partition parted_inval_tab_1 + for values from (1) to (100); +select indexrelid::regclass, indisvalid, + indrelid::regclass, inhparent::regclass + from pg_index idx left join + pg_inherits inh on (idx.indexrelid = inh.inhrelid) + where indexrelid::regclass::text like 'parted_inval%' + order by indexrelid::regclass::text collate "C"; +drop table parted_inval_tab; + +-- Check setup of indisvalid across a complex partition tree on index +-- creation. If one index in a partition index is invalid, so should its +-- partitioned index. +create table parted_isvalid_tab (a int, b int) partition by range (a); +create table parted_isvalid_tab_1 partition of parted_isvalid_tab + for values from (1) to (10) partition by range (a); +create table parted_isvalid_tab_2 partition of parted_isvalid_tab + for values from (10) to (20) partition by range (a); +create table parted_isvalid_tab_11 partition of parted_isvalid_tab_1 + for values from (1) to (5); +create table parted_isvalid_tab_12 partition of parted_isvalid_tab_1 + for values from (5) to (10); +-- create an invalid index on one of the partitions. +insert into parted_isvalid_tab_11 values (1, 0); +create index concurrently parted_isvalid_idx_11 on parted_isvalid_tab_11 ((a/b)); +-- The previous invalid index is selected, invalidating all the indexes up to +-- the top-most parent. +create index parted_isvalid_idx on parted_isvalid_tab ((a/b)); +select indexrelid::regclass, indisvalid, + indrelid::regclass, inhparent::regclass + from pg_index idx left join + pg_inherits inh on (idx.indexrelid = inh.inhrelid) + where indexrelid::regclass::text like 'parted_isvalid%' + order by indexrelid::regclass::text collate "C"; +drop table parted_isvalid_tab; + +-- Check state of replica indexes when attaching a partition. +begin; +create table parted_replica_tab (id int not null) partition by range (id); +create table parted_replica_tab_1 partition of parted_replica_tab + for values from (1) to (10) partition by range (id); +create table parted_replica_tab_11 partition of parted_replica_tab_1 + for values from (1) to (5); +create unique index parted_replica_idx + on only parted_replica_tab using btree (id); +create unique index parted_replica_idx_1 + on only parted_replica_tab_1 using btree (id); +-- This triggers an update of pg_index.indisreplident for parted_replica_idx. +alter table only parted_replica_tab_1 replica identity + using index parted_replica_idx_1; +create unique index parted_replica_idx_11 on parted_replica_tab_11 USING btree (id); +select indexrelid::regclass, indisvalid, indisreplident, + indrelid::regclass, inhparent::regclass + from pg_index idx left join + pg_inherits inh on (idx.indexrelid = inh.inhrelid) + where indexrelid::regclass::text like 'parted_replica%' + order by indexrelid::regclass::text collate "C"; +-- parted_replica_idx is not valid yet here, because parted_replica_idx_1 +-- is not valid. +alter index parted_replica_idx ATTACH PARTITION parted_replica_idx_1; +select indexrelid::regclass, indisvalid, indisreplident, + indrelid::regclass, inhparent::regclass + from pg_index idx left join + pg_inherits inh on (idx.indexrelid = inh.inhrelid) + where indexrelid::regclass::text like 'parted_replica%' + order by indexrelid::regclass::text collate "C"; +-- parted_replica_idx becomes valid here. +alter index parted_replica_idx_1 ATTACH PARTITION parted_replica_idx_11; +alter table only parted_replica_tab_1 replica identity + using index parted_replica_idx_1; +commit; +select indexrelid::regclass, indisvalid, indisreplident, + indrelid::regclass, inhparent::regclass + from pg_index idx left join + pg_inherits inh on (idx.indexrelid = inh.inhrelid) + where indexrelid::regclass::text like 'parted_replica%' + order by indexrelid::regclass::text collate "C"; +drop table parted_replica_tab; diff --git a/test/sql/postgres_regress/inet.sql b/test/sql/postgres_regress/inet.sql index d2ac85bb..3910eac3 100644 --- a/test/sql/postgres_regress/inet.sql +++ b/test/sql/postgres_regress/inet.sql @@ -252,3 +252,12 @@ SELECT a FROM (VALUES ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/0'::inet), ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'::inet) ) AS i(a) ORDER BY a; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('1234', 'cidr'); +SELECT * FROM pg_input_error_info('1234', 'cidr'); +SELECT pg_input_is_valid('192.168.198.200/24', 'cidr'); +SELECT * FROM pg_input_error_info('192.168.198.200/24', 'cidr'); + +SELECT pg_input_is_valid('1234', 'inet'); +SELECT * FROM pg_input_error_info('1234', 'inet'); diff --git a/test/sql/postgres_regress/inherit.sql b/test/sql/postgres_regress/inherit.sql index 195aedb5..e15f9c36 100644 --- a/test/sql/postgres_regress/inherit.sql +++ b/test/sql/postgres_regress/inherit.sql @@ -97,6 +97,25 @@ SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid; CREATE TEMP TABLE z (b TEXT, PRIMARY KEY(aa, b)) inherits (a); INSERT INTO z VALUES (NULL, 'text'); -- should fail +-- Check inherited UPDATE with first child excluded +create table some_tab (f1 int, f2 int, f3 int, check (f1 < 10) no inherit); +create table some_tab_child () inherits(some_tab); +insert into some_tab_child select i, i+1, 0 from generate_series(1,1000) i; +create index on some_tab_child(f1, f2); +-- while at it, also check that statement-level triggers fire +create function some_tab_stmt_trig_func() returns trigger as +$$begin raise notice 'updating some_tab'; return NULL; end;$$ +language plpgsql; +create trigger some_tab_stmt_trig + before update on some_tab execute function some_tab_stmt_trig_func(); + +explain (costs off) +update some_tab set f3 = 11 where f1 = 12 and f2 = 13; +update some_tab set f3 = 11 where f1 = 12 and f2 = 13; + +drop table some_tab cascade; +drop function some_tab_stmt_trig_func(); + -- Check inherited UPDATE with all children excluded create table some_tab (a int, b int); create table some_tab_child () inherits (some_tab); @@ -629,6 +648,44 @@ reset enable_seqscan; reset enable_indexscan; reset enable_bitmapscan; +-- +-- Check handling of MULTIEXPR SubPlans in inherited updates +-- +create table inhpar(f1 int, f2 name); +create table inhcld(f2 name, f1 int); +alter table inhcld inherit inhpar; +insert into inhpar select x, x::text from generate_series(1,5) x; +insert into inhcld select x::text, x from generate_series(6,10) x; + +explain (verbose, costs off) +update inhpar i set (f1, f2) = (select i.f1, i.f2 || '-' from int4_tbl limit 1); +update inhpar i set (f1, f2) = (select i.f1, i.f2 || '-' from int4_tbl limit 1); +select * from inhpar; + +drop table inhpar cascade; + +-- +-- And the same for partitioned cases +-- +create table inhpar(f1 int primary key, f2 name) partition by range (f1); +create table inhcld1(f2 name, f1 int primary key); +create table inhcld2(f1 int primary key, f2 name); +alter table inhpar attach partition inhcld1 for values from (1) to (5); +alter table inhpar attach partition inhcld2 for values from (5) to (100); +insert into inhpar select x, x::text from generate_series(1,10) x; + +explain (verbose, costs off) +update inhpar i set (f1, f2) = (select i.f1, i.f2 || '-' from int4_tbl limit 1); +update inhpar i set (f1, f2) = (select i.f1, i.f2 || '-' from int4_tbl limit 1); +select * from inhpar; + +-- Also check ON CONFLICT +insert into inhpar as i values (3), (7) on conflict (f1) + do update set (f1, f2) = (select i.f1, i.f2 || '+'); +select * from inhpar order by f1; -- tuple order might be unstable here + +drop table inhpar cascade; + -- -- Check handling of a constant-null CHECK constraint -- @@ -882,7 +939,7 @@ alter table permtest_child attach partition permtest_grandchild for values in (' alter table permtest_parent attach partition permtest_child for values in (1); create index on permtest_parent (left(c, 3)); insert into permtest_parent - select 1, 'a', left(md5(i::text), 5) from generate_series(0, 100) i; + select 1, 'a', left(fipshash(i::text), 5) from generate_series(0, 100) i; analyze permtest_parent; create role regress_no_child_access; revoke all on permtest_grandchild from regress_no_child_access; diff --git a/test/sql/postgres_regress/int2.sql b/test/sql/postgres_regress/int2.sql index ea29066b..df1e46d4 100644 --- a/test/sql/postgres_regress/int2.sql +++ b/test/sql/postgres_regress/int2.sql @@ -17,6 +17,17 @@ INSERT INTO INT2_TBL(f1) VALUES (''); SELECT * FROM INT2_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34', 'int2'); +SELECT pg_input_is_valid('asdf', 'int2'); +SELECT pg_input_is_valid('50000', 'int2'); +SELECT * FROM pg_input_error_info('50000', 'int2'); + +-- While we're here, check int2vector as well +SELECT pg_input_is_valid(' 1 3 5 ', 'int2vector'); +SELECT * FROM pg_input_error_info('1 asdf', 'int2vector'); +SELECT * FROM pg_input_error_info('50000', 'int2vector'); + SELECT * FROM INT2_TBL AS f(a, b); SELECT * FROM (TABLE int2_tbl) AS s (a, b); @@ -104,3 +115,43 @@ FROM (VALUES (-2.5::numeric), (0.5::numeric), (1.5::numeric), (2.5::numeric)) t(x); + + +-- non-decimal literals + +SELECT int2 '0b100101'; +SELECT int2 '0o273'; +SELECT int2 '0x42F'; + +SELECT int2 '0b'; +SELECT int2 '0o'; +SELECT int2 '0x'; + +-- cases near overflow +SELECT int2 '0b111111111111111'; +SELECT int2 '0b1000000000000000'; +SELECT int2 '0o77777'; +SELECT int2 '0o100000'; +SELECT int2 '0x7FFF'; +SELECT int2 '0x8000'; + +SELECT int2 '-0b1000000000000000'; +SELECT int2 '-0b1000000000000001'; +SELECT int2 '-0o100000'; +SELECT int2 '-0o100001'; +SELECT int2 '-0x8000'; +SELECT int2 '-0x8001'; + + +-- underscores + +SELECT int2 '1_000'; +SELECT int2 '1_2_3'; +SELECT int2 '0xE_FF'; +SELECT int2 '0o2_73'; +SELECT int2 '0b_10_0101'; + +-- error cases +SELECT int2 '_100'; +SELECT int2 '100_'; +SELECT int2 '10__000'; diff --git a/test/sql/postgres_regress/int4.sql b/test/sql/postgres_regress/int4.sql index f19077f3..e9d89e81 100644 --- a/test/sql/postgres_regress/int4.sql +++ b/test/sql/postgres_regress/int4.sql @@ -17,6 +17,12 @@ INSERT INTO INT4_TBL(f1) VALUES (''); SELECT * FROM INT4_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34', 'int4'); +SELECT pg_input_is_valid('asdf', 'int4'); +SELECT pg_input_is_valid('1000000000000', 'int4'); +SELECT * FROM pg_input_error_info('1000000000000', 'int4'); + SELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0'; SELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0'; @@ -164,3 +170,43 @@ FROM (VALUES (0::int4, 0::int4), SELECT lcm((-2147483648)::int4, 1::int4); -- overflow SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow + + +-- non-decimal literals + +SELECT int4 '0b100101'; +SELECT int4 '0o273'; +SELECT int4 '0x42F'; + +SELECT int4 '0b'; +SELECT int4 '0o'; +SELECT int4 '0x'; + +-- cases near overflow +SELECT int4 '0b1111111111111111111111111111111'; +SELECT int4 '0b10000000000000000000000000000000'; +SELECT int4 '0o17777777777'; +SELECT int4 '0o20000000000'; +SELECT int4 '0x7FFFFFFF'; +SELECT int4 '0x80000000'; + +SELECT int4 '-0b10000000000000000000000000000000'; +SELECT int4 '-0b10000000000000000000000000000001'; +SELECT int4 '-0o20000000000'; +SELECT int4 '-0o20000000001'; +SELECT int4 '-0x80000000'; +SELECT int4 '-0x80000001'; + + +-- underscores + +SELECT int4 '1_000_000'; +SELECT int4 '1_2_3'; +SELECT int4 '0x1EEE_FFFF'; +SELECT int4 '0o2_73'; +SELECT int4 '0b_10_0101'; + +-- error cases +SELECT int4 '_100'; +SELECT int4 '100_'; +SELECT int4 '100__000'; diff --git a/test/sql/postgres_regress/int8.sql b/test/sql/postgres_regress/int8.sql index 38b77196..33f664dd 100644 --- a/test/sql/postgres_regress/int8.sql +++ b/test/sql/postgres_regress/int8.sql @@ -16,6 +16,12 @@ INSERT INTO INT8_TBL(q1) VALUES (''); SELECT * FROM INT8_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34', 'int8'); +SELECT pg_input_is_valid('asdf', 'int8'); +SELECT pg_input_is_valid('10000000000000000000', 'int8'); +SELECT * FROM pg_input_error_info('10000000000000000000', 'int8'); + -- int8/int8 cmp SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789; SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789; @@ -245,3 +251,43 @@ FROM (VALUES (0::int8, 0::int8), SELECT lcm((-9223372036854775808)::int8, 1::int8); -- overflow SELECT lcm(9223372036854775807::int8, 9223372036854775806::int8); -- overflow + + +-- non-decimal literals + +SELECT int8 '0b100101'; +SELECT int8 '0o273'; +SELECT int8 '0x42F'; + +SELECT int8 '0b'; +SELECT int8 '0o'; +SELECT int8 '0x'; + +-- cases near overflow +SELECT int8 '0b111111111111111111111111111111111111111111111111111111111111111'; +SELECT int8 '0b1000000000000000000000000000000000000000000000000000000000000000'; +SELECT int8 '0o777777777777777777777'; +SELECT int8 '0o1000000000000000000000'; +SELECT int8 '0x7FFFFFFFFFFFFFFF'; +SELECT int8 '0x8000000000000000'; + +SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000000'; +SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000001'; +SELECT int8 '-0o1000000000000000000000'; +SELECT int8 '-0o1000000000000000000001'; +SELECT int8 '-0x8000000000000000'; +SELECT int8 '-0x8000000000000001'; + + +-- underscores + +SELECT int8 '1_000_000'; +SELECT int8 '1_2_3'; +SELECT int8 '0x1EEE_FFFF'; +SELECT int8 '0o2_73'; +SELECT int8 '0b_10_0101'; + +-- error cases +SELECT int8 '_100'; +SELECT int8 '100_'; +SELECT int8 '100__000'; diff --git a/test/sql/postgres_regress/interval.sql b/test/sql/postgres_regress/interval.sql index 97d33a13..56feda1a 100644 --- a/test/sql/postgres_regress/interval.sql +++ b/test/sql/postgres_regress/interval.sql @@ -32,6 +32,13 @@ INSERT INTO INTERVAL_TBL (f1) VALUES ('5 months 12 hours'); INSERT INTO INTERVAL_TBL (f1) VALUES ('badly formatted interval'); INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 30 eons ago'); +-- Test non-error-throwing API +SELECT pg_input_is_valid('1.5 weeks', 'interval'); +SELECT pg_input_is_valid('garbage', 'interval'); +SELECT pg_input_is_valid('@ 30 eons ago', 'interval'); +SELECT * FROM pg_input_error_info('garbage', 'interval'); +SELECT * FROM pg_input_error_info('@ 30 eons ago', 'interval'); + -- test interval operators SELECT * FROM INTERVAL_TBL; @@ -277,6 +284,9 @@ SELECT interval '-23 hours 45 min 12.34 sec', interval '-1 year 2 months 1 day 23 hours 45 min 12.34 sec', interval '-1 year 2 months 1 day 23 hours 45 min +12.34 sec'; +-- edge case for sign-matching rules +SELECT interval ''; -- error + -- test outputting iso8601 intervals SET IntervalStyle to iso_8601; select interval '0' AS "zero", @@ -318,6 +328,7 @@ select interval 'P1.0Y0M3DT4H5M6S'; select interval 'P1.1Y0M3DT4H5M6S'; select interval 'P1.Y0M3DT4H5M6S'; select interval 'P.1Y0M3DT4H5M6S'; +select interval 'P10.5e4Y'; -- not per spec, but we've historically taken it select interval 'P.Y0M3DT4H5M6S'; -- error -- test a couple rounding cases that changed since 8.3 w/ HAVE_INT64_TIMESTAMP. diff --git a/test/sql/postgres_regress/join.sql b/test/sql/postgres_regress/join.sql index b5f41c49..3e5032b0 100644 --- a/test/sql/postgres_regress/join.sql +++ b/test/sql/postgres_regress/join.sql @@ -411,8 +411,8 @@ select * from int8_tbl i1 left join (int8_tbl i2 join order by 1, 2; -- --- regression test: check a case where join_clause_is_movable_into() gives --- an imprecise result, causing an assertion failure +-- regression test: check a case where join_clause_is_movable_into() +-- used to give an imprecise result, causing an assertion failure -- select count(*) from @@ -441,6 +441,115 @@ select a.f1, b.f1, t.thousand, t.tenthous from (select sum(f1) as f1 from int4_tbl i4b) b where b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous; +-- +-- checks for correct handling of quals in multiway outer joins +-- +explain (costs off) +select t1.f1 +from int4_tbl t1, int4_tbl t2 + left join int4_tbl t3 on t3.f1 > 0 + left join int4_tbl t4 on t3.f1 > 1 +where t4.f1 is null; + +select t1.f1 +from int4_tbl t1, int4_tbl t2 + left join int4_tbl t3 on t3.f1 > 0 + left join int4_tbl t4 on t3.f1 > 1 +where t4.f1 is null; + +explain (costs off) +select * +from int4_tbl t1 left join int4_tbl t2 on true + left join int4_tbl t3 on t2.f1 > 0 + left join int4_tbl t4 on t3.f1 > 0; + +explain (costs off) +select * from onek t1 + left join onek t2 on t1.unique1 = t2.unique1 + left join onek t3 on t2.unique1 != t3.unique1 + left join onek t4 on t3.unique1 = t4.unique1; + +explain (costs off) +select * from int4_tbl t1 + left join (select now() from int4_tbl t2 + left join int4_tbl t3 on t2.f1 = t3.f1 + left join int4_tbl t4 on t3.f1 = t4.f1) s on true + inner join int4_tbl t5 on true; + +explain (costs off) +select * from int4_tbl t1 + left join int4_tbl t2 on true + left join int4_tbl t3 on true + left join int4_tbl t4 on t2.f1 = t3.f1; + +explain (costs off) +select * from int4_tbl t1 + left join int4_tbl t2 on true + left join int4_tbl t3 on t2.f1 = t3.f1 + left join int4_tbl t4 on t3.f1 != t4.f1; + +explain (costs off) +select * from int4_tbl t1 + left join (int4_tbl t2 left join int4_tbl t3 on t2.f1 > 0) on t2.f1 > 1 + left join int4_tbl t4 on t2.f1 > 2 and t3.f1 > 3 +where t1.f1 = coalesce(t2.f1, 1); + +explain (costs off) +select * from int4_tbl t1 + left join ((select t2.f1 from int4_tbl t2 + left join int4_tbl t3 on t2.f1 > 0 + where t3.f1 is null) s + left join tenk1 t4 on s.f1 > 1) + on s.f1 = t1.f1; + +explain (costs off) +select * from int4_tbl t1 + left join ((select t2.f1 from int4_tbl t2 + left join int4_tbl t3 on t2.f1 > 0 + where t2.f1 <> coalesce(t3.f1, -1)) s + left join tenk1 t4 on s.f1 > 1) + on s.f1 = t1.f1; + +explain (costs off) +select * from onek t1 + left join onek t2 on t1.unique1 = t2.unique1 + left join onek t3 on t2.unique1 = t3.unique1 + left join onek t4 on t3.unique1 = t4.unique1 and t2.unique2 = t4.unique2; + +explain (costs off) +select * from int8_tbl t1 left join + (int8_tbl t2 left join int8_tbl t3 full join int8_tbl t4 on false on false) + left join int8_tbl t5 on t2.q1 = t5.q1 +on t2.q2 = 123; + +explain (costs off) +select * from int8_tbl t1 + left join int8_tbl t2 on true + left join lateral + (select * from int8_tbl t3 where t3.q1 = t2.q1 offset 0) s + on t2.q1 = 1; + +explain (costs off) +select * from int8_tbl t1 + left join int8_tbl t2 on true + left join lateral + (select * from generate_series(t2.q1, 100)) s + on t2.q1 = 1; + +explain (costs off) +select * from int8_tbl t1 + left join int8_tbl t2 on true + left join lateral + (select t2.q1 from int8_tbl t3) s + on t2.q1 = 1; + +explain (costs off) +select * from onek t1 + left join onek t2 on true + left join lateral + (select * from onek t3 where t3.two = t2.two offset 0) s + on t2.unique1 = 1; + -- -- check a case where we formerly got confused by conflicting sort orders -- in redundant merge join path keys @@ -472,6 +581,24 @@ select count(*) from (select * from tenk1 y order by y.unique2) y on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2; +set enable_hashjoin = 0; +set enable_nestloop = 0; +set enable_hashagg = 0; + +-- +-- Check that we use the pathkeys from a prefix of the group by / order by +-- clause for the join pathkeys when that prefix covers all join quals. We +-- expect this to lead to an incremental sort for the group by / order by. +-- +explain (costs off) +select x.thousand, x.twothousand, count(*) +from tenk1 x inner join tenk1 y on x.thousand = y.thousand +group by x.thousand, x.twothousand +order by x.thousand desc, x.twothousand; + +reset enable_hashagg; +reset enable_nestloop; +reset enable_hashjoin; -- -- Clean up @@ -590,21 +717,61 @@ reset enable_memoize; create temp table tt3(f1 int, f2 text); insert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x; -create index tt3i on tt3(f1); analyze tt3; create temp table tt4(f1 int); insert into tt4 values (0),(1),(9999); analyze tt4; +set enable_nestloop to off; + +EXPLAIN (COSTS OFF) SELECT a.f1 FROM tt4 a LEFT JOIN ( SELECT b.f1 FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1) - WHERE c.f1 IS NULL + WHERE COALESCE(c.f1, 0) = 0 ) AS d ON (a.f1 = d.f1) -WHERE d.f1 IS NULL; +WHERE COALESCE(d.f1, 0) = 0 +ORDER BY 1; + +SELECT a.f1 +FROM tt4 a +LEFT JOIN ( + SELECT b.f1 + FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1) + WHERE COALESCE(c.f1, 0) = 0 +) AS d ON (a.f1 = d.f1) +WHERE COALESCE(d.f1, 0) = 0 +ORDER BY 1; + +reset enable_nestloop; + +-- +-- basic semijoin and antijoin recognition tests +-- + +explain (costs off) +select a.* from tenk1 a +where unique1 in (select unique2 from tenk1 b); + +-- sadly, this is not an antijoin +explain (costs off) +select a.* from tenk1 a +where unique1 not in (select unique2 from tenk1 b); + +explain (costs off) +select a.* from tenk1 a +where exists (select 1 from tenk1 b where a.unique1 = b.unique2); + +explain (costs off) +select a.* from tenk1 a +where not exists (select 1 from tenk1 b where a.unique1 = b.unique2); + +explain (costs off) +select a.* from tenk1 a left join tenk1 b on a.unique1 = b.unique2 +where b.unique2 is null; -- -- regression test for proper handling of outer joins within antijoins @@ -1113,6 +1280,31 @@ select * from select a as b) as t3 where b; +-- Test PHV in a semijoin qual, which confused useless-RTE removal (bug #17700) +explain (verbose, costs off) +with ctetable as not materialized ( select 1 as f1 ) +select * from ctetable c1 +where f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true ); + +with ctetable as not materialized ( select 1 as f1 ) +select * from ctetable c1 +where f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true ); + +-- Test PHV that winds up in a Result node, despite having nonempty nullingrels +explain (verbose, costs off) +select table_catalog, table_name +from int4_tbl t1 + inner join (int8_tbl t2 + left join information_schema.column_udt_usage on null) + on null; + +-- Test handling of qual pushdown to appendrel members with non-Var outputs +explain (verbose, costs off) +select * from int4_tbl left join ( + select text 'foo' union all select text 'bar' +) ss(x) on true +where ss.x is null; + -- -- test inlining of immutable functions -- @@ -1310,6 +1502,15 @@ select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand) from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand) where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44; +-- related case + +explain (costs off) +select * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1, + lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss; + +select * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1, + lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss; + -- -- check handling of join aliases when flattening multiple levels of subquery -- @@ -1341,6 +1542,30 @@ left join ) foo3 using (join_key); +-- +-- check handling of a variable-free join alias +-- +explain (verbose, costs off) +select * from +int4_tbl i0 left join +( (select *, 123 as x from int4_tbl i1) ss1 + left join + (select *, q2 as x from int8_tbl i2) ss2 + using (x) +) ss0 +on (i0.f1 = ss0.f1) +order by i0.f1, x; + +select * from +int4_tbl i0 left join +( (select *, 123 as x from int4_tbl i1) ss1 + left join + (select *, q2 as x from int8_tbl i2) ss2 + using (x) +) ss0 +on (i0.f1 = ss0.f1) +order by i0.f1, x; + -- -- test successful handling of nested outer joins with degenerate join quals -- @@ -1435,6 +1660,27 @@ select * from left join int4_tbl i4 on i8.q1 = i4.f1; +-- check handling of a variable-free qual for a non-commutable outer join +explain (costs off) +select nspname +from (select 1 as x) ss1 +left join +( select n.nspname, c.relname + from pg_class c left join pg_namespace n on n.oid = c.relnamespace + where c.relkind = 'r' +) ss2 on false; + +-- check handling of apparently-commutable outer joins with non-commutable +-- joins between them +explain (costs off) +select 1 from + int4_tbl i4 + left join int8_tbl i8 on i4.f1 is not null + left join (select 1 as a) ss1 on null + join int4_tbl i42 on ss1.a is null or i8.q1 <> i8.q2 + right join (select 2 as b) ss2 + on ss2.b < i4.f1; + -- -- test for appropriate join order in the presence of lateral references -- @@ -1488,6 +1734,45 @@ select 1 from lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1 where tt1.f1 = ss1.c0; +explain (verbose, costs off) +select 1 from + int4_tbl as i4 + inner join + ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1 + right join (select 1 as z) as ss2 on true) + on false, + lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3; + +select 1 from + int4_tbl as i4 + inner join + ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1 + right join (select 1 as z) as ss2 on true) + on false, + lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3; + +-- +-- check a case where we formerly generated invalid parameterized paths +-- + +begin; + +create temp table t (a int unique); + +explain (costs off) +select 1 from t t1 + join lateral (select t1.a from (select 1) foo offset 0) as s1 on true + join + (select 1 from t t2 + inner join (t t3 + left join (t t4 left join t t5 on t4.a = 1) + on t3.a = t4.a) + on false + where t3.a = coalesce(t5.a,1)) as s2 + on true; + +rollback; + -- -- check a case in which a PlaceHolderVar forces join order -- @@ -1560,6 +1845,67 @@ select a.q2, b.q1 reset enable_hashjoin; reset enable_nestloop; +-- +-- test join strength reduction with a SubPlan providing the proof +-- + +explain (costs off) +select a.unique1, b.unique2 + from onek a left join onek b on a.unique1 = b.unique2 + where b.unique2 = any (select q1 from int8_tbl c where c.q1 < b.unique1); + +select a.unique1, b.unique2 + from onek a left join onek b on a.unique1 = b.unique2 + where b.unique2 = any (select q1 from int8_tbl c where c.q1 < b.unique1); + +-- +-- test full-join strength reduction +-- + +explain (costs off) +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where a.unique1 = 42; + +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where a.unique1 = 42; + +explain (costs off) +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where b.unique2 = 43; + +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where b.unique2 = 43; + +explain (costs off) +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where a.unique1 = 42 and b.unique2 = 42; + +select a.unique1, b.unique2 + from onek a full join onek b on a.unique1 = b.unique2 + where a.unique1 = 42 and b.unique2 = 42; + +-- +-- test result-RTE removal underneath a full join +-- + +explain (costs off) +select * from + (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1 +full join + (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2 +on true; + +select * from + (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1 +full join + (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2 +on true; + -- -- test join removal -- @@ -1588,6 +1934,96 @@ select id from a where id in ( select b.id from b left join c on b.id = c.id ); +-- check optimization with oddly-nested outer joins +explain (costs off) +select a1.id from + (a a1 left join a a2 on true) + left join + (a a3 left join a a4 on a3.id = a4.id) + on a2.id = a3.id; + +explain (costs off) +select a1.id from + (a a1 left join a a2 on a1.id = a2.id) + left join + (a a3 left join a a4 on a3.id = a4.id) + on a2.id = a3.id; + +explain (costs off) +select 1 from a t1 + left join a t2 on true + inner join a t3 on true + left join a t4 on t2.id = t4.id and t2.id = t3.id; + +-- another example (bug #17781) +explain (costs off) +select ss1.f1 +from int4_tbl as t1 + left join (int4_tbl as t2 + right join int4_tbl as t3 on null + left join (int4_tbl as t4 + right join int8_tbl as t5 on null) + on t2.f1 = t4.f1 + left join ((select null as f1 from int4_tbl as t6) as ss1 + inner join int8_tbl as t7 on null) + on t5.q1 = t7.q2) + on false; + +-- variant with Var rather than PHV coming from t6 +explain (costs off) +select ss1.f1 +from int4_tbl as t1 + left join (int4_tbl as t2 + right join int4_tbl as t3 on null + left join (int4_tbl as t4 + right join int8_tbl as t5 on null) + on t2.f1 = t4.f1 + left join ((select f1 from int4_tbl as t6) as ss1 + inner join int8_tbl as t7 on null) + on t5.q1 = t7.q2) + on false; + +-- per further discussion of bug #17781 +explain (costs off) +select ss1.x +from (select f1/2 as x from int4_tbl i4 left join a on a.id = i4.f1) ss1 + right join int8_tbl i8 on true +where current_user is not null; -- this is to add a Result node + +-- and further discussion of bug #17781 +explain (costs off) +select * +from int8_tbl t1 + left join (int8_tbl t2 left join onek t3 on t2.q1 > t3.unique1) + on t1.q2 = t2.q2 + left join onek t4 + on t2.q2 < t3.unique2; + +-- More tests of correct placement of pseudoconstant quals + +-- simple constant-false condition +explain (costs off) +select * from int8_tbl t1 left join + (int8_tbl t2 inner join int8_tbl t3 on false + left join int8_tbl t4 on t2.q2 = t4.q2) +on t1.q1 = t2.q1; + +-- deduce constant-false from an EquivalenceClass +explain (costs off) +select * from int8_tbl t1 left join + (int8_tbl t2 inner join int8_tbl t3 on (t2.q1-t3.q2) = 0 and (t2.q1-t3.q2) = 1 + left join int8_tbl t4 on t2.q2 = t4.q2) +on t1.q1 = t2.q1; + +-- pseudoconstant based on an outer-level Param +explain (costs off) +select exists( + select * from int8_tbl t1 left join + (int8_tbl t2 inner join int8_tbl t3 on x0.f1 = 1 + left join int8_tbl t4 on t2.q2 = t4.q2) + on t1.q1 = t2.q1 +) from int4_tbl x0; + -- check that join removal works for a left join when joining a subquery -- that is guaranteed to be unique by its GROUP BY clause explain (costs off) @@ -1612,6 +2048,11 @@ explain (costs off) select d.* from d left join (select distinct * from b) s on d.a = s.id; +-- join removal is not possible here +explain (costs off) +select 1 from a t1 + left join (a t2 left join a t3 on t2.id = 1) on t2.id = 1; + -- check join removal works when uniqueness of the join condition is enforced -- by a UNION explain (costs off) @@ -1628,6 +2069,19 @@ explain (costs off) select 1 from (select a.id FROM a left join b on a.b_id = b.id) q, lateral generate_series(1, q.id) gs(i) where q.id = gs.i; +-- check join removal within RHS of an outer join +explain (costs off) +select c.id, ss.a from c + left join (select d.a from onerow, d left join b on d.a = b.id) ss + on c.id = ss.a; + +CREATE TEMP TABLE parted_b (id int PRIMARY KEY) partition by range(id); +CREATE TEMP TABLE parted_b1 partition of parted_b for values from (0) to (10); + +-- test join removals on a partitioned table +explain (costs off) +select a.* from a left join parted_b pb on a.b_id = pb.id; + rollback; create temp table parent (k int primary key, pd int); @@ -1692,6 +2146,29 @@ SELECT * FROM FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2 ON true; +-- join removal bug #17769: can't remove if there's a pushed-down reference +EXPLAIN (COSTS OFF) +SELECT q2 FROM + (SELECT * + FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss + WHERE COALESCE(dat1, 0) = q1; + +-- join removal bug #17773: otherwise-removable PHV appears in a qual condition +EXPLAIN (VERBOSE, COSTS OFF) +SELECT q2 FROM + (SELECT q2, 'constant'::text AS x + FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss + RIGHT JOIN int4_tbl ON NULL + WHERE x >= x; + +-- join removal bug #17786: check that OR conditions are cleaned up +EXPLAIN (COSTS OFF) +SELECT f1, x +FROM int4_tbl + JOIN ((SELECT 42 AS x FROM int8_tbl LEFT JOIN innertab ON q1 = id) AS ss1 + RIGHT JOIN tenk1 ON NULL) + ON tenk1.unique1 = ss1.x OR tenk1.unique2 = ss1.x; + rollback; -- another join removal bug: we must clean up correctly when removing a PHV @@ -1734,6 +2211,63 @@ where ss.stringu2 !~* ss.case1; rollback; +-- another join removal bug: we must clean up EquivalenceClasses too +begin; + +create temp table t (a int unique); +insert into t values (1); + +explain (costs off) +select 1 +from t t1 + left join (select 2 as c + from t t2 left join t t3 on t2.a = t3.a) s + on true +where t1.a = s.c; + +select 1 +from t t1 + left join (select 2 as c + from t t2 left join t t3 on t2.a = t3.a) s + on true +where t1.a = s.c; + +rollback; + +-- test cases where we can remove a join, but not a PHV computed at it +begin; + +create temp table t (a int unique, b int); +insert into t values (1,1), (2,2); + +explain (costs off) +select 1 +from t t1 + left join (select t2.a, 1 as c + from t t2 left join t t3 on t2.a = t3.a) s + on true + left join t t4 on true +where s.a < s.c; + +explain (costs off) +select t1.a, s.* +from t t1 + left join lateral (select t2.a, coalesce(t1.a, 1) as c + from t t2 left join t t3 on t2.a = t3.a) s + on true + left join t t4 on true +where s.a < s.c; + +select t1.a, s.* +from t t1 + left join lateral (select t2.a, coalesce(t1.a, 1) as c + from t t2 left join t t3 on t2.a = t3.a) s + on true + left join t t4 on true +where s.a < s.c; + +rollback; + -- test case to expose miscomputation of required relid set for a PHV explain (verbose, costs off) select i8.*, ss.v, t.unique2 @@ -1785,6 +2319,8 @@ select t2.uunique1 from tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer "t2" suggestion select uunique1 from tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once +select ctid from + tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, need qualification -- -- Take care to reference the correct RTE @@ -1796,6 +2332,12 @@ select atts.relid::regclass, s.* from pg_stats s join indexrelid from pg_index i) atts on atts.attnum = a.attnum where schemaname != 'pg_catalog'; +-- Test bug in rangetable flattening +explain (verbose, costs off) +select 1 from + (select * from int8_tbl where q1 <> (select 42) offset 0) ss +where false; + -- -- Test LATERAL -- @@ -1989,6 +2531,12 @@ select * from select * from (select 3 as z offset 0) z where z.z = x.x ) zz on zz.z = y.y; +-- a new postponed-quals issue (bug #17768) +explain (costs off) +select * from int4_tbl t1, + lateral (select * from int4_tbl t2 inner join int4_tbl t3 on t1.f1 = 1 + inner join (int4_tbl t4 left join int4_tbl t5 on true) on true) ss; + -- check dummy rels with lateral references (bug #15694) explain (verbose, costs off) select * from int8_tbl i8 left join lateral @@ -2253,6 +2801,15 @@ explain (verbose, costs off) select * from j1 left join j2 on j1.id1 = j2.id1 where j1.id2 = 1; +create unique index j1_id2_idx on j1(id2) where id2 is not null; + +-- ensure we don't use a partial unique index as unique proofs +explain (verbose, costs off) +select * from j1 +inner join j2 on j1.id2 = j2.id2; + +drop index j1_id2_idx; + -- validate logic in merge joins which skips mark and restore. -- it should only do this if all quals which were used to detect the unique -- are present as join quals, and not plain quals. diff --git a/test/sql/postgres_regress/join_hash.sql b/test/sql/postgres_regress/join_hash.sql index 77dbc182..6b0688ab 100644 --- a/test/sql/postgres_regress/join_hash.sql +++ b/test/sql/postgres_regress/join_hash.sql @@ -187,6 +187,8 @@ select original > 1 as initially_multibatch, final > original as increased_batch $$ select count(*) from simple r join simple s using (id); $$); +-- parallel full multi-batch hash join +select count(*) from simple r full outer join simple s using (id); rollback to settings; -- The "bad" case: during execution we need to increase number of @@ -435,7 +437,16 @@ explain (costs off) select count(*) from simple r full outer join simple s using (id); rollback to settings; --- parallelism not possible with parallel-oblivious outer hash join +-- parallelism not possible with parallel-oblivious full hash join +savepoint settings; +set enable_parallel_hash = off; +set local max_parallel_workers_per_gather = 2; +explain (costs off) + select count(*) from simple r full outer join simple s using (id); +select count(*) from simple r full outer join simple s using (id); +rollback to settings; + +-- parallelism is possible with parallel-aware full hash join savepoint settings; set local max_parallel_workers_per_gather = 2; explain (costs off) @@ -443,7 +454,7 @@ explain (costs off) select count(*) from simple r full outer join simple s using (id); rollback to settings; --- An full outer join where every record is not matched. +-- A full outer join where every record is not matched. -- non-parallel savepoint settings; @@ -453,7 +464,16 @@ explain (costs off) select count(*) from simple r full outer join simple s on (r.id = 0 - s.id); rollback to settings; --- parallelism not possible with parallel-oblivious outer hash join +-- parallelism not possible with parallel-oblivious full hash join +savepoint settings; +set enable_parallel_hash = off; +set local max_parallel_workers_per_gather = 2; +explain (costs off) + select count(*) from simple r full outer join simple s on (r.id = 0 - s.id); +select count(*) from simple r full outer join simple s on (r.id = 0 - s.id); +rollback to settings; + +-- parallelism is possible with parallel-aware full hash join savepoint settings; set local max_parallel_workers_per_gather = 2; explain (costs off) @@ -461,6 +481,7 @@ explain (costs off) select count(*) from simple r full outer join simple s on (r.id = 0 - s.id); rollback to settings; + -- exercise special code paths for huge tuples (note use of non-strict -- expression and left join required to get the detoasted tuple into -- the hash table) @@ -485,8 +506,35 @@ $$ $$); rollback to settings; -rollback; +-- Hash join reuses the HOT status bit to indicate match status. This can only +-- be guaranteed to produce correct results if all the hash join tuple match +-- bits are reset before reuse. This is done upon loading them into the +-- hashtable. +SAVEPOINT settings; +SET enable_parallel_hash = on; +SET min_parallel_table_scan_size = 0; +SET parallel_setup_cost = 0; +SET parallel_tuple_cost = 0; +CREATE TABLE hjtest_matchbits_t1(id int); +CREATE TABLE hjtest_matchbits_t2(id int); +INSERT INTO hjtest_matchbits_t1 VALUES (1); +INSERT INTO hjtest_matchbits_t2 VALUES (2); +-- Update should create a HOT tuple. If this status bit isn't cleared, we won't +-- correctly emit the NULL-extended unmatching tuple in full hash join. +UPDATE hjtest_matchbits_t2 set id = 2; +SELECT * FROM hjtest_matchbits_t1 t1 FULL JOIN hjtest_matchbits_t2 t2 ON t1.id = t2.id + ORDER BY t1.id; +-- Test serial full hash join. +-- Resetting parallel_setup_cost should force a serial plan. +-- Just to be safe, however, set enable_parallel_hash to off, as parallel full +-- hash joins are only supported with shared hashtables. +RESET parallel_setup_cost; +SET enable_parallel_hash = off; +SELECT * FROM hjtest_matchbits_t1 t1 FULL JOIN hjtest_matchbits_t2 t2 ON t1.id = t2.id; +ROLLBACK TO settings; + +rollback; -- Verify that hash key expressions reference the correct -- nodes. Hashjoin's hashkeys need to reference its outer plan, Hash's @@ -556,3 +604,22 @@ WHERE AND hjtest_1.a <> hjtest_2.b; ROLLBACK; + +-- Verify that we behave sanely when the inner hash keys contain parameters +-- (that is, outer or lateral references). This situation has to defeat +-- re-use of the inner hash table across rescans. +begin; +set local enable_hashjoin = on; + +explain (costs off) +select i8.q2, ss.* from +int8_tbl i8, +lateral (select t1.fivethous, i4.f1 from tenk1 t1 join int4_tbl i4 + on t1.fivethous = i4.f1+i8.q2 order by 1,2) ss; + +select i8.q2, ss.* from +int8_tbl i8, +lateral (select t1.fivethous, i4.f1 from tenk1 t1 join int4_tbl i4 + on t1.fivethous = i4.f1+i8.q2 order by 1,2) ss; + +rollback; diff --git a/test/sql/postgres_regress/json.sql b/test/sql/postgres_regress/json.sql index e366c6f5..ec57dfe7 100644 --- a/test/sql/postgres_regress/json.sql +++ b/test/sql/postgres_regress/json.sql @@ -7,6 +7,11 @@ SELECT '"abc def"'::json; -- ERROR, unescaped newline in string constant SELECT '"\n\"\\"'::json; -- OK, legal escapes SELECT '"\v"'::json; -- ERROR, not a valid JSON escape + +-- Check fast path for longer strings (at least 16 bytes long) +SELECT ('"'||repeat('.', 12)||'abc"')::json; -- OK +SELECT ('"'||repeat('.', 12)||'abc\n"')::json; -- OK, legal escapes + -- see json_encoding test for input with unicode escapes -- Numbers. @@ -76,6 +81,11 @@ SELECT '{ "averyveryveryveryveryveryveryveryveryverylongfieldname":}'::json; -- ERROR missing value for last field +-- test non-error-throwing input +select pg_input_is_valid('{"a":true}', 'json'); +select pg_input_is_valid('{"a":true', 'json'); +select * from pg_input_error_info('{"a":true', 'json'); + --constructors -- array_to_json diff --git a/test/sql/postgres_regress/json_encoding.sql b/test/sql/postgres_regress/json_encoding.sql index d7fac697..aceb8dbc 100644 --- a/test/sql/postgres_regress/json_encoding.sql +++ b/test/sql/postgres_regress/json_encoding.sql @@ -76,3 +76,7 @@ SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + +-- soft error for input-time failure + +select * from pg_input_error_info('{ "a": "\ud83d\ude04\ud83d\udc36" }', 'jsonb'); diff --git a/test/sql/postgres_regress/jsonb.sql b/test/sql/postgres_regress/jsonb.sql index 8d259662..6dae715a 100644 --- a/test/sql/postgres_regress/jsonb.sql +++ b/test/sql/postgres_regress/jsonb.sql @@ -86,6 +86,12 @@ SELECT '{ "averyveryveryveryveryveryveryveryveryverylongfieldname":}'::jsonb; -- ERROR missing value for last field +-- test non-error-throwing input +select pg_input_is_valid('{"a":true}', 'jsonb'); +select pg_input_is_valid('{"a":true', 'jsonb'); +select * from pg_input_error_info('{"a":true', 'jsonb'); +select * from pg_input_error_info('{"a":1e1000000}', 'jsonb'); + -- make sure jsonb is passed through json generators without being escaped SELECT array_to_json(ARRAY [jsonb '{"a":1}', jsonb '{"b":[2,3]}']); @@ -407,6 +413,9 @@ SELECT jsonb_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; +-- edge case for parser +SELECT jsonb_object_agg(DISTINCT 'a', 'abc'); + -- jsonb_object -- empty object, one dimension @@ -1415,6 +1424,24 @@ insert into test_jsonb_subscript values (1, 'null'); update test_jsonb_subscript set test_json[0] = '1'; update test_jsonb_subscript set test_json[0][0] = '1'; +-- try some things with short-header and toasted subscript values + +drop table test_jsonb_subscript; +create temp table test_jsonb_subscript ( + id text, + test_json jsonb +); + +insert into test_jsonb_subscript values('foo', '{"foo": "bar"}'); +insert into test_jsonb_subscript + select s, ('{"' || s || '": "bar"}')::jsonb from repeat('xyzzy', 500) s; +select length(id), test_json[id] from test_jsonb_subscript; +update test_jsonb_subscript set test_json[id] = '"baz"'; +select length(id), test_json[id] from test_jsonb_subscript; +\x +table test_jsonb_subscript; +\x + -- jsonb to tsvector select to_tsvector('{"a": "aaa bbb ddd ccc", "b": ["eee fff ggg"], "c": {"d": "hhh iii"}}'::jsonb); diff --git a/test/sql/postgres_regress/jsonb_jsonpath.sql b/test/sql/postgres_regress/jsonb_jsonpath.sql index 60f73cb0..e0ce5092 100644 --- a/test/sql/postgres_regress/jsonb_jsonpath.sql +++ b/test/sql/postgres_regress/jsonb_jsonpath.sql @@ -414,6 +414,9 @@ select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime().type()'); select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime()'); select jsonb_path_query('"2017-03-10T12:34:56+3:10"', '$.datetime()'); select jsonb_path_query('"2017-03-10t12:34:56+3:10"', '$.datetime()'); +select jsonb_path_query('"2017-03-10 12:34:56.789+3:10"', '$.datetime()'); +select jsonb_path_query('"2017-03-10T12:34:56.789+3:10"', '$.datetime()'); +select jsonb_path_query('"2017-03-10t12:34:56.789+3:10"', '$.datetime()'); select jsonb_path_query('"12:34:56"', '$.datetime().type()'); select jsonb_path_query('"12:34:56"', '$.datetime()'); select jsonb_path_query('"12:34:56+3"', '$.datetime().type()'); @@ -532,6 +535,8 @@ set time zone default; SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*]'); SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*] ? (@.a > 10)'); +SELECT jsonb_path_query('[{"a": 1}]', '$undefined_var'); +SELECT jsonb_path_query('[{"a": 1}]', 'false'); SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a'); SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a'); @@ -547,12 +552,16 @@ SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)'); SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)'); SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}'); SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}'); +SELECT jsonb_path_query_first('[{"a": 1}]', '$undefined_var'); +SELECT jsonb_path_query_first('[{"a": 1}]', 'false'); SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*].a ? (@ > 1)'; SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*] ? (@.a > 2)'; SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 1)'); SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 1, "max": 4}'); SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 3, "max": 4}'); +SELECT jsonb_path_exists('[{"a": 1}]', '$undefined_var'); +SELECT jsonb_path_exists('[{"a": 1}]', 'false'); SELECT jsonb_path_match('true', '$', silent => false); SELECT jsonb_path_match('false', '$', silent => false); @@ -569,6 +578,8 @@ SELECT jsonb_path_match('[true, true]', '$[*]', silent => false); SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 1'; SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 2'; SELECT jsonb_path_match('[{"a": 1}, {"a": 2}]', '$[*].a > 1'); +SELECT jsonb_path_match('[{"a": 1}]', '$undefined_var'); +SELECT jsonb_path_match('[{"a": 1}]', 'false'); -- test string comparison (Unicode codepoint collation) WITH str(j, num) AS diff --git a/test/sql/postgres_regress/jsonpath.sql b/test/sql/postgres_regress/jsonpath.sql index d4917146..56e0bef5 100644 --- a/test/sql/postgres_regress/jsonpath.sql +++ b/test/sql/postgres_regress/jsonpath.sql @@ -152,8 +152,11 @@ select '$ ? (@.a < 10.1e+1)'::jsonpath; select '$ ? (@.a < -10.1e+1)'::jsonpath; select '$ ? (@.a < +10.1e+1)'::jsonpath; +-- numeric literals + select '0'::jsonpath; select '00'::jsonpath; +select '0755'::jsonpath; select '0.0'::jsonpath; select '0.000'::jsonpath; select '0.000e1'::jsonpath; @@ -187,3 +190,65 @@ select '1..e3'::jsonpath; select '(1.).e'::jsonpath; select '(1.).e3'::jsonpath; select '1?(2>3)'::jsonpath; + +-- nondecimal +select '0b100101'::jsonpath; +select '0o273'::jsonpath; +select '0x42F'::jsonpath; + +-- error cases +select '0b'::jsonpath; +select '1b'::jsonpath; +select '0b0x'::jsonpath; + +select '0o'::jsonpath; +select '1o'::jsonpath; +select '0o0x'::jsonpath; + +select '0x'::jsonpath; +select '1x'::jsonpath; +select '0x0y'::jsonpath; + +-- underscores +select '1_000_000'::jsonpath; +select '1_2_3'::jsonpath; +select '0x1EEE_FFFF'::jsonpath; +select '0o2_73'::jsonpath; +select '0b10_0101'::jsonpath; + +select '1_000.000_005'::jsonpath; +select '1_000.'::jsonpath; +select '.000_005'::jsonpath; +select '1_000.5e0_1'::jsonpath; + +-- error cases +select '_100'::jsonpath; +select '100_'::jsonpath; +select '100__000'::jsonpath; + +select '_1_000.5'::jsonpath; +select '1_000_.5'::jsonpath; +select '1_000._5'::jsonpath; +select '1_000.5_'::jsonpath; +select '1_000.5e_1'::jsonpath; + +-- underscore after prefix not allowed in JavaScript (but allowed in SQL) +select '0b_10_0101'::jsonpath; +select '0o_273'::jsonpath; +select '0x_42F'::jsonpath; + + +-- test non-error-throwing API + +SELECT str as jsonpath, + pg_input_is_valid(str,'jsonpath') as ok, + errinfo.sql_error_code, + errinfo.message, + errinfo.detail, + errinfo.hint +FROM unnest(ARRAY['$ ? (@ like_regex "pattern" flag "smixq")'::text, + '$ ? (@ like_regex "pattern" flag "a")', + '@ + 1', + '00', + '1a']) str, + LATERAL pg_input_error_info(str, 'jsonpath') as errinfo; diff --git a/test/sql/postgres_regress/largeobject.sql b/test/sql/postgres_regress/largeobject.sql index 2ef03cfd..800e4fcc 100644 --- a/test/sql/postgres_regress/largeobject.sql +++ b/test/sql/postgres_regress/largeobject.sql @@ -244,7 +244,7 @@ TRUNCATE lotest_stash_values; SELECT lo_from_bytea(0, lo_get(:newloid_1)) AS newloid_2 \gset -SELECT md5(lo_get(:newloid_1)) = md5(lo_get(:newloid_2)); +SELECT fipshash(lo_get(:newloid_1)) = fipshash(lo_get(:newloid_2)); SELECT lo_get(:newloid_1, 0, 20); SELECT lo_get(:newloid_1, 10, 20); @@ -271,6 +271,50 @@ SELECT lo_create(2121); COMMENT ON LARGE OBJECT 2121 IS 'testing comments'; +-- Test writes on large objects in read-only transactions +START TRANSACTION READ ONLY; +-- INV_READ ... ok +SELECT lo_open(2121, x'40000'::int); +-- INV_WRITE ... error +SELECT lo_open(2121, x'20000'::int); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_create(42); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_creat(42); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_unlink(42); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lowrite(42, 'x'); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_import(:'filename'); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_truncate(42, 0); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_truncate64(42, 0); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_from_bytea(0, 'x'); +ROLLBACK; + +START TRANSACTION READ ONLY; +SELECT lo_put(42, 0, 'x'); +ROLLBACK; + -- Clean up DROP TABLE lotest_stash_values; diff --git a/test/sql/postgres_regress/line.sql b/test/sql/postgres_regress/line.sql index f589ffec..1d0d3689 100644 --- a/test/sql/postgres_regress/line.sql +++ b/test/sql/postgres_regress/line.sql @@ -40,3 +40,15 @@ select * from LINE_TBL; select '{nan, 1, nan}'::line = '{nan, 1, nan}'::line as true, '{nan, 1, nan}'::line = '{nan, 2, nan}'::line as false; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('{1, 1}', 'line'); +SELECT * FROM pg_input_error_info('{1, 1}', 'line'); +SELECT pg_input_is_valid('{0, 0, 0}', 'line'); +SELECT * FROM pg_input_error_info('{0, 0, 0}', 'line'); +SELECT pg_input_is_valid('{1, 1, a}', 'line'); +SELECT * FROM pg_input_error_info('{1, 1, a}', 'line'); +SELECT pg_input_is_valid('{1, 1, 1e400}', 'line'); +SELECT * FROM pg_input_error_info('{1, 1, 1e400}', 'line'); +SELECT pg_input_is_valid('(1, 1), (1, 1e400)', 'line'); +SELECT * FROM pg_input_error_info('(1, 1), (1, 1e400)', 'line'); diff --git a/test/sql/postgres_regress/lseg.sql b/test/sql/postgres_regress/lseg.sql index f266ca3e..d38a83ee 100644 --- a/test/sql/postgres_regress/lseg.sql +++ b/test/sql/postgres_regress/lseg.sql @@ -22,3 +22,7 @@ INSERT INTO LSEG_TBL VALUES ('[(,2),(3,4)]'); INSERT INTO LSEG_TBL VALUES ('[(1,2),(3,4)'); select * from LSEG_TBL; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('[(1,2),(3)]', 'lseg'); +SELECT * FROM pg_input_error_info('[(1,2),(3)]', 'lseg'); diff --git a/test/sql/postgres_regress/macaddr.sql b/test/sql/postgres_regress/macaddr.sql index 7bad8f5d..f61bdebe 100644 --- a/test/sql/postgres_regress/macaddr.sql +++ b/test/sql/postgres_regress/macaddr.sql @@ -41,3 +41,9 @@ SELECT b & '00:00:00:ff:ff:ff' FROM macaddr_data; SELECT b | '01:02:03:04:05:06' FROM macaddr_data; DROP TABLE macaddr_data; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('08:00:2b:01:02:ZZ', 'macaddr'); +SELECT * FROM pg_input_error_info('08:00:2b:01:02:ZZ', 'macaddr'); +SELECT pg_input_is_valid('08:00:2b:01:02:', 'macaddr'); +SELECT * FROM pg_input_error_info('08:00:2b:01:02:', 'macaddr'); diff --git a/test/sql/postgres_regress/macaddr8.sql b/test/sql/postgres_regress/macaddr8.sql index 57a227c5..3c0cd702 100644 --- a/test/sql/postgres_regress/macaddr8.sql +++ b/test/sql/postgres_regress/macaddr8.sql @@ -87,3 +87,9 @@ SELECT b & '00:00:00:ff:ff:ff' FROM macaddr8_data; SELECT b | '01:02:03:04:05:06' FROM macaddr8_data; DROP TABLE macaddr8_data; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('08:00:2b:01:02:03:04:ZZ', 'macaddr8'); +SELECT * FROM pg_input_error_info('08:00:2b:01:02:03:04:ZZ', 'macaddr8'); +SELECT pg_input_is_valid('08:00:2b:01:02:03:04:', 'macaddr8'); +SELECT * FROM pg_input_error_info('08:00:2b:01:02:03:04:', 'macaddr8'); diff --git a/test/sql/postgres_regress/matview.sql b/test/sql/postgres_regress/matview.sql index 68b9ccfd..acc4519d 100644 --- a/test/sql/postgres_regress/matview.sql +++ b/test/sql/postgres_regress/matview.sql @@ -216,10 +216,10 @@ SET ROLE regress_user_mvtest; -- duplicate all the aliases used in those queries CREATE TABLE mvtest_foo_data AS SELECT i, i+1 AS tid, - md5(random()::text) AS mv, - md5(random()::text) AS newdata, - md5(random()::text) AS newdata2, - md5(random()::text) AS diff + fipshash(random()::text) AS mv, + fipshash(random()::text) AS newdata, + fipshash(random()::text) AS newdata2, + fipshash(random()::text) AS diff FROM generate_series(1, 10) i; CREATE MATERIALIZED VIEW mvtest_mv_foo AS SELECT * FROM mvtest_foo_data; CREATE MATERIALIZED VIEW mvtest_mv_foo AS SELECT * FROM mvtest_foo_data; diff --git a/test/sql/postgres_regress/md5.sql b/test/sql/postgres_regress/md5.sql new file mode 100644 index 00000000..fff101f5 --- /dev/null +++ b/test/sql/postgres_regress/md5.sql @@ -0,0 +1,36 @@ +-- +-- MD5 test suite - from IETF RFC 1321 +-- (see: https://www.rfc-editor.org/rfc/rfc1321) +-- + +-- (The md5() function will error in OpenSSL FIPS mode. By keeping +-- this test in a separate file, it is easier to manage variant +-- results.) + +select md5('') = 'd41d8cd98f00b204e9800998ecf8427e' AS "TRUE"; + +select md5('a') = '0cc175b9c0f1b6a831c399e269772661' AS "TRUE"; + +select md5('abc') = '900150983cd24fb0d6963f7d28e17f72' AS "TRUE"; + +select md5('message digest') = 'f96b697d7cb7938d525a2f31aaf161d0' AS "TRUE"; + +select md5('abcdefghijklmnopqrstuvwxyz') = 'c3fcd3d76192e4007dfb496cca67e13b' AS "TRUE"; + +select md5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') = 'd174ab98d277d9f5a5611c2c9f419d9f' AS "TRUE"; + +select md5('12345678901234567890123456789012345678901234567890123456789012345678901234567890') = '57edf4a22be3c955ac49da2e2107b67a' AS "TRUE"; + +select md5(''::bytea) = 'd41d8cd98f00b204e9800998ecf8427e' AS "TRUE"; + +select md5('a'::bytea) = '0cc175b9c0f1b6a831c399e269772661' AS "TRUE"; + +select md5('abc'::bytea) = '900150983cd24fb0d6963f7d28e17f72' AS "TRUE"; + +select md5('message digest'::bytea) = 'f96b697d7cb7938d525a2f31aaf161d0' AS "TRUE"; + +select md5('abcdefghijklmnopqrstuvwxyz'::bytea) = 'c3fcd3d76192e4007dfb496cca67e13b' AS "TRUE"; + +select md5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'::bytea) = 'd174ab98d277d9f5a5611c2c9f419d9f' AS "TRUE"; + +select md5('12345678901234567890123456789012345678901234567890123456789012345678901234567890'::bytea) = '57edf4a22be3c955ac49da2e2107b67a' AS "TRUE"; diff --git a/test/sql/postgres_regress/memoize.sql b/test/sql/postgres_regress/memoize.sql index 0979bcdf..29ab1ea6 100644 --- a/test/sql/postgres_regress/memoize.sql +++ b/test/sql/postgres_regress/memoize.sql @@ -47,12 +47,14 @@ WHERE t2.unique1 < 1000; -- Try with LATERAL joins SELECT explain_memoize(' SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1, -LATERAL (SELECT t2.unique1 FROM tenk1 t2 WHERE t1.twenty = t2.unique1) t2 +LATERAL (SELECT t2.unique1 FROM tenk1 t2 + WHERE t1.twenty = t2.unique1 OFFSET 0) t2 WHERE t1.unique1 < 1000;', false); -- And check we get the expected results. SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1, -LATERAL (SELECT t2.unique1 FROM tenk1 t2 WHERE t1.twenty = t2.unique1) t2 +LATERAL (SELECT t2.unique1 FROM tenk1 t2 + WHERE t1.twenty = t2.unique1 OFFSET 0) t2 WHERE t1.unique1 < 1000; -- Reduce work_mem and hash_mem_multiplier so that we see some cache evictions @@ -89,7 +91,7 @@ DROP TABLE flt; CREATE TABLE strtest (n name, t text); CREATE INDEX strtest_n_idx ON strtest (n); CREATE INDEX strtest_t_idx ON strtest (t); -INSERT INTO strtest VALUES('one','one'),('two','two'),('three',repeat(md5('three'),100)); +INSERT INTO strtest VALUES('one','one'),('two','two'),('three',repeat(fipshash('three'),100)); -- duplicate rows so we get some cache hits INSERT INTO strtest SELECT * FROM strtest; ANALYZE strtest; @@ -104,6 +106,33 @@ SELECT * FROM strtest s1 INNER JOIN strtest s2 ON s1.t >= s2.t;', false); DROP TABLE strtest; +-- Ensure memoize works with partitionwise join +SET enable_partitionwise_join TO on; + +CREATE TABLE prt (a int) PARTITION BY RANGE(a); +CREATE TABLE prt_p1 PARTITION OF prt FOR VALUES FROM (0) TO (10); +CREATE TABLE prt_p2 PARTITION OF prt FOR VALUES FROM (10) TO (20); +INSERT INTO prt VALUES (0), (0), (0), (0); +INSERT INTO prt VALUES (10), (10), (10), (10); +CREATE INDEX iprt_p1_a ON prt_p1 (a); +CREATE INDEX iprt_p2_a ON prt_p2 (a); +ANALYZE prt; + +SELECT explain_memoize(' +SELECT * FROM prt t1 INNER JOIN prt t2 ON t1.a = t2.a;', false); + +-- Ensure memoize works with parameterized union-all Append path +SET enable_partitionwise_join TO off; + +SELECT explain_memoize(' +SELECT * FROM prt_p1 t1 INNER JOIN +(SELECT * FROM prt_p1 UNION ALL SELECT * FROM prt_p2) t2 +ON t1.a = t2.a;', false); + +DROP TABLE prt; + +RESET enable_partitionwise_join; + -- Exercise Memoize code that flushes the cache when a parameter changes which -- is not part of the cache key. diff --git a/test/sql/postgres_regress/merge.sql b/test/sql/postgres_regress/merge.sql index 4d486b44..4cf6db90 100644 --- a/test/sql/postgres_regress/merge.sql +++ b/test/sql/postgres_regress/merge.sql @@ -438,7 +438,7 @@ USING source AS s ON t.tid = s.sid WHEN MATCHED THEN /* Terminal WHEN clause for MATCHED */ DELETE -WHEN MATCHED AND s.delta > 0 THEN +WHEN MATCHED THEN UPDATE SET balance = t.balance - s.delta; ROLLBACK; @@ -564,24 +564,6 @@ WHEN MATCHED AND t.tableoid >= 0 THEN UPDATE SET balance = t.balance + s.balance; SELECT * FROM wq_target; --- test preventing WHEN conditions from writing to the database -create or replace function merge_when_and_write() returns boolean -language plpgsql as -$$ -BEGIN - INSERT INTO target VALUES (100, 100); - RETURN TRUE; -END; -$$; - -BEGIN; -MERGE INTO wq_target t -USING wq_source s ON t.tid = s.sid -WHEN MATCHED AND (merge_when_and_write()) THEN - UPDATE SET balance = t.balance + s.balance; -ROLLBACK; -drop function merge_when_and_write(); - DROP TABLE wq_target, wq_source; -- test triggers @@ -654,12 +636,25 @@ $$; SELECT * FROM target full outer join source on (sid = tid); create trigger merge_skip BEFORE INSERT OR UPDATE or DELETE ON target FOR EACH ROW EXECUTE FUNCTION skip_merge_op(); +DO $$ +DECLARE + result integer; +BEGIN MERGE INTO target t USING source AS s ON t.tid = s.sid WHEN MATCHED AND s.sid = 3 THEN UPDATE SET balance = t.balance + s.delta WHEN MATCHED THEN DELETE WHEN NOT MATCHED THEN INSERT VALUES (sid, delta); +IF FOUND THEN + RAISE NOTICE 'Found'; +ELSE + RAISE NOTICE 'Not found'; +END IF; +GET DIAGNOSTICS result := ROW_COUNT; +RAISE NOTICE 'ROW_COUNT = %', result; +END; +$$; SELECT * FROM target FULL OUTER JOIN source ON (sid = tid); DROP TRIGGER merge_skip ON target; DROP FUNCTION skip_merge_op(); @@ -1017,6 +1012,10 @@ ROLLBACK; -- try updating the partition key column BEGIN; +CREATE FUNCTION merge_func() RETURNS integer LANGUAGE plpgsql AS $$ +DECLARE + result integer; +BEGIN MERGE INTO pa_target t USING pa_source s ON t.tid = s.sid @@ -1024,6 +1023,13 @@ MERGE INTO pa_target t UPDATE SET tid = tid + 1, balance = balance + delta, val = val || ' updated by merge' WHEN NOT MATCHED THEN INSERT VALUES (sid, delta, 'inserted by merge'); +IF FOUND THEN + GET DIAGNOSTICS result := ROW_COUNT; +END IF; +RETURN result; +END; +$$; +SELECT merge_func(); SELECT * FROM pa_target ORDER BY tid; ROLLBACK; @@ -1089,6 +1095,18 @@ MERGE INTO pa_target t SELECT * FROM pa_target ORDER BY tid; ROLLBACK; +-- test RLS enforcement +BEGIN; +ALTER TABLE pa_target ENABLE ROW LEVEL SECURITY; +ALTER TABLE pa_target FORCE ROW LEVEL SECURITY; +CREATE POLICY pa_target_pol ON pa_target USING (tid != 0); +MERGE INTO pa_target t + USING pa_source s + ON t.tid = s.sid AND t.tid IN (1,2,3,4) + WHEN MATCHED THEN + UPDATE SET tid = tid - 1; +ROLLBACK; + DROP TABLE pa_source; DROP TABLE pa_target CASCADE; @@ -1134,6 +1152,38 @@ ROLLBACK; DROP TABLE pa_source; DROP TABLE pa_target CASCADE; +-- Partitioned table with primary key + +CREATE TABLE pa_target (tid integer PRIMARY KEY) PARTITION BY LIST (tid); +CREATE TABLE pa_targetp PARTITION OF pa_target DEFAULT; +CREATE TABLE pa_source (sid integer); + +INSERT INTO pa_source VALUES (1), (2); + +EXPLAIN (VERBOSE, COSTS OFF) +MERGE INTO pa_target t USING pa_source s ON t.tid = s.sid + WHEN NOT MATCHED THEN INSERT VALUES (s.sid); + +MERGE INTO pa_target t USING pa_source s ON t.tid = s.sid + WHEN NOT MATCHED THEN INSERT VALUES (s.sid); + +TABLE pa_target; + +-- Partition-less partitioned table +-- (the bug we are checking for appeared only if table had partitions before) + +DROP TABLE pa_targetp; + +EXPLAIN (VERBOSE, COSTS OFF) +MERGE INTO pa_target t USING pa_source s ON t.tid = s.sid + WHEN NOT MATCHED THEN INSERT VALUES (s.sid); + +MERGE INTO pa_target t USING pa_source s ON t.tid = s.sid + WHEN NOT MATCHED THEN INSERT VALUES (s.sid); + +DROP TABLE pa_source; +DROP TABLE pa_target CASCADE; + -- some complex joins on the source side CREATE TABLE cj_target (tid integer, balance float, val text) @@ -1187,6 +1237,16 @@ WHEN MATCHED THEN SELECT * FROM cj_target; +-- try it with an outer join and PlaceHolderVar +MERGE INTO cj_target t +USING (SELECT *, 'join input'::text AS phv FROM cj_source1) fj + FULL JOIN cj_source2 fj2 ON fj.scat = fj2.sid2 * 10 +ON t.tid = fj.scat +WHEN NOT MATCHED THEN + INSERT (tid, balance, val) VALUES (fj.scat, fj.delta, fj.phv); + +SELECT * FROM cj_target; + ALTER TABLE cj_source1 RENAME COLUMN sid1 TO sid; ALTER TABLE cj_source2 RENAME COLUMN sid2 TO sid; @@ -1249,6 +1309,7 @@ CREATE TABLE measurement_y2007m01 ( ) WITH (autovacuum_enabled=off); ALTER TABLE measurement_y2007m01 DROP COLUMN filler; ALTER TABLE measurement_y2007m01 INHERIT measurement; +INSERT INTO measurement VALUES (0, '2005-07-21', 5, 15); CREATE OR REPLACE FUNCTION measurement_insert_trigger() RETURNS TRIGGER AS $$ @@ -1282,6 +1343,7 @@ INSERT INTO measurement VALUES (1, '2007-01-17', 10, 10); SELECT tableoid::regclass, * FROM measurement ORDER BY city_id, logdate; CREATE TABLE new_measurement (LIKE measurement) WITH (autovacuum_enabled=off); +INSERT INTO new_measurement VALUES (0, '2005-07-21', 25, 20); INSERT INTO new_measurement VALUES (1, '2006-03-01', 20, 10); INSERT INTO new_measurement VALUES (1, '2006-02-16', 50, 10); INSERT INTO new_measurement VALUES (2, '2006-02-10', 20, 20); @@ -1290,6 +1352,21 @@ INSERT INTO new_measurement VALUES (1, '2007-01-17', NULL, NULL); INSERT INTO new_measurement VALUES (1, '2007-01-15', 5, NULL); INSERT INTO new_measurement VALUES (1, '2007-01-16', 10, 10); +BEGIN; +MERGE INTO ONLY measurement m + USING new_measurement nm ON + (m.city_id = nm.city_id and m.logdate=nm.logdate) +WHEN MATCHED AND nm.peaktemp IS NULL THEN DELETE +WHEN MATCHED THEN UPDATE + SET peaktemp = greatest(m.peaktemp, nm.peaktemp), + unitsales = m.unitsales + coalesce(nm.unitsales, 0) +WHEN NOT MATCHED THEN INSERT + (city_id, logdate, peaktemp, unitsales) + VALUES (city_id, logdate, peaktemp, unitsales); + +SELECT tableoid::regclass, * FROM measurement ORDER BY city_id, logdate, peaktemp; +ROLLBACK; + MERGE into measurement m USING new_measurement nm ON (m.city_id = nm.city_id and m.logdate=nm.logdate) @@ -1302,6 +1379,23 @@ WHEN NOT MATCHED THEN INSERT VALUES (city_id, logdate, peaktemp, unitsales); SELECT tableoid::regclass, * FROM measurement ORDER BY city_id, logdate; + +BEGIN; +MERGE INTO new_measurement nm + USING ONLY measurement m ON + (nm.city_id = m.city_id and nm.logdate=m.logdate) +WHEN MATCHED THEN DELETE; + +SELECT * FROM new_measurement ORDER BY city_id, logdate; +ROLLBACK; + +MERGE INTO new_measurement nm + USING measurement m ON + (nm.city_id = m.city_id and nm.logdate=m.logdate) +WHEN MATCHED THEN DELETE; + +SELECT * FROM new_measurement ORDER BY city_id, logdate; + DROP TABLE measurement, new_measurement CASCADE; DROP FUNCTION measurement_insert_trigger(); diff --git a/test/sql/postgres_regress/misc_functions.sql b/test/sql/postgres_regress/misc_functions.sql index 072fc36a..b57f01f3 100644 --- a/test/sql/postgres_regress/misc_functions.sql +++ b/test/sql/postgres_regress/misc_functions.sql @@ -123,6 +123,30 @@ from (select pg_ls_waldir() w) ss where length((w).name) = 24 limit 1; select count(*) >= 0 as ok from pg_ls_archive_statusdir(); +-- pg_read_file() +select length(pg_read_file('postmaster.pid')) > 20; +select length(pg_read_file('postmaster.pid', 1, 20)); +-- Test missing_ok +select pg_read_file('does not exist'); -- error +select pg_read_file('does not exist', true) IS NULL; -- ok +-- Test invalid argument +select pg_read_file('does not exist', 0, -1); -- error +select pg_read_file('does not exist', 0, -1, true); -- error + +-- pg_read_binary_file() +select length(pg_read_binary_file('postmaster.pid')) > 20; +select length(pg_read_binary_file('postmaster.pid', 1, 20)); +-- Test missing_ok +select pg_read_binary_file('does not exist'); -- error +select pg_read_binary_file('does not exist', true) IS NULL; -- ok +-- Test invalid argument +select pg_read_binary_file('does not exist', 0, -1); -- error +select pg_read_binary_file('does not exist', 0, -1, true); -- error + +-- pg_stat_file() +select size > 20, isdir from pg_stat_file('postmaster.pid'); + +-- pg_ls_dir() select * from (select pg_ls_dir('.') a) a where a = 'base' limit 1; -- Test missing_ok (second argument) select pg_ls_dir('does not exist', false, false); -- error @@ -133,8 +157,10 @@ select count(*) = 1 as dot_found select count(*) = 1 as dot_found from pg_ls_dir('.', false, false) as ls where ls = '.'; +-- pg_timezone_names() select * from (select (pg_timezone_names()).name) ptn where name='UTC' limit 1; +-- pg_tablespace_databases() select count(*) > 0 from (select pg_tablespace_databases(oid) as pts from pg_tablespace where spcname = 'pg_default') pts @@ -197,3 +223,17 @@ SELECT * FROM tenk1 a JOIN my_gen_series(1,1000) g ON a.unique1 = g; EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN my_gen_series(1,10) g ON a.unique1 = g; + +-- Test functions for control data +SELECT count(*) > 0 AS ok FROM pg_control_checkpoint(); +SELECT count(*) > 0 AS ok FROM pg_control_init(); +SELECT count(*) > 0 AS ok FROM pg_control_recovery(); +SELECT count(*) > 0 AS ok FROM pg_control_system(); + +-- pg_split_walfile_name +SELECT * FROM pg_split_walfile_name(NULL); +SELECT * FROM pg_split_walfile_name('invalid'); +SELECT segment_number > 0 AS ok_segment_number, timeline_id + FROM pg_split_walfile_name('000000010000000100000000'); +SELECT segment_number > 0 AS ok_segment_number, timeline_id + FROM pg_split_walfile_name('ffffffFF00000001000000af'); diff --git a/test/sql/postgres_regress/money.sql b/test/sql/postgres_regress/money.sql index 5e746286..81c92dd9 100644 --- a/test/sql/postgres_regress/money.sql +++ b/test/sql/postgres_regress/money.sql @@ -88,6 +88,12 @@ SELECT '-9223372036854775808'::money; SELECT '(1)'::money; SELECT '($123,456.78)'::money; +-- test non-error-throwing API +SELECT pg_input_is_valid('\x0001', 'money'); +SELECT * FROM pg_input_error_info('\x0001', 'money'); +SELECT pg_input_is_valid('192233720368547758.07', 'money'); +SELECT * FROM pg_input_error_info('192233720368547758.07', 'money'); + -- documented minimums and maximums SELECT '-92233720368547758.08'::money; SELECT '92233720368547758.07'::money; diff --git a/test/sql/postgres_regress/multirangetypes.sql b/test/sql/postgres_regress/multirangetypes.sql index 1abcaedd..fefb4b4d 100644 --- a/test/sql/postgres_regress/multirangetypes.sql +++ b/test/sql/postgres_regress/multirangetypes.sql @@ -58,6 +58,13 @@ select '{[a,a)}'::textmultirange; select '{(a,a]}'::textmultirange; select '{(a,a)}'::textmultirange; +-- Also try it with non-error-throwing API +select pg_input_is_valid('{[1,2], [4,5]}', 'int4multirange'); +select pg_input_is_valid('{[1,2], [4,5]', 'int4multirange'); +select * from pg_input_error_info('{[1,2], [4,5]', 'int4multirange'); +select pg_input_is_valid('{[1,2], [4,zed]}', 'int4multirange'); +select * from pg_input_error_info('{[1,2], [4,zed]}', 'int4multirange'); + -- -- test the constructor --- @@ -782,7 +789,7 @@ select array[1,3] <@ arraymultirange(arrayrange(array[1,2], array[2,1])); create type two_ints as (a int, b int); create type two_ints_range as range (subtype = two_ints); --- with force_parallel_mode on, this exercises tqueue.c's range remapping +-- with debug_parallel_query on, this exercises tqueue.c's range remapping select *, row_to_json(upper(t)) as u from (values (two_ints_multirange(two_ints_range(row(1,2), row(3,4)))), (two_ints_multirange(two_ints_range(row(5,6), row(7,8))))) v(t); diff --git a/test/sql/postgres_regress/mvcc.sql b/test/sql/postgres_regress/mvcc.sql index b22a86dc..0a3ebc88 100644 --- a/test/sql/postgres_regress/mvcc.sql +++ b/test/sql/postgres_regress/mvcc.sql @@ -1,7 +1,7 @@ -- -- Verify that index scans encountering dead rows produced by an -- aborted subtransaction of the current transaction can utilize the --- kill_prio_tuple optimization +-- kill_prior_tuple optimization -- -- NB: The table size is currently *not* expected to stay the same, we -- don't have logic to trigger opportunistic pruning in cases like diff --git a/test/sql/postgres_regress/namespace.sql b/test/sql/postgres_regress/namespace.sql index 6b12c961..3474f5ec 100644 --- a/test/sql/postgres_regress/namespace.sql +++ b/test/sql/postgres_regress/namespace.sql @@ -2,6 +2,10 @@ -- Regression tests for schemas (namespaces) -- +-- set the whitespace-only search_path to test that the +-- GUC list syntax is preserved during a schema creation +SELECT pg_catalog.set_config('search_path', ' ', false); + CREATE SCHEMA test_ns_schema_1 CREATE UNIQUE INDEX abc_a_idx ON abc (a) @@ -13,6 +17,26 @@ CREATE SCHEMA test_ns_schema_1 b int UNIQUE ); +-- verify that the correct search_path restored on abort +SET search_path to public; +BEGIN; +SET search_path to public, test_ns_schema_1; +CREATE SCHEMA test_ns_schema_2 + CREATE VIEW abc_view AS SELECT c FROM abc; +COMMIT; +SHOW search_path; + +-- verify that the correct search_path preserved +-- after creating the schema and on commit +BEGIN; +SET search_path to public, test_ns_schema_1; +CREATE SCHEMA test_ns_schema_2 + CREATE VIEW abc_view AS SELECT a FROM abc; +SHOW search_path; +COMMIT; +SHOW search_path; +DROP SCHEMA test_ns_schema_2 CASCADE; + -- verify that the objects were created SELECT COUNT(*) FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'test_ns_schema_1'); diff --git a/test/sql/postgres_regress/numeric.sql b/test/sql/postgres_regress/numeric.sql index eeca63d8..83fc3863 100644 --- a/test/sql/postgres_regress/numeric.sql +++ b/test/sql/postgres_regress/numeric.sql @@ -909,6 +909,33 @@ FROM generate_series(0, 110, 10) x; SELECT x, width_bucket(x::float8, 100, 10, 9) as flt, width_bucket(x::numeric, 100, 10, 9) as num FROM generate_series(0, 110, 10) x; +-- Another roundoff-error hazard +SELECT width_bucket(0, -1e100::numeric, 1, 10); +SELECT width_bucket(0, -1e100::float8, 1, 10); +SELECT width_bucket(1, 1e100::numeric, 0, 10); +SELECT width_bucket(1, 1e100::float8, 0, 10); + +-- Check cases that could trigger overflow or underflow within the calculation +SELECT oper, low, high, cnt, width_bucket(oper, low, high, cnt) +FROM + (SELECT 1.797e+308::float8 AS big, 5e-324::float8 AS tiny) as v, + LATERAL (VALUES + (10.5::float8, -big, big, 1), + (10.5::float8, -big, big, 2), + (10.5::float8, -big, big, 3), + (big / 4, -big / 2, big / 2, 10), + (10.5::float8, big, -big, 1), + (10.5::float8, big, -big, 2), + (10.5::float8, big, -big, 3), + (big / 4, big / 2, -big / 2, 10), + (0, 0, tiny, 4), + (tiny, 0, tiny, 4), + (0, 0, 1, 2147483647), + (1, 1, 0, 2147483647) + ) as sample(oper, low, high, cnt); +-- These fail because the result would be out of int32 range: +SELECT width_bucket(1::float8, 0, 1, 2147483647); +SELECT width_bucket(0::float8, 1, 0, 2147483647); -- -- TO_CHAR() @@ -979,6 +1006,7 @@ FROM v; SELECT to_char('100'::numeric, 'FM999.9'); SELECT to_char('100'::numeric, 'FM999.'); SELECT to_char('100'::numeric, 'FM999'); +SELECT to_char('12345678901'::float8, 'FM9999999999D9999900000000000000000'); -- Check parsing of literal text in a format string SELECT to_char('100'::numeric, 'foo999'); @@ -1039,6 +1067,17 @@ INSERT INTO num_input_test(n1) VALUES (' -inf '); INSERT INTO num_input_test(n1) VALUES (' Infinity '); INSERT INTO num_input_test(n1) VALUES (' +inFinity '); INSERT INTO num_input_test(n1) VALUES (' -INFINITY '); +INSERT INTO num_input_test(n1) VALUES ('12_000_000_000'); +INSERT INTO num_input_test(n1) VALUES ('12_000.123_456'); +INSERT INTO num_input_test(n1) VALUES ('23_000_000_000e-1_0'); +INSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e1_0'); +INSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e+1_1'); +INSERT INTO num_input_test(n1) VALUES ('0b10001110111100111100001001010'); +INSERT INTO num_input_test(n1) VALUES (' -0B_1010_1011_0101_0100_1010_1001_1000_1100_1110_1011_0001_1111_0000_1010_1101_0010 '); +INSERT INTO num_input_test(n1) VALUES (' +0o112402761777 '); +INSERT INTO num_input_test(n1) VALUES ('-0O0012_5524_5230_6334_3167_0261'); +INSERT INTO num_input_test(n1) VALUES ('-0x0000000000000000000000000deadbeef'); +INSERT INTO num_input_test(n1) VALUES (' 0X_30b1_F33a_6DF0_bD4E_64DF_9BdA_7D15 '); -- bad inputs INSERT INTO num_input_test(n1) VALUES (' '); @@ -1049,10 +1088,38 @@ INSERT INTO num_input_test(n1) VALUES ('5 . 0'); INSERT INTO num_input_test(n1) VALUES ('5. 0 '); INSERT INTO num_input_test(n1) VALUES (''); INSERT INTO num_input_test(n1) VALUES (' N aN '); +INSERT INTO num_input_test(n1) VALUES ('+NaN'); +INSERT INTO num_input_test(n1) VALUES ('-NaN'); INSERT INTO num_input_test(n1) VALUES ('+ infinity'); +INSERT INTO num_input_test(n1) VALUES ('_123'); +INSERT INTO num_input_test(n1) VALUES ('123_'); +INSERT INTO num_input_test(n1) VALUES ('12__34'); +INSERT INTO num_input_test(n1) VALUES ('123_.456'); +INSERT INTO num_input_test(n1) VALUES ('123._456'); +INSERT INTO num_input_test(n1) VALUES ('1.2e_34'); +INSERT INTO num_input_test(n1) VALUES ('1.2e34_'); +INSERT INTO num_input_test(n1) VALUES ('1.2e3__4'); +INSERT INTO num_input_test(n1) VALUES ('0b1112'); +INSERT INTO num_input_test(n1) VALUES ('0c1112'); +INSERT INTO num_input_test(n1) VALUES ('0o12345678'); +INSERT INTO num_input_test(n1) VALUES ('0x1eg'); +INSERT INTO num_input_test(n1) VALUES ('0x12.34'); +INSERT INTO num_input_test(n1) VALUES ('0x__1234'); +INSERT INTO num_input_test(n1) VALUES ('0x1234_'); +INSERT INTO num_input_test(n1) VALUES ('0x12__34'); SELECT * FROM num_input_test; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('34.5', 'numeric'); +SELECT pg_input_is_valid('34xyz', 'numeric'); +SELECT pg_input_is_valid('1e400000', 'numeric'); +SELECT * FROM pg_input_error_info('1e400000', 'numeric'); +SELECT pg_input_is_valid('1234.567', 'numeric(8,4)'); +SELECT pg_input_is_valid('1234.567', 'numeric(7,4)'); +SELECT * FROM pg_input_error_info('1234.567', 'numeric(7,4)'); +SELECT * FROM pg_input_error_info('0x1234.567', 'numeric'); + -- -- Test precision and scale typemods -- @@ -1142,8 +1209,8 @@ select 10.0 ^ 2147483647 as overflows; select 117743296169.0 ^ 1000000000 as overflows; -- cases that used to return inaccurate results -select 3.789 ^ 21; -select 3.789 ^ 35; +select 3.789 ^ 21.0000000000000000; +select 3.789 ^ 35.0000000000000000; select 1.2 ^ 345; select 0.12 ^ (-20); select 1.000000000123 ^ (-2147483648); @@ -1162,6 +1229,10 @@ select (-1.0) ^ 2147483648; select (-1.0) ^ 1000000000000000; select (-1.0) ^ 1000000000000001; +-- integer powers of 10 +select n, 10.0 ^ n as "10^n", (10.0 ^ n) * (10.0 ^ (-n)) = 1 as ok +from generate_series(-20, 20) n; + -- -- Tests for raising to non-integer powers -- diff --git a/test/sql/postgres_regress/numeric_big.sql b/test/sql/postgres_regress/numeric_big.sql index c9d52d08..d67d9e88 100644 --- a/test/sql/postgres_regress/numeric_big.sql +++ b/test/sql/postgres_regress/numeric_big.sql @@ -664,47 +664,47 @@ SELECT t1.id1, t1.result, t2.expected -- done WITH t(b, p, bc_result) AS (VALUES -(0.084738, -20, 2744326694304960114888.7859130502035257), -(0.084738, -19, 232548755422013710215.4459407000481464), -(0.084738, -18, 19705716436950597776.2364581230406798), -(0.084738, -17, 1669822999434319754.3627249884302211), -(0.084738, -16, 141497461326065387.3451885900696001), -(0.084738, -15, 11990211877848128.7928565907453178), -(0.084738, -14, 1016026574105094.7376490817865767), -(0.084738, -13, 86096059836517.5178789078924309), -(0.084738, -12, 7295607918426.8214300228969888), -(0.084738, -11, 618215223791.6519943372802450), -(0.084738, -10, 52386321633.6570066961524534), -(0.084738, -9, 4439112122.5928274334185666), -(0.084738, -8, 376161483.0442710110530225), -(0.084738, -7, 31875171.7502054369346110), -(0.084738, -6, 2701038.3037689083149651), -(0.084738, -5, 228880.5837847697527935), -(0.084738, -4, 19394.8829087538193122), -(0.084738, -3, 1643.4835879219811409), -(0.084738, -2, 139.2655122733328379), -(0.084738, -1, 11.8010809790176780), +(0.084738, -20, 2744326694304960114888.785913), +(0.084738, -19, 232548755422013710215.445941), +(0.084738, -18, 19705716436950597776.236458), +(0.084738, -17, 1669822999434319754.362725), +(0.084738, -16, 141497461326065387.345189), +(0.084738, -15, 11990211877848128.792857), +(0.084738, -14, 1016026574105094.737649), +(0.084738, -13, 86096059836517.517879), +(0.084738, -12, 7295607918426.821430), +(0.084738, -11, 618215223791.651994), +(0.084738, -10, 52386321633.657007), +(0.084738, -9, 4439112122.5928274), +(0.084738, -8, 376161483.04427101), +(0.084738, -7, 31875171.750205437), +(0.084738, -6, 2701038.3037689083), +(0.084738, -5, 228880.58378476975), +(0.084738, -4, 19394.882908753819), +(0.084738, -3, 1643.4835879219811), +(0.084738, -2, 139.26551227333284), +(0.084738, -1, 11.801080979017678), (0.084738, 0, 1), (0.084738, 1, .084738), (0.084738, 2, .007180528644), -(0.084738, 3, .0006084636362353), -(0.084738, 4, .0000515599916073), -(0.084738, 5, .0000043690905688), -(0.084738, 6, .0000003702279966), -(0.084738, 7, .0000000313723800), -(0.084738, 8, .0000000026584327), -(0.084738, 9, .0000000002252703), -(0.084738, 10, .0000000000190890), -(0.084738, 11, .0000000000016176), -(0.084738, 12, .0000000000001371), -(0.084738, 13, .0000000000000116), -(0.084738, 14, .0000000000000010), -(0.084738, 15, .0000000000000001), -(0.084738, 16, .0000000000000000), -(0.084738, 17, .0000000000000000), -(0.084738, 18, .0000000000000000), -(0.084738, 19, .0000000000000000), -(0.084738, 20, .0000000000000000)) +(0.084738, 3, .000608463636235272), +(0.084738, 4, .00005155999160730448), +(0.084738, 5, .000004369090568819767), +(0.084738, 6, .0000003702279966206494), +(0.084738, 7, .00000003137237997764059), +(0.084738, 8, .000000002658432734545308), +(0.084738, 9, .0000000002252702730599003), +(0.084738, 10, .00000000001908895239854983), +(0.084738, 11, .000000000001617559648348316), +(0.084738, 12, .0000000000001370687694817396), +(0.084738, 13, .00000000000001161493338834365), +(0.084738, 14, .0000000000000009842262254614642), +(0.084738, 15, .00000000000000008340136189315355), +(0.084738, 16, .000000000000000007067264604102046), +(0.084738, 17, .0000000000000000005988658680223991), +(0.084738, 18, .00000000000000000005074669592448206), +(0.084738, 19, .000000000000000000004300173519248761), +(0.084738, 20, .0000000000000000000003643881036741015)) SELECT b, p, bc_result, b^p AS power, b^p - bc_result AS diff FROM t; -- base greater than 1 @@ -720,47 +720,47 @@ SELECT b, p, bc_result, b^p AS power, b^p - bc_result AS diff FROM t; -- done WITH t(b, p, bc_result) AS (VALUES -(37.821637, -20, .0000000000000000), -(37.821637, -19, .0000000000000000), -(37.821637, -18, .0000000000000000), -(37.821637, -17, .0000000000000000), -(37.821637, -16, .0000000000000000), -(37.821637, -15, .0000000000000000), -(37.821637, -14, .0000000000000000), -(37.821637, -13, .0000000000000000), -(37.821637, -12, .0000000000000000), -(37.821637, -11, .0000000000000000), -(37.821637, -10, .0000000000000002), -(37.821637, -9, .0000000000000063), -(37.821637, -8, .0000000000002388), -(37.821637, -7, .0000000000090327), -(37.821637, -6, .0000000003416316), -(37.821637, -5, .0000000129210673), -(37.821637, -4, .0000004886959182), -(37.821637, -3, .0000184832796213), -(37.821637, -2, .0006990678924066), -(37.821637, -1, .0264398920649574), +(37.821637, -20, .00000000000000000000000000000002787363175065101), +(37.821637, -19, .000000000000000000000000000001054226381944797), +(37.821637, -18, .00000000000000000000000000003987256753373947), +(37.821637, -17, .000000000000000000000000001508045775519079), +(37.821637, -16, .00000000000000000000000005703675990106610), +(37.821637, -15, .000000000000000000000002157223628634278), +(37.821637, -14, .00000000000000000000008158972901002847), +(37.821637, -13, .000000000000000000003085857113545666), +(37.821637, -12, .0000000000000000001167121675823920), +(37.821637, -11, .000000000000000004414245235784397), +(37.821637, -10, .0000000000000001669539809368169), +(37.821637, -9, .000000000000006314472862697207), +(37.821637, -8, .0000000000002388237004592846), +(37.821637, -7, .000000000009032703305767796), +(37.821637, -6, .0000000003416316255594496), +(37.821637, -5, .00000001292106732962942), +(37.821637, -4, .0000004886959181938034), +(37.821637, -3, .00001848327962130773), +(37.821637, -2, .0006990678924065984), +(37.821637, -1, .02643989206495742), (37.821637, 0, 1), (37.821637, 1, 37.821637), (37.821637, 2, 1430.476225359769), -(37.821637, 3, 54102.9525326873775219), -(37.821637, 4, 2046262.2313195326271135), -(37.821637, 5, 77392987.3197773940323425), -(37.821637, 6, 2927129472.7542235178972258), -(37.821637, 7, 110708828370.5116321107718772), -(37.821637, 8, 4187189119324.7924539711577286), -(37.821637, 9, 158366346921451.9852944363360812), -(37.821637, 10, 5989674486279224.5007355092228730), -(37.821637, 11, 226539294168214309.7083246628376531), -(37.821637, 12, 8568086950266418559.9938312759931069), -(37.821637, 13, 324059074417413536066.1494087598581043), -(37.821637, 14, 12256444679171401239980.3109258799733927), -(37.821637, 15, 463558801566202198479885.2069857662592280), -(37.821637, 16, 17532552720991931019508170.1002855156233684), -(37.821637, 17, 663109844696719094948877928.0672523682648687), -(37.821637, 18, 25079899837245684700124994552.6717306599041850), -(37.821637, 19, 948562867640665366544581398598.1275771806665398), -(37.821637, 20, 35876200451584291931921101974730.6901038166532866)) +(37.821637, 3, 54102.952532687378), +(37.821637, 4, 2046262.2313195326), +(37.821637, 5, 77392987.319777394), +(37.821637, 6, 2927129472.7542235), +(37.821637, 7, 110708828370.511632), +(37.821637, 8, 4187189119324.792454), +(37.821637, 9, 158366346921451.985294), +(37.821637, 10, 5989674486279224.500736), +(37.821637, 11, 226539294168214309.708325), +(37.821637, 12, 8568086950266418559.993831), +(37.821637, 13, 324059074417413536066.149409), +(37.821637, 14, 12256444679171401239980.310926), +(37.821637, 15, 463558801566202198479885.206986), +(37.821637, 16, 17532552720991931019508170.100286), +(37.821637, 17, 663109844696719094948877928.067252), +(37.821637, 18, 25079899837245684700124994552.671731), +(37.821637, 19, 948562867640665366544581398598.127577), +(37.821637, 20, 35876200451584291931921101974730.690104)) SELECT b, p, bc_result, b^p AS power, b^p - bc_result AS diff FROM t; -- diff --git a/test/sql/postgres_regress/numerology.sql b/test/sql/postgres_regress/numerology.sql index fb75f978..1941c58e 100644 --- a/test/sql/postgres_regress/numerology.sql +++ b/test/sql/postgres_regress/numerology.sql @@ -3,13 +3,48 @@ -- Test various combinations of numeric types and functions. -- + -- --- Trailing junk in numeric literals +-- numeric literals -- +SELECT 0b100101; +SELECT 0o273; +SELECT 0x42F; + +-- cases near int4 overflow +SELECT 0b1111111111111111111111111111111; +SELECT 0b10000000000000000000000000000000; +SELECT 0o17777777777; +SELECT 0o20000000000; +SELECT 0x7FFFFFFF; +SELECT 0x80000000; + +SELECT -0b10000000000000000000000000000000; +SELECT -0b10000000000000000000000000000001; +SELECT -0o20000000000; +SELECT -0o20000000001; +SELECT -0x80000000; +SELECT -0x80000001; + +-- cases near int8 overflow +SELECT 0b111111111111111111111111111111111111111111111111111111111111111; +SELECT 0b1000000000000000000000000000000000000000000000000000000000000000; +SELECT 0o777777777777777777777; +SELECT 0o1000000000000000000000; +SELECT 0x7FFFFFFFFFFFFFFF; +SELECT 0x8000000000000000; + +SELECT -0b1000000000000000000000000000000000000000000000000000000000000000; +SELECT -0b1000000000000000000000000000000000000000000000000000000000000001; +SELECT -0o1000000000000000000000; +SELECT -0o1000000000000000000001; +SELECT -0x8000000000000000; +SELECT -0x8000000000000001; + +-- error cases SELECT 123abc; SELECT 0x0o; -SELECT 1_2_3; SELECT 0.a; SELECT 0.0a; SELECT .0a; @@ -17,7 +52,42 @@ SELECT 0.0e1a; SELECT 0.0e; SELECT 0.0e+a; PREPARE p1 AS SELECT $1a; -EXECUTE p1(1); + +SELECT 0b; +SELECT 1b; +SELECT 0b0x; + +SELECT 0o; +SELECT 1o; +SELECT 0o0x; + +SELECT 0x; +SELECT 1x; +SELECT 0x0y; + +-- underscores +SELECT 1_000_000; +SELECT 1_2_3; +SELECT 0x1EEE_FFFF; +SELECT 0o2_73; +SELECT 0b_10_0101; + +SELECT 1_000.000_005; +SELECT 1_000.; +SELECT .000_005; +SELECT 1_000.5e0_1; + +-- error cases +SELECT _100; +SELECT 100_; +SELECT 100__000; + +SELECT _1_000.5; +SELECT 1_000_.5; +SELECT 1_000._5; +SELECT 1_000.5_; +SELECT 1_000.5e_1; + -- -- Test implicit type conversions diff --git a/test/sql/postgres_regress/object_address.sql b/test/sql/postgres_regress/object_address.sql index e91072a7..1a6c61f4 100644 --- a/test/sql/postgres_regress/object_address.sql +++ b/test/sql/postgres_regress/object_address.sql @@ -20,10 +20,11 @@ CREATE TEXT SEARCH TEMPLATE addr_ts_temp (lexize=dsimple_lexize); CREATE TEXT SEARCH PARSER addr_ts_prs (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype); CREATE TABLE addr_nsp.gentable ( - a serial primary key CONSTRAINT a_chk CHECK (a > 0), - b text DEFAULT 'hello'); + a serial primary key CONSTRAINT a_chk CHECK (a > 0), + b text DEFAULT 'hello' +); CREATE TABLE addr_nsp.parttable ( - a int PRIMARY KEY + a int PRIMARY KEY ) PARTITION BY RANGE (a); CREATE VIEW addr_nsp.genview AS SELECT * from addr_nsp.gentable; CREATE MATERIALIZED VIEW addr_nsp.genmatview AS SELECT * FROM addr_nsp.gentable; @@ -43,8 +44,8 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_addr_user REVOKE DELETE ON TABLES FROM -- this transform would be quite unsafe to leave lying around, -- except that the SQL language pays no attention to transforms: CREATE TRANSFORM FOR int LANGUAGE SQL ( - FROM SQL WITH FUNCTION prsd_lextype(internal), - TO SQL WITH FUNCTION int4recv(internal)); + FROM SQL WITH FUNCTION prsd_lextype(internal), + TO SQL WITH FUNCTION int4recv(internal)); -- suppress warning that depends on wal_level SET client_min_messages = 'ERROR'; CREATE PUBLICATION addr_pub FOR TABLE addr_nsp.gentable; @@ -61,17 +62,17 @@ SELECT pg_get_object_address('table', '{NULL}', '{}'); -- unrecognized object types DO $$ DECLARE - objtype text; + objtype text; BEGIN - FOR objtype IN VALUES ('toast table'), ('index column'), ('sequence column'), - ('toast table column'), ('view column'), ('materialized view column') - LOOP - BEGIN - PERFORM pg_get_object_address(objtype, '{one}', '{}'); - EXCEPTION WHEN invalid_parameter_value THEN - RAISE WARNING 'error for %: %', objtype, sqlerrm; - END; - END LOOP; + FOR objtype IN VALUES ('toast table'), ('index column'), ('sequence column'), + ('toast table column'), ('view column'), ('materialized view column') + LOOP + BEGIN + PERFORM pg_get_object_address(objtype, '{one}', '{}'); + EXCEPTION WHEN invalid_parameter_value THEN + RAISE WARNING 'error for %: %', objtype, sqlerrm; + END; + END LOOP; END; $$; @@ -83,35 +84,35 @@ select * from pg_get_object_address('function of access method', '{btree,integer DO $$ DECLARE - objtype text; - names text[]; - args text[]; + objtype text; + names text[]; + args text[]; BEGIN - FOR objtype IN VALUES - ('table'), ('index'), ('sequence'), ('view'), - ('materialized view'), ('foreign table'), - ('table column'), ('foreign table column'), - ('aggregate'), ('function'), ('procedure'), ('type'), ('cast'), - ('table constraint'), ('domain constraint'), ('conversion'), ('default value'), - ('operator'), ('operator class'), ('operator family'), ('rule'), ('trigger'), - ('text search parser'), ('text search dictionary'), - ('text search template'), ('text search configuration'), - ('policy'), ('user mapping'), ('default acl'), ('transform'), - ('operator of access method'), ('function of access method'), - ('publication namespace'), ('publication relation') - LOOP - FOR names IN VALUES ('{eins}'), ('{addr_nsp, zwei}'), ('{eins, zwei, drei}') - LOOP - FOR args IN VALUES ('{}'), ('{integer}') - LOOP - BEGIN - PERFORM pg_get_object_address(objtype, names, args); - EXCEPTION WHEN OTHERS THEN - RAISE WARNING 'error for %,%,%: %', objtype, names, args, sqlerrm; - END; - END LOOP; - END LOOP; - END LOOP; + FOR objtype IN VALUES + ('table'), ('index'), ('sequence'), ('view'), + ('materialized view'), ('foreign table'), + ('table column'), ('foreign table column'), + ('aggregate'), ('function'), ('procedure'), ('type'), ('cast'), + ('table constraint'), ('domain constraint'), ('conversion'), ('default value'), + ('operator'), ('operator class'), ('operator family'), ('rule'), ('trigger'), + ('text search parser'), ('text search dictionary'), + ('text search template'), ('text search configuration'), + ('policy'), ('user mapping'), ('default acl'), ('transform'), + ('operator of access method'), ('function of access method'), + ('publication namespace'), ('publication relation') + LOOP + FOR names IN VALUES ('{eins}'), ('{addr_nsp, zwei}'), ('{eins, zwei, drei}') + LOOP + FOR args IN VALUES ('{}'), ('{integer}') + LOOP + BEGIN + PERFORM pg_get_object_address(objtype, names, args); + EXCEPTION WHEN OTHERS THEN + RAISE WARNING 'error for %,%,%: %', objtype, names, args, sqlerrm; + END; + END LOOP; + END LOOP; + END LOOP; END; $$; @@ -144,73 +145,81 @@ SELECT pg_get_object_address('publication', '{one,two}', '{}'); SELECT pg_get_object_address('subscription', '{one}', '{}'); SELECT pg_get_object_address('subscription', '{one,two}', '{}'); +-- Make sure that NULL handling is correct. +\pset null 'NULL' + +-- Temporarily disable fancy output, so as future additions never create +-- a large amount of diffs. +\a\t + -- test successful cases WITH objects (type, name, args) AS (VALUES - ('table', '{addr_nsp, gentable}'::text[], '{}'::text[]), - ('table', '{addr_nsp, parttable}'::text[], '{}'::text[]), - ('index', '{addr_nsp, gentable_pkey}', '{}'), - ('index', '{addr_nsp, parttable_pkey}', '{}'), - ('sequence', '{addr_nsp, gentable_a_seq}', '{}'), - -- toast table - ('view', '{addr_nsp, genview}', '{}'), - ('materialized view', '{addr_nsp, genmatview}', '{}'), - ('foreign table', '{addr_nsp, genftable}', '{}'), - ('table column', '{addr_nsp, gentable, b}', '{}'), - ('foreign table column', '{addr_nsp, genftable, a}', '{}'), - ('aggregate', '{addr_nsp, genaggr}', '{int4}'), - ('function', '{pg_catalog, pg_identify_object}', '{pg_catalog.oid, pg_catalog.oid, int4}'), - ('procedure', '{addr_nsp, proc}', '{int4}'), - ('type', '{pg_catalog._int4}', '{}'), - ('type', '{addr_nsp.gendomain}', '{}'), - ('type', '{addr_nsp.gencomptype}', '{}'), - ('type', '{addr_nsp.genenum}', '{}'), - ('cast', '{int8}', '{int4}'), - ('collation', '{default}', '{}'), - ('table constraint', '{addr_nsp, gentable, a_chk}', '{}'), - ('domain constraint', '{addr_nsp.gendomain}', '{domconstr}'), - ('conversion', '{pg_catalog, koi8_r_to_mic}', '{}'), - ('default value', '{addr_nsp, gentable, b}', '{}'), - ('language', '{plpgsql}', '{}'), - -- large object - ('operator', '{+}', '{int4, int4}'), - ('operator class', '{btree, int4_ops}', '{}'), - ('operator family', '{btree, integer_ops}', '{}'), - ('operator of access method', '{btree,integer_ops,1}', '{integer,integer}'), - ('function of access method', '{btree,integer_ops,2}', '{integer,integer}'), - ('rule', '{addr_nsp, genview, _RETURN}', '{}'), - ('trigger', '{addr_nsp, gentable, t}', '{}'), - ('schema', '{addr_nsp}', '{}'), - ('text search parser', '{addr_ts_prs}', '{}'), - ('text search dictionary', '{addr_ts_dict}', '{}'), - ('text search template', '{addr_ts_temp}', '{}'), - ('text search configuration', '{addr_ts_conf}', '{}'), - ('role', '{regress_addr_user}', '{}'), - -- database - -- tablespace - ('foreign-data wrapper', '{addr_fdw}', '{}'), - ('server', '{addr_fserv}', '{}'), - ('user mapping', '{regress_addr_user}', '{integer}'), - ('default acl', '{regress_addr_user,public}', '{r}'), - ('default acl', '{regress_addr_user}', '{r}'), - -- extension - -- event trigger - ('policy', '{addr_nsp, gentable, genpol}', '{}'), - ('transform', '{int}', '{sql}'), - ('access method', '{btree}', '{}'), - ('publication', '{addr_pub}', '{}'), - ('publication namespace', '{addr_nsp}', '{addr_pub_schema}'), - ('publication relation', '{addr_nsp, gentable}', '{addr_pub}'), - ('subscription', '{regress_addr_sub}', '{}'), - ('statistics object', '{addr_nsp, gentable_stat}', '{}') - ) + ('table', '{addr_nsp, gentable}'::text[], '{}'::text[]), + ('table', '{addr_nsp, parttable}'::text[], '{}'::text[]), + ('index', '{addr_nsp, gentable_pkey}', '{}'), + ('index', '{addr_nsp, parttable_pkey}', '{}'), + ('sequence', '{addr_nsp, gentable_a_seq}', '{}'), + -- toast table + ('view', '{addr_nsp, genview}', '{}'), + ('materialized view', '{addr_nsp, genmatview}', '{}'), + ('foreign table', '{addr_nsp, genftable}', '{}'), + ('table column', '{addr_nsp, gentable, b}', '{}'), + ('foreign table column', '{addr_nsp, genftable, a}', '{}'), + ('aggregate', '{addr_nsp, genaggr}', '{int4}'), + ('function', '{pg_catalog, pg_identify_object}', '{pg_catalog.oid, pg_catalog.oid, int4}'), + ('procedure', '{addr_nsp, proc}', '{int4}'), + ('type', '{pg_catalog._int4}', '{}'), + ('type', '{addr_nsp.gendomain}', '{}'), + ('type', '{addr_nsp.gencomptype}', '{}'), + ('type', '{addr_nsp.genenum}', '{}'), + ('cast', '{int8}', '{int4}'), + ('collation', '{default}', '{}'), + ('table constraint', '{addr_nsp, gentable, a_chk}', '{}'), + ('domain constraint', '{addr_nsp.gendomain}', '{domconstr}'), + ('conversion', '{pg_catalog, koi8_r_to_mic}', '{}'), + ('default value', '{addr_nsp, gentable, b}', '{}'), + ('language', '{plpgsql}', '{}'), + -- large object + ('operator', '{+}', '{int4, int4}'), + ('operator class', '{btree, int4_ops}', '{}'), + ('operator family', '{btree, integer_ops}', '{}'), + ('operator of access method', '{btree,integer_ops,1}', '{integer,integer}'), + ('function of access method', '{btree,integer_ops,2}', '{integer,integer}'), + ('rule', '{addr_nsp, genview, _RETURN}', '{}'), + ('trigger', '{addr_nsp, gentable, t}', '{}'), + ('schema', '{addr_nsp}', '{}'), + ('text search parser', '{addr_ts_prs}', '{}'), + ('text search dictionary', '{addr_ts_dict}', '{}'), + ('text search template', '{addr_ts_temp}', '{}'), + ('text search configuration', '{addr_ts_conf}', '{}'), + ('role', '{regress_addr_user}', '{}'), + -- database + -- tablespace + ('foreign-data wrapper', '{addr_fdw}', '{}'), + ('server', '{addr_fserv}', '{}'), + ('user mapping', '{regress_addr_user}', '{integer}'), + ('default acl', '{regress_addr_user,public}', '{r}'), + ('default acl', '{regress_addr_user}', '{r}'), + -- extension + -- event trigger + ('policy', '{addr_nsp, gentable, genpol}', '{}'), + ('transform', '{int}', '{sql}'), + ('access method', '{btree}', '{}'), + ('publication', '{addr_pub}', '{}'), + ('publication namespace', '{addr_nsp}', '{addr_pub_schema}'), + ('publication relation', '{addr_nsp, gentable}', '{addr_pub}'), + ('subscription', '{regress_addr_sub}', '{}'), + ('statistics object', '{addr_nsp, gentable_stat}', '{}') + ) SELECT (pg_identify_object(addr1.classid, addr1.objid, addr1.objsubid)).*, - -- test roundtrip through pg_identify_object_as_address - ROW(pg_identify_object(addr1.classid, addr1.objid, addr1.objsubid)) = - ROW(pg_identify_object(addr2.classid, addr2.objid, addr2.objsubid)) - FROM objects, pg_get_object_address(type, name, args) addr1, - pg_identify_object_as_address(classid, objid, objsubid) ioa(typ,nms,args), - pg_get_object_address(typ, nms, ioa.args) as addr2 - ORDER BY addr1.classid, addr1.objid, addr1.objsubid; + -- test roundtrip through pg_identify_object_as_address + ROW(pg_identify_object(addr1.classid, addr1.objid, addr1.objsubid)) = + ROW(pg_identify_object(addr2.classid, addr2.objid, addr2.objsubid)) AS roundtrip +FROM objects, + pg_get_object_address(type, name, args) AS addr1, + pg_identify_object_as_address(classid, objid, objsubid) AS ioa (typ, nms, args), + pg_get_object_address(typ, nms, ioa.args) AS addr2 +ORDER BY addr1.classid, addr1.objid, addr1.objsubid; --- --- Cleanup resources @@ -228,11 +237,6 @@ DROP USER regress_addr_user; -- -- Checks for invalid objects -- --- Make sure that NULL handling is correct. -\pset null 'NULL' --- Temporarily disable fancy output, so as future additions never create --- a large amount of diffs. -\a\t -- Keep this list in the same order as getObjectIdentityParts() -- in objectaddress.c. @@ -263,6 +267,7 @@ WITH objects (classid, objid, objsubid) AS (VALUES ('pg_ts_template'::regclass, 0, 0), -- no TS template ('pg_ts_config'::regclass, 0, 0), -- no TS configuration ('pg_authid'::regclass, 0, 0), -- no role + ('pg_auth_members'::regclass, 0, 0), -- no role membership ('pg_database'::regclass, 0, 0), -- no database ('pg_tablespace'::regclass, 0, 0), -- no tablespace ('pg_foreign_data_wrapper'::regclass, 0, 0), -- no FDW @@ -271,8 +276,10 @@ WITH objects (classid, objid, objsubid) AS (VALUES ('pg_default_acl'::regclass, 0, 0), -- no default ACL ('pg_extension'::regclass, 0, 0), -- no extension ('pg_event_trigger'::regclass, 0, 0), -- no event trigger + ('pg_parameter_acl'::regclass, 0, 0), -- no parameter ACL ('pg_policy'::regclass, 0, 0), -- no policy ('pg_publication'::regclass, 0, 0), -- no publication + ('pg_publication_namespace'::regclass, 0, 0), -- no publication namespace ('pg_publication_rel'::regclass, 0, 0), -- no publication relation ('pg_subscription'::regclass, 0, 0), -- no subscription ('pg_transform'::regclass, 0, 0) -- no transformation diff --git a/test/sql/postgres_regress/oid.sql b/test/sql/postgres_regress/oid.sql index 25b4b68a..a96b2aa1 100644 --- a/test/sql/postgres_regress/oid.sql +++ b/test/sql/postgres_regress/oid.sql @@ -28,6 +28,20 @@ INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385'); SELECT * FROM OID_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('1234', 'oid'); +SELECT pg_input_is_valid('01XYZ', 'oid'); +SELECT * FROM pg_input_error_info('01XYZ', 'oid'); +SELECT pg_input_is_valid('9999999999', 'oid'); +SELECT * FROM pg_input_error_info('9999999999', 'oid'); + +-- While we're here, check oidvector as well +SELECT pg_input_is_valid(' 1 2 4 ', 'oidvector'); +SELECT pg_input_is_valid('01 01XYZ', 'oidvector'); +SELECT * FROM pg_input_error_info('01 01XYZ', 'oidvector'); +SELECT pg_input_is_valid('01 9999999999', 'oidvector'); +SELECT * FROM pg_input_error_info('01 9999999999', 'oidvector'); + SELECT o.* FROM OID_TBL o WHERE o.f1 = 1234; SELECT o.* FROM OID_TBL o WHERE o.f1 <> '1234'; diff --git a/test/sql/postgres_regress/opr_sanity.sql b/test/sql/postgres_regress/opr_sanity.sql index 2b292851..e2d2c70d 100644 --- a/test/sql/postgres_regress/opr_sanity.sql +++ b/test/sql/postgres_regress/opr_sanity.sql @@ -344,6 +344,32 @@ WHERE proallargtypes IS NOT NULL AND FROM generate_series(1, array_length(proallargtypes, 1)) g(i) WHERE proargmodes IS NULL OR proargmodes[i] IN ('i', 'b', 'v')); +-- Check for type of the variadic array parameter's elements. +-- provariadic should be ANYOID if the type of the last element is ANYOID, +-- ANYELEMENTOID if the type of the last element is ANYARRAYOID, +-- ANYCOMPATIBLEOID if the type of the last element is ANYCOMPATIBLEARRAYOID, +-- and otherwise the element type corresponding to the array type. + +SELECT oid::regprocedure, provariadic::regtype, proargtypes::regtype[] +FROM pg_proc +WHERE provariadic != 0 +AND case proargtypes[array_length(proargtypes, 1)-1] + WHEN '"any"'::regtype THEN '"any"'::regtype + WHEN 'anyarray'::regtype THEN 'anyelement'::regtype + WHEN 'anycompatiblearray'::regtype THEN 'anycompatible'::regtype + ELSE (SELECT t.oid + FROM pg_type t + WHERE t.typarray = proargtypes[array_length(proargtypes, 1)-1]) + END != provariadic; + +-- Check that all and only those functions with a variadic type have +-- a variadic argument. +SELECT oid::regprocedure, proargmodes, provariadic +FROM pg_proc +WHERE (proargmodes IS NOT NULL AND 'v' = any(proargmodes)) + IS DISTINCT FROM + (provariadic != 0); + -- Check for prosupport functions with the wrong signature SELECT p1.oid, p1.proname, p2.oid, p2.proname FROM pg_proc AS p1, pg_proc AS p2 @@ -854,8 +880,10 @@ WHERE a.aggfnoid = p.oid AND NOT binary_coercible(p.proargtypes[1], ptr.proargtypes[2])) OR (p.pronargs > 2 AND NOT binary_coercible(p.proargtypes[2], ptr.proargtypes[3])) - -- we could carry the check further, but 3 args is enough for now - OR (p.pronargs > 3) + OR (p.pronargs > 3 AND + NOT binary_coercible(p.proargtypes[3], ptr.proargtypes[4])) + -- we could carry the check further, but 4 args is enough for now + OR (p.pronargs > 4) ); -- Cross-check finalfn (if present) against its entry in pg_proc. diff --git a/test/sql/postgres_regress/partition_join.sql b/test/sql/postgres_regress/partition_join.sql index 67f50636..48daf3ae 100644 --- a/test/sql/postgres_regress/partition_join.sql +++ b/test/sql/postgres_regress/partition_join.sql @@ -34,6 +34,15 @@ EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt2 t2 WHERE t1.a = t2.b AND t1.b = 0 ORDER BY t1.a, t2.b; SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt2 t2 WHERE t1.a = t2.b AND t1.b = 0 ORDER BY t1.a, t2.b; +-- left outer join, 3-way +EXPLAIN (COSTS OFF) +SELECT COUNT(*) FROM prt1 t1 + LEFT JOIN prt1 t2 ON t1.a = t2.a + LEFT JOIN prt1 t3 ON t2.a = t3.a; +SELECT COUNT(*) FROM prt1 t1 + LEFT JOIN prt1 t2 ON t1.a = t2.a + LEFT JOIN prt1 t3 ON t2.a = t3.a; + -- left outer join, with whole-row reference; partitionwise join does not apply EXPLAIN (COSTS OFF) SELECT t1, t2 FROM prt1 t1 LEFT JOIN prt2 t2 ON t1.a = t2.b WHERE t1.b = 0 ORDER BY t1.a, t2.b; @@ -1157,10 +1166,10 @@ SET max_parallel_workers_per_gather = 0; SET enable_partitionwise_join = on; EXPLAIN (COSTS OFF) -SELECT * FROM fract_t x LEFT JOIN fract_t y USING (id) ORDER BY id ASC LIMIT 10; +SELECT x.id, y.id FROM fract_t x LEFT JOIN fract_t y USING (id) ORDER BY x.id ASC LIMIT 10; EXPLAIN (COSTS OFF) -SELECT * FROM fract_t x LEFT JOIN fract_t y USING (id) ORDER BY id DESC LIMIT 10; +SELECT x.id, y.id FROM fract_t x LEFT JOIN fract_t y USING (id) ORDER BY x.id DESC LIMIT 10; -- cleanup DROP TABLE fract_t; diff --git a/test/sql/postgres_regress/partition_prune.sql b/test/sql/postgres_regress/partition_prune.sql index d70bd861..70b20fb5 100644 --- a/test/sql/postgres_regress/partition_prune.sql +++ b/test/sql/postgres_regress/partition_prune.sql @@ -158,6 +158,7 @@ create table boolpart (a bool) partition by list (a); create table boolpart_default partition of boolpart default; create table boolpart_t partition of boolpart for values in ('true'); create table boolpart_f partition of boolpart for values in ('false'); +insert into boolpart values (true), (false), (null); explain (costs off) select * from boolpart where a in (true, false); explain (costs off) select * from boolpart where a = false; @@ -168,6 +169,41 @@ explain (costs off) select * from boolpart where a is not true and a is not fals explain (costs off) select * from boolpart where a is unknown; explain (costs off) select * from boolpart where a is not unknown; +select * from boolpart where a in (true, false); +select * from boolpart where a = false; +select * from boolpart where not a = false; +select * from boolpart where a is true or a is not true; +select * from boolpart where a is not true; +select * from boolpart where a is not true and a is not false; +select * from boolpart where a is unknown; +select * from boolpart where a is not unknown; + +-- inverse boolean partitioning - a seemingly unlikely design, but we've got +-- code for it, so we'd better test it. +create table iboolpart (a bool) partition by list ((not a)); +create table iboolpart_default partition of iboolpart default; +create table iboolpart_f partition of iboolpart for values in ('true'); +create table iboolpart_t partition of iboolpart for values in ('false'); +insert into iboolpart values (true), (false), (null); + +explain (costs off) select * from iboolpart where a in (true, false); +explain (costs off) select * from iboolpart where a = false; +explain (costs off) select * from iboolpart where not a = false; +explain (costs off) select * from iboolpart where a is true or a is not true; +explain (costs off) select * from iboolpart where a is not true; +explain (costs off) select * from iboolpart where a is not true and a is not false; +explain (costs off) select * from iboolpart where a is unknown; +explain (costs off) select * from iboolpart where a is not unknown; + +select * from iboolpart where a in (true, false); +select * from iboolpart where a = false; +select * from iboolpart where not a = false; +select * from iboolpart where a is true or a is not true; +select * from iboolpart where a is not true; +select * from iboolpart where a is not true and a is not false; +select * from iboolpart where a is unknown; +select * from iboolpart where a is not unknown; + create table boolrangep (a bool, b bool, c int) partition by range (a,b,c); create table boolrangep_tf partition of boolrangep for values from ('true', 'false', 0) to ('true', 'false', 100); create table boolrangep_ft partition of boolrangep for values from ('false', 'true', 0) to ('false', 'true', 100); @@ -283,18 +319,18 @@ explain (costs off) select * from like_op_noprune where a like '%BC'; create table lparted_by_int2 (a smallint) partition by list (a); create table lparted_by_int2_1 partition of lparted_by_int2 for values in (1); create table lparted_by_int2_16384 partition of lparted_by_int2 for values in (16384); -explain (costs off) select * from lparted_by_int2 where a = 100000000000000; +explain (costs off) select * from lparted_by_int2 where a = 100_000_000_000_000; create table rparted_by_int2 (a smallint) partition by range (a); create table rparted_by_int2_1 partition of rparted_by_int2 for values from (1) to (10); create table rparted_by_int2_16384 partition of rparted_by_int2 for values from (10) to (16384); -- all partitions pruned -explain (costs off) select * from rparted_by_int2 where a > 100000000000000; +explain (costs off) select * from rparted_by_int2 where a > 100_000_000_000_000; create table rparted_by_int2_maxvalue partition of rparted_by_int2 for values from (16384) to (maxvalue); -- all partitions but rparted_by_int2_maxvalue pruned -explain (costs off) select * from rparted_by_int2 where a > 100000000000000; +explain (costs off) select * from rparted_by_int2 where a > 100_000_000_000_000; -drop table lp, coll_pruning, rlp, mc3p, mc2p, boolpart, boolrangep, rp, coll_pruning_multi, like_op_noprune, lparted_by_int2, rparted_by_int2; +drop table lp, coll_pruning, rlp, mc3p, mc2p, boolpart, iboolpart, boolrangep, rp, coll_pruning_multi, like_op_noprune, lparted_by_int2, rparted_by_int2; -- -- Test Partition pruning for HASH partitioning @@ -348,8 +384,6 @@ drop table hp2; explain (costs off) select * from hp where a = 1 and b = 'abcde' and (c = 2 or c = 3); -drop table hp; - -- -- Test runtime partition pruning -- @@ -400,6 +434,25 @@ select a from ab where b between $1 and $2 and a < (select 3); explain (analyze, costs off, summary off, timing off) execute ab_q3 (2, 2); +-- +-- Test runtime pruning with hash partitioned tables +-- + +-- recreate partitions dropped above +create table hp1 partition of hp for values with (modulus 4, remainder 1); +create table hp2 partition of hp for values with (modulus 4, remainder 2); +create table hp3 partition of hp for values with (modulus 4, remainder 3); + +-- Ensure we correctly prune unneeded partitions when there is an IS NULL qual +prepare hp_q1 (text) as +select * from hp where a is null and b = $1; + +explain (costs off) execute hp_q1('xxx'); + +deallocate hp_q1; + +drop table hp; + -- Test a backwards Append scan create table list_part (a int) partition by list (a); create table list_part1 partition of list_part for values in (1); @@ -1146,16 +1199,57 @@ explain (costs off) select * from rp_prefix_test3 where a >= 1 and b >= 1 and b -- that the caller arranges clauses in that prefix in the required order) explain (costs off) select * from rp_prefix_test3 where a >= 1 and b >= 1 and b = 2 and c = 2 and d >= 0; -create table hp_prefix_test (a int, b int, c int, d int) partition by hash (a part_test_int4_ops, b part_test_int4_ops, c part_test_int4_ops, d part_test_int4_ops); -create table hp_prefix_test_p1 partition of hp_prefix_test for values with (modulus 2, remainder 0); -create table hp_prefix_test_p2 partition of hp_prefix_test for values with (modulus 2, remainder 1); - --- Test that get_steps_using_prefix() handles non-NULL step_nullkeys -explain (costs off) select * from hp_prefix_test where a = 1 and b is null and c = 1 and d = 1; - drop table rp_prefix_test1; drop table rp_prefix_test2; drop table rp_prefix_test3; + +-- +-- Test that get_steps_using_prefix() handles IS NULL clauses correctly +-- +create table hp_prefix_test (a int, b int, c int, d int) + partition by hash (a part_test_int4_ops, b part_test_int4_ops, c part_test_int4_ops, d part_test_int4_ops); + +-- create 8 partitions +select 'create table hp_prefix_test_p' || x::text || ' partition of hp_prefix_test for values with (modulus 8, remainder ' || x::text || ');' +from generate_Series(0,7) x; +\gexec + +-- insert 16 rows, one row for each test to perform. +insert into hp_prefix_test +select + case a when 0 then null else 1 end, + case b when 0 then null else 2 end, + case c when 0 then null else 3 end, + case d when 0 then null else 4 end +from + generate_series(0,1) a, + generate_series(0,1) b, + generate_Series(0,1) c, + generate_Series(0,1) d; + +-- Ensure partition pruning works correctly for each combination of IS NULL +-- and equality quals. This may seem a little excessive, but there have been +-- a number of bugs in this area over the years. We make use of row only +-- output to reduce the size of the expected results. +\t on +select + 'explain (costs off) select tableoid::regclass,* from hp_prefix_test where ' || + string_agg(c.colname || case when g.s & (1 << c.colpos) = 0 then ' is null' else ' = ' || (colpos+1)::text end, ' and ' order by c.colpos) +from (values('a',0),('b',1),('c',2),('d',3)) c(colname, colpos), generate_Series(0,15) g(s) +group by g.s +order by g.s; +\gexec + +-- And ensure we get exactly 1 row from each. Again, all 16 possible combinations. +select + 'select tableoid::regclass,* from hp_prefix_test where ' || + string_agg(c.colname || case when g.s & (1 << c.colpos) = 0 then ' is null' else ' = ' || (colpos+1)::text end, ' and ' order by c.colpos) +from (values('a',0),('b',1),('c',2),('d',3)) c(colname, colpos), generate_Series(0,15) g(s) +group by g.s +order by g.s; +\gexec +\t off + drop table hp_prefix_test; -- diff --git a/test/sql/postgres_regress/password.sql b/test/sql/postgres_regress/password.sql index 98f49916..53e86b0b 100644 --- a/test/sql/postgres_regress/password.sql +++ b/test/sql/postgres_regress/password.sql @@ -63,6 +63,10 @@ CREATE ROLE regress_passwd7 PASSWORD 'md5012345678901234567890123456789zz'; -- invalid length CREATE ROLE regress_passwd8 PASSWORD 'md501234567890123456789012345678901zz'; +-- Changing the SCRAM iteration count +SET scram_iterations = 1024; +CREATE ROLE regress_passwd9 PASSWORD 'alterediterationcount'; + SELECT rolname, regexp_replace(rolpassword, '(SCRAM-SHA-256)\$(\d+):([a-zA-Z0-9+/=]+)\$([a-zA-Z0-9+=/]+):([a-zA-Z0-9+/=]+)', '\1$\2:$:') as rolpassword_masked FROM pg_authid WHERE rolname LIKE 'regress_passwd%' @@ -97,6 +101,7 @@ DROP ROLE regress_passwd5; DROP ROLE regress_passwd6; DROP ROLE regress_passwd7; DROP ROLE regress_passwd8; +DROP ROLE regress_passwd9; DROP ROLE regress_passwd_empty; DROP ROLE regress_passwd_sha_len0; DROP ROLE regress_passwd_sha_len1; diff --git a/test/sql/postgres_regress/path.sql b/test/sql/postgres_regress/path.sql index 89f1aa9a..8422ba96 100644 --- a/test/sql/postgres_regress/path.sql +++ b/test/sql/postgres_regress/path.sql @@ -42,3 +42,9 @@ SELECT f1 AS closed_path FROM PATH_TBL WHERE isclosed(f1); SELECT pclose(f1) AS closed_path FROM PATH_TBL; SELECT popen(f1) AS open_path FROM PATH_TBL; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('[(1,2),(3)]', 'path'); +SELECT * FROM pg_input_error_info('[(1,2),(3)]', 'path'); +SELECT pg_input_is_valid('[(1,2,6),(3,4,6)]', 'path'); +SELECT * FROM pg_input_error_info('[(1,2,6),(3,4,6)]', 'path'); diff --git a/test/sql/postgres_regress/pg_lsn.sql b/test/sql/postgres_regress/pg_lsn.sql index 615368ba..98c869df 100644 --- a/test/sql/postgres_regress/pg_lsn.sql +++ b/test/sql/postgres_regress/pg_lsn.sql @@ -15,6 +15,10 @@ INSERT INTO PG_LSN_TBL VALUES (' 0/12345678'); INSERT INTO PG_LSN_TBL VALUES ('ABCD/'); INSERT INTO PG_LSN_TBL VALUES ('/ABCD'); +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('16AE7F7', 'pg_lsn'); +SELECT * FROM pg_input_error_info('16AE7F7', 'pg_lsn'); + -- Min/Max aggregation SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL; diff --git a/test/sql/postgres_regress/plpgsql.sql b/test/sql/postgres_regress/plpgsql.sql index 588c3310..924d5240 100644 --- a/test/sql/postgres_regress/plpgsql.sql +++ b/test/sql/postgres_regress/plpgsql.sql @@ -2877,7 +2877,7 @@ create type record_type as (x text, y int, z boolean); create or replace function ret_query2(lim int) returns setof record_type as $$ begin - return query select md5(s.x::text), s.x, s.x > 0 + return query select fipshash(s.x::text), s.x, s.x > 0 from generate_series(-8, lim) s (x) where s.x % 2 = 0; end; $$ language plpgsql; @@ -2929,6 +2929,9 @@ declare c2 cursor for select * from generate_series(41,43) i; begin + -- assign portal names to cursors to get stable output + c := 'c'; + c2 := 'c2'; for r in c(5,7) loop raise notice '% from %', r.i, c; end loop; @@ -3002,6 +3005,23 @@ select * from forc_test; drop function forc01(); +-- it's okay to re-use a cursor variable name, even when bound + +do $$ +declare cnt int := 0; + c1 cursor for select * from forc_test; +begin + for r1 in c1 loop + declare c1 cursor for select * from forc_test; + begin + for r2 in c1 loop + cnt := cnt + 1; + end loop; + end; + end loop; + raise notice 'cnt = %', cnt; +end $$; + -- fail because cursor has no query bound to it create or replace function forc_bad() returns void as $$ @@ -4186,7 +4206,7 @@ end; $$ language plpgsql; select outer_outer_func(10); --- repeated call should to work +-- repeated call should work select outer_outer_func(20); drop function outer_outer_func(int); @@ -4241,13 +4261,38 @@ end; $$ language plpgsql; select outer_outer_func(10); --- repeated call should to work +-- repeated call should work select outer_outer_func(20); drop function outer_outer_func(int); drop function outer_func(int); drop function inner_func(int); +-- Test pg_routine_oid +create function current_function(text) +returns regprocedure as $$ +declare + fn_oid regprocedure; +begin + get diagnostics fn_oid = pg_routine_oid; + return fn_oid; +end; +$$ language plpgsql; + +select current_function('foo'); + +drop function current_function(text); + +-- shouldn't fail in DO, even though there's no useful data +do $$ +declare + fn_oid oid; +begin + get diagnostics fn_oid = pg_routine_oid; + raise notice 'pg_routine_oid = %', fn_oid; +end; +$$; + -- -- Test ASSERT -- diff --git a/test/sql/postgres_regress/point.sql b/test/sql/postgres_regress/point.sql index 435ff4b9..b1a29eb2 100644 --- a/test/sql/postgres_regress/point.sql +++ b/test/sql/postgres_regress/point.sql @@ -96,3 +96,7 @@ SELECT COUNT(*) FROM point_gist_tbl WHERE f1 ~= '(0.0000018,0.0000018)'::point; RESET enable_seqscan; RESET enable_indexscan; RESET enable_bitmapscan; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('1,y', 'point'); +SELECT * FROM pg_input_error_info('1,y', 'point'); diff --git a/test/sql/postgres_regress/polygon.sql b/test/sql/postgres_regress/polygon.sql index f53b2cb6..9f6c5d5e 100644 --- a/test/sql/postgres_regress/polygon.sql +++ b/test/sql/postgres_regress/polygon.sql @@ -140,3 +140,9 @@ WHERE seq.id IS NULL OR idx.id IS NULL; RESET enable_seqscan; RESET enable_indexscan; RESET enable_bitmapscan; + +-- test non-error-throwing API for some core types +SELECT pg_input_is_valid('(2.0,0.8,0.1)', 'polygon'); +SELECT * FROM pg_input_error_info('(2.0,0.8,0.1)', 'polygon'); +SELECT pg_input_is_valid('(2.0,xyz)', 'polygon'); +SELECT * FROM pg_input_error_info('(2.0,xyz)', 'polygon'); diff --git a/test/sql/postgres_regress/prepare.sql b/test/sql/postgres_regress/prepare.sql index 985d0f05..c6098dc9 100644 --- a/test/sql/postgres_regress/prepare.sql +++ b/test/sql/postgres_regress/prepare.sql @@ -2,12 +2,12 @@ -- of the pg_prepared_statements view as prepared statements are -- created and removed. -SELECT name, statement, parameter_types FROM pg_prepared_statements; +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements; PREPARE q1 AS SELECT 1 AS a; EXECUTE q1; -SELECT name, statement, parameter_types FROM pg_prepared_statements; +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements; -- should fail PREPARE q1 AS SELECT 2; @@ -18,16 +18,16 @@ PREPARE q1 AS SELECT 2; EXECUTE q1; PREPARE q2 AS SELECT 2 AS b; -SELECT name, statement, parameter_types FROM pg_prepared_statements; +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements; -- sql92 syntax DEALLOCATE PREPARE q1; -SELECT name, statement, parameter_types FROM pg_prepared_statements; +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements; DEALLOCATE PREPARE q2; -- the view should return the empty set again -SELECT name, statement, parameter_types FROM pg_prepared_statements; +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements; -- parameterized queries PREPARE q2(text) AS @@ -71,7 +71,11 @@ PREPARE q6 AS PREPARE q7(unknown) AS SELECT * FROM road WHERE thepath = $1; -SELECT name, statement, parameter_types FROM pg_prepared_statements +-- DML statements +PREPARE q8 AS + UPDATE tenk1 SET stringu1 = $2 WHERE unique1 = $1; + +SELECT name, statement, parameter_types, result_types FROM pg_prepared_statements ORDER BY name; -- test DEALLOCATE ALL; diff --git a/test/sql/postgres_regress/privileges.sql b/test/sql/postgres_regress/privileges.sql index 2a6ba38e..3f68cafc 100644 --- a/test/sql/postgres_regress/privileges.sql +++ b/test/sql/postgres_regress/privileges.sql @@ -37,9 +37,63 @@ CREATE USER regress_priv_user9; CREATE USER regress_priv_user10; CREATE ROLE regress_priv_role; +-- circular ADMIN OPTION grants should be disallowed +GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION; +GRANT regress_priv_user1 TO regress_priv_user3 WITH ADMIN OPTION GRANTED BY regress_priv_user2; +GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION GRANTED BY regress_priv_user3; + +-- need CASCADE to revoke grant or admin option if dependent grants exist +REVOKE ADMIN OPTION FOR regress_priv_user1 FROM regress_priv_user2; -- fail +REVOKE regress_priv_user1 FROM regress_priv_user2; -- fail +SELECT member::regrole, admin_option FROM pg_auth_members WHERE roleid = 'regress_priv_user1'::regrole; +BEGIN; +REVOKE ADMIN OPTION FOR regress_priv_user1 FROM regress_priv_user2 CASCADE; +SELECT member::regrole, admin_option FROM pg_auth_members WHERE roleid = 'regress_priv_user1'::regrole; +ROLLBACK; +REVOKE regress_priv_user1 FROM regress_priv_user2 CASCADE; +SELECT member::regrole, admin_option FROM pg_auth_members WHERE roleid = 'regress_priv_user1'::regrole; + +-- inferred grantor must be a role with ADMIN OPTION +GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION; +GRANT regress_priv_user2 TO regress_priv_user3; +SET ROLE regress_priv_user3; +GRANT regress_priv_user1 TO regress_priv_user4; +SELECT grantor::regrole FROM pg_auth_members WHERE roleid = 'regress_priv_user1'::regrole and member = 'regress_priv_user4'::regrole; +RESET ROLE; +REVOKE regress_priv_user2 FROM regress_priv_user3; +REVOKE regress_priv_user1 FROM regress_priv_user2 CASCADE; + +-- test GRANTED BY with DROP OWNED and REASSIGN OWNED +GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION; +GRANT regress_priv_user1 TO regress_priv_user3 GRANTED BY regress_priv_user2; +DROP ROLE regress_priv_user2; -- fail, dependency +REASSIGN OWNED BY regress_priv_user2 TO regress_priv_user4; +DROP ROLE regress_priv_user2; -- still fail, REASSIGN OWNED doesn't help +DROP OWNED BY regress_priv_user2; +DROP ROLE regress_priv_user2; -- ok now, DROP OWNED does the job + +-- test that removing granted role or grantee role removes dependency +GRANT regress_priv_user1 TO regress_priv_user3 WITH ADMIN OPTION; +GRANT regress_priv_user1 TO regress_priv_user4 GRANTED BY regress_priv_user3; +DROP ROLE regress_priv_user3; -- should fail, dependency +DROP ROLE regress_priv_user4; -- ok +DROP ROLE regress_priv_user3; -- ok now +GRANT regress_priv_user1 TO regress_priv_user5 WITH ADMIN OPTION; +GRANT regress_priv_user1 TO regress_priv_user6 GRANTED BY regress_priv_user5; +DROP ROLE regress_priv_user5; -- should fail, dependency +DROP ROLE regress_priv_user1, regress_priv_user5; -- ok, despite order + +-- recreate the roles we just dropped +CREATE USER regress_priv_user1; +CREATE USER regress_priv_user2; +CREATE USER regress_priv_user3; +CREATE USER regress_priv_user4; +CREATE USER regress_priv_user5; + GRANT pg_read_all_data TO regress_priv_user6; GRANT pg_write_all_data TO regress_priv_user7; GRANT pg_read_all_settings TO regress_priv_user8 WITH ADMIN OPTION; +GRANT regress_priv_user9 TO regress_priv_user8; SET SESSION AUTHORIZATION regress_priv_user8; GRANT pg_read_all_settings TO regress_priv_user9 WITH ADMIN OPTION; @@ -48,17 +102,27 @@ SET SESSION AUTHORIZATION regress_priv_user9; GRANT pg_read_all_settings TO regress_priv_user10; SET SESSION AUTHORIZATION regress_priv_user8; -REVOKE pg_read_all_settings FROM regress_priv_user10; +REVOKE pg_read_all_settings FROM regress_priv_user10 GRANTED BY regress_priv_user9; REVOKE ADMIN OPTION FOR pg_read_all_settings FROM regress_priv_user9; REVOKE pg_read_all_settings FROM regress_priv_user9; RESET SESSION AUTHORIZATION; +REVOKE regress_priv_user9 FROM regress_priv_user8; REVOKE ADMIN OPTION FOR pg_read_all_settings FROM regress_priv_user8; SET SESSION AUTHORIZATION regress_priv_user8; SET ROLE pg_read_all_settings; RESET ROLE; +RESET SESSION AUTHORIZATION; +REVOKE SET OPTION FOR pg_read_all_settings FROM regress_priv_user8; +GRANT pg_read_all_stats TO regress_priv_user8 WITH SET FALSE; + +SET SESSION AUTHORIZATION regress_priv_user8; +SET ROLE pg_read_all_settings; -- fail, no SET option any more +SET ROLE pg_read_all_stats; -- fail, granted without SET option +RESET ROLE; + RESET SESSION AUTHORIZATION; REVOKE pg_read_all_settings FROM regress_priv_user8; @@ -67,12 +131,19 @@ DROP USER regress_priv_user9; DROP USER regress_priv_user8; CREATE GROUP regress_priv_group1; -CREATE GROUP regress_priv_group2 WITH USER regress_priv_user1, regress_priv_user2; +CREATE GROUP regress_priv_group2 WITH ADMIN regress_priv_user1 USER regress_priv_user2; ALTER GROUP regress_priv_group1 ADD USER regress_priv_user4; +GRANT regress_priv_group2 TO regress_priv_user2 GRANTED BY regress_priv_user1; +SET SESSION AUTHORIZATION regress_priv_user1; +ALTER GROUP regress_priv_group2 ADD USER regress_priv_user2; ALTER GROUP regress_priv_group2 ADD USER regress_priv_user2; -- duplicate ALTER GROUP regress_priv_group2 DROP USER regress_priv_user2; +ALTER USER regress_priv_user2 PASSWORD 'verysecret'; -- not permitted +RESET SESSION AUTHORIZATION; +ALTER GROUP regress_priv_group2 DROP USER regress_priv_user2; +REVOKE ADMIN OPTION FOR regress_priv_group2 FROM regress_priv_user1; GRANT regress_priv_group2 TO regress_priv_user4 WITH ADMIN OPTION; -- prepare non-leakproof function for later @@ -83,9 +154,10 @@ ALTER FUNCTION leak(integer,integer) OWNER TO regress_priv_user1; -- test owner privileges +GRANT regress_priv_role TO regress_priv_user1 WITH ADMIN OPTION GRANTED BY regress_priv_role; -- error, doesn't have ADMIN OPTION GRANT regress_priv_role TO regress_priv_user1 WITH ADMIN OPTION GRANTED BY CURRENT_ROLE; REVOKE ADMIN OPTION FOR regress_priv_role FROM regress_priv_user1 GRANTED BY foo; -- error -REVOKE ADMIN OPTION FOR regress_priv_role FROM regress_priv_user1 GRANTED BY regress_priv_user2; -- error +REVOKE ADMIN OPTION FOR regress_priv_role FROM regress_priv_user1 GRANTED BY regress_priv_user2; -- warning, noop REVOKE ADMIN OPTION FOR regress_priv_role FROM regress_priv_user1 GRANTED BY CURRENT_USER; REVOKE regress_priv_role FROM regress_priv_user1 GRANTED BY CURRENT_ROLE; DROP ROLE regress_priv_role; @@ -288,7 +360,18 @@ BEGIN; RESET SESSION AUTHORIZATION; ALTER ROLE regress_priv_user1 NOINHERIT; SET SESSION AUTHORIZATION regress_priv_user1; -DELETE FROM atest3; +SAVEPOINT s1; +DELETE FROM atest3; -- ok because grant-level option is unchanged +ROLLBACK TO s1; +RESET SESSION AUTHORIZATION; +GRANT regress_priv_group2 TO regress_priv_user1 WITH INHERIT FALSE; +SET SESSION AUTHORIZATION regress_priv_user1; +DELETE FROM atest3; -- fail +ROLLBACK TO s1; +RESET SESSION AUTHORIZATION; +REVOKE INHERIT OPTION FOR regress_priv_group2 FROM regress_priv_user1; +SET SESSION AUTHORIZATION regress_priv_user1; +DELETE FROM atest3; -- also fail ROLLBACK; -- views @@ -1266,6 +1349,21 @@ SELECT * FROM pg_largeobject LIMIT 0; SET SESSION AUTHORIZATION regress_priv_user1; SELECT * FROM pg_largeobject LIMIT 0; -- to be denied +-- pg_signal_backend can't signal superusers +RESET SESSION AUTHORIZATION; +BEGIN; +CREATE OR REPLACE FUNCTION terminate_nothrow(pid int) RETURNS bool + LANGUAGE plpgsql SECURITY DEFINER SET client_min_messages = error AS $$ +BEGIN + RETURN pg_terminate_backend($1); +EXCEPTION WHEN OTHERS THEN + RETURN false; +END$$; +ALTER FUNCTION terminate_nothrow OWNER TO pg_signal_backend; +SELECT backend_type FROM pg_stat_activity +WHERE CASE WHEN COALESCE(usesysid, 10) = 10 THEN terminate_nothrow(pid) END; +ROLLBACK; + -- test pg_database_owner RESET SESSION AUTHORIZATION; GRANT pg_database_owner TO regress_priv_user1; @@ -1339,6 +1437,23 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_priv_user1 REVOKE EXECUTE ON FUNCTIONS ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT USAGE ON SCHEMAS TO regress_priv_user2; -- error +-- Test makeaclitem() +SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, + 'SELECT', TRUE); -- single privilege +SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, + 'SELECT, INSERT, UPDATE , DELETE ', FALSE); -- multiple privileges +SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, + 'SELECT, fake_privilege', FALSE); -- error + +-- Test non-throwing aclitem I/O +SELECT pg_input_is_valid('regress_priv_user1=r/regress_priv_user2', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=r/', 'aclitem'); +SELECT * FROM pg_input_error_info('regress_priv_user1=r/', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=r/regress_no_such_user', 'aclitem'); +SELECT * FROM pg_input_error_info('regress_priv_user1=r/regress_no_such_user', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=rY', 'aclitem'); +SELECT * FROM pg_input_error_info('regress_priv_user1=rY', 'aclitem'); + -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. @@ -1607,12 +1722,12 @@ CREATE TABLE lock_table (a int); GRANT SELECT ON lock_table TO regress_locktable_user; SET SESSION AUTHORIZATION regress_locktable_user; BEGIN; -LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should fail -ROLLBACK; -BEGIN; LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass COMMIT; BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should fail +ROLLBACK; +BEGIN; LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail ROLLBACK; \c @@ -1622,12 +1737,12 @@ REVOKE SELECT ON lock_table FROM regress_locktable_user; GRANT INSERT ON lock_table TO regress_locktable_user; SET SESSION AUTHORIZATION regress_locktable_user; BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +ROLLBACK; +BEGIN; LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass COMMIT; BEGIN; -LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail -ROLLBACK; -BEGIN; LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail ROLLBACK; \c @@ -1637,12 +1752,12 @@ REVOKE INSERT ON lock_table FROM regress_locktable_user; GRANT UPDATE ON lock_table TO regress_locktable_user; SET SESSION AUTHORIZATION regress_locktable_user; BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +ROLLBACK; +BEGIN; LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass COMMIT; BEGIN; -LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail -ROLLBACK; -BEGIN; LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass COMMIT; \c @@ -1652,12 +1767,12 @@ REVOKE UPDATE ON lock_table FROM regress_locktable_user; GRANT DELETE ON lock_table TO regress_locktable_user; SET SESSION AUTHORIZATION regress_locktable_user; BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +ROLLBACK; +BEGIN; LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass COMMIT; BEGIN; -LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail -ROLLBACK; -BEGIN; LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass COMMIT; \c @@ -1667,12 +1782,12 @@ REVOKE DELETE ON lock_table FROM regress_locktable_user; GRANT TRUNCATE ON lock_table TO regress_locktable_user; SET SESSION AUTHORIZATION regress_locktable_user; BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +ROLLBACK; +BEGIN; LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass COMMIT; BEGIN; -LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail -ROLLBACK; -BEGIN; LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass COMMIT; \c @@ -1706,3 +1821,58 @@ RESET ROLE; -- clean up DROP ROLE regress_readallstats; + +-- test role grantor machinery +CREATE ROLE regress_group; +CREATE ROLE regress_group_direct_manager; +CREATE ROLE regress_group_indirect_manager; +CREATE ROLE regress_group_member; + +GRANT regress_group TO regress_group_direct_manager WITH INHERIT FALSE, ADMIN TRUE; +GRANT regress_group_direct_manager TO regress_group_indirect_manager; + +SET SESSION AUTHORIZATION regress_group_direct_manager; +GRANT regress_group TO regress_group_member; +SELECT member::regrole::text, CASE WHEN grantor = 10 THEN 'BOOTSTRAP SUPERUSER' ELSE grantor::regrole::text END FROM pg_auth_members WHERE roleid = 'regress_group'::regrole ORDER BY 1, 2; +REVOKE regress_group FROM regress_group_member; + +SET SESSION AUTHORIZATION regress_group_indirect_manager; +GRANT regress_group TO regress_group_member; +SELECT member::regrole::text, CASE WHEN grantor = 10 THEN 'BOOTSTRAP SUPERUSER' ELSE grantor::regrole::text END FROM pg_auth_members WHERE roleid = 'regress_group'::regrole ORDER BY 1, 2; +REVOKE regress_group FROM regress_group_member; + +RESET SESSION AUTHORIZATION; +DROP ROLE regress_group; +DROP ROLE regress_group_direct_manager; +DROP ROLE regress_group_indirect_manager; +DROP ROLE regress_group_member; + +-- test SET and INHERIT options with object ownership changes +CREATE ROLE regress_roleoption_protagonist; +CREATE ROLE regress_roleoption_donor; +CREATE ROLE regress_roleoption_recipient; +CREATE SCHEMA regress_roleoption; +GRANT CREATE, USAGE ON SCHEMA regress_roleoption TO PUBLIC; +GRANT regress_roleoption_donor TO regress_roleoption_protagonist WITH INHERIT TRUE, SET FALSE; +GRANT regress_roleoption_recipient TO regress_roleoption_protagonist WITH INHERIT FALSE, SET TRUE; +SET SESSION AUTHORIZATION regress_roleoption_protagonist; +CREATE TABLE regress_roleoption.t1 (a int); +CREATE TABLE regress_roleoption.t2 (a int); +SET SESSION AUTHORIZATION regress_roleoption_donor; +CREATE TABLE regress_roleoption.t3 (a int); +SET SESSION AUTHORIZATION regress_roleoption_recipient; +CREATE TABLE regress_roleoption.t4 (a int); +SET SESSION AUTHORIZATION regress_roleoption_protagonist; +ALTER TABLE regress_roleoption.t1 OWNER TO regress_roleoption_donor; -- fails, can't be come donor +ALTER TABLE regress_roleoption.t2 OWNER TO regress_roleoption_recipient; -- works +ALTER TABLE regress_roleoption.t3 OWNER TO regress_roleoption_protagonist; -- works +ALTER TABLE regress_roleoption.t4 OWNER TO regress_roleoption_protagonist; -- fails, we don't inherit from recipient +RESET SESSION AUTHORIZATION; +DROP TABLE regress_roleoption.t1; +DROP TABLE regress_roleoption.t2; +DROP TABLE regress_roleoption.t3; +DROP TABLE regress_roleoption.t4; +DROP SCHEMA regress_roleoption; +DROP ROLE regress_roleoption_protagonist; +DROP ROLE regress_roleoption_donor; +DROP ROLE regress_roleoption_recipient; diff --git a/test/sql/postgres_regress/psql.sql b/test/sql/postgres_regress/psql.sql index 1149c6a8..f3bc6cd0 100644 --- a/test/sql/postgres_regress/psql.sql +++ b/test/sql/postgres_regress/psql.sql @@ -45,6 +45,20 @@ SELECT 1 as one, 2 as two \g (format=csv csv_fieldsep='\t') SELECT 1 as one, 2 as two \gx (title='foo bar') \g +-- \bind (extended query protocol) + +SELECT 1 \bind \g +SELECT $1 \bind 'foo' \g +SELECT $1, $2 \bind 'foo' 'bar' \g + +-- errors +-- parse error +SELECT foo \bind \g +-- tcop error +SELECT 1 \; SELECT 2 \bind \g +-- bind error +SELECT $1, $2 \bind 'foo' \g + -- \gset select 10 as test01, 20 as test02, 'Hello' as test03 \gset pref01_ @@ -119,6 +133,14 @@ SELECT 1 AS x, 'Hello', 2 AS y, true AS "dirty\name" -- all on one line SELECT 3 AS x, 'Hello', 4 AS y, true AS "dirty\name" \gdesc \g +-- test for server bug #17983 with empty statement in aborted transaction +set search_path = default; +begin; +bogus; +; +\gdesc +rollback; + -- \gexec create temporary table gexec_test(a int, b text, c date, d float); @@ -1008,7 +1030,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \timing arg1 \unset arg1 \w arg1 - \watch arg1 + \watch arg1 arg2 \x arg1 -- \else here is eaten as part of OT_FILEPIPE argument \w |/no/such/file \else @@ -1257,9 +1279,41 @@ reset work_mem; \df has_database_privilege oid text \df has_database_privilege oid text - \dfa bit* small* +\df *._pg_expandarray \do - pg_catalog.int4 \do && anyarray * +-- check \df+ +-- we have to use functions with a predictable owner name, so make a role +create role regress_psql_user superuser; +begin; +set session authorization regress_psql_user; + +create function psql_df_internal (float8) + returns float8 + language internal immutable parallel safe strict + as 'dsin'; +create function psql_df_sql (x integer) + returns integer + security definer + begin atomic select x + 1; end; +create function psql_df_plpgsql () + returns void + language plpgsql + as $$ begin return; end; $$; +comment on function psql_df_plpgsql () is 'some comment'; + +\df+ psql_df_* +rollback; +drop role regress_psql_user; + +-- check \sf +\sf information_schema._pg_expandarray +\sf+ information_schema._pg_expandarray +\sf+ interval_pl_time +\sf ts_debug(text) +\sf+ ts_debug(text) + -- AUTOCOMMIT CREATE TABLE ac_test (a int); @@ -1365,6 +1419,70 @@ SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; \set SHOW_ALL_RESULTS on DROP FUNCTION warn(TEXT); +-- +-- \g with file +-- +\getenv abs_builddir PG_ABS_BUILDDIR +\set g_out_file :abs_builddir '/results/psql-output1' + +CREATE TEMPORARY TABLE reload_output( + lineno int NOT NULL GENERATED ALWAYS AS IDENTITY, + line text +); + +SELECT 1 AS a \g :g_out_file +COPY reload_output(line) FROM :'g_out_file'; +SELECT 2 AS b\; SELECT 3 AS c\; SELECT 4 AS d \g :g_out_file +COPY reload_output(line) FROM :'g_out_file'; +COPY (SELECT 'foo') TO STDOUT \; COPY (SELECT 'bar') TO STDOUT \g :g_out_file +COPY reload_output(line) FROM :'g_out_file'; + +SELECT line FROM reload_output ORDER BY lineno; +TRUNCATE TABLE reload_output; + +-- +-- \o with file +-- +\set o_out_file :abs_builddir '/results/psql-output2' + +\o :o_out_file +SELECT max(unique1) FROM onek; +SELECT 1 AS a\; SELECT 2 AS b\; SELECT 3 AS c; + +-- COPY TO file +-- The data goes to :g_out_file and the status to :o_out_file +\set QUIET false +COPY (SELECT unique1 FROM onek ORDER BY unique1 LIMIT 10) TO :'g_out_file'; +-- DML command status +UPDATE onek SET unique1 = unique1 WHERE false; +\set QUIET true +\o + +-- Check the contents of the files generated. +COPY reload_output(line) FROM :'g_out_file'; +SELECT line FROM reload_output ORDER BY lineno; +TRUNCATE TABLE reload_output; +COPY reload_output(line) FROM :'o_out_file'; +SELECT line FROM reload_output ORDER BY lineno; +TRUNCATE TABLE reload_output; + +-- Multiple COPY TO STDOUT with output file +\o :o_out_file +-- The data goes to :o_out_file with no status generated. +COPY (SELECT 'foo1') TO STDOUT \; COPY (SELECT 'bar1') TO STDOUT; +-- Combination of \o and \g file with multiple COPY queries. +COPY (SELECT 'foo2') TO STDOUT \; COPY (SELECT 'bar2') TO STDOUT \g :g_out_file +\o + +-- Check the contents of the files generated. +COPY reload_output(line) FROM :'g_out_file'; +SELECT line FROM reload_output ORDER BY lineno; +TRUNCATE TABLE reload_output; +COPY reload_output(line) FROM :'o_out_file'; +SELECT line FROM reload_output ORDER BY lineno; + +DROP TABLE reload_output; + -- -- AUTOCOMMIT and combined queries -- @@ -1705,3 +1823,29 @@ DROP FUNCTION psql_error; \dP "no.such.database"."no.such.schema"."no.such.partitioned.relation" \dT "no.such.database"."no.such.schema"."no.such.data.type" \dX "no.such.database"."no.such.schema"."no.such.extended.statistics" + +-- check \drg and \du +CREATE ROLE regress_du_role0; +CREATE ROLE regress_du_role1; +CREATE ROLE regress_du_role2; +CREATE ROLE regress_du_admin; + +GRANT regress_du_role0 TO regress_du_admin WITH ADMIN TRUE; +GRANT regress_du_role1 TO regress_du_admin WITH ADMIN TRUE; +GRANT regress_du_role2 TO regress_du_admin WITH ADMIN TRUE; + +GRANT regress_du_role0 TO regress_du_role1 WITH ADMIN TRUE, INHERIT TRUE, SET TRUE GRANTED BY regress_du_admin; +GRANT regress_du_role0 TO regress_du_role2 WITH ADMIN TRUE, INHERIT FALSE, SET FALSE GRANTED BY regress_du_admin; +GRANT regress_du_role1 TO regress_du_role2 WITH ADMIN TRUE , INHERIT FALSE, SET TRUE GRANTED BY regress_du_admin; +GRANT regress_du_role0 TO regress_du_role1 WITH ADMIN FALSE, INHERIT TRUE, SET FALSE GRANTED BY regress_du_role1; +GRANT regress_du_role0 TO regress_du_role2 WITH ADMIN FALSE, INHERIT TRUE , SET TRUE GRANTED BY regress_du_role1; +GRANT regress_du_role0 TO regress_du_role1 WITH ADMIN FALSE, INHERIT FALSE, SET TRUE GRANTED BY regress_du_role2; +GRANT regress_du_role0 TO regress_du_role2 WITH ADMIN FALSE, INHERIT FALSE, SET FALSE GRANTED BY regress_du_role2; + +\drg regress_du_role* +\du regress_du_role* + +DROP ROLE regress_du_role0; +DROP ROLE regress_du_role1; +DROP ROLE regress_du_role2; +DROP ROLE regress_du_admin; diff --git a/test/sql/postgres_regress/publication.sql b/test/sql/postgres_regress/publication.sql index a47c5939..d5051a5e 100644 --- a/test/sql/postgres_regress/publication.sql +++ b/test/sql/postgres_regress/publication.sql @@ -79,6 +79,10 @@ CREATE PUBLICATION testpub_for_tbl_schema FOR TABLES IN SCHEMA pub_test, TABLE p RESET client_min_messages; \dRp+ testpub_for_tbl_schema +-- weird parser corner case +CREATE PUBLICATION testpub_parsertst FOR TABLE pub_test.testpub_nopk, CURRENT_SCHEMA; +CREATE PUBLICATION testpub_parsertst FOR TABLES IN SCHEMA foo, test.foo; + -- should be able to add a table of the same schema to the schema publication ALTER PUBLICATION testpub_forschema ADD TABLE pub_test.testpub_nopk; \dRp+ testpub_forschema diff --git a/test/sql/postgres_regress/random.sql b/test/sql/postgres_regress/random.sql index 8187b2c2..14cc76bc 100644 --- a/test/sql/postgres_regress/random.sql +++ b/test/sql/postgres_regress/random.sql @@ -1,44 +1,115 @@ -- -- RANDOM --- Test the random function +-- Test random() and allies -- +-- Tests in this file may have a small probability of failure, +-- since we are dealing with randomness. Try to keep the failure +-- risk for any one test case under 1e-9. +-- + +-- There should be no duplicates in 1000 random() values. +-- (Assuming 52 random bits in the float8 results, we could +-- take as many as 3000 values and still have less than 1e-9 chance +-- of failure, per https://en.wikipedia.org/wiki/Birthday_problem) +SELECT r, count(*) +FROM (SELECT random() r FROM generate_series(1, 1000)) ss +GROUP BY r HAVING count(*) > 1; + +-- The range should be [0, 1). We can expect that at least one out of 2000 +-- random values is in the lowest or highest 1% of the range with failure +-- probability less than about 1e-9. + +SELECT count(*) FILTER (WHERE r < 0 OR r >= 1) AS out_of_range, + (count(*) FILTER (WHERE r < 0.01)) > 0 AS has_small, + (count(*) FILTER (WHERE r > 0.99)) > 0 AS has_large +FROM (SELECT random() r FROM generate_series(1, 2000)) ss; + +-- Check for uniform distribution using the Kolmogorov-Smirnov test. + +CREATE FUNCTION ks_test_uniform_random() +RETURNS boolean AS +$$ +DECLARE + n int := 1000; -- Number of samples + c float8 := 1.94947; -- Critical value for 99.9% confidence + ok boolean; +BEGIN + ok := ( + WITH samples AS ( + SELECT random() r FROM generate_series(1, n) ORDER BY 1 + ), indexed_samples AS ( + SELECT (row_number() OVER())-1.0 i, r FROM samples + ) + SELECT max(abs(i/n-r)) < c / sqrt(n) FROM indexed_samples + ); + RETURN ok; +END +$$ +LANGUAGE plpgsql; + +-- As written, ks_test_uniform_random() returns true about 99.9% +-- of the time. To get down to a roughly 1e-9 test failure rate, +-- just run it 3 times and accept if any one of them passes. +SELECT ks_test_uniform_random() OR + ks_test_uniform_random() OR + ks_test_uniform_random() AS uniform; + +-- now test random_normal() + +-- As above, there should be no duplicates in 1000 random_normal() values. +SELECT r, count(*) +FROM (SELECT random_normal() r FROM generate_series(1, 1000)) ss +GROUP BY r HAVING count(*) > 1; + +-- ... unless we force the range (standard deviation) to zero. +-- This is a good place to check that the mean input does something, too. +SELECT r, count(*) +FROM (SELECT random_normal(10, 0) r FROM generate_series(1, 100)) ss +GROUP BY r; +SELECT r, count(*) +FROM (SELECT random_normal(-10, 0) r FROM generate_series(1, 100)) ss +GROUP BY r; + +-- Check standard normal distribution using the Kolmogorov-Smirnov test. + +CREATE FUNCTION ks_test_normal_random() +RETURNS boolean AS +$$ +DECLARE + n int := 1000; -- Number of samples + c float8 := 1.94947; -- Critical value for 99.9% confidence + ok boolean; +BEGIN + ok := ( + WITH samples AS ( + SELECT random_normal() r FROM generate_series(1, n) ORDER BY 1 + ), indexed_samples AS ( + SELECT (row_number() OVER())-1.0 i, r FROM samples + ) + SELECT max(abs((1+erf(r/sqrt(2)))/2 - i/n)) < c / sqrt(n) + FROM indexed_samples + ); + RETURN ok; +END +$$ +LANGUAGE plpgsql; + +-- As above, ks_test_normal_random() returns true about 99.9% +-- of the time, so try it 3 times and accept if any test passes. +SELECT ks_test_normal_random() OR + ks_test_normal_random() OR + ks_test_normal_random() AS standard_normal; + +-- setseed() should produce a reproducible series of random() values. + +SELECT setseed(0.5); + +SELECT random() FROM generate_series(1, 10); + +-- Likewise for random_normal(); however, since its implementation relies +-- on libm functions that have different roundoff behaviors on different +-- machines, we have to round off the results a bit to get consistent output. +SET extra_float_digits = -1; --- count the number of tuples originally, should be 1000 -SELECT count(*) FROM onek; - --- pick three random rows, they shouldn't match -(SELECT unique1 AS random - FROM onek ORDER BY random() LIMIT 1) -INTERSECT -(SELECT unique1 AS random - FROM onek ORDER BY random() LIMIT 1) -INTERSECT -(SELECT unique1 AS random - FROM onek ORDER BY random() LIMIT 1); - --- count roughly 1/10 of the tuples -CREATE TABLE RANDOM_TBL AS - SELECT count(*) AS random - FROM onek WHERE random() < 1.0/10; - --- select again, the count should be different -INSERT INTO RANDOM_TBL (random) - SELECT count(*) - FROM onek WHERE random() < 1.0/10; - --- select again, the count should be different -INSERT INTO RANDOM_TBL (random) - SELECT count(*) - FROM onek WHERE random() < 1.0/10; - --- select again, the count should be different -INSERT INTO RANDOM_TBL (random) - SELECT count(*) - FROM onek WHERE random() < 1.0/10; - --- now test that they are different counts -SELECT random, count(random) FROM RANDOM_TBL - GROUP BY random HAVING count(random) > 3; - -SELECT AVG(random) FROM RANDOM_TBL - HAVING AVG(random) NOT BETWEEN 80 AND 120; +SELECT random_normal() FROM generate_series(1, 10); +SELECT random_normal(mean => 1, stddev => 0.1) r FROM generate_series(1, 10); diff --git a/test/sql/postgres_regress/rangetypes.sql b/test/sql/postgres_regress/rangetypes.sql index 1a10f67f..c23be928 100644 --- a/test/sql/postgres_regress/rangetypes.sql +++ b/test/sql/postgres_regress/rangetypes.sql @@ -40,6 +40,19 @@ select '[a,a)'::textrange; select '(a,a]'::textrange; select '(a,a)'::textrange; +-- Also try it with non-error-throwing API +select pg_input_is_valid('(1,4)', 'int4range'); +select pg_input_is_valid('(1,4', 'int4range'); +select * from pg_input_error_info('(1,4', 'int4range'); +select pg_input_is_valid('(4,1)', 'int4range'); +select * from pg_input_error_info('(4,1)', 'int4range'); +select pg_input_is_valid('(4,zed)', 'int4range'); +select * from pg_input_error_info('(4,zed)', 'int4range'); +select pg_input_is_valid('[1,2147483647]', 'int4range'); +select * from pg_input_error_info('[1,2147483647]', 'int4range'); +select pg_input_is_valid('[2000-01-01,5874897-12-31]', 'daterange'); +select * from pg_input_error_info('[2000-01-01,5874897-12-31]', 'daterange'); + -- -- create some test data and test the operators -- @@ -548,7 +561,7 @@ select array[1,3] <@ arrayrange(array[1,2], array[2,1]); create type two_ints as (a int, b int); create type two_ints_range as range (subtype = two_ints); --- with force_parallel_mode on, this exercises tqueue.c's range remapping +-- with debug_parallel_query on, this exercises tqueue.c's range remapping select *, row_to_json(upper(t)) as u from (values (two_ints_range(row(1,2), row(3,4))), (two_ints_range(row(5,6), row(7,8)))) v(t); diff --git a/test/sql/postgres_regress/regproc.sql b/test/sql/postgres_regress/regproc.sql index faab0c15..de2aa881 100644 --- a/test/sql/postgres_regress/regproc.sql +++ b/test/sql/postgres_regress/regproc.sql @@ -74,7 +74,9 @@ SELECT regproc('ng_catalog.now'); SELECT regprocedure('ng_catalog.abs(numeric)'); SELECT regclass('ng_catalog.pg_class'); SELECT regtype('ng_catalog.int4'); +\set VERBOSITY sqlstate \\ -- error message is encoding-dependent SELECT regcollation('ng_catalog."POSIX"'); +\set VERBOSITY default -- schemaname not applicable @@ -120,3 +122,26 @@ SELECT to_regrole('foo.bar'); SELECT to_regnamespace('Nonexistent'); SELECT to_regnamespace('"Nonexistent"'); SELECT to_regnamespace('foo.bar'); + +-- Test soft-error API + +SELECT * FROM pg_input_error_info('ng_catalog.pg_class', 'regclass'); +SELECT pg_input_is_valid('ng_catalog."POSIX"', 'regcollation'); +SELECT * FROM pg_input_error_info('no_such_config', 'regconfig'); +SELECT * FROM pg_input_error_info('no_such_dictionary', 'regdictionary'); +SELECT * FROM pg_input_error_info('Nonexistent', 'regnamespace'); +SELECT * FROM pg_input_error_info('ng_catalog.||/', 'regoper'); +SELECT * FROM pg_input_error_info('-', 'regoper'); +SELECT * FROM pg_input_error_info('ng_catalog.+(int4,int4)', 'regoperator'); +SELECT * FROM pg_input_error_info('-', 'regoperator'); +SELECT * FROM pg_input_error_info('ng_catalog.now', 'regproc'); +SELECT * FROM pg_input_error_info('ng_catalog.abs(numeric)', 'regprocedure'); +SELECT * FROM pg_input_error_info('ng_catalog.abs(numeric', 'regprocedure'); +SELECT * FROM pg_input_error_info('regress_regrole_test', 'regrole'); +SELECT * FROM pg_input_error_info('no_such_type', 'regtype'); + +-- Some cases that should be soft errors, but are not yet +SELECT * FROM pg_input_error_info('incorrect type name syntax', 'regtype'); +SELECT * FROM pg_input_error_info('numeric(1,2,3)', 'regtype'); -- bogus typmod +SELECT * FROM pg_input_error_info('way.too.many.names', 'regtype'); +SELECT * FROM pg_input_error_info('no_such_catalog.schema.name', 'regtype'); diff --git a/test/sql/postgres_regress/replica_identity.sql b/test/sql/postgres_regress/replica_identity.sql index 33da8297..14620b77 100644 --- a/test/sql/postgres_regress/replica_identity.sql +++ b/test/sql/postgres_regress/replica_identity.sql @@ -98,7 +98,27 @@ ALTER TABLE test_replica_identity3 ALTER COLUMN id TYPE bigint; -- used as replica identity. ALTER TABLE test_replica_identity3 ALTER COLUMN id DROP NOT NULL; +-- +-- Test that replica identity can be set on an index that's not yet valid. +-- (This matches the way pg_dump will try to dump a partitioned table.) +-- +CREATE TABLE test_replica_identity4(id integer NOT NULL) PARTITION BY LIST (id); +CREATE TABLE test_replica_identity4_1(id integer NOT NULL); +ALTER TABLE ONLY test_replica_identity4 + ATTACH PARTITION test_replica_identity4_1 FOR VALUES IN (1); +ALTER TABLE ONLY test_replica_identity4 + ADD CONSTRAINT test_replica_identity4_pkey PRIMARY KEY (id); +ALTER TABLE ONLY test_replica_identity4 + REPLICA IDENTITY USING INDEX test_replica_identity4_pkey; +ALTER TABLE ONLY test_replica_identity4_1 + ADD CONSTRAINT test_replica_identity4_1_pkey PRIMARY KEY (id); +\d+ test_replica_identity4 +ALTER INDEX test_replica_identity4_pkey + ATTACH PARTITION test_replica_identity4_1_pkey; +\d+ test_replica_identity4 + DROP TABLE test_replica_identity; DROP TABLE test_replica_identity2; DROP TABLE test_replica_identity3; +DROP TABLE test_replica_identity4; DROP TABLE test_replica_identity_othertable; diff --git a/test/sql/postgres_regress/rowsecurity.sql b/test/sql/postgres_regress/rowsecurity.sql index febf3cc4..dec73405 100644 --- a/test/sql/postgres_regress/rowsecurity.sql +++ b/test/sql/postgres_regress/rowsecurity.sql @@ -534,10 +534,10 @@ SELECT * FROM rec1; -- fail, mutual recursion via s.b. views -- SET SESSION AUTHORIZATION regress_rls_alice; CREATE TABLE s1 (a int, b text); -INSERT INTO s1 (SELECT x, md5(x::text) FROM generate_series(-10,10) x); +INSERT INTO s1 (SELECT x, public.fipshash(x::text) FROM generate_series(-10,10) x); CREATE TABLE s2 (x int, y text); -INSERT INTO s2 (SELECT x, md5(x::text) FROM generate_series(-6,6) x); +INSERT INTO s2 (SELECT x, public.fipshash(x::text) FROM generate_series(-6,6) x); GRANT SELECT ON s1, s2 TO regress_rls_bob; @@ -669,7 +669,7 @@ DELETE FROM t1 WHERE f_leak(b) RETURNING tableoid::regclass, *, t1; -- SET SESSION AUTHORIZATION regress_rls_alice; CREATE TABLE b1 (a int, b text); -INSERT INTO b1 (SELECT x, md5(x::text) FROM generate_series(-10,10) x); +INSERT INTO b1 (SELECT x, public.fipshash(x::text) FROM generate_series(-10,10) x); CREATE POLICY p1 ON b1 USING (a % 2 = 0); ALTER TABLE b1 ENABLE ROW LEVEL SECURITY; @@ -821,10 +821,10 @@ ALTER TABLE document ADD COLUMN dnotes text DEFAULT ''; CREATE POLICY p1 ON document FOR SELECT USING (true); -- one may insert documents only authored by them CREATE POLICY p2 ON document FOR INSERT WITH CHECK (dauthor = current_user); --- one may only update documents in 'novel' category +-- one may only update documents in 'novel' category and new dlevel must be > 0 CREATE POLICY p3 ON document FOR UPDATE USING (cid = (SELECT cid from category WHERE cname = 'novel')) - WITH CHECK (dauthor = current_user); + WITH CHECK (dlevel > 0); -- one may only delete documents in 'manga' category CREATE POLICY p4 ON document FOR DELETE USING (cid = (SELECT cid from category WHERE cname = 'manga')); @@ -833,12 +833,12 @@ SELECT * FROM document; SET SESSION AUTHORIZATION regress_rls_bob; --- Fails, since update violates WITH CHECK qual on dauthor +-- Fails, since update violates WITH CHECK qual on dlevel MERGE INTO document d USING (SELECT 1 as sdid) s ON did = s.sdid WHEN MATCHED THEN - UPDATE SET dnotes = dnotes || ' notes added by merge1 ', dauthor = 'regress_rls_alice'; + UPDATE SET dnotes = dnotes || ' notes added by merge1 ', dlevel = 0; -- Should be OK since USING and WITH CHECK quals pass MERGE INTO document d @@ -847,12 +847,12 @@ ON did = s.sdid WHEN MATCHED THEN UPDATE SET dnotes = dnotes || ' notes added by merge2 '; --- Even when dauthor is updated explicitly, but to the existing value +-- Even when dlevel is updated explicitly, but to the existing value MERGE INTO document d USING (SELECT 1 as sdid) s ON did = s.sdid WHEN MATCHED THEN - UPDATE SET dnotes = dnotes || ' notes added by merge3 ', dauthor = 'regress_rls_bob'; + UPDATE SET dnotes = dnotes || ' notes added by merge3 ', dlevel = 1; -- There is a MATCH for did = 3, but UPDATE's USING qual does not allow -- updating an item in category 'science fiction' @@ -892,6 +892,15 @@ WHEN MATCHED AND dnotes <> '' THEN WHEN MATCHED THEN DELETE; +-- OK if DELETE is replaced with DO NOTHING +MERGE INTO document d +USING (SELECT 4 as sdid) s +ON did = s.sdid +WHEN MATCHED AND dnotes <> '' THEN + UPDATE SET dnotes = dnotes || ' notes added by merge ' +WHEN MATCHED THEN + DO NOTHING; + SELECT * FROM document WHERE did = 4; -- Switch to regress_rls_carol role and try the DELETE again. It should succeed @@ -941,24 +950,49 @@ WHEN NOT MATCHED THEN INSERT VALUES (12, 11, 1, 'regress_rls_bob', 'another novel'); -- drop and create a new SELECT policy which prevents us from reading --- any document except with category 'magna' +-- any document except with category 'novel' RESET SESSION AUTHORIZATION; DROP POLICY p1 ON document; CREATE POLICY p1 ON document FOR SELECT - USING (cid = (SELECT cid from category WHERE cname = 'manga')); + USING (cid = (SELECT cid from category WHERE cname = 'novel')); SET SESSION AUTHORIZATION regress_rls_bob; -- MERGE can no longer see the matching row and hence attempts the -- NOT MATCHED action, which results in unique key violation MERGE INTO document d -USING (SELECT 1 as sdid) s +USING (SELECT 7 as sdid) s ON did = s.sdid WHEN MATCHED THEN UPDATE SET dnotes = dnotes || ' notes added by merge5 ' WHEN NOT MATCHED THEN INSERT VALUES (12, 11, 1, 'regress_rls_bob', 'another novel'); +-- UPDATE action fails if new row is not visible +MERGE INTO document d +USING (SELECT 1 as sdid) s +ON did = s.sdid +WHEN MATCHED THEN + UPDATE SET dnotes = dnotes || ' notes added by merge6 ', + cid = (SELECT cid from category WHERE cname = 'technology'); + +-- but OK if new row is visible +MERGE INTO document d +USING (SELECT 1 as sdid) s +ON did = s.sdid +WHEN MATCHED THEN + UPDATE SET dnotes = dnotes || ' notes added by merge7 ', + cid = (SELECT cid from category WHERE cname = 'novel'); + +-- OK to insert a new row that is not visible +MERGE INTO document d +USING (SELECT 13 as sdid) s +ON did = s.sdid +WHEN MATCHED THEN + UPDATE SET dnotes = dnotes || ' notes added by merge8 ' +WHEN NOT MATCHED THEN + INSERT VALUES (13, 44, 1, 'regress_rls_bob', 'new manga'); + RESET SESSION AUTHORIZATION; -- drop the restrictive SELECT policy so that we can look at the -- final state of the table @@ -1269,7 +1303,7 @@ DROP VIEW rls_sbv; -- Expression structure -- SET SESSION AUTHORIZATION regress_rls_alice; -INSERT INTO y2 (SELECT x, md5(x::text) FROM generate_series(0,20) x); +INSERT INTO y2 (SELECT x, public.fipshash(x::text) FROM generate_series(0,20) x); CREATE POLICY p2 ON y2 USING (a % 3 = 0); CREATE POLICY p3 ON y2 USING (a % 4 = 0); @@ -1341,7 +1375,7 @@ ALTER TABLE t1 ENABLE ROW LEVEL SECURITY; GRANT ALL ON t1 TO regress_rls_bob; -INSERT INTO t1 (SELECT x, md5(x::text) FROM generate_series(0,20) x); +INSERT INTO t1 (SELECT x, public.fipshash(x::text) FROM generate_series(0,20) x); SET SESSION AUTHORIZATION regress_rls_bob; @@ -1473,7 +1507,7 @@ ALTER TABLE copy_t ENABLE ROW LEVEL SECURITY; GRANT ALL ON copy_t TO regress_rls_bob, regress_rls_exempt_user; -INSERT INTO copy_t (SELECT x, md5(x::text) FROM generate_series(0,10) x); +INSERT INTO copy_t (SELECT x, public.fipshash(x::text) FROM generate_series(0,10) x); -- Check COPY TO as Superuser/owner. RESET SESSION AUTHORIZATION; @@ -1513,7 +1547,41 @@ ALTER TABLE copy_rel_to ENABLE ROW LEVEL SECURITY; GRANT ALL ON copy_rel_to TO regress_rls_bob, regress_rls_exempt_user; -INSERT INTO copy_rel_to VALUES (1, md5('1')); +INSERT INTO copy_rel_to VALUES (1, public.fipshash('1')); + +-- Check COPY TO as Superuser/owner. +RESET SESSION AUTHORIZATION; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; + +-- Check COPY TO as user with permissions. +SET SESSION AUTHORIZATION regress_rls_bob; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - would be affected by RLS +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok + +-- Check COPY TO as user with permissions and BYPASSRLS +SET SESSION AUTHORIZATION regress_rls_exempt_user; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok + +-- Check COPY TO as user without permissions. SET row_security TO OFF; +SET SESSION AUTHORIZATION regress_rls_carol; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied + +-- Check behavior with a child table. +RESET SESSION AUTHORIZATION; +SET row_security TO ON; +CREATE TABLE copy_rel_to_child () INHERITS (copy_rel_to); +INSERT INTO copy_rel_to_child VALUES (1, 'one'), (2, 'two'); -- Check COPY TO as Superuser/owner. RESET SESSION AUTHORIZATION; @@ -1713,30 +1781,6 @@ ROLLBACK TO q; ROLLBACK; -- cleanup --- --- Converting table to view --- -BEGIN; -CREATE TABLE t (c int); -CREATE POLICY p ON t USING (c % 2 = 1); -ALTER TABLE t ENABLE ROW LEVEL SECURITY; - -SAVEPOINT q; -CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD - SELECT * FROM generate_series(1,5) t0(c); -- fails due to row-level security enabled -ROLLBACK TO q; - -ALTER TABLE t DISABLE ROW LEVEL SECURITY; -SAVEPOINT q; -CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD - SELECT * FROM generate_series(1,5) t0(c); -- fails due to policy p on t -ROLLBACK TO q; - -DROP POLICY p ON t; -CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD - SELECT * FROM generate_series(1,5) t0(c); -- succeeds -ROLLBACK; - -- -- Policy expression handling -- @@ -2117,6 +2161,26 @@ SELECT * FROM rls_tbl; DROP TABLE rls_tbl; RESET SESSION AUTHORIZATION; +-- CVE-2023-2455: inlining an SRF may introduce an RLS dependency +create table rls_t (c text); +insert into rls_t values ('invisible to bob'); +alter table rls_t enable row level security; +grant select on rls_t to regress_rls_alice, regress_rls_bob; +create policy p1 on rls_t for select to regress_rls_alice using (true); +create policy p2 on rls_t for select to regress_rls_bob using (false); +create function rls_f () returns setof rls_t + stable language sql + as $$ select * from rls_t $$; +prepare q as select current_user, * from rls_f(); +set role regress_rls_alice; +execute q; +set role regress_rls_bob; +execute q; + +RESET ROLE; +DROP FUNCTION rls_f(); +DROP TABLE rls_t; + -- -- Clean up objects -- diff --git a/test/sql/postgres_regress/rowtypes.sql b/test/sql/postgres_regress/rowtypes.sql index ad5b7e12..fd47dc9e 100644 --- a/test/sql/postgres_regress/rowtypes.sql +++ b/test/sql/postgres_regress/rowtypes.sql @@ -31,6 +31,13 @@ select '[]'::fullname; -- bad select ' (Joe,Blow) '::fullname; -- ok, extra whitespace select '(Joe,Blow) /'::fullname; -- bad +-- test non-error-throwing API +SELECT pg_input_is_valid('(1,2)', 'complex'); +SELECT pg_input_is_valid('(1,2', 'complex'); +SELECT pg_input_is_valid('(1,zed)', 'complex'); +SELECT * FROM pg_input_error_info('(1,zed)', 'complex'); +SELECT * FROM pg_input_error_info('(1,1e400)', 'complex'); + create temp table quadtable(f1 int, q quad); insert into quadtable values (1, ((3.3,4.4),(5.5,6.6))); @@ -80,6 +87,11 @@ insert into people select ('Jim', f1, null)::fullname, current_date from pp; select (fn).first, substr((fn).last, 1, 20), length((fn).last) from people; +-- try an update on a toasted composite value, too +update people set fn.first = 'Jack'; + +select (fn).first, substr((fn).last, 1, 20), length((fn).last) from people; + -- Test row comparison semantics. Prior to PG 8.2 we did this in a totally -- non-spec-compliant way. @@ -482,6 +494,31 @@ with r(a,b) as materialized (null,row(1,2)), (null,row(null,null)), (null,null) ) select r, r is null as isnull, r is not null as isnotnull from r; +-- +-- Check parsing of indirect references to composite values (bug #18077) +-- +explain (verbose, costs off) +with cte(c) as materialized (select row(1, 2)), + cte2(c) as (select * from cte) +select * from cte2 as t +where (select * from (select c as c1) s + where (select (c1).f1 > 0)) is not null; + +with cte(c) as materialized (select row(1, 2)), + cte2(c) as (select * from cte) +select * from cte2 as t +where (select * from (select c as c1) s + where (select (c1).f1 > 0)) is not null; + +-- Also check deparsing of such cases +create view composite_v as +with cte(c) as materialized (select row(1, 2)), + cte2(c) as (select * from cte) +select 1 as one from cte2 as t +where (select * from (select c as c1) s + where (select (c1).f1 > 0)) is not null; +select pg_get_viewdef('composite_v', true); +drop view composite_v; -- -- Tests for component access / FieldSelect diff --git a/test/sql/postgres_regress/rules.sql b/test/sql/postgres_regress/rules.sql index bfb5f3b0..8b7e255d 100644 --- a/test/sql/postgres_regress/rules.sql +++ b/test/sql/postgres_regress/rules.sql @@ -884,33 +884,14 @@ drop rule "_RETURN" on rules_fooview; drop view rules_fooview; -- --- test conversion of table to view (needed to load some pg_dump files) +-- We used to allow converting a table to a view by creating a "_RETURN" +-- rule for it, but no more. -- create table rules_fooview (x int, y text); -select xmin, * from rules_fooview; - -create rule "_RETURN" as on select to rules_fooview do instead - select 1 as x, 'aaa'::text as y; - -select * from rules_fooview; -select xmin, * from rules_fooview; -- fail, views don't have such a column - -select reltoastrelid, relkind, relfrozenxid - from pg_class where oid = 'rules_fooview'::regclass; - -drop view rules_fooview; - --- cannot convert an inheritance parent or child to a view, though -create table rules_fooview (x int, y text); -create table rules_fooview_child () inherits (rules_fooview); - create rule "_RETURN" as on select to rules_fooview do instead select 1 as x, 'aaa'::text as y; -create rule "_RETURN" as on select to rules_fooview_child do instead - select 1 as x, 'aaa'::text as y; - -drop table rules_fooview cascade; +drop table rules_fooview; -- likewise, converting a partitioned table or partition to view is not allowed create table rules_fooview (x int, y text) partition by list (x); @@ -1016,11 +997,11 @@ select pg_get_viewdef('shoe'::regclass,0) as prettier; -- check multi-row VALUES in rules -- -create table rules_src(f1 int, f2 int); -create table rules_log(f1 int, f2 int, tag text); +create table rules_src(f1 int, f2 int default 0); +create table rules_log(f1 int, f2 int, tag text, id serial); insert into rules_src values(1,2), (11,12); create rule r1 as on update to rules_src do also - insert into rules_log values(old.*, 'old'), (new.*, 'new'); + insert into rules_log values(old.*, 'old', default), (new.*, 'new', default); update rules_src set f2 = f2 + 1; update rules_src set f2 = f2 * 10; select * from rules_src; @@ -1028,16 +1009,30 @@ select * from rules_log; create rule r2 as on update to rules_src do also values(old.*, 'old'), (new.*, 'new'); update rules_src set f2 = f2 / 10; +create rule r3 as on insert to rules_src do also + insert into rules_log values(null, null, '-', default), (new.*, 'new', default); +insert into rules_src values(22,23), (33,default); select * from rules_src; select * from rules_log; -create rule r3 as on delete to rules_src do notify rules_src_deletion; -\d+ rules_src +create rule r4 as on delete to rules_src do notify rules_src_deletion; -- -- Ensure an aliased target relation for insert is correctly deparsed. -- -create rule r4 as on insert to rules_src do instead insert into rules_log AS trgt SELECT NEW.* RETURNING trgt.f1, trgt.f2; -create rule r5 as on update to rules_src do instead UPDATE rules_log AS trgt SET tag = 'updated' WHERE trgt.f1 = new.f1; +create rule r5 as on insert to rules_src do instead insert into rules_log AS trgt SELECT NEW.* RETURNING trgt.f1, trgt.f2; +create rule r6 as on update to rules_src do instead UPDATE rules_log AS trgt SET tag = 'updated' WHERE trgt.f1 = new.f1; + +-- +-- Check deparse disambiguation of INSERT/UPDATE/DELETE targets. +-- +create rule r7 as on delete to rules_src do instead + with wins as (insert into int4_tbl as trgt values (0) returning *), + wupd as (update int4_tbl trgt set f1 = f1+1 returning *), + wdel as (delete from int4_tbl trgt where f1 = 0 returning *) + insert into rules_log AS trgt select old.* from wins, wupd, wdel + returning trgt.f1, trgt.f2; + +-- check display of all rules added above \d+ rules_src -- @@ -1051,6 +1046,23 @@ create rule rr as on update to rule_t1 do instead UPDATE rule_dest trgt \d+ rule_t1 drop table rule_t1, rule_dest; +-- +-- Test implicit LATERAL references to old/new in rules +-- +CREATE TABLE rule_t1(a int, b text DEFAULT 'xxx', c int); +CREATE VIEW rule_v1 AS SELECT * FROM rule_t1; +CREATE RULE v1_ins AS ON INSERT TO rule_v1 + DO ALSO INSERT INTO rule_t1 + SELECT * FROM (SELECT a + 10 FROM rule_t1 WHERE a = NEW.a) tt; +CREATE RULE v1_upd AS ON UPDATE TO rule_v1 + DO ALSO UPDATE rule_t1 t + SET c = tt.a * 10 + FROM (SELECT a FROM rule_t1 WHERE a = OLD.a) tt WHERE t.a = tt.a; +INSERT INTO rule_v1 VALUES (1, 'a'), (2, 'b'); +UPDATE rule_v1 SET b = upper(b); +SELECT * FROM rule_t1; +DROP TABLE rule_t1 CASCADE; + -- -- check alter rename rule -- @@ -1265,6 +1277,55 @@ MERGE INTO rule_merge2 t USING (SELECT 1 AS a) s WHEN NOT MATCHED THEN INSERT VALUES (s.a, ''); +-- test deparsing +CREATE TABLE sf_target(id int, data text, filling int[]); + +CREATE FUNCTION merge_sf_test() + RETURNS void + LANGUAGE sql +BEGIN ATOMIC + MERGE INTO sf_target t + USING rule_merge1 s + ON (s.a = t.id) +WHEN MATCHED + AND (s.a + t.id) = 42 + THEN UPDATE SET data = repeat(t.data, s.a) || s.b, id = length(s.b) +WHEN NOT MATCHED + AND (s.b IS NOT NULL) + THEN INSERT (data, id) + VALUES (s.b, s.a) +WHEN MATCHED + AND length(s.b || t.data) > 10 + THEN UPDATE SET data = s.b +WHEN MATCHED + AND s.a > 200 + THEN UPDATE SET filling[s.a] = t.id +WHEN MATCHED + AND s.a > 100 + THEN DELETE +WHEN MATCHED + THEN DO NOTHING +WHEN NOT MATCHED + AND s.a > 200 + THEN INSERT DEFAULT VALUES +WHEN NOT MATCHED + AND s.a > 100 + THEN INSERT (id, data) OVERRIDING USER VALUE + VALUES (s.a, DEFAULT) +WHEN NOT MATCHED + AND s.a > 0 + THEN INSERT + VALUES (s.a, s.b, DEFAULT) +WHEN NOT MATCHED + THEN INSERT (filling[1], id) + VALUES (s.a, s.a); +END; + +\sf merge_sf_test + +DROP FUNCTION merge_sf_test; +DROP TABLE sf_target; + -- -- Test enabling/disabling -- @@ -1309,11 +1370,26 @@ CREATE RULE rule1 AS ON INSERT TO ruletest_v1 SET SESSION AUTHORIZATION regress_rule_user1; INSERT INTO ruletest_v1 VALUES (1); +RESET SESSION AUTHORIZATION; + +-- Test that main query's relation's permissions are checked before +-- the rule action's relation's. +CREATE TABLE ruletest_t3 (x int); +CREATE RULE rule2 AS ON UPDATE TO ruletest_t1 + DO INSTEAD INSERT INTO ruletest_t2 VALUES (OLD.*); +REVOKE ALL ON ruletest_t2 FROM regress_rule_user1; +REVOKE ALL ON ruletest_t3 FROM regress_rule_user1; +ALTER TABLE ruletest_t1 OWNER TO regress_rule_user1; +SET SESSION AUTHORIZATION regress_rule_user1; +UPDATE ruletest_t1 t1 SET x = 0 FROM ruletest_t3 t3 WHERE t1.x = t3.x; + RESET SESSION AUTHORIZATION; SELECT * FROM ruletest_t1; SELECT * FROM ruletest_t2; DROP VIEW ruletest_v1; +DROP RULE rule2 ON ruletest_t1; +DROP TABLE ruletest_t3; DROP TABLE ruletest_t2; DROP TABLE ruletest_t1; diff --git a/test/sql/postgres_regress/select_distinct.sql b/test/sql/postgres_regress/select_distinct.sql index f27ff714..1643526d 100644 --- a/test/sql/postgres_regress/select_distinct.sql +++ b/test/sql/postgres_regress/select_distinct.sql @@ -69,6 +69,14 @@ SET jit_above_cost TO DEFAULT; CREATE TABLE distinct_group_2 AS SELECT DISTINCT (g%1000)::text FROM generate_series(0,9999) g; +SET enable_seqscan = 0; + +-- Check to see we get an incremental sort plan +EXPLAIN (costs off) +SELECT DISTINCT hundred, two FROM tenk1; + +RESET enable_seqscan; + SET enable_hashagg=TRUE; -- Produce results with hash aggregation. @@ -146,6 +154,32 @@ RESET min_parallel_table_scan_size; RESET parallel_setup_cost; RESET parallel_tuple_cost; +-- +-- Test the planner's ability to use a LIMIT 1 instead of a Unique node when +-- all of the distinct_pathkeys have been marked as redundant +-- + +-- Ensure we get a plan with a Limit 1 +EXPLAIN (COSTS OFF) +SELECT DISTINCT four FROM tenk1 WHERE four = 0; + +-- Ensure the above gives us the correct result +SELECT DISTINCT four FROM tenk1 WHERE four = 0; + +-- Ensure we get a plan with a Limit 1 +EXPLAIN (COSTS OFF) +SELECT DISTINCT four FROM tenk1 WHERE four = 0 AND two <> 0; + +-- Ensure no rows are returned +SELECT DISTINCT four FROM tenk1 WHERE four = 0 AND two <> 0; + +-- Ensure we get a plan with a Limit 1 when the SELECT list contains constants +EXPLAIN (COSTS OFF) +SELECT DISTINCT four,1,2,3 FROM tenk1 WHERE four = 0; + +-- Ensure we only get 1 row +SELECT DISTINCT four,1,2,3 FROM tenk1 WHERE four = 0; + -- -- Also, some tests of IS DISTINCT FROM, which doesn't quite deserve its -- very own regression file. diff --git a/test/sql/postgres_regress/select_distinct_on.sql b/test/sql/postgres_regress/select_distinct_on.sql index 0920bd64..261e6140 100644 --- a/test/sql/postgres_regress/select_distinct_on.sql +++ b/test/sql/postgres_regress/select_distinct_on.sql @@ -17,3 +17,28 @@ SELECT DISTINCT ON (string4, ten) string4, ten, two -- bug #5049: early 8.4.x chokes on volatile DISTINCT ON clauses select distinct on (1) floor(random()) as r, f1 from int4_tbl order by 1,2; + +-- +-- Test the planner's ability to use a LIMIT 1 instead of a Unique node when +-- all of the distinct_pathkeys have been marked as redundant +-- + +-- Ensure we also get a LIMIT plan with DISTINCT ON +EXPLAIN (COSTS OFF) +SELECT DISTINCT ON (four) four,two + FROM tenk1 WHERE four = 0 ORDER BY 1; + +-- and check the result of the above query is correct +SELECT DISTINCT ON (four) four,two + FROM tenk1 WHERE four = 0 ORDER BY 1; + +-- Ensure a Sort -> Limit is used when the ORDER BY contains additional cols +EXPLAIN (COSTS OFF) +SELECT DISTINCT ON (four) four,two + FROM tenk1 WHERE four = 0 ORDER BY 1,2; + +-- Same again but use a column that is indexed so that we get an index scan +-- then a limit +EXPLAIN (COSTS OFF) +SELECT DISTINCT ON (four) four,hundred + FROM tenk1 WHERE four = 0 ORDER BY 1,2; diff --git a/test/sql/postgres_regress/select_parallel.sql b/test/sql/postgres_regress/select_parallel.sql index 62fb68c7..80c914dc 100644 --- a/test/sql/postgres_regress/select_parallel.sql +++ b/test/sql/postgres_regress/select_parallel.sql @@ -344,7 +344,7 @@ reset parallel_leader_participation; reset max_parallel_workers; SAVEPOINT settings; -SET LOCAL force_parallel_mode = 1; +SET LOCAL debug_parallel_query = 1; explain (costs off) select stringu1::int2 from tenk1 where unique1 = 1; ROLLBACK TO SAVEPOINT settings; @@ -364,7 +364,7 @@ BEGIN END; $$; SAVEPOINT settings; -SET LOCAL force_parallel_mode = 1; +SET LOCAL debug_parallel_query = 1; SELECT make_record(x) FROM (SELECT generate_series(1, 5) x) ss ORDER BY x; ROLLBACK TO SAVEPOINT settings; DROP function make_record(n int); @@ -375,9 +375,9 @@ create role regress_parallel_worker; set role regress_parallel_worker; reset session authorization; drop role regress_parallel_worker; -set force_parallel_mode = 1; +set debug_parallel_query = 1; select count(*) from tenk1; -reset force_parallel_mode; +reset debug_parallel_query; reset role; -- Window function calculation can't be pushed to workers. @@ -393,14 +393,14 @@ explain (costs off) -- to increase the parallel query test coverage SAVEPOINT settings; -SET LOCAL force_parallel_mode = 1; +SET LOCAL debug_parallel_query = 1; EXPLAIN (analyze, timing off, summary off, costs off) SELECT * FROM tenk1; ROLLBACK TO SAVEPOINT settings; -- provoke error in worker -- (make the error message long enough to require multiple bufferloads) SAVEPOINT settings; -SET LOCAL force_parallel_mode = 1; +SET LOCAL debug_parallel_query = 1; select (stringu1 || repeat('abcd', 5000))::int2 from tenk1 where unique1 = 1; ROLLBACK TO SAVEPOINT settings; diff --git a/test/sql/postgres_regress/sqljson.sql b/test/sql/postgres_regress/sqljson.sql new file mode 100644 index 00000000..4fd820fd --- /dev/null +++ b/test/sql/postgres_regress/sqljson.sql @@ -0,0 +1,380 @@ +-- JSON_OBJECT() +SELECT JSON_OBJECT(); +SELECT JSON_OBJECT(RETURNING json); +SELECT JSON_OBJECT(RETURNING json FORMAT JSON); +SELECT JSON_OBJECT(RETURNING jsonb); +SELECT JSON_OBJECT(RETURNING jsonb FORMAT JSON); +SELECT JSON_OBJECT(RETURNING text); +SELECT JSON_OBJECT(RETURNING text FORMAT JSON); +SELECT JSON_OBJECT(RETURNING text FORMAT JSON ENCODING UTF8); +SELECT JSON_OBJECT(RETURNING text FORMAT JSON ENCODING INVALID_ENCODING); +SELECT JSON_OBJECT(RETURNING bytea); +SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON); +SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF8); +SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF16); +SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF32); + +SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON); +SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON ENCODING UTF8); +SELECT JSON_OBJECT('foo': NULL::json FORMAT JSON); +SELECT JSON_OBJECT('foo': NULL::json FORMAT JSON ENCODING UTF8); +SELECT JSON_OBJECT('foo': NULL::jsonb FORMAT JSON); +SELECT JSON_OBJECT('foo': NULL::jsonb FORMAT JSON ENCODING UTF8); + +SELECT JSON_OBJECT(NULL: 1); +SELECT JSON_OBJECT('a': 2 + 3); +SELECT JSON_OBJECT('a' VALUE 2 + 3); +--SELECT JSON_OBJECT(KEY 'a' VALUE 2 + 3); +SELECT JSON_OBJECT('a' || 2: 1); +SELECT JSON_OBJECT(('a' || 2) VALUE 1); +--SELECT JSON_OBJECT('a' || 2 VALUE 1); +--SELECT JSON_OBJECT(KEY 'a' || 2 VALUE 1); +SELECT JSON_OBJECT('a': 2::text); +SELECT JSON_OBJECT('a' VALUE 2::text); +--SELECT JSON_OBJECT(KEY 'a' VALUE 2::text); +SELECT JSON_OBJECT(1::text: 2); +SELECT JSON_OBJECT((1::text) VALUE 2); +--SELECT JSON_OBJECT(1::text VALUE 2); +--SELECT JSON_OBJECT(KEY 1::text VALUE 2); +SELECT JSON_OBJECT(json '[1]': 123); +SELECT JSON_OBJECT(ARRAY[1,2,3]: 'aaa'); + +SELECT JSON_OBJECT( + 'a': '123', + 1.23: 123, + 'c': json '[ 1,true,{ } ]', + 'd': jsonb '{ "x" : 123.45 }' +); + +SELECT JSON_OBJECT( + 'a': '123', + 1.23: 123, + 'c': json '[ 1,true,{ } ]', + 'd': jsonb '{ "x" : 123.45 }' + RETURNING jsonb +); + +/* +SELECT JSON_OBJECT( + 'a': '123', + KEY 1.23 VALUE 123, + 'c' VALUE json '[1, true, {}]' +); +*/ + +SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa')); +SELECT JSON_OBJECT('a': '123', 'b': JSON_OBJECT('a': 111, 'b': 'aaa' RETURNING jsonb)); + +SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text)); +SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING text) FORMAT JSON); +SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea)); +SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING bytea) FORMAT JSON); + +SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2); +SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 NULL ON NULL); +SELECT JSON_OBJECT('a': '1', 'b': NULL, 'c': 2 ABSENT ON NULL); + +SELECT JSON_OBJECT(1: 1, '1': NULL WITH UNIQUE); +SELECT JSON_OBJECT(1: 1, '1': NULL ABSENT ON NULL WITH UNIQUE); +SELECT JSON_OBJECT(1: 1, '1': NULL NULL ON NULL WITH UNIQUE RETURNING jsonb); +SELECT JSON_OBJECT(1: 1, '1': NULL ABSENT ON NULL WITH UNIQUE RETURNING jsonb); + +SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 NULL ON NULL WITH UNIQUE); +SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITH UNIQUE); +SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE); +SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITH UNIQUE RETURNING jsonb); +SELECT JSON_OBJECT(1: 1, '2': NULL, '1': 1 ABSENT ON NULL WITHOUT UNIQUE RETURNING jsonb); +SELECT JSON_OBJECT(1: 1, '2': NULL, '3': 1, 4: NULL, '5': 'a' ABSENT ON NULL WITH UNIQUE RETURNING jsonb); + + +-- JSON_ARRAY() +SELECT JSON_ARRAY(); +SELECT JSON_ARRAY(RETURNING json); +SELECT JSON_ARRAY(RETURNING json FORMAT JSON); +SELECT JSON_ARRAY(RETURNING jsonb); +SELECT JSON_ARRAY(RETURNING jsonb FORMAT JSON); +SELECT JSON_ARRAY(RETURNING text); +SELECT JSON_ARRAY(RETURNING text FORMAT JSON); +SELECT JSON_ARRAY(RETURNING text FORMAT JSON ENCODING UTF8); +SELECT JSON_ARRAY(RETURNING text FORMAT JSON ENCODING INVALID_ENCODING); +SELECT JSON_ARRAY(RETURNING bytea); +SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON); +SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF8); +SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF16); +SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF32); + +SELECT JSON_ARRAY('aaa', 111, true, array[1,2,3], NULL, json '{"a": [1]}', jsonb '["a",3]'); + +SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL); +SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL); +SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL); +SELECT JSON_ARRAY('a', NULL, 'b' NULL ON NULL RETURNING jsonb); +SELECT JSON_ARRAY('a', NULL, 'b' ABSENT ON NULL RETURNING jsonb); +SELECT JSON_ARRAY(NULL, NULL, 'b' ABSENT ON NULL RETURNING jsonb); + +SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' RETURNING text)); +SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text)); +SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' FORMAT JSON RETURNING text) FORMAT JSON); + +SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i)); +SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i)); +SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) RETURNING jsonb); +--SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) NULL ON NULL); +--SELECT JSON_ARRAY(SELECT i FROM (VALUES (NULL::int[]), ('{1,2}'), (NULL), (NULL), ('{3,4}'), (NULL)) foo(i) NULL ON NULL RETURNING jsonb); +SELECT JSON_ARRAY(SELECT i FROM (VALUES (3), (1), (NULL), (2)) foo(i) ORDER BY i); +-- Should fail +SELECT JSON_ARRAY(SELECT FROM (VALUES (1)) foo(i)); +SELECT JSON_ARRAY(SELECT i, i FROM (VALUES (1)) foo(i)); +SELECT JSON_ARRAY(SELECT * FROM (VALUES (1, 2)) foo(i, j)); + +-- JSON_ARRAYAGG() +SELECT JSON_ARRAYAGG(i) IS NULL, + JSON_ARRAYAGG(i RETURNING jsonb) IS NULL +FROM generate_series(1, 0) i; + +SELECT JSON_ARRAYAGG(i), + JSON_ARRAYAGG(i RETURNING jsonb) +FROM generate_series(1, 5) i; + +SELECT JSON_ARRAYAGG(i ORDER BY i DESC) +FROM generate_series(1, 5) i; + +SELECT JSON_ARRAYAGG(i::text::json) +FROM generate_series(1, 5) i; + +SELECT JSON_ARRAYAGG(JSON_ARRAY(i, i + 1 RETURNING text) FORMAT JSON) +FROM generate_series(1, 5) i; + +SELECT JSON_ARRAYAGG(NULL), + JSON_ARRAYAGG(NULL RETURNING jsonb) +FROM generate_series(1, 5); + +SELECT JSON_ARRAYAGG(NULL NULL ON NULL), + JSON_ARRAYAGG(NULL NULL ON NULL RETURNING jsonb) +FROM generate_series(1, 5); + +\x +SELECT + JSON_ARRAYAGG(bar) as no_options, + JSON_ARRAYAGG(bar RETURNING jsonb) as returning_jsonb, + JSON_ARRAYAGG(bar ABSENT ON NULL) as absent_on_null, + JSON_ARRAYAGG(bar ABSENT ON NULL RETURNING jsonb) as absentonnull_returning_jsonb, + JSON_ARRAYAGG(bar NULL ON NULL) as null_on_null, + JSON_ARRAYAGG(bar NULL ON NULL RETURNING jsonb) as nullonnull_returning_jsonb, + JSON_ARRAYAGG(foo) as row_no_options, + JSON_ARRAYAGG(foo RETURNING jsonb) as row_returning_jsonb, + JSON_ARRAYAGG(foo ORDER BY bar) FILTER (WHERE bar > 2) as row_filtered_agg, + JSON_ARRAYAGG(foo ORDER BY bar RETURNING jsonb) FILTER (WHERE bar > 2) as row_filtered_agg_returning_jsonb +FROM + (VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL)) foo(bar); +\x + +SELECT + bar, JSON_ARRAYAGG(bar) FILTER (WHERE bar > 2) OVER (PARTITION BY foo.bar % 2) +FROM + (VALUES (NULL), (3), (1), (NULL), (NULL), (5), (2), (4), (NULL), (5), (4)) foo(bar); + +-- JSON_OBJECTAGG() +SELECT JSON_OBJECTAGG('key': 1) IS NULL, + JSON_OBJECTAGG('key': 1 RETURNING jsonb) IS NULL +WHERE FALSE; + +SELECT JSON_OBJECTAGG(NULL: 1); + +SELECT JSON_OBJECTAGG(NULL: 1 RETURNING jsonb); + +SELECT + JSON_OBJECTAGG(i: i), +-- JSON_OBJECTAGG(i VALUE i), +-- JSON_OBJECTAGG(KEY i VALUE i), + JSON_OBJECTAGG(i: i RETURNING jsonb) +FROM + generate_series(1, 5) i; + +SELECT + JSON_OBJECTAGG(k: v), + JSON_OBJECTAGG(k: v NULL ON NULL), + JSON_OBJECTAGG(k: v ABSENT ON NULL), + JSON_OBJECTAGG(k: v RETURNING jsonb), + JSON_OBJECTAGG(k: v NULL ON NULL RETURNING jsonb), + JSON_OBJECTAGG(k: v ABSENT ON NULL RETURNING jsonb) +FROM + (VALUES (1, 1), (1, NULL), (2, NULL), (3, 3)) foo(k, v); + +SELECT JSON_OBJECTAGG(k: v WITH UNIQUE KEYS) +FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v); + +SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS) +FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v); + +SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS) +FROM (VALUES (1, 1), (0, NULL), (3, NULL), (2, 2), (4, NULL)) foo(k, v); + +SELECT JSON_OBJECTAGG(k: v WITH UNIQUE KEYS RETURNING jsonb) +FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v); + +SELECT JSON_OBJECTAGG(k: v ABSENT ON NULL WITH UNIQUE KEYS RETURNING jsonb) +FROM (VALUES (1, 1), (1, NULL), (2, 2)) foo(k, v); + +-- Test JSON_OBJECT deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json); + +CREATE VIEW json_object_view AS +SELECT JSON_OBJECT('foo' : '1' FORMAT JSON, 'bar' : 'baz' RETURNING json); + +\sv json_object_view + +DROP VIEW json_object_view; + +-- Test JSON_ARRAY deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json); + +CREATE VIEW json_array_view AS +SELECT JSON_ARRAY('1' FORMAT JSON, 2 RETURNING json); + +\sv json_array_view + +DROP VIEW json_array_view; + +-- Test JSON_OBJECTAGG deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3) +FROM generate_series(1,5) i; + +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) OVER (PARTITION BY i % 2) +FROM generate_series(1,5) i; + +CREATE VIEW json_objectagg_view AS +SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING text) FILTER (WHERE i > 3) +FROM generate_series(1,5) i; + +\sv json_objectagg_view + +DROP VIEW json_objectagg_view; + +-- Test JSON_ARRAYAGG deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3) +FROM generate_series(1,5) i; + +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) OVER (PARTITION BY i % 2) +FROM generate_series(1,5) i; + +CREATE VIEW json_arrayagg_view AS +SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING text) FILTER (WHERE i > 3) +FROM generate_series(1,5) i; + +\sv json_arrayagg_view + +DROP VIEW json_arrayagg_view; + +-- Test JSON_ARRAY(subquery) deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb); + +CREATE VIEW json_array_subquery_view AS +SELECT JSON_ARRAY(SELECT i FROM (VALUES (1), (2), (NULL), (4)) foo(i) RETURNING jsonb); + +\sv json_array_subquery_view + +DROP VIEW json_array_subquery_view; + +-- IS JSON predicate +SELECT NULL IS JSON; +SELECT NULL IS NOT JSON; +SELECT NULL::json IS JSON; +SELECT NULL::jsonb IS JSON; +SELECT NULL::text IS JSON; +SELECT NULL::bytea IS JSON; +SELECT NULL::int IS JSON; + +SELECT '' IS JSON; + +SELECT bytea '\x00' IS JSON; + +CREATE TABLE test_is_json (js text); + +INSERT INTO test_is_json VALUES + (NULL), + (''), + ('123'), + ('"aaa "'), + ('true'), + ('null'), + ('[]'), + ('[1, "2", {}]'), + ('{}'), + ('{ "a": 1, "b": null }'), + ('{ "a": 1, "a": null }'), + ('{ "a": 1, "b": [{ "a": 1 }, { "a": 2 }] }'), + ('{ "a": 1, "b": [{ "a": 1, "b": 0, "a": 2 }] }'), + ('aaa'), + ('{a:1}'), + ('["a",]'); + +SELECT + js, + js IS JSON "IS JSON", + js IS NOT JSON "IS NOT JSON", + js IS JSON VALUE "IS VALUE", + js IS JSON OBJECT "IS OBJECT", + js IS JSON ARRAY "IS ARRAY", + js IS JSON SCALAR "IS SCALAR", + js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE", + js IS JSON WITH UNIQUE KEYS "WITH UNIQUE" +FROM + test_is_json; + +SELECT + js, + js IS JSON "IS JSON", + js IS NOT JSON "IS NOT JSON", + js IS JSON VALUE "IS VALUE", + js IS JSON OBJECT "IS OBJECT", + js IS JSON ARRAY "IS ARRAY", + js IS JSON SCALAR "IS SCALAR", + js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE", + js IS JSON WITH UNIQUE KEYS "WITH UNIQUE" +FROM + (SELECT js::json FROM test_is_json WHERE js IS JSON) foo(js); + +SELECT + js0, + js IS JSON "IS JSON", + js IS NOT JSON "IS NOT JSON", + js IS JSON VALUE "IS VALUE", + js IS JSON OBJECT "IS OBJECT", + js IS JSON ARRAY "IS ARRAY", + js IS JSON SCALAR "IS SCALAR", + js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE", + js IS JSON WITH UNIQUE KEYS "WITH UNIQUE" +FROM + (SELECT js, js::bytea FROM test_is_json WHERE js IS JSON) foo(js0, js); + +SELECT + js, + js IS JSON "IS JSON", + js IS NOT JSON "IS NOT JSON", + js IS JSON VALUE "IS VALUE", + js IS JSON OBJECT "IS OBJECT", + js IS JSON ARRAY "IS ARRAY", + js IS JSON SCALAR "IS SCALAR", + js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE", + js IS JSON WITH UNIQUE KEYS "WITH UNIQUE" +FROM + (SELECT js::jsonb FROM test_is_json WHERE js IS JSON) foo(js); + +-- Test IS JSON deparsing +EXPLAIN (VERBOSE, COSTS OFF) +SELECT '1' IS JSON AS "any", ('1' || i) IS JSON SCALAR AS "scalar", '[]' IS NOT JSON ARRAY AS "array", '{}' IS JSON OBJECT WITH UNIQUE AS "object" FROM generate_series(1, 3) i; + +CREATE VIEW is_json_view AS +SELECT '1' IS JSON AS "any", ('1' || i) IS JSON SCALAR AS "scalar", '[]' IS NOT JSON ARRAY AS "array", '{}' IS JSON OBJECT WITH UNIQUE AS "object" FROM generate_series(1, 3) i; + +\sv is_json_view + +DROP VIEW is_json_view; diff --git a/test/sql/postgres_regress/stats.sql b/test/sql/postgres_regress/stats.sql index a6b0e9e0..1e21e55c 100644 --- a/test/sql/postgres_regress/stats.sql +++ b/test/sql/postgres_regress/stats.sql @@ -290,6 +290,123 @@ DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_t DROP TABLE prevstats; +----- +-- Test that last_seq_scan, last_idx_scan are correctly maintained +-- +-- Perform test using a temporary table. That way autovacuum etc won't +-- interfere. To be able to check that timestamps increase, we sleep for 100ms +-- between tests, assuming that there aren't systems with a coarser timestamp +-- granularity. +----- + +BEGIN; +CREATE TEMPORARY TABLE test_last_scan(idx_col int primary key, noidx_col int); +INSERT INTO test_last_scan(idx_col, noidx_col) VALUES(1, 1); +SELECT pg_stat_force_next_flush(); +SELECT last_seq_scan, last_idx_scan FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass; +COMMIT; + +SELECT pg_stat_reset_single_table_counters('test_last_scan'::regclass); +SELECT seq_scan, idx_scan FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass; + +-- ensure we start out with exactly one index and sequential scan +BEGIN; +SET LOCAL enable_seqscan TO on; +SET LOCAL enable_indexscan TO on; +SET LOCAL enable_bitmapscan TO off; +EXPLAIN (COSTS off) SELECT count(*) FROM test_last_scan WHERE noidx_col = 1; +SELECT count(*) FROM test_last_scan WHERE noidx_col = 1; +SET LOCAL enable_seqscan TO off; +EXPLAIN (COSTS off) SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT pg_stat_force_next_flush(); +COMMIT; + +-- fetch timestamps from before the next test +SELECT last_seq_scan AS test_last_seq, last_idx_scan AS test_last_idx +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass \gset +SELECT pg_sleep(0.1); -- assume a minimum timestamp granularity of 100ms + +-- cause one sequential scan +BEGIN; +SET LOCAL enable_seqscan TO on; +SET LOCAL enable_indexscan TO off; +SET LOCAL enable_bitmapscan TO off; +EXPLAIN (COSTS off) SELECT count(*) FROM test_last_scan WHERE noidx_col = 1; +SELECT count(*) FROM test_last_scan WHERE noidx_col = 1; +SELECT pg_stat_force_next_flush(); +COMMIT; +-- check that just sequential scan stats were incremented +SELECT seq_scan, :'test_last_seq' < last_seq_scan AS seq_ok, idx_scan, :'test_last_idx' = last_idx_scan AS idx_ok +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass; + +-- fetch timestamps from before the next test +SELECT last_seq_scan AS test_last_seq, last_idx_scan AS test_last_idx +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass \gset +SELECT pg_sleep(0.1); + +-- cause one index scan +BEGIN; +SET LOCAL enable_seqscan TO off; +SET LOCAL enable_indexscan TO on; +SET LOCAL enable_bitmapscan TO off; +EXPLAIN (COSTS off) SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT pg_stat_force_next_flush(); +COMMIT; +-- check that just index scan stats were incremented +SELECT seq_scan, :'test_last_seq' = last_seq_scan AS seq_ok, idx_scan, :'test_last_idx' < last_idx_scan AS idx_ok +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass; + +-- fetch timestamps from before the next test +SELECT last_seq_scan AS test_last_seq, last_idx_scan AS test_last_idx +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass \gset +SELECT pg_sleep(0.1); + +-- cause one bitmap index scan +BEGIN; +SET LOCAL enable_seqscan TO off; +SET LOCAL enable_indexscan TO off; +SET LOCAL enable_bitmapscan TO on; +EXPLAIN (COSTS off) SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT count(*) FROM test_last_scan WHERE idx_col = 1; +SELECT pg_stat_force_next_flush(); +COMMIT; +-- check that just index scan stats were incremented +SELECT seq_scan, :'test_last_seq' = last_seq_scan AS seq_ok, idx_scan, :'test_last_idx' < last_idx_scan AS idx_ok +FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass; + +----- +-- Test reset of some stats for shared table +----- + +-- This updates the comment of the database currently in use in +-- pg_shdescription with a fake value, then sets it back to its +-- original value. +SELECT shobj_description(d.oid, 'pg_database') as description_before + FROM pg_database d WHERE datname = current_database() \gset + +-- force some stats in pg_shdescription. +BEGIN; +SELECT current_database() as datname \gset +COMMENT ON DATABASE :"datname" IS 'This is a test comment'; +SELECT pg_stat_force_next_flush(); +COMMIT; + +-- check that the stats are reset. +SELECT (n_tup_ins + n_tup_upd) > 0 AS has_data FROM pg_stat_all_tables + WHERE relid = 'pg_shdescription'::regclass; +SELECT pg_stat_reset_single_table_counters('pg_shdescription'::regclass); +SELECT (n_tup_ins + n_tup_upd) > 0 AS has_data FROM pg_stat_all_tables + WHERE relid = 'pg_shdescription'::regclass; + +-- set back comment +\if :{?description_before} + COMMENT ON DATABASE :"datname" IS :'description_before'; +\else + COMMENT ON DATABASE :"datname" IS NULL; +\endif + ----- -- Test that various stats views are being properly populated ----- @@ -303,10 +420,10 @@ SELECT sessions > :db_stat_sessions FROM pg_stat_database WHERE datname = (SELEC -- Test pg_stat_bgwriter checkpointer-related stats, together with pg_stat_wal SELECT checkpoints_req AS rqst_ckpts_before FROM pg_stat_bgwriter \gset --- Test pg_stat_wal +-- Test pg_stat_wal (and make a temp table so our temp schema exists) SELECT wal_bytes AS wal_bytes_before FROM pg_stat_wal \gset -CREATE TABLE test_stats_temp AS SELECT 17; +CREATE TEMP TABLE test_stats_temp AS SELECT 17; DROP TABLE test_stats_temp; -- Checkpoint twice: The checkpointer reports stats after reporting completion @@ -318,6 +435,12 @@ CHECKPOINT; SELECT checkpoints_req > :rqst_ckpts_before FROM pg_stat_bgwriter; SELECT wal_bytes > :wal_bytes_before FROM pg_stat_wal; +-- Test pg_stat_get_backend_idset() and some allied functions. +-- In particular, verify that their notion of backend ID matches +-- our temp schema index. +SELECT (current_schemas(true))[1] = ('pg_temp_' || beid::text) AS match +FROM pg_stat_get_backend_idset() beid +WHERE pg_stat_get_backend_pid(beid) = pg_backend_pid(); ----- -- Test that resetting stats works for reset timestamp @@ -383,6 +506,26 @@ SELECT pg_stat_clear_snapshot(); SELECT pg_stat_get_snapshot_timestamp(); COMMIT; +---- +-- Changing stats_fetch_consistency in a transaction. +---- +BEGIN; +-- Stats filled under the cache mode +SET LOCAL stats_fetch_consistency = cache; +SELECT pg_stat_get_function_calls(0); +SELECT pg_stat_get_snapshot_timestamp() IS NOT NULL AS snapshot_ok; +-- Success in accessing pre-existing snapshot data. +SET LOCAL stats_fetch_consistency = snapshot; +SELECT pg_stat_get_snapshot_timestamp() IS NOT NULL AS snapshot_ok; +SELECT pg_stat_get_function_calls(0); +SELECT pg_stat_get_snapshot_timestamp() IS NOT NULL AS snapshot_ok; +-- Snapshot cleared. +SET LOCAL stats_fetch_consistency = none; +SELECT pg_stat_get_snapshot_timestamp() IS NOT NULL AS snapshot_ok; +SELECT pg_stat_get_function_calls(0); +SELECT pg_stat_get_snapshot_timestamp() IS NOT NULL AS snapshot_ok; +ROLLBACK; + ---- -- pg_stat_have_stats behavior ---- @@ -443,4 +586,258 @@ SELECT pg_stat_get_replication_slot(NULL); SELECT pg_stat_get_subscription_stats(NULL); +-- Test that the following operations are tracked in pg_stat_io: +-- - reads of target blocks into shared buffers +-- - writes of shared buffers to permanent storage +-- - extends of relations using shared buffers +-- - fsyncs done to ensure the durability of data dirtying shared buffers +-- - shared buffer hits + +-- There is no test for blocks evicted from shared buffers, because we cannot +-- be sure of the state of shared buffers at the point the test is run. + +-- Create a regular table and insert some data to generate IOCONTEXT_NORMAL +-- extends. +SELECT sum(extends) AS io_sum_shared_before_extends + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +SELECT sum(writes) AS writes, sum(fsyncs) AS fsyncs + FROM pg_stat_io + WHERE object = 'relation' \gset io_sum_shared_before_ +CREATE TABLE test_io_shared(a int); +INSERT INTO test_io_shared SELECT i FROM generate_series(1,100)i; +SELECT pg_stat_force_next_flush(); +SELECT sum(extends) AS io_sum_shared_after_extends + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +SELECT :io_sum_shared_after_extends > :io_sum_shared_before_extends; + +-- After a checkpoint, there should be some additional IOCONTEXT_NORMAL writes +-- and fsyncs. +-- See comment above for rationale for two explicit CHECKPOINTs. +CHECKPOINT; +CHECKPOINT; +SELECT sum(writes) AS writes, sum(fsyncs) AS fsyncs + FROM pg_stat_io + WHERE object = 'relation' \gset io_sum_shared_after_ +SELECT :io_sum_shared_after_writes > :io_sum_shared_before_writes; +SELECT current_setting('fsync') = 'off' + OR :io_sum_shared_after_fsyncs > :io_sum_shared_before_fsyncs; + +-- Change the tablespace so that the table is rewritten directly, then SELECT +-- from it to cause it to be read back into shared buffers. +SELECT sum(reads) AS io_sum_shared_before_reads + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +-- Do this in a transaction to prevent spurious failures due to concurrent accesses to our newly +-- rewritten table, e.g. by autovacuum. +BEGIN; +ALTER TABLE test_io_shared SET TABLESPACE regress_tblspace; +-- SELECT from the table so that the data is read into shared buffers and +-- context 'normal', object 'relation' reads are counted. +SELECT COUNT(*) FROM test_io_shared; +COMMIT; +SELECT pg_stat_force_next_flush(); +SELECT sum(reads) AS io_sum_shared_after_reads + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +SELECT :io_sum_shared_after_reads > :io_sum_shared_before_reads; + +SELECT sum(hits) AS io_sum_shared_before_hits + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +-- Select from the table again to count hits. +-- Ensure we generate hits by forcing a nested loop self-join with no +-- materialize node. The outer side's buffer will stay pinned, preventing its +-- eviction, while we loop through the inner side and generate hits. +BEGIN; +SET LOCAL enable_nestloop TO on; SET LOCAL enable_mergejoin TO off; +SET LOCAL enable_hashjoin TO off; SET LOCAL enable_material TO off; +-- ensure plan stays as we expect it to +EXPLAIN (COSTS OFF) SELECT COUNT(*) FROM test_io_shared t1 INNER JOIN test_io_shared t2 USING (a); +SELECT COUNT(*) FROM test_io_shared t1 INNER JOIN test_io_shared t2 USING (a); +COMMIT; +SELECT pg_stat_force_next_flush(); +SELECT sum(hits) AS io_sum_shared_after_hits + FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset +SELECT :io_sum_shared_after_hits > :io_sum_shared_before_hits; + +DROP TABLE test_io_shared; + +-- Test that the follow IOCONTEXT_LOCAL IOOps are tracked in pg_stat_io: +-- - eviction of local buffers in order to reuse them +-- - reads of temporary table blocks into local buffers +-- - writes of local buffers to permanent storage +-- - extends of temporary tables + +-- Set temp_buffers to its minimum so that we can trigger writes with fewer +-- inserted tuples. Do so in a new session in case temporary tables have been +-- accessed by previous tests in this session. +\c +SET temp_buffers TO 100; +CREATE TEMPORARY TABLE test_io_local(a int, b TEXT); +SELECT sum(extends) AS extends, sum(evictions) AS evictions, sum(writes) AS writes + FROM pg_stat_io + WHERE context = 'normal' AND object = 'temp relation' \gset io_sum_local_before_ +-- Insert tuples into the temporary table, generating extends in the stats. +-- Insert enough values that we need to reuse and write out dirty local +-- buffers, generating evictions and writes. +INSERT INTO test_io_local SELECT generate_series(1, 5000) as id, repeat('a', 200); +-- Ensure the table is large enough to exceed our temp_buffers setting. +SELECT pg_relation_size('test_io_local') / current_setting('block_size')::int8 > 100; + +SELECT sum(reads) AS io_sum_local_before_reads + FROM pg_stat_io WHERE context = 'normal' AND object = 'temp relation' \gset +-- Read in evicted buffers, generating reads. +SELECT COUNT(*) FROM test_io_local; +SELECT pg_stat_force_next_flush(); +SELECT sum(evictions) AS evictions, + sum(reads) AS reads, + sum(writes) AS writes, + sum(extends) AS extends + FROM pg_stat_io + WHERE context = 'normal' AND object = 'temp relation' \gset io_sum_local_after_ +SELECT :io_sum_local_after_evictions > :io_sum_local_before_evictions, + :io_sum_local_after_reads > :io_sum_local_before_reads, + :io_sum_local_after_writes > :io_sum_local_before_writes, + :io_sum_local_after_extends > :io_sum_local_before_extends; + +-- Change the tablespaces so that the temporary table is rewritten to other +-- local buffers, exercising a different codepath than standard local buffer +-- writes. +ALTER TABLE test_io_local SET TABLESPACE regress_tblspace; +SELECT pg_stat_force_next_flush(); +SELECT sum(writes) AS io_sum_local_new_tblspc_writes + FROM pg_stat_io WHERE context = 'normal' AND object = 'temp relation' \gset +SELECT :io_sum_local_new_tblspc_writes > :io_sum_local_after_writes; +RESET temp_buffers; + +-- Test that reuse of strategy buffers and reads of blocks into these reused +-- buffers while VACUUMing are tracked in pg_stat_io. If there is sufficient +-- demand for shared buffers from concurrent queries, some buffers may be +-- pinned by other backends before they can be reused. In such cases, the +-- backend will evict a buffer from outside the ring and add it to the +-- ring. This is considered an eviction and not a reuse. + +-- Set wal_skip_threshold smaller than the expected size of +-- test_io_vac_strategy so that, even if wal_level is minimal, VACUUM FULL will +-- fsync the newly rewritten test_io_vac_strategy instead of writing it to WAL. +-- Writing it to WAL will result in the newly written relation pages being in +-- shared buffers -- preventing us from testing BAS_VACUUM BufferAccessStrategy +-- reads. +SET wal_skip_threshold = '1 kB'; +SELECT sum(reuses) AS reuses, sum(reads) AS reads, sum(evictions) AS evictions + FROM pg_stat_io WHERE context = 'vacuum' \gset io_sum_vac_strategy_before_ +CREATE TABLE test_io_vac_strategy(a int, b int) WITH (autovacuum_enabled = 'false'); +INSERT INTO test_io_vac_strategy SELECT i, i from generate_series(1, 4500)i; +-- Ensure that the next VACUUM will need to perform IO by rewriting the table +-- first with VACUUM (FULL). +VACUUM (FULL) test_io_vac_strategy; +-- Use the minimum BUFFER_USAGE_LIMIT to cause reuses or evictions with the +-- smallest table possible. +VACUUM (PARALLEL 0, BUFFER_USAGE_LIMIT 128) test_io_vac_strategy; +SELECT pg_stat_force_next_flush(); +SELECT sum(reuses) AS reuses, sum(reads) AS reads, sum(evictions) AS evictions + FROM pg_stat_io WHERE context = 'vacuum' \gset io_sum_vac_strategy_after_ +SELECT :io_sum_vac_strategy_after_reads > :io_sum_vac_strategy_before_reads; +SELECT (:io_sum_vac_strategy_after_reuses + :io_sum_vac_strategy_after_evictions) > + (:io_sum_vac_strategy_before_reuses + :io_sum_vac_strategy_before_evictions); +RESET wal_skip_threshold; + +-- Test that extends done by a CTAS, which uses a BAS_BULKWRITE +-- BufferAccessStrategy, are tracked in pg_stat_io. +SELECT sum(extends) AS io_sum_bulkwrite_strategy_extends_before + FROM pg_stat_io WHERE context = 'bulkwrite' \gset +CREATE TABLE test_io_bulkwrite_strategy AS SELECT i FROM generate_series(1,100)i; +SELECT pg_stat_force_next_flush(); +SELECT sum(extends) AS io_sum_bulkwrite_strategy_extends_after + FROM pg_stat_io WHERE context = 'bulkwrite' \gset +SELECT :io_sum_bulkwrite_strategy_extends_after > :io_sum_bulkwrite_strategy_extends_before; + +-- Test IO stats reset +SELECT pg_stat_have_stats('io', 0, 0); +SELECT sum(evictions) + sum(reuses) + sum(extends) + sum(fsyncs) + sum(reads) + sum(writes) + sum(writebacks) + sum(hits) AS io_stats_pre_reset + FROM pg_stat_io \gset +SELECT pg_stat_reset_shared('io'); +SELECT sum(evictions) + sum(reuses) + sum(extends) + sum(fsyncs) + sum(reads) + sum(writes) + sum(writebacks) + sum(hits) AS io_stats_post_reset + FROM pg_stat_io \gset +SELECT :io_stats_post_reset < :io_stats_pre_reset; + + +-- test BRIN index doesn't block HOT update +CREATE TABLE brin_hot ( + id integer PRIMARY KEY, + val integer NOT NULL +) WITH (autovacuum_enabled = off, fillfactor = 70); + +INSERT INTO brin_hot SELECT *, 0 FROM generate_series(1, 235); +CREATE INDEX val_brin ON brin_hot using brin(val); + +CREATE FUNCTION wait_for_hot_stats() RETURNS void AS $$ +DECLARE + start_time timestamptz := clock_timestamp(); + updated bool; +BEGIN + -- we don't want to wait forever; loop will exit after 30 seconds + FOR i IN 1 .. 300 LOOP + SELECT (pg_stat_get_tuples_hot_updated('brin_hot'::regclass::oid) > 0) INTO updated; + EXIT WHEN updated; + + -- wait a little + PERFORM pg_sleep_for('100 milliseconds'); + -- reset stats snapshot so we can test again + PERFORM pg_stat_clear_snapshot(); + END LOOP; + -- report time waited in postmaster log (where it won't change test output) + RAISE log 'wait_for_hot_stats delayed % seconds', + EXTRACT(epoch FROM clock_timestamp() - start_time); +END +$$ LANGUAGE plpgsql; + +UPDATE brin_hot SET val = -3 WHERE id = 42; + +-- We can't just call wait_for_hot_stats() at this point, because we only +-- transmit stats when the session goes idle, and we probably didn't +-- transmit the last couple of counts yet thanks to the rate-limiting logic +-- in pgstat_report_stat(). But instead of waiting for the rate limiter's +-- timeout to elapse, let's just start a new session. The old one will +-- then send its stats before dying. +\c - + +SELECT wait_for_hot_stats(); +SELECT pg_stat_get_tuples_hot_updated('brin_hot'::regclass::oid); + +DROP TABLE brin_hot; +DROP FUNCTION wait_for_hot_stats(); + +-- Test handling of index predicates - updating attributes in precicates +-- should not block HOT when summarizing indexes are involved. We update +-- a row that was not indexed due to the index predicate, and becomes +-- indexable - the HOT-updated tuple is forwarded to the BRIN index. +CREATE TABLE brin_hot_2 (a int, b int); +INSERT INTO brin_hot_2 VALUES (1, 100); +CREATE INDEX ON brin_hot_2 USING brin (b) WHERE a = 2; + +UPDATE brin_hot_2 SET a = 2; + +EXPLAIN (COSTS OFF) SELECT * FROM brin_hot_2 WHERE a = 2 AND b = 100; +SELECT COUNT(*) FROM brin_hot_2 WHERE a = 2 AND b = 100; + +SET enable_seqscan = off; + +EXPLAIN (COSTS OFF) SELECT * FROM brin_hot_2 WHERE a = 2 AND b = 100; +SELECT COUNT(*) FROM brin_hot_2 WHERE a = 2 AND b = 100; + +DROP TABLE brin_hot_2; + +-- Test that updates to indexed columns are still propagated to the +-- BRIN column. +-- https://postgr.es/m/05ebcb44-f383-86e3-4f31-0a97a55634cf@enterprisedb.com +CREATE TABLE brin_hot_3 (a int, filler text) WITH (fillfactor = 10); +INSERT INTO brin_hot_3 SELECT 1, repeat(' ', 500) FROM generate_series(1, 20); +CREATE INDEX ON brin_hot_3 USING brin (a) WITH (pages_per_range = 1); +UPDATE brin_hot_3 SET a = 2; + +EXPLAIN (COSTS OFF) SELECT * FROM brin_hot_3 WHERE a = 2; +SELECT COUNT(*) FROM brin_hot_3 WHERE a = 2; + +DROP TABLE brin_hot_3; + +SET enable_seqscan = on; + -- End of Stats Test diff --git a/test/sql/postgres_regress/stats_ext.sql b/test/sql/postgres_regress/stats_ext.sql index f0ee4159..90b625a5 100644 --- a/test/sql/postgres_regress/stats_ext.sql +++ b/test/sql/postgres_regress/stats_ext.sql @@ -1283,25 +1283,25 @@ WITH (autovacuum_enabled = off); INSERT INTO mcv_lists_uuid (a, b, c) SELECT - md5(mod(i,100)::text)::uuid, - md5(mod(i,50)::text)::uuid, - md5(mod(i,25)::text)::uuid + fipshash(mod(i,100)::text)::uuid, + fipshash(mod(i,50)::text)::uuid, + fipshash(mod(i,25)::text)::uuid FROM generate_series(1,5000) s(i); ANALYZE mcv_lists_uuid; -SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND b = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'''); +SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND b = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'''); -SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND b = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND c = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'''); +SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND b = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND c = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'''); CREATE STATISTICS mcv_lists_uuid_stats (mcv) ON a, b, c FROM mcv_lists_uuid; ANALYZE mcv_lists_uuid; -SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND b = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'''); +SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND b = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'''); -SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND b = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'' AND c = ''1679091c-5a88-0faf-6fb5-e6087eb1b2dc'''); +SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists_uuid WHERE a = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND b = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'' AND c = ''e7f6c011-776e-8db7-cd33-0b54174fd76f'''); DROP TABLE mcv_lists_uuid; @@ -1315,7 +1315,7 @@ WITH (autovacuum_enabled = off); INSERT INTO mcv_lists_arrays (a, b, c) SELECT - ARRAY[md5((i/100)::text), md5((i/100-1)::text), md5((i/100+1)::text)], + ARRAY[fipshash((i/100)::text), fipshash((i/100-1)::text), fipshash((i/100+1)::text)], ARRAY[(i/100-1)::numeric/1000, (i/100)::numeric/1000, (i/100+1)::numeric/1000], ARRAY[(i/100-1), i/100, (i/100+1)] FROM generate_series(1,5000) s(i); @@ -1515,7 +1515,7 @@ DROP TABLE expr_stats; -- statistics on expressions with different data types CREATE TABLE expr_stats (a int, b name, c text); -INSERT INTO expr_stats SELECT mod(i,10), md5(mod(i,10)::text), md5(mod(i,10)::text) FROM generate_series(1,1000) s(i); +INSERT INTO expr_stats SELECT mod(i,10), fipshash(mod(i,10)::text), fipshash(mod(i,10)::text) FROM generate_series(1,1000) s(i); ANALYZE expr_stats; SELECT * FROM check_estimated_rows('SELECT * FROM expr_stats WHERE a = 0 AND (b || c) <= ''z'' AND (c || b) >= ''0'''); @@ -1569,12 +1569,12 @@ ANALYZE tststats.priv_test_tbl; -- Check printing info about extended statistics by \dX create table stts_t1 (a int, b int); -create statistics stts_1 (ndistinct) on a, b from stts_t1; -create statistics stts_2 (ndistinct, dependencies) on a, b from stts_t1; -create statistics stts_3 (ndistinct, dependencies, mcv) on a, b from stts_t1; +create statistics (ndistinct) on a, b from stts_t1; +create statistics (ndistinct, dependencies) on a, b from stts_t1; +create statistics (ndistinct, dependencies, mcv) on a, b from stts_t1; create table stts_t2 (a int, b int, c int); -create statistics stts_4 on b, c from stts_t2; +create statistics on b, c from stts_t2; create table stts_t3 (col1 int, col2 int, col3 int); create statistics stts_hoge on col1, col2, col3 from stts_t3; @@ -1589,13 +1589,21 @@ analyze stts_t1; set search_path to public, stts_s1, stts_s2, tststats; \dX -\dX stts_? +\dX stts_t* \dX *stts_hoge \dX+ -\dX+ stts_? +\dX+ stts_t* \dX+ *stts_hoge \dX+ stts_s2.stts_yama +create statistics (mcv) ON a, b, (a+b), (a-b) FROM stts_t1; +create statistics (mcv) ON a, b, (a+b), (a-b) FROM stts_t1; +create statistics (mcv) ON (a+b), (a-b) FROM stts_t1; +\dX stts_t*expr* +drop statistics stts_t1_a_b_expr_expr_stat; +drop statistics stts_t1_a_b_expr_expr_stat1; +drop statistics stts_t1_expr_expr_stat; + set search_path to public, stts_s1; \dX diff --git a/test/sql/postgres_regress/strings.sql b/test/sql/postgres_regress/strings.sql index 8c379182..ca32f6bb 100644 --- a/test/sql/postgres_regress/strings.sql +++ b/test/sql/postgres_regress/strings.sql @@ -85,6 +85,12 @@ SELECT E'DeAdBeEf'::bytea; SELECT E'De\\000dBeEf'::bytea; SELECT E'De\\123dBeEf'::bytea; +-- Test non-error-throwing API too +SELECT pg_input_is_valid(E'\\xDeAdBeE', 'bytea'); +SELECT * FROM pg_input_error_info(E'\\xDeAdBeE', 'bytea'); +SELECT * FROM pg_input_error_info(E'\\xDeAdBeEx', 'bytea'); +SELECT * FROM pg_input_error_info(E'foo\\99bar', 'bytea'); + -- -- test conversions between various string types -- E021-10 implicit casting among the character data types @@ -685,38 +691,6 @@ select to_hex(256*256*256 - 1) AS "ffffff"; select to_hex(256::bigint*256::bigint*256::bigint*256::bigint - 1) AS "ffffffff"; --- --- MD5 test suite - from IETF RFC 1321 --- (see: ftp://ftp.rfc-editor.org/in-notes/rfc1321.txt) --- -select md5('') = 'd41d8cd98f00b204e9800998ecf8427e' AS "TRUE"; - -select md5('a') = '0cc175b9c0f1b6a831c399e269772661' AS "TRUE"; - -select md5('abc') = '900150983cd24fb0d6963f7d28e17f72' AS "TRUE"; - -select md5('message digest') = 'f96b697d7cb7938d525a2f31aaf161d0' AS "TRUE"; - -select md5('abcdefghijklmnopqrstuvwxyz') = 'c3fcd3d76192e4007dfb496cca67e13b' AS "TRUE"; - -select md5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') = 'd174ab98d277d9f5a5611c2c9f419d9f' AS "TRUE"; - -select md5('12345678901234567890123456789012345678901234567890123456789012345678901234567890') = '57edf4a22be3c955ac49da2e2107b67a' AS "TRUE"; - -select md5(''::bytea) = 'd41d8cd98f00b204e9800998ecf8427e' AS "TRUE"; - -select md5('a'::bytea) = '0cc175b9c0f1b6a831c399e269772661' AS "TRUE"; - -select md5('abc'::bytea) = '900150983cd24fb0d6963f7d28e17f72' AS "TRUE"; - -select md5('message digest'::bytea) = 'f96b697d7cb7938d525a2f31aaf161d0' AS "TRUE"; - -select md5('abcdefghijklmnopqrstuvwxyz'::bytea) = 'c3fcd3d76192e4007dfb496cca67e13b' AS "TRUE"; - -select md5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'::bytea) = 'd174ab98d277d9f5a5611c2c9f419d9f' AS "TRUE"; - -select md5('12345678901234567890123456789012345678901234567890123456789012345678901234567890'::bytea) = '57edf4a22be3c955ac49da2e2107b67a' AS "TRUE"; - -- -- SHA-2 -- @@ -813,6 +787,7 @@ SELECT ltrim('zzzytrim', 'xyz'); SELECT translate('', '14', 'ax'); SELECT translate('12345', '14', 'ax'); +SELECT translate('12345', '134', 'a'); SELECT ascii('x'); SELECT ascii(''); diff --git a/test/sql/postgres_regress/subscription.sql b/test/sql/postgres_regress/subscription.sql index 74c38ead..444e563f 100644 --- a/test/sql/postgres_regress/subscription.sql +++ b/test/sql/postgres_regress/subscription.sql @@ -4,6 +4,7 @@ CREATE ROLE regress_subscription_user LOGIN SUPERUSER; CREATE ROLE regress_subscription_user2; +CREATE ROLE regress_subscription_user3 IN ROLE pg_create_subscription; CREATE ROLE regress_subscription_user_dummy LOGIN NOSUPERUSER; SET SESSION AUTHORIZATION 'regress_subscription_user'; @@ -30,6 +31,17 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB COMMENT ON SUBSCRIPTION regress_testsub IS 'test subscription'; SELECT obj_description(s.oid, 'pg_subscription') FROM pg_subscription s; +-- Check if the subscription stats are created and stats_reset is updated +-- by pg_stat_reset_subscription_stats(). +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + +-- Reset the stats again and check if the new reset_stats is updated. +SELECT stats_reset as prev_stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub' \gset +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT :'prev_stats_reset' < stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + -- fail - name already exists CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false); @@ -54,9 +66,26 @@ CREATE SUBSCRIPTION regress_testsub3 CONNECTION 'dbname=regress_doesnotexist' PU ALTER SUBSCRIPTION regress_testsub3 ENABLE; ALTER SUBSCRIPTION regress_testsub3 REFRESH PUBLICATION; +-- fail - origin must be either none or any +CREATE SUBSCRIPTION regress_testsub4 CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (slot_name = NONE, connect = false, origin = foo); + +-- now it works +CREATE SUBSCRIPTION regress_testsub4 CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (slot_name = NONE, connect = false, origin = none); +\dRs+ regress_testsub4 +ALTER SUBSCRIPTION regress_testsub4 SET (origin = any); +\dRs+ regress_testsub4 + DROP SUBSCRIPTION regress_testsub3; +DROP SUBSCRIPTION regress_testsub4; --- fail - invalid connection string +-- fail, connection string does not parse +CREATE SUBSCRIPTION regress_testsub5 CONNECTION 'i_dont_exist=param' PUBLICATION testpub; + +-- fail, connection string parses, but doesn't work (and does so without +-- connecting, so this is reliable and safe) +CREATE SUBSCRIPTION regress_testsub5 CONNECTION 'port=-1' PUBLICATION testpub; + +-- fail - invalid connection string during ALTER ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar'; \dRs+ @@ -64,6 +93,12 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar'; ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refresh = false); ALTER SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist2'; ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname'); +ALTER SUBSCRIPTION regress_testsub SET (password_required = false); +ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = true); +\dRs+ + +ALTER SUBSCRIPTION regress_testsub SET (password_required = true); +ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = false); -- fail ALTER SUBSCRIPTION regress_testsub SET (slot_name = ''); @@ -110,10 +145,7 @@ ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar); -- rename back to keep the rest simple ALTER SUBSCRIPTION regress_testsub_foo RENAME TO regress_testsub; --- fail - new owner must be superuser -ALTER SUBSCRIPTION regress_testsub OWNER TO regress_subscription_user2; -ALTER ROLE regress_subscription_user2 SUPERUSER; --- now it works +-- ok, we're a superuser ALTER SUBSCRIPTION regress_testsub OWNER TO regress_subscription_user2; -- fail - cannot do DROP SUBSCRIPTION inside transaction block with slot name @@ -146,7 +178,7 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); DROP SUBSCRIPTION regress_testsub; --- fail - streaming must be boolean +-- fail - streaming must be boolean or 'parallel' CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, streaming = foo); -- now it works @@ -154,6 +186,10 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB \dRs+ +ALTER SUBSCRIPTION regress_testsub SET (streaming = parallel); + +\dRs+ + ALTER SUBSCRIPTION regress_testsub SET (streaming = false); ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); @@ -173,7 +209,7 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refr \dRs+ --- fail - publication used more then once +-- fail - publication used more than once ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub1 WITH (refresh = false); -- fail - all publications are deleted @@ -254,7 +290,54 @@ ALTER SUBSCRIPTION regress_testsub SET (disable_on_error = true); ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); DROP SUBSCRIPTION regress_testsub; +-- let's do some tests with pg_create_subscription rather than superuser +SET SESSION AUTHORIZATION regress_subscription_user3; + +-- fail, not enough privileges +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false); + +-- fail, must specify password +RESET SESSION AUTHORIZATION; +GRANT CREATE ON DATABASE REGRESSION TO regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false); + +-- fail, can't set password_required=false +RESET SESSION AUTHORIZATION; +GRANT CREATE ON DATABASE REGRESSION TO regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, password_required = false); + +-- ok +RESET SESSION AUTHORIZATION; +GRANT CREATE ON DATABASE REGRESSION TO regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist password=regress_fakepassword' PUBLICATION testpub WITH (connect = false); + +-- we cannot give the subscription away to some random user +ALTER SUBSCRIPTION regress_testsub OWNER TO regress_subscription_user; + +-- but we can rename the subscription we just created +ALTER SUBSCRIPTION regress_testsub RENAME TO regress_testsub2; + +-- ok, even after losing pg_create_subscription we can still rename it +RESET SESSION AUTHORIZATION; +REVOKE pg_create_subscription FROM regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; +ALTER SUBSCRIPTION regress_testsub2 RENAME TO regress_testsub; + +-- fail, after losing CREATE on the database we can't rename it any more +RESET SESSION AUTHORIZATION; +REVOKE CREATE ON DATABASE REGRESSION FROM regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; +ALTER SUBSCRIPTION regress_testsub RENAME TO regress_testsub2; + +-- ok, owning it is enough for this stuff +ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); +DROP SUBSCRIPTION regress_testsub; + RESET SESSION AUTHORIZATION; DROP ROLE regress_subscription_user; DROP ROLE regress_subscription_user2; +DROP ROLE regress_subscription_user3; DROP ROLE regress_subscription_user_dummy; diff --git a/test/sql/postgres_regress/subselect.sql b/test/sql/postgres_regress/subselect.sql index 94ba91f5..40276708 100644 --- a/test/sql/postgres_regress/subselect.sql +++ b/test/sql/postgres_regress/subselect.sql @@ -13,6 +13,8 @@ SELECT 1 AS zero WHERE 1 IN (SELECT 2); SELECT * FROM (SELECT 1 AS x) ss; SELECT * FROM ((SELECT 1 AS x)) ss; +SELECT * FROM ((SELECT 1 AS x)), ((SELECT * FROM ((SELECT 2 AS y)))); + (SELECT 2) UNION SELECT 2; ((SELECT 2)) UNION SELECT 2; @@ -80,6 +82,35 @@ SELECT f1 AS "Correlated Field" WHERE (f1, f2) IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL WHERE f3 IS NOT NULL); +-- Subselects without aliases + +SELECT count FROM (SELECT COUNT(DISTINCT name) FROM road); +SELECT COUNT(*) FROM (SELECT DISTINCT name FROM road); + +SELECT * FROM (SELECT * FROM int4_tbl), (VALUES (123456)) WHERE f1 = column1; + +CREATE VIEW view_unnamed_ss AS +SELECT * FROM (SELECT * FROM (SELECT abs(f1) AS a1 FROM int4_tbl)), + (SELECT * FROM int8_tbl) + WHERE a1 < 10 AND q1 > a1 ORDER BY q1, q2; + +SELECT * FROM view_unnamed_ss; + +\sv view_unnamed_ss + +DROP VIEW view_unnamed_ss; + +-- Test matching of locking clause to correct alias + +CREATE VIEW view_unnamed_ss_locking AS +SELECT * FROM (SELECT * FROM int4_tbl), int8_tbl AS unnamed_subquery + WHERE f1 = q1 + FOR UPDATE OF unnamed_subquery; + +\sv view_unnamed_ss_locking + +DROP VIEW view_unnamed_ss_locking; + -- -- Use some existing tables in the regression test -- diff --git a/test/sql/postgres_regress/tablespace.sql b/test/sql/postgres_regress/tablespace.sql index 21db433f..d274d961 100644 --- a/test/sql/postgres_regress/tablespace.sql +++ b/test/sql/postgres_regress/tablespace.sql @@ -20,8 +20,6 @@ SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith'; -- drop the tablespace so we can re-use the location DROP TABLESPACE regress_tblspacewith; --- create a tablespace we can use -CREATE TABLESPACE regress_tblspace LOCATION ''; -- This returns a relative path as of an effect of allow_in_place_tablespaces, -- masking the tablespace OID used in the path name. SELECT regexp_replace(pg_tablespace_location(oid), '(pg_tblspc)/(\d+)', '\1/NNN') @@ -225,7 +223,7 @@ CREATE TABLE testschema.part1 PARTITION OF testschema.part FOR VALUES IN (1); CREATE INDEX part_a_idx ON testschema.part (a) TABLESPACE regress_tblspace; CREATE TABLE testschema.part2 PARTITION OF testschema.part FOR VALUES IN (2); SELECT relname, spcname FROM pg_catalog.pg_tablespace t, pg_catalog.pg_class c - where c.reltablespace = t.oid AND c.relname LIKE 'part%_idx'; + where c.reltablespace = t.oid AND c.relname LIKE 'part%_idx' ORDER BY relname; \d testschema.part \d+ testschema.part \d testschema.part1 diff --git a/test/sql/postgres_regress/temp.sql b/test/sql/postgres_regress/temp.sql index 424d12b2..2a487a1e 100644 --- a/test/sql/postgres_regress/temp.sql +++ b/test/sql/postgres_regress/temp.sql @@ -101,6 +101,22 @@ COMMIT; SELECT * FROM temptest; +-- Test it with a CHECK condition that produces a toasted pg_constraint entry +BEGIN; +do $$ +begin + execute format($cmd$ + CREATE TEMP TABLE temptest (col text CHECK (col < %L)) ON COMMIT DROP + $cmd$, + (SELECT string_agg(g.i::text || ':' || random()::text, '|') + FROM generate_series(1, 100) g(i))); +end$$; + +SELECT * FROM temptest; +COMMIT; + +SELECT * FROM temptest; + -- ON COMMIT is only allowed for TEMP CREATE TABLE temptest(col int) ON COMMIT DELETE ROWS; diff --git a/test/sql/postgres_regress/test_setup.sql b/test/sql/postgres_regress/test_setup.sql index 02c0c84c..1b2d4346 100644 --- a/test/sql/postgres_regress/test_setup.sql +++ b/test/sql/postgres_regress/test_setup.sql @@ -23,6 +23,10 @@ SET synchronous_commit = on; -- GRANT ALL ON SCHEMA public TO public; +-- Create a tablespace we can use in tests. +SET allow_in_place_tablespaces = true; +CREATE TABLESPACE regress_tblspace LOCATION ''; + -- -- These tables have traditionally been referenced by many tests, -- so create and populate them. Insert only non-error values here. @@ -280,3 +284,18 @@ create function part_hashtext_length(value text, seed int8) create operator class part_test_text_ops for type text using hash as operator 1 =, function 2 part_hashtext_length(text, int8); + +-- +-- These functions are used in tests that used to use md5(), which we now +-- mostly avoid so that the tests will pass in FIPS mode. +-- + +create function fipshash(bytea) + returns text + strict immutable parallel safe leakproof + return substr(encode(sha256($1), 'hex'), 1, 32); + +create function fipshash(text) + returns text + strict immutable parallel safe leakproof + return substr(encode(sha256($1::bytea), 'hex'), 1, 32); diff --git a/test/sql/postgres_regress/tid.sql b/test/sql/postgres_regress/tid.sql index 990d314a..2602e20e 100644 --- a/test/sql/postgres_regress/tid.sql +++ b/test/sql/postgres_regress/tid.sql @@ -9,6 +9,12 @@ SELECT SELECT '(4294967296,1)'::tid; -- error SELECT '(1,65536)'::tid; -- error +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('(0)', 'tid'); +SELECT * FROM pg_input_error_info('(0)', 'tid'); +SELECT pg_input_is_valid('(0,-1)', 'tid'); +SELECT * FROM pg_input_error_info('(0,-1)', 'tid'); + -- tests for functions related to TID handling diff --git a/test/sql/postgres_regress/time.sql b/test/sql/postgres_regress/time.sql index 3637f287..eb375a36 100644 --- a/test/sql/postgres_regress/time.sql +++ b/test/sql/postgres_regress/time.sql @@ -40,6 +40,13 @@ SELECT '23:59:60.01'::time; -- not allowed SELECT '24:01:00'::time; -- not allowed SELECT '25:00:00'::time; -- not allowed +-- Test non-error-throwing API +SELECT pg_input_is_valid('12:00:00', 'time'); +SELECT pg_input_is_valid('25:00:00', 'time'); +SELECT pg_input_is_valid('15:36:39 America/New_York', 'time'); +SELECT * FROM pg_input_error_info('25:00:00', 'time'); +SELECT * FROM pg_input_error_info('15:36:39 America/New_York', 'time'); + -- -- TIME simple math -- diff --git a/test/sql/postgres_regress/timestamp.sql b/test/sql/postgres_regress/timestamp.sql index ebc969f3..b9bcce9c 100644 --- a/test/sql/postgres_regress/timestamp.sql +++ b/test/sql/postgres_regress/timestamp.sql @@ -49,6 +49,8 @@ INSERT INTO TIMESTAMP_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('epoch'); +SELECT timestamp 'infinity' = timestamp '+infinity' AS t; + -- Postgres v6.0 standard output format INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); @@ -94,6 +96,13 @@ INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); -- this fails (even though TZ is a no-op, we still look it up) INSERT INTO TIMESTAMP_TBL VALUES ('19970710 173201 America/Does_not_exist'); +-- Test non-error-throwing API +SELECT pg_input_is_valid('now', 'timestamp'); +SELECT pg_input_is_valid('garbage', 'timestamp'); +SELECT pg_input_is_valid('2001-01-01 00:00 Nehwon/Lankhmar', 'timestamp'); +SELECT * FROM pg_input_error_info('garbage', 'timestamp'); +SELECT * FROM pg_input_error_info('2001-01-01 00:00 Nehwon/Lankhmar', 'timestamp'); + -- Check date conversion and date arithmetic INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 18:32:01 PDT'); @@ -317,6 +326,10 @@ SELECT extract(epoch from '294270-01-01 00:00:00'::timestamp); -- another internal overflow test case SELECT extract(epoch from '5000-01-01 00:00:00'::timestamp); +-- test edge-case overflow in timestamp subtraction +SELECT timestamp '294276-12-31 23:59:59' - timestamp '1999-12-23 19:59:04.224193' AS ok; +SELECT timestamp '294276-12-31 23:59:59' - timestamp '1999-12-23 19:59:04.224192' AS overflows; + -- TO_CHAR() SELECT to_char(d1, 'DAY Day day DY Dy dy MONTH Month month RM MON Mon mon') FROM TIMESTAMP_TBL; diff --git a/test/sql/postgres_regress/timestamptz.sql b/test/sql/postgres_regress/timestamptz.sql index a107abc5..69b36d04 100644 --- a/test/sql/postgres_regress/timestamptz.sql +++ b/test/sql/postgres_regress/timestamptz.sql @@ -50,6 +50,8 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('epoch'); +SELECT timestamptz 'infinity' = timestamptz '+infinity' AS t; + -- Postgres v6.0 standard output format INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); @@ -107,6 +109,13 @@ SELECT '20500110 173201 Europe/Helsinki'::timestamptz; -- non-DST SELECT '205000-07-10 17:32:01 Europe/Helsinki'::timestamptz; -- DST SELECT '205000-01-10 17:32:01 Europe/Helsinki'::timestamptz; -- non-DST +-- Test non-error-throwing API +SELECT pg_input_is_valid('now', 'timestamptz'); +SELECT pg_input_is_valid('garbage', 'timestamptz'); +SELECT pg_input_is_valid('2001-01-01 00:00 Nehwon/Lankhmar', 'timestamptz'); +SELECT * FROM pg_input_error_info('garbage', 'timestamptz'); +SELECT * FROM pg_input_error_info('2001-01-01 00:00 Nehwon/Lankhmar', 'timestamptz'); + -- Check date conversion and date arithmetic INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 18:32:01 PDT'); @@ -297,6 +306,10 @@ SELECT extract(epoch from '294270-01-01 00:00:00+00'::timestamptz); -- another internal overflow test case SELECT extract(epoch from '5000-01-01 00:00:00+00'::timestamptz); +-- test edge-case overflow in timestamp subtraction +SELECT timestamptz '294276-12-31 23:59:59 UTC' - timestamptz '1999-12-23 19:59:04.224193 UTC' AS ok; +SELECT timestamptz '294276-12-31 23:59:59 UTC' - timestamptz '1999-12-23 19:59:04.224192 UTC' AS overflows; + -- TO_CHAR() SELECT to_char(d1, 'DAY Day day DY Dy dy MONTH Month month RM MON Mon mon') FROM TIMESTAMPTZ_TBL; @@ -446,6 +459,25 @@ select * from generate_series('2020-01-01 00:00'::timestamptz, '2020-01-02 03:00'::timestamptz, '0 hour'::interval); +-- Interval crossing time shift for Europe/Warsaw timezone (with DST) +SET TimeZone to 'UTC'; + +SELECT date_add('2022-10-30 00:00:00+01'::timestamptz, + '1 day'::interval); +SELECT date_add('2021-10-31 00:00:00+02'::timestamptz, + '1 day'::interval, + 'Europe/Warsaw'); +SELECT date_subtract('2022-10-30 00:00:00+01'::timestamptz, + '1 day'::interval); +SELECT date_subtract('2021-10-31 00:00:00+02'::timestamptz, + '1 day'::interval, + 'Europe/Warsaw'); +SELECT * FROM generate_series('2021-12-31 23:00:00+00'::timestamptz, + '2020-12-31 23:00:00+00'::timestamptz, + '-1 month'::interval, + 'Europe/Warsaw'); +RESET TimeZone; + -- -- Test behavior with a dynamic (time-varying) timezone abbreviation. -- These tests rely on the knowledge that MSK (Europe/Moscow standard time) diff --git a/test/sql/postgres_regress/timetz.sql b/test/sql/postgres_regress/timetz.sql index 7b70f465..1ffad196 100644 --- a/test/sql/postgres_regress/timetz.sql +++ b/test/sql/postgres_regress/timetz.sql @@ -45,6 +45,13 @@ SELECT '23:59:60.01 PDT'::timetz; -- not allowed SELECT '24:01:00 PDT'::timetz; -- not allowed SELECT '25:00:00 PDT'::timetz; -- not allowed +-- Test non-error-throwing API +SELECT pg_input_is_valid('12:00:00 PDT', 'timetz'); +SELECT pg_input_is_valid('25:00:00 PDT', 'timetz'); +SELECT pg_input_is_valid('15:36:39 America/New_York', 'timetz'); +SELECT * FROM pg_input_error_info('25:00:00 PDT', 'timetz'); +SELECT * FROM pg_input_error_info('15:36:39 America/New_York', 'timetz'); + -- -- TIME simple math -- @@ -77,3 +84,23 @@ SELECT date_part('microsecond', TIME WITH TIME ZONE '2020-05-26 13:30:25.575401- SELECT date_part('millisecond', TIME WITH TIME ZONE '2020-05-26 13:30:25.575401-04'); SELECT date_part('second', TIME WITH TIME ZONE '2020-05-26 13:30:25.575401-04'); SELECT date_part('epoch', TIME WITH TIME ZONE '2020-05-26 13:30:25.575401-04'); + +-- +-- Test timetz_zone, timetz_izone +-- +BEGIN; +SET LOCAL TimeZone TO 'UTC'; +CREATE VIEW timetz_local_view AS + SELECT f1 AS dat, + f1 AT TIME ZONE current_setting('TimeZone') AS dat_at_tz, + f1 AT TIME ZONE INTERVAL '00:00' AS dat_at_int + FROM TIMETZ_TBL + ORDER BY f1; +SELECT pg_get_viewdef('timetz_local_view', true); +TABLE timetz_local_view; +SELECT f1 AS dat, + f1 AT TIME ZONE 'UTC+10' AS dat_at_tz, + f1 AT TIME ZONE INTERVAL '-10:00' AS dat_at_int + FROM TIMETZ_TBL + ORDER BY f1; +ROLLBACK; diff --git a/test/sql/postgres_regress/transactions.sql b/test/sql/postgres_regress/transactions.sql index d71c3ce9..07db0d6e 100644 --- a/test/sql/postgres_regress/transactions.sql +++ b/test/sql/postgres_regress/transactions.sql @@ -35,6 +35,24 @@ SELECT oid FROM pg_class WHERE relname = 'disappear'; -- should have members again SELECT * FROM xacttest; +-- Test that transaction characteristics cannot be reset. +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; +SELECT COUNT(*) FROM xacttest; +RESET transaction_isolation; -- error +END; + +BEGIN TRANSACTION READ ONLY; +SELECT COUNT(*) FROM xacttest; +RESET transaction_read_only; -- error +END; + +BEGIN TRANSACTION DEFERRABLE; +SELECT COUNT(*) FROM xacttest; +RESET transaction_deferrable; -- error +END; + +CREATE FUNCTION errfunc() RETURNS int LANGUAGE SQL AS 'SELECT 1' +SET transaction_read_only = on; -- error -- Read-only tests @@ -360,10 +378,10 @@ drop function inverse(int); begin; savepoint x; -create table abc (a int); -insert into abc values (5); -insert into abc values (10); -declare foo cursor for select * from abc; +create table trans_abc (a int); +insert into trans_abc values (5); +insert into trans_abc values (10); +declare foo cursor for select * from trans_abc; fetch from foo; rollback to x; @@ -373,11 +391,11 @@ commit; begin; -create table abc (a int); -insert into abc values (5); -insert into abc values (10); -insert into abc values (15); -declare foo cursor for select * from abc; +create table trans_abc (a int); +insert into trans_abc values (5); +insert into trans_abc values (10); +insert into trans_abc values (15); +declare foo cursor for select * from trans_abc; fetch from foo; @@ -423,7 +441,7 @@ DROP FUNCTION invert(x float8); -- Tests for AND CHAIN -CREATE TABLE abc (a int); +CREATE TABLE trans_abc (a int); -- set nondefault value so we have something to override below SET default_transaction_read_only = on; @@ -432,19 +450,19 @@ START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE; SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES (1); -INSERT INTO abc VALUES (2); +INSERT INTO trans_abc VALUES (1); +INSERT INTO trans_abc VALUES (2); COMMIT AND CHAIN; -- TBLOCK_END SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES ('error'); -INSERT INTO abc VALUES (3); -- check it's really aborted +INSERT INTO trans_abc VALUES ('error'); +INSERT INTO trans_abc VALUES (3); -- check it's really aborted COMMIT AND CHAIN; -- TBLOCK_ABORT_END SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES (4); +INSERT INTO trans_abc VALUES (4); COMMIT; START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE; @@ -452,12 +470,12 @@ SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; SAVEPOINT x; -INSERT INTO abc VALUES ('error'); +INSERT INTO trans_abc VALUES ('error'); COMMIT AND CHAIN; -- TBLOCK_ABORT_PENDING SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES (5); +INSERT INTO trans_abc VALUES (5); COMMIT; START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE; @@ -471,17 +489,28 @@ SHOW transaction_read_only; SHOW transaction_deferrable; COMMIT; +START TRANSACTION ISOLATION LEVEL READ COMMITTED, READ WRITE, DEFERRABLE; +SHOW transaction_isolation; +SHOW transaction_read_only; +SHOW transaction_deferrable; +SAVEPOINT x; +COMMIT AND CHAIN; -- TBLOCK_SUBCOMMIT +SHOW transaction_isolation; +SHOW transaction_read_only; +SHOW transaction_deferrable; +COMMIT; + -- different mix of options just for fun START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE, NOT DEFERRABLE; SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES (6); +INSERT INTO trans_abc VALUES (6); ROLLBACK AND CHAIN; -- TBLOCK_ABORT_PENDING SHOW transaction_isolation; SHOW transaction_read_only; SHOW transaction_deferrable; -INSERT INTO abc VALUES ('error'); +INSERT INTO trans_abc VALUES ('error'); ROLLBACK AND CHAIN; -- TBLOCK_ABORT_END SHOW transaction_isolation; SHOW transaction_read_only; @@ -492,11 +521,11 @@ ROLLBACK; COMMIT AND CHAIN; -- error ROLLBACK AND CHAIN; -- error -SELECT * FROM abc ORDER BY 1; +SELECT * FROM trans_abc ORDER BY 1; RESET default_transaction_read_only; -DROP TABLE abc; +DROP TABLE trans_abc; -- Test assorted behaviors around the implicit transaction block created @@ -561,39 +590,39 @@ SHOW transaction_read_only; SET TRANSACTION READ ONLY\; ROLLBACK AND CHAIN; -- error SHOW transaction_read_only; -CREATE TABLE abc (a int); +CREATE TABLE trans_abc (a int); -- COMMIT/ROLLBACK + COMMIT/ROLLBACK AND CHAIN -INSERT INTO abc VALUES (7)\; COMMIT\; INSERT INTO abc VALUES (8)\; COMMIT AND CHAIN; -- 7 commit, 8 error -INSERT INTO abc VALUES (9)\; ROLLBACK\; INSERT INTO abc VALUES (10)\; ROLLBACK AND CHAIN; -- 9 rollback, 10 error +INSERT INTO trans_abc VALUES (7)\; COMMIT\; INSERT INTO trans_abc VALUES (8)\; COMMIT AND CHAIN; -- 7 commit, 8 error +INSERT INTO trans_abc VALUES (9)\; ROLLBACK\; INSERT INTO trans_abc VALUES (10)\; ROLLBACK AND CHAIN; -- 9 rollback, 10 error -- COMMIT/ROLLBACK AND CHAIN + COMMIT/ROLLBACK -INSERT INTO abc VALUES (11)\; COMMIT AND CHAIN\; INSERT INTO abc VALUES (12)\; COMMIT; -- 11 error, 12 not reached -INSERT INTO abc VALUES (13)\; ROLLBACK AND CHAIN\; INSERT INTO abc VALUES (14)\; ROLLBACK; -- 13 error, 14 not reached +INSERT INTO trans_abc VALUES (11)\; COMMIT AND CHAIN\; INSERT INTO trans_abc VALUES (12)\; COMMIT; -- 11 error, 12 not reached +INSERT INTO trans_abc VALUES (13)\; ROLLBACK AND CHAIN\; INSERT INTO trans_abc VALUES (14)\; ROLLBACK; -- 13 error, 14 not reached -- START TRANSACTION + COMMIT/ROLLBACK AND CHAIN -START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO abc VALUES (15)\; COMMIT AND CHAIN; -- 15 ok +START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO trans_abc VALUES (15)\; COMMIT AND CHAIN; -- 15 ok SHOW transaction_isolation; -- transaction is active at this point COMMIT; -START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO abc VALUES (16)\; ROLLBACK AND CHAIN; -- 16 ok +START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO trans_abc VALUES (16)\; ROLLBACK AND CHAIN; -- 16 ok SHOW transaction_isolation; -- transaction is active at this point ROLLBACK; SET default_transaction_isolation = 'read committed'; -- START TRANSACTION + COMMIT/ROLLBACK + COMMIT/ROLLBACK AND CHAIN -START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO abc VALUES (17)\; COMMIT\; INSERT INTO abc VALUES (18)\; COMMIT AND CHAIN; -- 17 commit, 18 error +START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO trans_abc VALUES (17)\; COMMIT\; INSERT INTO trans_abc VALUES (18)\; COMMIT AND CHAIN; -- 17 commit, 18 error SHOW transaction_isolation; -- out of transaction block -START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO abc VALUES (19)\; ROLLBACK\; INSERT INTO abc VALUES (20)\; ROLLBACK AND CHAIN; -- 19 rollback, 20 error +START TRANSACTION ISOLATION LEVEL REPEATABLE READ\; INSERT INTO trans_abc VALUES (19)\; ROLLBACK\; INSERT INTO trans_abc VALUES (20)\; ROLLBACK AND CHAIN; -- 19 rollback, 20 error SHOW transaction_isolation; -- out of transaction block RESET default_transaction_isolation; -SELECT * FROM abc ORDER BY 1; +SELECT * FROM trans_abc ORDER BY 1; -DROP TABLE abc; +DROP TABLE trans_abc; -- Test for successful cleanup of an aborted transaction at session exit. diff --git a/test/sql/postgres_regress/triggers.sql b/test/sql/postgres_regress/triggers.sql index 4d8504fb..d29e98d2 100644 --- a/test/sql/postgres_regress/triggers.sql +++ b/test/sql/postgres_regress/triggers.sql @@ -1881,6 +1881,26 @@ alter table parent enable always trigger tg; select tgrelid::regclass, tgname, tgenabled from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) order by tgrelid::regclass::text, tgname; +-- This variant malfunctioned in some releases. +alter table parent disable trigger user; +select tgrelid::regclass, tgname, tgenabled from pg_trigger + where tgrelid in ('parent'::regclass, 'child1'::regclass) + order by tgrelid::regclass::text, tgname; +drop table parent, child1; + +-- Check processing of foreign key triggers +create table parent (a int primary key, f int references parent) + partition by list (a); +create table child1 partition of parent for values in (1); +select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, + tgfoid::regproc, tgenabled + from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) + order by tgrelid::regclass::text, tgfoid; +alter table parent disable trigger all; +select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, + tgfoid::regproc, tgenabled + from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) + order by tgrelid::regclass::text, tgfoid; drop table parent, child1; -- Verify that firing state propagates correctly on creation, too diff --git a/test/sql/postgres_regress/tsearch.sql b/test/sql/postgres_regress/tsearch.sql index 0fa8ac46..db2e09be 100644 --- a/test/sql/postgres_regress/tsearch.sql +++ b/test/sql/postgres_regress/tsearch.sql @@ -458,6 +458,78 @@ Water, water, every where, S. T. Coleridge (1772-1834) ', to_tsquery('english', 'ocean')); +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'day & drink')); + +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'day | drink')); + +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'day | !drink')); + +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'painted <-> Ship & drink')); + +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'painted <-> Ship | drink')); + +SELECT ts_headline('english', ' +Day after day, day after day, + We stuck, nor breath nor motion, +As idle as a painted Ship + Upon a painted Ocean. +Water, water, every where + And all the boards did shrink; +Water, water, every where, + Nor any drop to drink. +S. T. Coleridge (1772-1834) +', to_tsquery('english', 'painted <-> Ship | !drink')); + SELECT ts_headline('english', ' Day after day, day after day, We stuck, nor breath nor motion, @@ -487,6 +559,11 @@ SELECT ts_headline('english', to_tsquery('english','Lorem') && phraseto_tsquery('english','ullamcorper urna'), 'MaxWords=100, MinWords=1'); +SELECT ts_headline('english', +'Lorem ipsum urna. Nullam nullam ullamcorper urna.', +phraseto_tsquery('english','ullamcorper urna'), +'MaxWords=100, MinWords=5'); + SELECT ts_headline('english', ' @@ -563,6 +640,12 @@ SELECT ts_headline('english', to_tsquery('english','Lorem') && phraseto_tsquery('english','ullamcorper urna'), 'MaxFragments=100, MaxWords=100, MinWords=1'); +-- Edge cases with empty query +SELECT ts_headline('english', +'', to_tsquery('english', '')); +SELECT ts_headline('english', +'foo bar', to_tsquery('english', '')); + --Rewrite sub system CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT); diff --git a/test/sql/postgres_regress/tstypes.sql b/test/sql/postgres_regress/tstypes.sql index 61e8f49c..dfb7a146 100644 --- a/test/sql/postgres_regress/tstypes.sql +++ b/test/sql/postgres_regress/tstypes.sql @@ -19,6 +19,11 @@ SELECT '''w'':4A,3B,2C,1D,5 a:8'; SELECT 'a:3A b:2a'::tsvector || 'ba:1234 a:1B'; SELECT $$'' '1' '2'$$::tsvector; -- error, empty lexeme is not allowed +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('foo', 'tsvector'); +SELECT pg_input_is_valid($$''$$, 'tsvector'); +SELECT * FROM pg_input_error_info($$''$$, 'tsvector'); + --Base tsquery test SELECT '1'::tsquery; SELECT '1 '::tsquery; @@ -68,6 +73,12 @@ SELECT 'a & !!b'::tsquery; SELECT '!!a & b'::tsquery; SELECT '!!a & !!b'::tsquery; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('foo', 'tsquery'); +SELECT pg_input_is_valid('foo!', 'tsquery'); +SELECT * FROM pg_input_error_info('foo!', 'tsquery'); +SELECT * FROM pg_input_error_info('a <100000> b', 'tsquery'); + --comparisons SELECT 'a' < 'b & c'::tsquery as "true"; SELECT 'a' > 'b & c'::tsquery as "false"; diff --git a/test/sql/postgres_regress/type_sanity.sql b/test/sql/postgres_regress/type_sanity.sql index 5edc1f1f..79ec410a 100644 --- a/test/sql/postgres_regress/type_sanity.sql +++ b/test/sql/postgres_regress/type_sanity.sql @@ -105,32 +105,6 @@ WHERE t1.typinput = p1.oid AND NOT p1.proargtypes[1] = 'oid'::regtype AND p1.proargtypes[2] = 'int4'::regtype)); --- Check for type of the variadic array parameter's elements. --- provariadic should be ANYOID if the type of the last element is ANYOID, --- ANYELEMENTOID if the type of the last element is ANYARRAYOID, --- ANYCOMPATIBLEOID if the type of the last element is ANYCOMPATIBLEARRAYOID, --- and otherwise the element type corresponding to the array type. - -SELECT oid::regprocedure, provariadic::regtype, proargtypes::regtype[] -FROM pg_proc -WHERE provariadic != 0 -AND case proargtypes[array_length(proargtypes, 1)-1] - WHEN '"any"'::regtype THEN '"any"'::regtype - WHEN 'anyarray'::regtype THEN 'anyelement'::regtype - WHEN 'anycompatiblearray'::regtype THEN 'anycompatible'::regtype - ELSE (SELECT t.oid - FROM pg_type t - WHERE t.typarray = proargtypes[array_length(proargtypes, 1)-1]) - END != provariadic; - --- Check that all and only those functions with a variadic type have --- a variadic argument. -SELECT oid::regprocedure, proargmodes, provariadic -FROM pg_proc -WHERE (proargmodes IS NOT NULL AND 'v' = any(proargmodes)) - IS DISTINCT FROM - (provariadic != 0); - -- As of 8.0, this check finds refcursor, which is borrowing -- other types' I/O routines SELECT t1.oid, t1.typname, p1.oid, p1.proname diff --git a/test/sql/postgres_regress/updatable_views.sql b/test/sql/postgres_regress/updatable_views.sql index a6aebbc1..eaee0b7e 100644 --- a/test/sql/postgres_regress/updatable_views.sql +++ b/test/sql/postgres_regress/updatable_views.sql @@ -1423,6 +1423,23 @@ DROP VIEW v1; DROP TABLE t2; DROP TABLE t1; +-- +-- Test sub-select in nested security barrier views, per bug #17972 +-- +CREATE TABLE t1 (a int); +CREATE VIEW v1 WITH (security_barrier = true) AS + SELECT * FROM t1; +CREATE RULE v1_upd_rule AS ON UPDATE TO v1 DO INSTEAD + UPDATE t1 SET a = NEW.a WHERE a = OLD.a; +CREATE VIEW v2 WITH (security_barrier = true) AS + SELECT * FROM v1 WHERE EXISTS (SELECT 1); + +EXPLAIN (COSTS OFF) UPDATE v2 SET a = 1; + +DROP VIEW v2; +DROP VIEW v1; +DROP TABLE t1; + -- -- Test CREATE OR REPLACE VIEW turning a non-updatable view into an -- auto-updatable view and adding check options in a single step @@ -1717,6 +1734,16 @@ insert into base_tab_def_view values (15, default, default, default, default), insert into base_tab_def_view values (17), (default); select * from base_tab_def order by a, c NULLS LAST; +-- Test a DO ALSO INSERT ... SELECT rule +drop rule base_tab_def_view_ins_rule on base_tab_def_view; +create rule base_tab_def_view_ins_rule as on insert to base_tab_def_view + do also insert into base_tab_def (a, b, e) select new.a, new.b, 'xxx'; +truncate base_tab_def; +insert into base_tab_def_view values (1, default, default, default, default); +insert into base_tab_def_view values (2, default, default, default, default), + (3, default, default, default, default); +select * from base_tab_def order by a, e nulls first; + drop view base_tab_def_view; drop table base_tab_def; diff --git a/test/sql/postgres_regress/uuid.sql b/test/sql/postgres_regress/uuid.sql index 3bd3b357..9a8f437c 100644 --- a/test/sql/postgres_regress/uuid.sql +++ b/test/sql/postgres_regress/uuid.sql @@ -23,6 +23,10 @@ INSERT INTO guid1(guid_field) VALUES('{22222222-2222-2222-2222-222222222222 '); INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-G111-111111111111'); INSERT INTO guid1(guid_field) VALUES('11+11111-1111-1111-1111-111111111111'); +-- test non-error-throwing API +SELECT pg_input_is_valid('11', 'uuid'); +SELECT * FROM pg_input_error_info('11', 'uuid'); + --inserting three input formats INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111'); INSERT INTO guid1(guid_field) VALUES('{22222222-2222-2222-2222-222222222222}'); diff --git a/test/sql/postgres_regress/vacuum.sql b/test/sql/postgres_regress/vacuum.sql index 9faa8a34..51d7b1fe 100644 --- a/test/sql/postgres_regress/vacuum.sql +++ b/test/sql/postgres_regress/vacuum.sql @@ -232,11 +232,70 @@ ANALYZE vactst; COMMIT; -- PROCESS_TOAST option -ALTER TABLE vactst ADD COLUMN t TEXT; -ALTER TABLE vactst ALTER COLUMN t SET STORAGE EXTERNAL; -VACUUM (PROCESS_TOAST FALSE) vactst; -VACUUM (PROCESS_TOAST FALSE, FULL) vactst; +CREATE TABLE vac_option_tab (a INT, t TEXT); +INSERT INTO vac_option_tab SELECT a, 't' || a FROM generate_series(1, 10) AS a; +ALTER TABLE vac_option_tab ALTER COLUMN t SET STORAGE EXTERNAL; +-- Check the number of vacuums done on table vac_option_tab and on its +-- toast relation, to check that PROCESS_TOAST and PROCESS_MAIN work on +-- what they should. +CREATE VIEW vac_option_tab_counts AS + SELECT CASE WHEN c.relname IS NULL + THEN 'main' ELSE 'toast' END as rel, + s.vacuum_count + FROM pg_stat_all_tables s + LEFT JOIN pg_class c ON s.relid = c.reltoastrelid + WHERE c.relname = 'vac_option_tab' OR s.relname = 'vac_option_tab' + ORDER BY rel; +VACUUM (PROCESS_TOAST TRUE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +VACUUM (PROCESS_TOAST FALSE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +VACUUM (PROCESS_TOAST FALSE, FULL) vac_option_tab; -- error +-- PROCESS_MAIN option +-- Only the toast table is processed. +VACUUM (PROCESS_MAIN FALSE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +-- Nothing is processed. +VACUUM (PROCESS_MAIN FALSE, PROCESS_TOAST FALSE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +-- Check if the filenodes nodes have been updated as wanted after FULL. +SELECT relfilenode AS main_filenode FROM pg_class + WHERE relname = 'vac_option_tab' \gset +SELECT t.relfilenode AS toast_filenode FROM pg_class c, pg_class t + WHERE c.reltoastrelid = t.oid AND c.relname = 'vac_option_tab' \gset +-- Only the toast relation is processed. +VACUUM (PROCESS_MAIN FALSE, FULL) vac_option_tab; +SELECT relfilenode = :main_filenode AS is_same_main_filenode + FROM pg_class WHERE relname = 'vac_option_tab'; +SELECT t.relfilenode = :toast_filenode AS is_same_toast_filenode + FROM pg_class c, pg_class t + WHERE c.reltoastrelid = t.oid AND c.relname = 'vac_option_tab'; + +-- BUFFER_USAGE_LIMIT option +VACUUM (BUFFER_USAGE_LIMIT '512 kB') vac_option_tab; +ANALYZE (BUFFER_USAGE_LIMIT '512 kB') vac_option_tab; +-- try disabling the buffer usage limit +VACUUM (BUFFER_USAGE_LIMIT 0) vac_option_tab; +ANALYZE (BUFFER_USAGE_LIMIT 0) vac_option_tab; +-- value exceeds max size error +VACUUM (BUFFER_USAGE_LIMIT 16777220) vac_option_tab; +-- value is less than min size error +VACUUM (BUFFER_USAGE_LIMIT 120) vac_option_tab; +-- integer overflow error +VACUUM (BUFFER_USAGE_LIMIT 10000000000) vac_option_tab; +-- incompatible with VACUUM FULL error +VACUUM (BUFFER_USAGE_LIMIT '512 kB', FULL) vac_option_tab; + +-- SKIP_DATABASE_STATS option +VACUUM (SKIP_DATABASE_STATS) vactst; + +-- ONLY_DATABASE_STATS option +VACUUM (ONLY_DATABASE_STATS); +VACUUM (ONLY_DATABASE_STATS) vactst; -- error + +DROP VIEW vac_option_tab_counts; +DROP TABLE vac_option_tab; DROP TABLE vaccluster; DROP TABLE vactst; DROP TABLE vacparted; diff --git a/test/sql/postgres_regress/varchar.sql b/test/sql/postgres_regress/varchar.sql index a9708214..c8aaf93e 100644 --- a/test/sql/postgres_regress/varchar.sql +++ b/test/sql/postgres_regress/varchar.sql @@ -66,3 +66,8 @@ DROP TABLE VARCHAR_TBL; INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde'); SELECT * FROM VARCHAR_TBL; + +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('abcd ', 'varchar(4)'); +SELECT pg_input_is_valid('abcde', 'varchar(4)'); +SELECT * FROM pg_input_error_info('abcde', 'varchar(4)'); diff --git a/test/sql/postgres_regress/window.sql b/test/sql/postgres_regress/window.sql index 57c39e79..3ab6ac71 100644 --- a/test/sql/postgres_regress/window.sql +++ b/test/sql/postgres_regress/window.sql @@ -153,6 +153,10 @@ select first_value(max(x)) over (), y from (select unique1 as x, ten+four as y from tenk1) ss group by y; +-- window functions returning pass-by-ref values from different rows +select x, lag(x, 1) over (order by x), lead(x, 3) over (order by x) +from (select x::numeric as x from generate_series(1,10) x); + -- test non-default frame specifications SELECT four, ten, sum(ten) over (partition by four order by ten), @@ -968,6 +972,54 @@ SELECT sum(salary), row_number() OVER (ORDER BY depname), sum( depname FROM empsalary GROUP BY depname; +-- +-- Test SupportRequestOptimizeWindowClause's ability to de-duplicate +-- WindowClauses +-- + +-- Ensure WindowClause frameOptions are changed so that only a single +-- WindowAgg exists in the plan. +EXPLAIN (COSTS OFF) +SELECT + empno, + depname, + row_number() OVER (PARTITION BY depname ORDER BY enroll_date) rn, + rank() OVER (PARTITION BY depname ORDER BY enroll_date ROWS BETWEEN + UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) rnk, + dense_rank() OVER (PARTITION BY depname ORDER BY enroll_date RANGE BETWEEN + CURRENT ROW AND CURRENT ROW) drnk, + ntile(10) OVER (PARTITION BY depname ORDER BY enroll_date RANGE BETWEEN + CURRENT ROW AND UNBOUNDED FOLLOWING) nt, + percent_rank() OVER (PARTITION BY depname ORDER BY enroll_date ROWS BETWEEN + CURRENT ROW AND UNBOUNDED FOLLOWING) pr, + cume_dist() OVER (PARTITION BY depname ORDER BY enroll_date RANGE BETWEEN + CURRENT ROW AND UNBOUNDED FOLLOWING) cd +FROM empsalary; + +-- Ensure WindowFuncs which cannot support their WindowClause's frameOptions +-- being changed are untouched +EXPLAIN (COSTS OFF, VERBOSE) +SELECT + empno, + depname, + row_number() OVER (PARTITION BY depname ORDER BY enroll_date) rn, + rank() OVER (PARTITION BY depname ORDER BY enroll_date ROWS BETWEEN + UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) rnk, + count(*) OVER (PARTITION BY depname ORDER BY enroll_date RANGE BETWEEN + CURRENT ROW AND CURRENT ROW) cnt +FROM empsalary; + +-- Ensure the above query gives us the expected results +SELECT + empno, + depname, + row_number() OVER (PARTITION BY depname ORDER BY enroll_date) rn, + rank() OVER (PARTITION BY depname ORDER BY enroll_date ROWS BETWEEN + UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) rnk, + count(*) OVER (PARTITION BY depname ORDER BY enroll_date RANGE BETWEEN + CURRENT ROW AND CURRENT ROW) cnt +FROM empsalary; + -- Test pushdown of quals into a subquery containing window functions -- pushdown is safe because all PARTITION BY clauses include depname: @@ -1168,9 +1220,10 @@ SELECT * FROM count(salary) OVER (PARTITION BY depname || '') c1, -- w1 row_number() OVER (PARTITION BY depname) rn, -- w2 count(*) OVER (PARTITION BY depname) c2, -- w2 - count(*) OVER (PARTITION BY '' || depname) c3 -- w3 + count(*) OVER (PARTITION BY '' || depname) c3, -- w3 + ntile(2) OVER (PARTITION BY depname) nt -- w2 FROM empsalary -) e WHERE rn <= 1 AND c1 <= 3; +) e WHERE rn <= 1 AND c1 <= 3 AND nt < 2; -- Ensure we correctly filter out all of the run conditions from each window SELECT * FROM @@ -1178,9 +1231,10 @@ SELECT * FROM count(salary) OVER (PARTITION BY depname || '') c1, -- w1 row_number() OVER (PARTITION BY depname) rn, -- w2 count(*) OVER (PARTITION BY depname) c2, -- w2 - count(*) OVER (PARTITION BY '' || depname) c3 -- w3 + count(*) OVER (PARTITION BY '' || depname) c3, -- w3 + ntile(2) OVER (PARTITION BY depname) nt -- w2 FROM empsalary -) e WHERE rn <= 1 AND c1 <= 3; +) e WHERE rn <= 1 AND c1 <= 3 AND nt < 2; -- Tests to ensure we don't push down the run condition when it's not valid to -- do so. @@ -1205,15 +1259,24 @@ SELECT * FROM FROM empsalary) emp WHERE 3 <= c; --- Ensure we don't pushdown when there are multiple window clauses to evaluate +-- Ensure we don't use a run condition when there's a volatile function in the +-- WindowFunc EXPLAIN (COSTS OFF) SELECT * FROM (SELECT empno, salary, - count(*) OVER (ORDER BY empno DESC) c, - dense_rank() OVER (ORDER BY salary DESC) dr + count(random()) OVER (ORDER BY empno DESC) c FROM empsalary) emp -WHERE dr = 1; +WHERE c = 1; + +-- Ensure we don't use a run condition when the WindowFunc contains subplans +EXPLAIN (COSTS OFF) +SELECT * FROM + (SELECT empno, + salary, + count((SELECT 1)) OVER (ORDER BY empno DESC) c + FROM empsalary) emp +WHERE c = 1; -- Test Sort node collapsing EXPLAIN (COSTS OFF) @@ -1224,6 +1287,56 @@ SELECT * FROM FROM empsalary) emp WHERE depname = 'sales'; +-- Ensure that the evaluation order of the WindowAggs results in the WindowAgg +-- with the same sort order that's required by the ORDER BY is evaluated last. +EXPLAIN (COSTS OFF) +SELECT empno, + enroll_date, + depname, + sum(salary) OVER (PARTITION BY depname order by empno) depsalary, + min(salary) OVER (PARTITION BY depname order by enroll_date) depminsalary +FROM empsalary +ORDER BY depname, empno; + +-- As above, but with an adjusted ORDER BY to ensure the above plan didn't +-- perform only 2 sorts by accident. +EXPLAIN (COSTS OFF) +SELECT empno, + enroll_date, + depname, + sum(salary) OVER (PARTITION BY depname order by empno) depsalary, + min(salary) OVER (PARTITION BY depname order by enroll_date) depminsalary +FROM empsalary +ORDER BY depname, enroll_date; + +SET enable_hashagg TO off; + +-- Ensure we don't get a sort for both DISTINCT and ORDER BY. We expect the +-- sort for the DISTINCT to provide presorted input for the ORDER BY. +EXPLAIN (COSTS OFF) +SELECT DISTINCT + empno, + enroll_date, + depname, + sum(salary) OVER (PARTITION BY depname order by empno) depsalary, + min(salary) OVER (PARTITION BY depname order by enroll_date) depminsalary +FROM empsalary +ORDER BY depname, enroll_date; + +-- As above but adjust the ORDER BY clause to help ensure the plan with the +-- minimum amount of sorting wasn't a fluke. +EXPLAIN (COSTS OFF) +SELECT DISTINCT + empno, + enroll_date, + depname, + sum(salary) OVER (PARTITION BY depname order by empno) depsalary, + min(salary) OVER (PARTITION BY depname order by enroll_date) depminsalary +FROM empsalary +ORDER BY depname, empno; + +RESET enable_hashagg; + -- Test Sort node reordering EXPLAIN (COSTS OFF) SELECT diff --git a/test/sql/postgres_regress/with.sql b/test/sql/postgres_regress/with.sql index 87e78541..582139df 100644 --- a/test/sql/postgres_regress/with.sql +++ b/test/sql/postgres_regress/with.sql @@ -613,6 +613,15 @@ with recursive test as ( ) cycle x set is_cycle using path select * from test; +with recursive test as ( + select 0 as x + union all + select (x + 1) % 10 + from test + where not is_cycle -- redundant, but legal +) cycle x set is_cycle using path +select * from test; + -- multiple CTEs with recursive graph(f, t, label) as ( @@ -1221,7 +1230,7 @@ INSERT INTO bug6051 SELECT * FROM t1; SELECT * FROM bug6051; SELECT * FROM bug6051_2; --- check INSERT...SELECT rule actions are disallowed on commands +-- check INSERT ... SELECT rule actions are disallowed on commands -- that have modifyingCTEs CREATE OR REPLACE RULE bug6051_ins AS ON INSERT TO bug6051 DO INSTEAD INSERT INTO bug6051_2 @@ -1237,7 +1246,7 @@ CREATE TEMP TABLE bug6051_3 AS CREATE RULE bug6051_3_ins AS ON INSERT TO bug6051_3 DO INSTEAD SELECT i FROM bug6051_2; -BEGIN; SET LOCAL force_parallel_mode = on; +BEGIN; SET LOCAL debug_parallel_query = on; WITH t1 AS ( DELETE FROM bug6051_3 RETURNING * ) INSERT INTO bug6051_3 SELECT * FROM t1; diff --git a/test/sql/postgres_regress/xid.sql b/test/sql/postgres_regress/xid.sql index bee17e63..9f716b36 100644 --- a/test/sql/postgres_regress/xid.sql +++ b/test/sql/postgres_regress/xid.sql @@ -10,12 +10,20 @@ select '010'::xid, '0xffffffffffffffff'::xid8, '-1'::xid8; --- garbage values are not yet rejected (perhaps they should be) +-- garbage values select ''::xid; select 'asdf'::xid; select ''::xid8; select 'asdf'::xid8; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('42', 'xid'); +SELECT pg_input_is_valid('asdf', 'xid'); +SELECT * FROM pg_input_error_info('0xffffffffff', 'xid'); +SELECT pg_input_is_valid('42', 'xid8'); +SELECT pg_input_is_valid('asdf', 'xid8'); +SELECT * FROM pg_input_error_info('0xffffffffffffffffffff', 'xid8'); + -- equality select '1'::xid = '1'::xid; select '1'::xid != '1'::xid; @@ -68,6 +76,13 @@ select '0:1:'::pg_snapshot; select '12:13:0'::pg_snapshot; select '12:16:14,13'::pg_snapshot; +-- also try it with non-error-throwing API +select pg_input_is_valid('12:13:', 'pg_snapshot'); +select pg_input_is_valid('31:12:', 'pg_snapshot'); +select * from pg_input_error_info('31:12:', 'pg_snapshot'); +select pg_input_is_valid('12:16:14,13', 'pg_snapshot'); +select * from pg_input_error_info('12:16:14,13', 'pg_snapshot'); + create temp table snapshot_test ( nr integer, snap pg_snapshot diff --git a/test/sql/postgres_regress/xml.sql b/test/sql/postgres_regress/xml.sql index e3f90db4..a591eea2 100644 --- a/test/sql/postgres_regress/xml.sql +++ b/test/sql/postgres_regress/xml.sql @@ -9,6 +9,13 @@ INSERT INTO xmltest VALUES (3, 'one', 'xml'); +SELECT pg_input_is_valid('oneone', 'xml'); +SELECT message FROM pg_input_error_info('', 'xml'); + SELECT xmlcomment('test'); SELECT xmlcomment('-test'); @@ -125,6 +132,42 @@ SELECT xmlserialize(content data as character varying(20)) FROM xmltest; SELECT xmlserialize(content 'good' as char(10)); SELECT xmlserialize(document 'bad' as text); +-- indent +SELECT xmlserialize(DOCUMENT '42' AS text INDENT); +SELECT xmlserialize(CONTENT '42' AS text INDENT); +-- no indent +SELECT xmlserialize(DOCUMENT '42' AS text NO INDENT); +SELECT xmlserialize(CONTENT '42' AS text NO INDENT); +-- indent non singly-rooted xml +SELECT xmlserialize(DOCUMENT '7342' AS text INDENT); +SELECT xmlserialize(CONTENT '7342' AS text INDENT); +-- indent non singly-rooted xml with mixed contents +SELECT xmlserialize(DOCUMENT 'text node73text node42' AS text INDENT); +SELECT xmlserialize(CONTENT 'text node73text node42' AS text INDENT); +-- indent singly-rooted xml with mixed contents +SELECT xmlserialize(DOCUMENT '42text node73' AS text INDENT); +SELECT xmlserialize(CONTENT '42text node73' AS text INDENT); +-- indent empty string +SELECT xmlserialize(DOCUMENT '' AS text INDENT); +SELECT xmlserialize(CONTENT '' AS text INDENT); +-- whitespaces +SELECT xmlserialize(DOCUMENT ' ' AS text INDENT); +SELECT xmlserialize(CONTENT ' ' AS text INDENT); +-- indent null +SELECT xmlserialize(DOCUMENT NULL AS text INDENT); +SELECT xmlserialize(CONTENT NULL AS text INDENT); +-- indent with XML declaration +SELECT xmlserialize(DOCUMENT '73' AS text INDENT); +SELECT xmlserialize(CONTENT '73' AS text INDENT); +-- indent containing DOCTYPE declaration +SELECT xmlserialize(DOCUMENT '' AS text INDENT); +SELECT xmlserialize(CONTENT '' AS text INDENT); +-- indent xml with empty element +SELECT xmlserialize(DOCUMENT '' AS text INDENT); +SELECT xmlserialize(CONTENT '' AS text INDENT); +-- 'no indent' = not using 'no indent' +SELECT xmlserialize(DOCUMENT '42' AS text) = xmlserialize(DOCUMENT '42' AS text NO INDENT); +SELECT xmlserialize(CONTENT '42' AS text) = xmlserialize(CONTENT '42' AS text NO INDENT); SELECT xml 'bar' IS DOCUMENT; SELECT xml 'barfoo' IS DOCUMENT; @@ -613,7 +656,7 @@ SELECT xmltable.* FROM xmltest2, LATERAL xmltable(('/d/r/' || lower(_path) || 'c -- XPath result can be boolean or number too SELECT * FROM XMLTABLE('*' PASSING 'a' COLUMNS a xml PATH '.', b text PATH '.', c text PATH '"hi"', d boolean PATH '. = "a"', e integer PATH 'string-length(.)'); \x -SELECT * FROM XMLTABLE('*' PASSING 'pre&deeppost' COLUMNS x xml PATH 'node()', y xml PATH '/'); +SELECT * FROM XMLTABLE('*' PASSING 'pre&deeppost' COLUMNS x xml PATH '/e/n2', y xml PATH '/'); \x SELECT * FROM XMLTABLE('.' PASSING XMLELEMENT(NAME a) columns a varchar(20) PATH '""', b xml PATH '""');